Class: HaveAPI::Fs::Components::Parameter

Inherits:
File show all
Defined in:
lib/haveapi/fs/components/parameter.rb

Direct Known Subclasses

ResourceId

Instance Attribute Summary collapse

Attributes inherited from HaveAPI::Fs::Component

#atime, #context, #ctime, #mtime

Instance Method Summary collapse

Methods inherited from File

#file?, #raw_close, #raw_open, #raw_read, #raw_sync, #raw_truncate, #raw_write, #size

Methods inherited from HaveAPI::Fs::Component

#abspath, #bound=, #bound?, children_reader, component, #contents, #directory?, #executable?, #file?, #find, inherited, #invalid?, #invalidate, #parent, #path, #readable?, #reset, #setup, #times, #title, #use

Constructor Details

#initialize(action, name, dir, value = nil, opts = {}) ⇒ Parameter

Returns a new instance of Parameter.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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

Instance Attribute Details

#new_valueObject (readonly)

Returns the value of attribute new_value.



6
7
8
# File 'lib/haveapi/fs/components/parameter.rb', line 6

def new_value
  @new_value
end

Instance Method Details

#readObject



49
50
51
52
# File 'lib/haveapi/fs/components/parameter.rb', line 49

def read
  str = value.to_s
  str.empty? ? str : str + "\n"
end

#set?Boolean

Returns:

  • (Boolean)


141
142
143
# File 'lib/haveapi/fs/components/parameter.rb', line 141

def set?
  @set      
end

#unsaved?(n = nil) ⇒ Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/haveapi/fs/components/parameter.rb', line 145

def unsaved?(n = nil)
  set?
end

#valueObject



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# 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?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/haveapi/fs/components/parameter.rb', line 45

def writable?
  @writable
end

#write(raw) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 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) ⇒ Object



95
96
97
98
99
# File 'lib/haveapi/fs/components/parameter.rb', line 95

def write_safe(v)
  @new_value = v
  @set = true
  changed
end