Class: OpenObject
  
  
  
  
  
    - Inherits:
- 
      Hash
      
        
        show all
      
    
    - Defined in:
- lib/ruby_ext/core/open_object.rb
 
  
    
      Constant Summary
      collapse
    
    
      
        - PUBLIC_METHODS =
          
  
 
- %w(
  as send each each_pair size is_a? clone dup empty? blank? present? merge merge! stringify_keys stringify_keys! symbolize_keys symbolize_keys! to_query
).collect{|m| m.to_sym}
- PUBLIC_METHODS_RE =
          
        
- /(^__|^object_|^must|^stub)/ 
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  Dynamic Method Handling
  
    This class handles dynamic methods through the method_missing method
    
  
  
    
  
  
    #method_missing(m, arg = nil, &block)  ⇒ Object  
  
  
  
  
    | 
136
137
138
139
140
141
142
143
144
145
146
147
148 | # File 'lib/ruby_ext/core/open_object.rb', line 136
def method_missing m, arg = nil, &block
  type = m[-1,1]
  if type == '='
    self[m[0..-2]] = arg
  elsif type == '!'
    warn 'deprecated'
    self[m[0..-2]]
  elsif type == '?'
    !self[m[0..-2]].blank?
  else
    self[m]
  end
end | 
 
  
 
  
    Class Method Details
    
      
  
  
    .initialize_from(hash, deep = false)  ⇒ Object 
  
  
  
  
    | 
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 | # File 'lib/ruby_ext/core/open_object.rb', line 109
def self.initialize_from hash, deep = false
  unless deep
    ::OpenObject.new.update hash
  else
    r = ::OpenObject.new
    hash.each do |k, v|
      r[k] = if v.is_a? Hash
        v.to_openobject
      else
        v
      end
    end
    r
  end
end | 
 
    
   
  
    Instance Method Details
    
      
  
  
    #==(other)  ⇒ Object 
  
  
  
  
    | 
61
62
63
64
65
66
67 | # File 'lib/ruby_ext/core/open_object.rb', line 61
def == other
  return false unless other.respond_to?(:each) and other.respond_to?(:size) and other.respond_to?(:[]) and self.size == other.size
  other.each do |k, v|
    return false unless self[k] == v
  end
  true
end | 
 
    
      
  
  
    #[](k)  ⇒ Object 
  
  
  
  
    | 
73
74
75 | # File 'lib/ruby_ext/core/open_object.rb', line 73
def [] k
  super k.to_sym
end | 
 
    
      
  
  
    #[]=(k, v)  ⇒ Object 
  
  
  
  
    | 
69
70
71 | # File 'lib/ruby_ext/core/open_object.rb', line 69
def []= k, v
  super k.to_sym, v
end | 
 
    
      
  
  
    #deep_clone  ⇒ Object 
  
  
  
  
    | 
128
129
130
131
132
133 | # File 'lib/ruby_ext/core/open_object.rb', line 128
def deep_clone
  clone = super
  clone.clear
  each{|k, v| clone[k.deep_clone] = v.deep_clone}
  clone
end | 
 
    
      
  
  
    #delete(key)  ⇒ Object 
  
  
  
  
    | 
57
58
59 | # File 'lib/ruby_ext/core/open_object.rb', line 57
def delete key
  super key.to_sym
end | 
 
    
      
  
  
    #each(&block)  ⇒ Object 
  
  
  
  
    | 
37 | # File 'lib/ruby_ext/core/open_object.rb', line 37
def each █ super(&block) end | 
 
    
      
  
  
    
support :extract_options for OpenObject (Rails integration)
   
 
  
    | 
126 | # File 'lib/ruby_ext/core/open_object.rb', line 126
def ; true end | 
 
    
      
  
  
    #include?(k)  ⇒ Boolean 
  
  
  
  
    | 
77
78
79 | # File 'lib/ruby_ext/core/open_object.rb', line 77
def include? k
  super k.to_sym
end | 
 
    
      
  
  
    #inspect  ⇒ Object 
  
  
  
  
    | 
11
12
13
14 | # File 'lib/ruby_ext/core/open_object.rb', line 11
def inspect
    "<#{super}>"
end | 
 
    
      
  
  
    #merge(other)  ⇒ Object 
  
  
  
  
    | 
39
40
41
42
43
44
45
46 | # File 'lib/ruby_ext/core/open_object.rb', line 39
def merge other
  d = dup
  other.each{|k, v| d[k] = v}
  d
      end | 
 
    
      
  
  
    #merge!(other)  ⇒ Object 
  
  
  
  
    | 
48
49
50 | # File 'lib/ruby_ext/core/open_object.rb', line 48
def merge! other
  other.each{|k, v| self[k] = v}
end | 
 
    
      
  
  
    #respond_to?(m)  ⇒ Boolean 
  
  
  
  
    | 
105
106
107 | # File 'lib/ruby_ext/core/open_object.rb', line 105
def respond_to? m
  true
end | 
 
    
      
  
  
    #should  ⇒ Object 
  
  
  
  
    
hack to works well with RSpec
   
 
  
  
    | 
102 | # File 'lib/ruby_ext/core/open_object.rb', line 102
def should; super end | 
 
    
      
  
  
    #should_not  ⇒ Object 
  
  
  
  
    | 
103 | # File 'lib/ruby_ext/core/open_object.rb', line 103
def should_not; super end | 
 
    
      
  
  
    #to_a  ⇒ Object 
  
  
  
  
    | 
16 | # File 'lib/ruby_ext/core/open_object.rb', line 16
def to_a; super end | 
 
    
      
  
  
    #to_hash(deep = false)  ⇒ Object 
  
  
  
  
    | 
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 | # File 'lib/ruby_ext/core/open_object.rb', line 81
def to_hash deep = false
  unless deep
    {}.update(self)
  else
    h = {}
    each do |k, v|
      if v.is_a? OpenObject
        h[k] = v.to_hash(true)
      else
        h[k] = v
      end
    end
    h
  end
end | 
 
    
      
  
  
    #to_json(*args)  ⇒ Object 
  
  
  
  
    | 
97
98
99 | # File 'lib/ruby_ext/core/open_object.rb', line 97
def to_json *args
  to_hash.to_json *args
end | 
 
    
      
  
  
    #to_openobject(deep = false)  ⇒ Object 
  
  
    Also known as:
    to_oo
    
  
  
  
    | 
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | # File 'lib/ruby_ext/core/open_object.rb', line 20
def to_openobject deep = false
  unless deep
    self
  else
    r = OpenObject.new
    each do |k, v|
      r[k] = if v.is_a? Hash
        v.to_openobject
      else
        v
      end
    end
    r
  end
end | 
 
    
      
  
  
    #to_proc  ⇒ Object 
  
  
  
  
    | 
18 | # File 'lib/ruby_ext/core/open_object.rb', line 18
def to_proc; super end | 
 
    
      
  
  
    #update(other)  ⇒ Object 
  
  
  
  
    | 
52
53
54
55 | # File 'lib/ruby_ext/core/open_object.rb', line 52
def update other
  other.to_hash.each{|k,v| self[k.to_sym] = v}
  self
end |