Class: Calibrate::Configurable::FieldMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/calibrate/configurable/field-metadata.rb

Constant Summary collapse

DEFAULT_PROPERTIES =
{
  :copiable => true,
  :proxiable => true,
  :required => false,
  :runtime => false,
  :defaulting => true,
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, value) ⇒ FieldMetadata

Returns a new instance of FieldMetadata.



13
14
15
16
17
# File 'lib/calibrate/configurable/field-metadata.rb', line 13

def initialize(name, value)
  @name = name
  @default_value = value
  @properties = DEFAULT_PROPERTIES.clone
end

Instance Attribute Details

#default_valueObject

Returns the value of attribute default_value.



4
5
6
# File 'lib/calibrate/configurable/field-metadata.rb', line 4

def default_value
  @default_value
end

#nameObject

Returns the value of attribute name.



4
5
6
# File 'lib/calibrate/configurable/field-metadata.rb', line 4

def name
  @name
end

Instance Method Details

#build_default_valueObject



80
81
82
83
84
85
86
87
88
# File 'lib/calibrate/configurable/field-metadata.rb', line 80

def build_default_value
  if Module === @default_value and Configurable > @default_value
    value = @default_value.new
    value.class.set_defaults_on(value)
    value
  else
    copy_value(@default_value)
  end
end

#copy_from(instance) ⇒ Object



75
76
77
78
# File 'lib/calibrate/configurable/field-metadata.rb', line 75

def copy_from(instance)
  return if unset_on?(instance)
  copy_value(immediate_value_on(instance))
end

#copy_value(value) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/calibrate/configurable/field-metadata.rb', line 90

def copy_value(value)
  case value
  when Symbol, Numeric, NilClass, TrueClass, FalseClass
    value
  else
    if value.class == BasicObject
      value
    elsif value.respond_to?(:dup)
      value.dup
    elsif value.respond_to?(:clone)
      value.clone
    else
      value
    end
  end
end

#immediate_value_on(instance) ⇒ Object



107
108
109
110
# File 'lib/calibrate/configurable/field-metadata.rb', line 107

def immediate_value_on(instance)
  instance.instance_variable_get(ivar_name)
  #instance.__send__(reader_method)
end

#inspectObject



19
20
21
22
23
24
# File 'lib/calibrate/configurable/field-metadata.rb', line 19

def inspect
  set_props = DEFAULT_PROPERTIES.keys.find_all do |prop|
    @properties[prop]
  end
  "Field: #{name}: #{default_value.inspect} #{set_props.inspect}"
end

#inspect_on(instance, indent = nil) ⇒ Object



26
27
28
29
30
31
# File 'lib/calibrate/configurable/field-metadata.rb', line 26

def inspect_on(instance, indent=nil)
  set_props = DEFAULT_PROPERTIES.keys.find_all do |prop|
    @properties[prop]
  end
  "Field: #{name}: #{value_on(instance).inspect} \n#{indent||""}(default: #{default_value.inspect} immediate: #{immediate_value_on(instance).inspect}) #{set_props.inspect}"
end

#is(property) ⇒ Object



50
51
52
53
54
# File 'lib/calibrate/configurable/field-metadata.rb', line 50

def is(property)
  validate_property_name(property)
  @properties[property] = true
  self
end

#is?(property) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
# File 'lib/calibrate/configurable/field-metadata.rb', line 39

def is?(property)
  validate_property_name(property)
  @properties[property]
end

#is_not(property) ⇒ Object Also known as: isnt



56
57
58
59
60
# File 'lib/calibrate/configurable/field-metadata.rb', line 56

def is_not(property)
  validate_property_name(property)
  @properties[property] = false
  self
end

#is_not?(property) ⇒ Boolean Also known as: isnt?

Returns:

  • (Boolean)


44
45
46
47
# File 'lib/calibrate/configurable/field-metadata.rb', line 44

def is_not?(property)
  validate_property_name(property)
  !@properties[property]
end

#ivar_nameObject



63
64
65
# File 'lib/calibrate/configurable/field-metadata.rb', line 63

def ivar_name
  "@#{name}"
end

#missing_on?(instance) ⇒ Boolean

Returns:

  • (Boolean)


136
137
138
139
140
141
142
143
# File 'lib/calibrate/configurable/field-metadata.rb', line 136

def missing_on?(instance)
  return false unless is?(:required)
  if instance.respond_to?(:runtime?) and !instance.runtime?
    return runtime_missing_on?(instance)
  else
    return !set_on?(instance)
  end
end

#reader_methodObject



71
72
73
# File 'lib/calibrate/configurable/field-metadata.rb', line 71

def reader_method
  name
end

#runtime_missing_on?(instance) ⇒ Boolean

Returns:

  • (Boolean)


145
146
147
148
149
150
151
152
153
154
# File 'lib/calibrate/configurable/field-metadata.rb', line 145

def runtime_missing_on?(instance)
  return false if is?(:runtime)
  return true unless instance.instance_variable_defined?(ivar_name)
  value = immediate_value_on(instance)
  if ProxyValue === value
    value.field.runtime_missing_on?(value.source)
  else
    false
  end
end

#set_on?(instance) ⇒ Boolean

Returns:

  • (Boolean)


121
122
123
124
125
126
127
128
129
130
# File 'lib/calibrate/configurable/field-metadata.rb', line 121

def set_on?(instance)
  return true unless instance.__send__(reader_method).nil?
  return false unless instance.instance_variable_defined?(ivar_name)
  value = immediate_value_on(instance)
  if ProxyValue === value
    value.field.set_on?(value.source)
  else
    true
  end
end

#unset_on?(instance) ⇒ Boolean

Returns:

  • (Boolean)


132
133
134
# File 'lib/calibrate/configurable/field-metadata.rb', line 132

def unset_on?(instance)
  !set_on?(instance)
end

#validate_property_name(name) ⇒ Object



33
34
35
36
37
# File 'lib/calibrate/configurable/field-metadata.rb', line 33

def validate_property_name(name)
  unless DEFAULT_PROPERTIES.has_key?(name)
    raise "Invalid field property #{name.inspect} - valid are: #{DEFAULT_PROPERTIES.keys.inspect}"
  end
end

#value_on(instance) ⇒ Object



112
113
114
115
116
117
118
119
# File 'lib/calibrate/configurable/field-metadata.rb', line 112

def value_on(instance)
  value = immediate_value_on(instance)
  if ProxyValue === value
    value.field.value_on(value.source)
  else
    value
  end
end

#writer_methodObject



67
68
69
# File 'lib/calibrate/configurable/field-metadata.rb', line 67

def writer_method
  "#{name}="
end