Class: Fire::Model
- Inherits:
-
OpenStruct
- Object
- OpenStruct
- Fire::Model
show all
- Includes:
- Parent, Querying, TarvitHelpers::NonSharedAccessors
- Defined in:
- lib/model/model.rb,
lib/model/nested/parent.rb,
lib/model/querying/querying.rb
Defined Under Namespace
Modules: Parent, Querying
Classes: FireModelError, InvalidPathKeyError, PathValueMissingError
Constant Summary
collapse
- LEVEL_SEPARATOR =
?/
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(attrs = {}) ⇒ Model
Returns a new instance of Model.
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/model/model.rb', line 12
def initialize(attrs={})
data = self.class.prepare_hash(attrs)
unless data[id_key]
data[id_key] = self.class.next_id
@persisted = false
else
@persisted = true
end
@original_data = data.clone
super(data)
end
|
Class Method Details
.all_path_keys ⇒ Object
131
132
133
|
# File 'lib/model/model.rb', line 131
def all_path_keys
own_path_keys + default_path_keys
end
|
.collection_name ⇒ Object
123
124
125
|
# File 'lib/model/model.rb', line 123
def collection_name
self.fire_collection || default_collection_name
end
|
.create(object) ⇒ Object
147
148
149
150
151
|
# File 'lib/model/model.rb', line 147
def create(object)
model = new(object)
model.save
model
end
|
.has_path_keys(*keys) ⇒ Object
113
114
115
|
# File 'lib/model/model.rb', line 113
def has_path_keys(*keys)
self.path_keys = keys
end
|
.id_key ⇒ Object
168
169
170
|
# File 'lib/model/model.rb', line 168
def id_key
self.id_key_name || :id
end
|
.in_collection(name) ⇒ Object
109
110
111
|
# File 'lib/model/model.rb', line 109
def in_collection(name)
self.fire_collection = name
end
|
.next_id ⇒ Object
155
156
157
|
# File 'lib/model/model.rb', line 155
def next_id
rand(36**8).to_s(36)
end
|
.own_path_keys ⇒ Object
135
136
137
|
# File 'lib/model/model.rb', line 135
def own_path_keys
self.path_keys || []
end
|
.path_value_param(raw_value) ⇒ Object
159
160
161
162
|
# File 'lib/model/model.rb', line 159
def path_value_param(raw_value)
return raw_value.to_s+?_ if raw_value.is_a?(Numeric)
raw_value.to_s.parameterize
end
|
.prepare_hash(hash) ⇒ Object
164
165
166
|
# File 'lib/model/model.rb', line 164
def prepare_hash(hash)
HashWithIndifferentAccess[hash]
end
|
.set_id_key(value) ⇒ Object
117
118
119
|
# File 'lib/model/model.rb', line 117
def set_id_key(value)
self.id_key_name = value
end
|
.take(path_data) ⇒ Object
141
142
143
144
145
|
# File 'lib/model/model.rb', line 141
def take(path_data)
path_object = new(path_data)
loaded_data = connection.get(path_object.path).body
loaded_data.nil? ? nil : new(loaded_data)
end
|
Instance Method Details
#==(model_object) ⇒ Object
93
94
95
|
# File 'lib/model/model.rb', line 93
def ==(model_object)
self.data == model_object.data
end
|
#collection_name ⇒ Object
34
35
36
|
# File 'lib/model/model.rb', line 34
def collection_name
self.class.collection_name
end
|
#custom_data(hash = self.data) ⇒ Object
67
68
69
70
71
72
|
# File 'lib/model/model.rb', line 67
def custom_data(hash=self.data)
res = hash.to_a.select do |(k, v)|
!self.class.all_path_keys.include?(k)
end
self.class.prepare_hash(res)
end
|
#data ⇒ Object
97
98
99
|
# File 'lib/model/model.rb', line 97
def data
self.to_h
end
|
#delete ⇒ Object
44
45
46
47
|
# File 'lib/model/model.rb', line 44
def delete
self.class.connection.delete(path)
@persisted = false
end
|
#has_data?(data) ⇒ Boolean
85
86
87
88
89
90
91
|
# File 'lib/model/model.rb', line 85
def has_data?(data)
return true if data.empty?
self.class.prepare_hash(data).each do |k, v|
return false unless self.send(k) == v
end
true
end
|
#id_key ⇒ Object
26
27
28
|
# File 'lib/model/model.rb', line 26
def id_key
self.class.id_key
end
|
#id_value ⇒ Object
30
31
32
|
# File 'lib/model/model.rb', line 30
def id_value
send(id_key)
end
|
#path ⇒ Object
53
54
55
|
# File 'lib/model/model.rb', line 53
def path
([ collection_name ] + path_values) * LEVEL_SEPARATOR
end
|
#path_changed? ⇒ Boolean
81
82
83
|
# File 'lib/model/model.rb', line 81
def path_changed?
@persisted && (path_data != path_data(@original_data))
end
|
#path_data(hash = self.data) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/model/model.rb', line 74
def path_data(hash=self.data)
res = hash.to_a.select do |(k, v)|
self.class.all_path_keys.include?(k.to_sym)
end
self.class.prepare_hash(res)
end
|
#path_values ⇒ Object
59
60
61
62
63
64
65
|
# File 'lib/model/model.rb', line 59
def path_values
self.class.all_path_keys.map do |pk|
path_value = send(pk)
raise PathValueMissingError.new(pk) if path_value.to_s.empty?
self.class.path_value_param(path_value)
end
end
|
#persisted? ⇒ Boolean
49
50
51
|
# File 'lib/model/model.rb', line 49
def persisted?
@persisted
end
|
#save ⇒ Object
38
39
40
41
42
|
# File 'lib/model/model.rb', line 38
def save
self.class.new(@original_data).delete if path_changed?
self.class.connection.set(path, self.saving_data)
@persisted = true
end
|
#saving_data ⇒ Object
101
102
103
|
# File 'lib/model/model.rb', line 101
def saving_data
data
end
|