json_defaults 0.1.1 → 0.1.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.
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: []