Class: ROM::OpenStruct
- Inherits:
-
Object
show all
- Includes:
- Enumerable
- Defined in:
- lib/rom/open_struct.rb
Overview
ROM's open structs are used for relations with empty schemas. Such relations may exist in cases like using raw SQL strings where schema was not explicitly defined using `view` DSL.
Constant Summary
collapse
- IVAR =
-> v { :"@#{v}" }
- WRITER =
-> v { :"#{v}=" }
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(attributes = EMPTY_HASH) ⇒ OpenStruct
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of OpenStruct.
26
27
28
29
|
# File 'lib/rom/open_struct.rb', line 26
def initialize(attributes = EMPTY_HASH)
@__keys__ = Set.new
__load__(attributes)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/rom/open_struct.rb', line 80
def method_missing(meth, *args, &block)
if meth.to_s.end_with?("=")
key = meth.to_s.tr("=", "").to_sym
if methods.include?(key)
super
else
__set__(key, *args)
end
elsif key?(meth)
__get__(meth)
else
super
end
end
|
Instance Attribute Details
#__keys__ ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
23
24
25
|
# File 'lib/rom/open_struct.rb', line 23
def __keys__
@__keys__
end
|
Instance Method Details
#[](key) ⇒ Object
53
54
55
|
# File 'lib/rom/open_struct.rb', line 53
def [](key)
__send__(key)
end
|
#[]=(key, value) ⇒ Object
58
59
60
|
# File 'lib/rom/open_struct.rb', line 58
def []=(key, value)
__set__(key, value)
end
|
#each ⇒ Object
32
33
34
|
# File 'lib/rom/open_struct.rb', line 32
def each
__keys__.each { |key| yield(key, __get__(key)) }
end
|
#fetch(key, &block) ⇒ Object
48
49
50
|
# File 'lib/rom/open_struct.rb', line 48
def fetch(key, &block)
to_h.fetch(key, &block)
end
|
#inspect ⇒ Object
68
69
70
|
# File 'lib/rom/open_struct.rb', line 68
def inspect
%(#<#{self.class} #{to_h}>)
end
|
#key?(key) ⇒ Boolean
63
64
65
|
# File 'lib/rom/open_struct.rb', line 63
def key?(key)
__keys__.include?(key)
end
|
#respond_to_missing?(meth, include_private = false) ⇒ Boolean
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
73
74
75
|
# File 'lib/rom/open_struct.rb', line 73
def respond_to_missing?(meth, include_private = false)
super || key?(meth)
end
|
#to_h ⇒ Object
Also known as:
to_hash
37
38
39
|
# File 'lib/rom/open_struct.rb', line 37
def to_h
map { |key, value| [key, value] }.to_h
end
|
#update(other) ⇒ Object
43
44
45
|
# File 'lib/rom/open_struct.rb', line 43
def update(other)
__load__(other)
end
|