Module: Representable::Hash

Included in:
Collection, YAML
Defined in:
lib/representable/hash.rb,
lib/representable/autoload.rb,
lib/representable/hash/binding.rb,
lib/representable/hash/collection.rb,
lib/representable/hash/allow_symbols.rb

Overview

The generic representer. Brings #to_hash and #from_hash to your object. If you plan to write your own representer for a new media type, try to use this module (e.g., check how JSON reuses Hash’s internal architecture).

Defined Under Namespace

Modules: AllowSymbols, ClassMethods, Collection Classes: Binding, Conversion

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/representable/hash.rb', line 9

def self.included(base)
  base.class_eval do
    include Representable # either in Hero or HeroRepresentation.
    extend ClassMethods
    register_feature Representable::Hash
  end
end

Instance Method Details

#from_hash(data, options = {}, binding_builder = Binding) ⇒ Object

Note: ‘#from_hash` still does not stringify incoming hashes. This is per design: Representable is not made for hashes, only, but for any arbitrary data structure. A generic `key.to_s` with non-hash data would result in weird issues. I decided it’s more predictable to require the user to provide stringified keys.



28
29
30
31
32
# File 'lib/representable/hash.rb', line 28

def from_hash(data, options={}, binding_builder=Binding)
  data = filter_wrap(data, options)

  update_properties_from(data, options, binding_builder)
end

#to_hash(options = {}, binding_builder = Binding) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/representable/hash.rb', line 34

def to_hash(options={}, binding_builder=Binding)
  hash = create_representation_with({}, options, binding_builder)

  return hash unless wrap = options[:wrap] || representation_wrap(options)

  {wrap => hash}
end