dynamo 0.0.1 → 0.0.2
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.
- data/lib/dynamo/dynamic_fields.rb +47 -45
- data/lib/dynamo/version.rb +1 -1
- metadata +2 -2
@@ -4,71 +4,73 @@
|
|
4
4
|
#
|
5
5
|
# The `fields` call should not be hard coded, etc
|
6
6
|
#
|
7
|
-
module
|
8
|
-
|
7
|
+
module Dynamo
|
8
|
+
module DynamicFields
|
9
|
+
FIELD_NAME_PATTERN = /(.+)_field(=)?$/
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
module ClassMethods
|
12
|
+
def dynamic_fields(field_name)
|
13
|
+
self.class_eval do
|
14
|
+
serialize field_name, Array
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
16
|
-
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def self.included(base)
|
20
|
+
base.extend ClassMethods
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
def validate_dynamic_fields
|
24
|
+
self.fields.each do |field|
|
25
|
+
self.errors.add(:fields, field.errors) unless field.valid?
|
26
|
+
end
|
25
27
|
end
|
26
|
-
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
def field_errors
|
30
|
+
self.fields.each_with_object({}) do |f, h|
|
31
|
+
h.merge! f.field_errors
|
32
|
+
end
|
31
33
|
end
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
def fields_metadata=(fields_metadata)
|
36
|
+
self.fields = []
|
36
37
|
|
37
|
-
|
38
|
-
|
38
|
+
fields_metadata.each do |field_metadata|
|
39
|
+
self.fields << CustomFieldValue.new(:metadata => field_metadata)
|
40
|
+
end
|
39
41
|
end
|
40
|
-
end
|
41
42
|
|
42
|
-
|
43
|
-
|
43
|
+
def respond_to_missing?(sym, include_private = false)
|
44
|
+
return super unless sym.match FIELD_NAME_PATTERN
|
44
45
|
|
45
|
-
|
46
|
+
field_name = $1
|
46
47
|
|
47
|
-
|
48
|
-
|
48
|
+
self.fields.find {|f| f.metadata.underscored_name == field_name}.present?
|
49
|
+
end
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
def method_missing(sym, *args, &block)
|
52
|
+
return super unless sym.match FIELD_NAME_PATTERN
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
field_name = $1
|
55
|
+
is_setter = $2.present?
|
56
|
+
field = self.fields.find {|f| f.metadata.underscored_name == field_name} || CustomFieldValue.new
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
if is_setter
|
59
|
+
field.value = args.first
|
60
|
+
else
|
61
|
+
field.value
|
62
|
+
end
|
61
63
|
end
|
62
|
-
end
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
def attributes=(attrs)
|
66
|
+
field_attributes = attrs.delete('fields') {{}}
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
fields.each do |field|
|
69
|
+
field.set_value_from_attributes field_attributes
|
70
|
+
fields_will_change! if field.changed?
|
71
|
+
end
|
71
72
|
|
72
|
-
|
73
|
+
super
|
74
|
+
end
|
73
75
|
end
|
74
76
|
end
|
data/lib/dynamo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-10-
|
13
|
+
date: 2012-10-18 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: ''
|
16
16
|
email: support@chirrpy.com
|