Class: Quill::BaseModel
- Inherits:
-
Object
show all
- Includes:
- ActiveModel::Model
- Defined in:
- lib/quill/base_model.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(*args) ⇒ BaseModel
Returns a new instance of BaseModel.
34
35
36
37
38
|
# File 'lib/quill/base_model.rb', line 34
def initialize *args
@data = {}
super
load_model_attributes
end
|
Class Method Details
.attributes(*attrs) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/quill/base_model.rb', line 13
def self.attributes *attrs
return @attributes if defined?(@attributes)
@attributes = attrs
(attrs.dup.unshift(*@special_attrs).unshift(*key_attributes)).each do |attr|
class_eval " def \#{attr}\n @data[:\#{attr}]\n end\n\n def \#{attr}= value\n @data[:\#{attr}] = value\n end\n CODE\n end\nend\n"
|
.inherited(subclass) ⇒ Object
9
10
11
|
# File 'lib/quill/base_model.rb', line 9
def self.inherited subclass
subclass.special_attrs *@special_attrs
end
|
.key_attributes ⇒ Object
30
31
32
|
# File 'lib/quill/base_model.rb', line 30
def self.key_attributes
[:_uid]
end
|
.special_attrs(*attrs) ⇒ Object
4
5
6
7
|
# File 'lib/quill/base_model.rb', line 4
def self.special_attrs *attrs
return @special_attrs unless attrs.any?
@special_attrs = attrs
end
|
Instance Method Details
#load_model_attributes ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/quill/base_model.rb', line 62
def load_model_attributes
return unless key_present?
object = find
object.data = {} if object.data.nil?
attrs = {}
attrs[:_uid] = object.uid
self.class.special_attrs.each do |attr|
attrs[attr] = object.send(attr)
end
self.class.attributes.each do |attr|
attrs[attr] = YAML.load(object.data[attr]) if object.data[attr].present?
end
@data.reverse_merge!(attrs)
end
|
#persist ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/quill/base_model.rb', line 44
def persist
data = @data.except(*self.class.special_attrs.dup << :_uid)
serialized_data = {}
data.each do |key, value|
serialized_data[key] = value.to_yaml
end
params = { data: serialized_data }
self.class.special_attrs.each do |attr|
params[attr] = send(attr)
end
params = filter_params(params) if respond_to?(:filter_params)
persist_params params
end
|
#save(options = {}) ⇒ Object
40
41
42
|
# File 'lib/quill/base_model.rb', line 40
def save(options={})
perform_validations(options) ? persist : false
end
|
#save! ⇒ Object
86
87
88
|
# File 'lib/quill/base_model.rb', line 86
def save!
save || raise
end
|