class TreeStruct::Attribute
Attributes
name[R]
Public Class Methods
new(name, array: false, class: nil, default: nil, parent:, &block)
click to toggle source
# File lib/tree_struct/attribute.rb, line 7 def initialize(name, array: false, class: nil, default: nil, parent:, &block) @name = name.to_sym @array = array @default_value = default @parent = parent @nested_class = binding.local_variable_get(:class) @nested_class = Class.new(@parent.nested_class, &block) if !@nested_class && block_given? raise ArgumentError.new('Nested structure has to be defined (either with :class parameter or with block) for arrays if :default parameter is not specified') if @array && @nested_class.nil? && @default_value.nil? end
Public Instance Methods
default_value()
click to toggle source
# File lib/tree_struct/attribute.rb, line 41 def default_value if @default_value.nil? if @nested_class if @array create_array else create_nested end end elsif @default_value.is_a? Proc @default_value.call(@parent, self) else @default_value end end
subform?()
click to toggle source
# File lib/tree_struct/attribute.rb, line 19 def subform? !@nested_class.nil? end
validate_value!(value)
click to toggle source
# File lib/tree_struct/attribute.rb, line 23 def validate_value!(value) if @nested_class if @array unless value.class == @parent.array_class raise ArgumentError.new(":#{@name} attribute value should be of class #{@parent.nested_class.name}::Array while attempt to assign value of class #{value.class.name}") end unless value.item_class == @nested_class raise ArgumentError.new(":#{@name} attribute value should be an array with items of class #{@nested_class.name} while attempt to assign an array with items of class #{value.item_class.name}") end else unless value.class == @nested_class raise ArgumentError.new(":#{@name} attribute value should be of class #{@nested_class.name} while attempt to assign value of class #{value.class.name}") end end end end
Private Instance Methods
create_array()
click to toggle source
# File lib/tree_struct/attribute.rb, line 65 def create_array @parent.array_class.new(@nested_class) end
create_nested()
click to toggle source
# File lib/tree_struct/attribute.rb, line 61 def create_nested @nested_class.new end