path_utilities 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/path_utilities/form.rb +55 -57
- data/lib/path_utilities/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce9538e9406d3bbe17a3583cac61be64b3ba9b3a
|
4
|
+
data.tar.gz: a7c6db1ae49369e99934909a22b6ecb4bcf2dc0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ab291b0776b78fb4671987775d07d5f4f3ce6f8e1c086d762e25353b8d27d529a1e187226cb1b48cbeafbcdcba5b668cd0f84d996bf31cc16e7a3e701f343ec
|
7
|
+
data.tar.gz: d2b45f59d99e107189082573cad11f5a8ee149d97d190108fc1e657d81e432ac1cbad3183af5e5aaa2c6911cfbcb1756e442584bd3035c1667834a2f63336eed
|
data/lib/path_utilities/form.rb
CHANGED
@@ -13,11 +13,14 @@ module PathUtilities
|
|
13
13
|
|
14
14
|
included do
|
15
15
|
include Virtus.model
|
16
|
-
extend ActiveModel::Naming
|
17
16
|
include ActiveModel::Conversion
|
18
17
|
include ActiveModel::Validations
|
18
|
+
include ActiveSupport::Configurable
|
19
19
|
include TrackingChanges
|
20
20
|
|
21
|
+
config_accessor :model_name
|
22
|
+
config_accessor(:fields) { {} }
|
23
|
+
config_accessor(:models) { [] }
|
21
24
|
attr_reader :models_mapping
|
22
25
|
|
23
26
|
delegate :id, :persisted?, :new_record?, to: :main_record
|
@@ -28,88 +31,93 @@ module PathUtilities
|
|
28
31
|
init_sync
|
29
32
|
end
|
30
33
|
|
31
|
-
def validate_mapping!
|
32
|
-
self.class.models.each do |model|
|
33
|
-
next if models_mapping.keys.include?(model)
|
34
|
-
fail "#{model.to_s.camelize} not mapped on initialization"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
34
|
def validate(params)
|
39
35
|
params = HashWithIndifferentAccess.new(params)
|
36
|
+
|
40
37
|
self.class.fields.keys.each do |field|
|
41
38
|
any_changes = params[field] &&
|
42
39
|
params[field] != instance_model_for(field).send(field)
|
43
40
|
next unless any_changes
|
44
41
|
send("#{field}=", params[field])
|
45
42
|
end
|
46
|
-
|
47
43
|
valid?
|
48
44
|
end
|
49
45
|
|
50
|
-
def
|
51
|
-
|
52
|
-
sync
|
53
|
-
persist!
|
54
|
-
true
|
55
|
-
else
|
56
|
-
false
|
57
|
-
end
|
46
|
+
def self.setup_model_name(name)
|
47
|
+
self.model_name = ActiveModel::Name.new(self, nil, name.to_s)
|
58
48
|
end
|
49
|
+
end
|
59
50
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
51
|
+
def validate_mapping!
|
52
|
+
self.class.models.each do |model|
|
53
|
+
next if models_mapping.keys.include?(model)
|
54
|
+
fail "#{model.to_s.camelize} not mapped on initialization"
|
65
55
|
end
|
56
|
+
end
|
66
57
|
|
67
|
-
|
68
|
-
|
69
|
-
|
58
|
+
def save
|
59
|
+
if valid?
|
60
|
+
sync
|
61
|
+
persist!
|
62
|
+
true
|
63
|
+
else
|
64
|
+
false
|
70
65
|
end
|
66
|
+
end
|
71
67
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
68
|
+
def sync
|
69
|
+
self.class.fields.keys.each do |field|
|
70
|
+
form_field_value = send(field)
|
71
|
+
instance_model_for(field).send("#{field}=", form_field_value)
|
77
72
|
end
|
73
|
+
end
|
78
74
|
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
def instance_model_for(field)
|
76
|
+
model = self.class.fields[field].options[:klass].name.underscore.to_sym
|
77
|
+
models_mapping[model]
|
78
|
+
end
|
82
79
|
|
83
|
-
|
84
|
-
|
80
|
+
def init_sync
|
81
|
+
self.class.fields.keys.each do |field|
|
82
|
+
model_value = instance_model_for(field).send("#{field}")
|
83
|
+
send("#{field}=", model_value)
|
85
84
|
end
|
86
|
-
private :persist!
|
87
85
|
end
|
88
86
|
|
87
|
+
def main_record
|
88
|
+
self.class.model_name || fail('setup_model_name not set in form class')
|
89
|
+
models_mapping[self.class.model_name.name.to_sym]
|
90
|
+
end
|
91
|
+
|
92
|
+
def persist!
|
93
|
+
models_mapping.values.all?(&:save)
|
94
|
+
end
|
95
|
+
private :persist!
|
96
|
+
|
89
97
|
class_methods do
|
90
98
|
def properties(attributes, model)
|
91
|
-
@@attributes ||= {}
|
92
99
|
add_model(model)
|
93
100
|
attributes.each do |att|
|
94
101
|
already_define_attribute_warn(att, model) do
|
95
102
|
attribute att, String
|
96
103
|
end
|
97
104
|
|
98
|
-
|
99
|
-
|
105
|
+
set_attribute(att, model.to_s.camelize
|
106
|
+
.safe_constantize.fields[att.to_s])
|
100
107
|
end
|
101
108
|
end
|
102
109
|
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
@@model_name || fail('setup_model_name not set in form class')
|
110
|
+
def add_model(name)
|
111
|
+
return if self.models.include?(name.to_sym)
|
112
|
+
existing_models = models
|
113
|
+
existing_models << name.to_sym
|
114
|
+
self.models = existing_models
|
109
115
|
end
|
110
116
|
|
111
|
-
def
|
112
|
-
|
117
|
+
def set_attribute(name, value)
|
118
|
+
existing_fields = self.fields
|
119
|
+
existing_fields[name] = value
|
120
|
+
self.fields = existing_fields
|
113
121
|
end
|
114
122
|
|
115
123
|
def already_define_attribute_warn(attr, new_model)
|
@@ -124,16 +132,6 @@ module PathUtilities
|
|
124
132
|
end
|
125
133
|
end
|
126
134
|
|
127
|
-
def models
|
128
|
-
@@models ||= []
|
129
|
-
end
|
130
|
-
|
131
|
-
def add_model(name)
|
132
|
-
@@models ||= []
|
133
|
-
return if @@models.include?(name.to_sym)
|
134
|
-
@@models << name.to_sym
|
135
|
-
end
|
136
|
-
|
137
135
|
def validates_uniqueness_of(attribute, options = {})
|
138
136
|
options = { case_sensitive: false, attributes: [attribute],
|
139
137
|
model: model_for(attribute) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: path_utilities
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricard Forniol Agustí
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|