Module: Traitorous
- Defined in:
- lib/traitorous.rb,
lib/traitorous/equality.rb,
lib/traitorous/converter/model.rb,
lib/traitorous/converter/identity.rb,
lib/traitorous/converter/uniform_array.rb,
lib/traitorous/converter/default_value_static.rb,
lib/traitorous/converter/method_keyed_uniform_hash.rb
Defined Under Namespace
Modules: ClassMethods, Converter, Equality
Constant Summary
collapse
- HASH =
Use the HashWithIndifferentAccess from the activesupport gem.
HashWithIndifferentAccess
- VERSION =
Read the VERSION file in gem root to set version number.
File.read('VERSION')
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.included(base) ⇒ Object
48
49
50
|
# File 'lib/traitorous.rb', line 48
def self.included(base)
base.extend(ClassMethods)
end
|
Instance Method Details
#export ⇒ Object
62
63
64
65
66
67
68
69
|
# File 'lib/traitorous.rb', line 62
def export
exported = HASH.new
traits.each_pair do |trait_name, trait_opts|
attr_value = self.public_send(trait_name.intern)
exported[trait_name] = trait_opts[:converter].do_export(attr_value)
end
exported
end
|
#initialize(opts = {}) ⇒ Object
52
53
54
55
56
57
58
59
60
|
# File 'lib/traitorous.rb', line 52
def initialize(opts = {})
raise "No traits have been defined for #{self.class}" unless self.class.traits
@opts = HASH.new(opts)
traits.each_pair do |new_trait, trait_opts|
converter = trait_opts[:converter]
val = converter.do_import(@opts.fetch(new_trait, nil))
self.send("#{new_trait}=".intern, val)
end
end
|
#inspect ⇒ Object
75
76
77
78
79
|
# File 'lib/traitorous.rb', line 75
def inspect
string = "#<#{self.class.name}:#{self.object_id} "
fields = self.class.traits.keys.map{|field| "#{field}: #{self.send(field).inspect}"}
string << fields.join(", ") << ">"
end
|
#traits ⇒ Object
71
72
73
|
# File 'lib/traitorous.rb', line 71
def traits
self.class.traits
end
|