json_defaults 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30de6037671287b39e32e64f745e134745178a9e
4
- data.tar.gz: ed40c713087c96992642df01fd9dea9b68df014e
3
+ metadata.gz: e770091495dbf96cd966dbc753acf986cc0335a9
4
+ data.tar.gz: 1bdca0385b39c4097d9fa653ee511df29c97e762
5
5
  SHA512:
6
- metadata.gz: 235b255a94bb74c59d6163dc458e694e88fe240ed1eb9f35cf09e118ba4f03aac88a7e9b5f4f90110e410e315d8347ec18e824fef843ac562d521767b16fc472
7
- data.tar.gz: ee856217045c0934136420a4644822fda451ba25e930be5222ab88a9ef6502d9eec4455426630cdaa48aaca9e7963fa7c53c07043c71a0c665d2da0820d63233
6
+ metadata.gz: 6a9e0ef90d7d280b393b610af4b57d49edbb51d7c74debca9c855e5b766f2250f082759da6b76279c0ed90f2bb8b25a36c615459b11fb4d67dfd44739274a7e5
7
+ data.tar.gz: b8459f7ee895cbf3b9401a951ad2bc385c0c8bd87ed7b02b384c1670a7ec79a31c6f893cce62e8d7a900b95047e96e78a3d0ffc259f45e8e1dfb38867f6acbe1
data/lib/json_defaults.rb CHANGED
@@ -1,55 +1,57 @@
1
1
  require "json_defaults/version"
2
+ require "json_defaults/active_record_module"
3
+
2
4
  module JsonDefaults
3
-
4
- def json_defaults(base_field, options={})
5
- define_json_methods(base_field, options)
6
- end
7
5
 
6
+ def json_defaults(field: nil, options: {}, active_record: false)
7
+ define_json_methods(field, options)
8
+ set_default_options(field, options) if active_record
9
+ end
10
+
8
11
  private
9
-
10
- def define_json_methods(base_field, options)
11
- options.each do |field, defaults|
12
- define_getter(base_field, field, defaults)
13
- define_setter(base_field, field, defaults)
12
+ def define_json_methods(base_field, options)
13
+ options.each do |field, defaults|
14
+ define_getter(base_field, field, defaults)
15
+ define_setter(base_field, field, defaults)
16
+ end
14
17
  end
15
- end
16
18
 
17
- def define_getter base_field, field, defaults
18
- define_method field do
19
- val = send base_field
20
- if val && val.is_a?(Hash) && val.has_key?(field)
21
- val[field]
22
- else
23
- if defaults.is_a?(Hash) && defaults.has_key?(:value)
24
- defaults[:value]
19
+ def define_getter base_field, field, defaults
20
+ define_method field do
21
+ val = send base_field
22
+ if val && val.is_a?(Hash) && val.has_key?(field)
23
+ val[field]
25
24
  else
26
- return defaults
25
+ if defaults.is_a?(Hash) && defaults.has_key?(:value)
26
+ return defaults[:value]
27
+ else
28
+ return defaults
29
+ end
27
30
  end
28
31
  end
29
32
  end
30
- end
31
33
 
32
- def define_setter base_field, field, defaults
33
- define_method "#{field}=" do |val|
34
- object_value = send base_field
35
- unless val && val.is_a?(Hash)
36
- object_value = {}
37
- end
38
-
39
- if defaults.is_a?(Hash) && defaults.has_key?(:integer) && defaults[:integer]
40
- val = val.to_i
41
- end
34
+ def define_setter base_field, field, defaults
35
+ define_method "#{field}=" do |val|
36
+ object_value = send base_field
37
+ unless val && val.is_a?(Hash)
38
+ object_value = {}
39
+ end
40
+
41
+ if defaults.is_a?(Hash) && defaults.has_key?(:integer) && defaults[:integer]
42
+ val = val.to_i
43
+ end
42
44
 
43
- if defaults.is_a?(Hash) && defaults.has_key?(:boolean) && defaults[:boolean]
44
- val = val.is_a?(TrueClass) || val.respond_to?(:to_i) && val.to_i == 1
45
- end
45
+ if defaults.is_a?(Hash) && defaults.has_key?(:boolean) && defaults[:boolean]
46
+ val = val.is_a?(TrueClass) || val.respond_to?(:to_i) && val.to_i == 1
47
+ end
46
48
 
47
- object_value[field] = val
48
-
49
- send("#{base_field}=", {
50
- **send("#{base_field}").symbolize_keys,
51
- **object_value.symbolize_keys
52
- })
49
+ object_value[field] = val
50
+
51
+ send("#{base_field}=", {
52
+ **send("#{base_field}").symbolize_keys,
53
+ **object_value.symbolize_keys
54
+ })
55
+ end
53
56
  end
54
- end
55
57
  end
@@ -0,0 +1,29 @@
1
+ module JsonDefaults
2
+ private
3
+ def set_default_options field, options
4
+ after_initialize do |model|
5
+ if model.class.columns_hash[field].type == :json
6
+ if model.send(field).blank?
7
+ model.send("#{field}=", options.each {|key, value| options[key] = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value})
8
+ else
9
+ options.each do |key, value|
10
+ have_key = model.send(field).key?(key.to_s)
11
+ if !have_key
12
+ default_value = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value
13
+ model.send(field)[key] = default_value
14
+ else
15
+ model_value = model.send(field)[key.to_s]
16
+ if model_value.is_a?(Hash) && !((value.keys - model_value.symbolize_keys.keys).count == 0)
17
+ model.send(field)[key.to_s] = {
18
+ **value.symbolize_keys,
19
+ **model_value.symbolize_keys
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ model.save if !model.changes.blank?
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module JsonDefaults
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_defaults
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - DenDos
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-29 00:00:00.000000000 Z
11
+ date: 2017-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,6 +67,7 @@ files:
67
67
  - bin/setup
68
68
  - json_defaults.gemspec
69
69
  - lib/json_defaults.rb
70
+ - lib/json_defaults/active_record_module.rb
70
71
  - lib/json_defaults/version.rb
71
72
  homepage: ''
72
73
  licenses: []