Class: Doodle::AttributeCollector

Inherits:
DoodleAttribute show all
Defined in:
lib/doodle.rb

Overview

base class for attribute collector classes

Direct Known Subclasses

AppendableAttribute, KeyedAttribute

Constant Summary

Constants inherited from Doodle

Helper

Instance Method Summary collapse

Methods inherited from DoodleAttribute

#default_defined?, #init_defined?, #optional?, params_from_args, #required?, #validate!

Methods inherited from Doodle

context, raise_exception_on_error, raise_exception_on_error=

Methods included from Core

included

Constructor Details

#initialize(*args, &block) ⇒ AttributeCollector

Returns a new instance of AttributeCollector.



1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
# File 'lib/doodle.rb', line 1072

def initialize(*args, &block)
  super
  define_collection
  from Hash do |hash|
    resolve_collector_class
    hash.inject({ }) do |h, (key, value)|
      h[key] = resolve_value(value)
      h
    end
  end
  from Enumerable do |enum|
    resolve_collector_class
    post_process( enum.map{ |value| resolve_value(value) } )
  end
end

Instance Method Details

#post_process(results) ⇒ Object



1087
1088
1089
# File 'lib/doodle.rb', line 1087

def post_process(results)
  results
end

#resolve_collector_classObject



1058
1059
1060
1061
1062
# File 'lib/doodle.rb', line 1058

def resolve_collector_class
  if !collector_class.kind_of?(Class)
    self.collector_class = Doodle::Utils.const_resolve(collector_class)
  end
end

#resolve_value(value) ⇒ Object



1063
1064
1065
1066
1067
1068
1069
1070
1071
# File 'lib/doodle.rb', line 1063

def resolve_value(value)
  if value.kind_of?(collector_class)
    value
  elsif collector_class.__doodle__.conversions.key?(value.class)
    collector_class.from(value)
  else
    collector_class.new(value)
  end
end