Class: NRSER::Meta::Props::Prop

Inherits:
Object
  • Object
show all
Defined in:
lib/nrser/meta/props/prop.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(defined_in, name, type: t.any, default: NRSER::NO_ARG, source: nil) ⇒ Prop

Returns a new instance of Prop.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/nrser/meta/props/prop.rb', line 19

def initialize  defined_in,
                name,
                type: t.any,
                default: NRSER::NO_ARG,
                source: nil
  
  @defined_in = defined_in
  @name = name
  @type = t.make type
  @source = source
  @default = default
  
  if @source.nil?
    @instance_variable_source = false
  else
    source_str = source.to_s
    @instance_variable_source = source_str[0] == '@'
  end
end

Instance Attribute Details

#defined_inObject

Returns the value of attribute defined_in.



13
14
15
# File 'lib/nrser/meta/props/prop.rb', line 13

def defined_in
  @defined_in
end

#nameObject

Returns the value of attribute name.



13
14
15
# File 'lib/nrser/meta/props/prop.rb', line 13

def name
  @name
end

#sourceObject

Returns the value of attribute source.



13
14
15
# File 'lib/nrser/meta/props/prop.rb', line 13

def source
  @source
end

#typeObject

Returns the value of attribute type.



13
14
15
# File 'lib/nrser/meta/props/prop.rb', line 13

def type
  @type
end

Instance Method Details

#defaultObject



53
54
55
56
57
58
59
60
61
# File 'lib/nrser/meta/props/prop.rb', line 53

def default
  if default?
    @default
  else
    raise NameError.new NRSER.squish <<-END
      Prop #{ self } has no default value.
    END
  end
end

#default?return_type

TODO:

Document default? method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



48
49
50
# File 'lib/nrser/meta/props/prop.rb', line 48

def default?
  @default != NRSER::NO_ARG
end

#get(instance) ⇒ return_type

TODO:

Document get method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/nrser/meta/props/prop.rb', line 111

def get instance
  if source?
    if instance_variable_source?
      instance.instance_variable_get source
    else
      instance.send source
    end
  else
    values(instance)[name]
  end
end

#instance_variable_source?return_type

TODO:

Document instance_variable_source? method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



85
86
87
# File 'lib/nrser/meta/props/prop.rb', line 85

def instance_variable_source?
  @instance_variable_source
end

#primary?return_type

TODO:

Document primary? method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



98
99
100
# File 'lib/nrser/meta/props/prop.rb', line 98

def primary?
  !source?
end

#set(instance, value) ⇒ return_type

TODO:

Document set method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



132
133
134
135
136
137
138
139
140
141
# File 'lib/nrser/meta/props/prop.rb', line 132

def set instance, value
  unless type.test value
    raise TypeError.new NRSER.squish <<-END
      #{ defined_in }##{ name } must be of type #{ type };
      found #{ value.inspect }
    END
  end
  
  values(instance)[name] = value
end

#set_from_values_hash(instance, **values) ⇒ return_type

TODO:

Document set_from_hash method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/nrser/meta/props/prop.rb', line 153

def set_from_values_hash instance, **values
  if values.key? name
    set instance, values[name]
  else
    if default?
      set instance, default.dup
    else
      raise TypeError.new NRSER.squish <<-END
        Prop #{ name } has no default value and no value was provided in
        values #{ values.inspect }.
      END
    end
  end
end

#source?return_type

TODO:

Document source? method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



72
73
74
# File 'lib/nrser/meta/props/prop.rb', line 72

def source?
  !@source.nil?
end

#to_data(instance) ⇒ return_type

TODO:

Document to_data method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



178
179
180
181
182
183
184
185
186
# File 'lib/nrser/meta/props/prop.rb', line 178

def to_data instance
  value = get instance
  
  if value.respond_to? :to_data
    value.to_data
  else
    value
  end
end