class HaveAPI::Fs::Components::Parameter

Attributes

new_value[R]

Public Class Methods

new(action, name, dir, value = nil, opts = {}) click to toggle source
Calls superclass method HaveAPI::Fs::Component::new
# File lib/haveapi/fs/components/parameter.rb, line 8
def initialize(action, name, dir, value = nil, opts = {})
  super()

  @action = action
  @name = name
  @dir = dir
  @value = value
  @set = false
  @mirror = opts[:mirror]
 
  if opts[:meta]
    if dir == :input
      @params = @action.instance_variable_get('@spec')[:meta][opts[:meta]][:input][:parameters]

    else
      @params = @action.instance_variable_get('@spec')[:meta][opts[:meta]][:output][:parameters]
    end

  else
    if dir == :input
      @params = @action.input_params

    else
      @params = @action.params
    end
  end

  @desc = @params[@name]

  if opts[:editable].nil?
    @writable = dir == :input

  else
    @writable = opts[:editable]
  end
end

Public Instance Methods

read() click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 49
def read
  str = value.to_s
  str.empty? ? str : str + "\n"
end
set?() click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 141
def set?
  @set      
end
unsaved?(n = nil) click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 145
def unsaved?(n = nil)
  set?
end
value() click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 101
def value
  # Value in ResourceInstance
  # Value in hash
  # Value changed, saved in instance variable

  hash = @value.is_a?(::Hash)

  if @desc[:type] == 'Resource'
    return @new_value if @new_value
    return nil if @value.nil?
    return nil if @value.attributes[@name].nil?
    @value.attributes[@name][@desc[:value_id].to_sym]

  else
    if @new_value
      v = @new_value

    else
      return nil if @value.nil?
        
      v = hash ? @value[@name] : @value.send(@name)
    end

    case @desc[:type]
    when 'Boolean'
      v ? 1 : 0

    when 'Datetime'
      v.is_a?(::Time) ? v.iso8601 : v

    when 'Custom'
      JSON.generate(v)

    else
      v
    end

  end
end
writable?() click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 45
def writable?
  @writable
end
write(raw) click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 54
def write(raw)
  @set = true
  str = raw.strip

  if str.empty?
    @new_value = nil
    @mirror.write_safe(@new_value) if @mirror
    return
  end

  @new_value = case @desc[:type]
  when 'Resource'
    str.to_i

  when 'Boolean'
    HaveAPI::Client::Parameters::Typed::Boolean.to_b(str)

  when 'Integer'
    str.to_i

  when 'Float'
    str.to_f

  when 'Datetime'
    Time.iso8601(str)

  when 'Custom'
    JSON.parse(str)

  else
    str.strip
  end

  changed
  @mirror.write_safe(@new_value) if @mirror
  
rescue => e
  @set = false
  raise e
end
write_safe(v) click to toggle source
# File lib/haveapi/fs/components/parameter.rb, line 95
def write_safe(v)
  @new_value = v
  @set = true
  changed
end