Class: Spider::Model::ModelHash

Inherits:
Hash
  • Object
show all
Defined in:
lib/spiderfw/model/model_hash.rb

Overview

The ModelHash is a specialized hash for models. It is subclassed by Condition and Request. It provides two functions:

  • when given a BaseModel instance as a value, it will unwrap it setting its element-value pairs

  • if the key is a dotted string, will split it and create sub-hashes.

Example:

cat = Cat.new(:name => 'Kitty', :color => 'black')
mh[:test] = cat
  => {:test => {:name => 'Kitty', :color => 'black}}
mh['test.name'] = 'Devilish Kitty'
  => {:test => {:name => 'Devilish Kitty', :color => 'black'}}

Direct Known Subclasses

Request

Instance Method Summary collapse

Constructor Details

#initialize(hash = nil) ⇒ ModelHash

Returns a new instance of ModelHash.



16
17
18
19
# File 'lib/spiderfw/model/model_hash.rb', line 16

def initialize(hash=nil)
    super()
    merge!(hash) if (hash && hash.is_a?(Hash))
end

Instance Method Details

#[](key) ⇒ Object



42
43
44
45
46
# File 'lib/spiderfw/model/model_hash.rb', line 42

def [](key)
    # TODO: deep
    key = key.name if key.is_a?(Element)
    super(key.to_sym)
end

#[]=(key, val) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/spiderfw/model/model_hash.rb', line 26

def []=(key, val)
    if (val.is_a?(BaseModel))
        n = self.class.new
        val.each_val do |el, v|
            n[el] = v
        end
        val = n
    end
    key = key.name if key.is_a?(Element)
    parts = key.to_s.split('.', 2)
    return super(key.to_sym, val) unless parts[1]
    parts[0] = parts[0].to_sym
    self[parts[0]] = get_deep_obj unless self[parts[0]].is_a?(self.class)
    self[parts[0]][parts[1]] = val
end

#get_deep_objObject

Returns a new instance when needed by an assignement. May be overridden by subclasses.



22
23
24
# File 'lib/spiderfw/model/model_hash.rb', line 22

def get_deep_obj
    return self.class.new
end

#modelhash_orig_setObject

:nodoc:



14
# File 'lib/spiderfw/model/model_hash.rb', line 14

alias :modelhash_orig_set :[]=