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

#exportObject



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

#inspectObject



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

#traitsObject



71
72
73
# File 'lib/traitorous.rb', line 71

def traits
  self.class.traits
end