json_defaults 0.1.4 → 0.1.5
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/README.md +90 -9
- data/json_defaults.gemspec +2 -0
- data/lib/json_defaults/version.rb +1 -1
- data/lib/json_defaults.rb +38 -3
- metadata +30 -3
- data/lib/json_defaults/active_record_module.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fcdd7c7bb6915818e07ece1680190306da69a82
|
4
|
+
data.tar.gz: a57c67ba21367d881ecdc094f95d6f332c41b4de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a917c008923168a7a7079c41a769c0ec220d173f313c085f394ce9555040e63e0e0a0bdfe57a62f314c5df8891ad596261a290f2c7a49f54af48fa6158b33e97
|
7
|
+
data.tar.gz: ca9d60434d82740d7bffba778bde66e48b011da755d0a2229b801f1043070bc3be62c0477f7ba30d908146bbcf47f7338d3d419a202b2d46cca946c12af6c855
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# JsonDefaults
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Very simple library for defining default options for your object.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
@@ -22,15 +20,98 @@ Or install it yourself as:
|
|
22
20
|
|
23
21
|
## Usage
|
24
22
|
|
25
|
-
|
23
|
+
Working with Model
|
24
|
+
------------------------
|
25
|
+
|
26
|
+
- Create jsonb field for you model:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
rails g migration add_json_field_to_users json_field:jsonb
|
30
|
+
rake db:migrate
|
31
|
+
```
|
32
|
+
|
33
|
+
- Add this to your model:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
class User < ActiveRecord::Base
|
37
|
+
extend JsonDefaults
|
38
|
+
|
39
|
+
json_defaults(
|
40
|
+
field: "json_field",
|
41
|
+
options: {
|
42
|
+
field1: "It's",
|
43
|
+
field2: "awesome"
|
44
|
+
}
|
45
|
+
)
|
46
|
+
end
|
47
|
+
```
|
48
|
+
And next just use defined fields with default options
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
user = User.new
|
52
|
+
user.json_field # => {"field1"=>"It's", "field2"=>"awesome"}
|
53
|
+
user.field1 # => It's
|
54
|
+
user.field2 # => awesome
|
55
|
+
```
|
56
|
+
You can update this field directly
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
user = User.new
|
60
|
+
user.field1 # => It's
|
61
|
+
user.field1 = "cool"
|
62
|
+
user.field1 # => cool
|
63
|
+
```
|
26
64
|
|
27
|
-
|
65
|
+
- You can also define type for each field:
|
28
66
|
|
29
|
-
|
67
|
+
```ruby
|
68
|
+
class User < ActiveRecord::Base
|
69
|
+
extend JsonDefaults
|
70
|
+
|
71
|
+
json_defaults(
|
72
|
+
field: "json_field",
|
73
|
+
options: {
|
74
|
+
field1: "It's",
|
75
|
+
field2: "awesome",
|
76
|
+
field3: {
|
77
|
+
value: false,
|
78
|
+
boolean: true
|
79
|
+
},
|
80
|
+
field4: {
|
81
|
+
value: 666,
|
82
|
+
integer: true
|
83
|
+
}
|
84
|
+
}
|
85
|
+
)
|
86
|
+
end
|
87
|
+
```
|
30
88
|
|
31
|
-
|
89
|
+
```ruby
|
90
|
+
user = User.new
|
91
|
+
user.field4 # => 666
|
92
|
+
user.field4 = "123"
|
93
|
+
user.field4 # => 123
|
94
|
+
```
|
95
|
+
|
96
|
+
### Options for defining field
|
32
97
|
|
33
|
-
|
98
|
+
```ruby
|
99
|
+
json_defaults(
|
100
|
+
field: "json_field",
|
101
|
+
active_record: true,
|
102
|
+
options: {
|
103
|
+
key: "value",
|
104
|
+
key: {
|
105
|
+
value: 666,
|
106
|
+
integer: true
|
107
|
+
}
|
108
|
+
}
|
109
|
+
)
|
110
|
+
```
|
34
111
|
|
35
|
-
|
112
|
+
| Option | type | Description |
|
113
|
+
| :--- | :--- | :--- |
|
114
|
+
| `field` |String| This parameter specifies which field in the model the json_defaults plugin will be applied to. |
|
115
|
+
| `options` |Hash| Default hash for selected field with ```key``` and ```value``` |
|
116
|
+
| `key` || Key's name in default hash. Can be ```string``` or ```symbol```|
|
36
117
|
|
data/json_defaults.gemspec
CHANGED
@@ -30,6 +30,8 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_development_dependency "bundler", "~> 1.13"
|
33
|
+
spec.add_development_dependency "activerecord", "~> 4.2"
|
33
34
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
|
+
spec.add_development_dependency "pg", "~> 0.18.4"
|
34
36
|
spec.add_development_dependency "rspec"
|
35
37
|
end
|
data/lib/json_defaults.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
require "json_defaults/version"
|
2
|
-
require "json_defaults/active_record_module"
|
3
2
|
|
4
3
|
module JsonDefaults
|
5
4
|
|
6
5
|
def json_defaults(field: nil, options: {}, active_record: false)
|
7
6
|
options = options.stringify_keys
|
8
7
|
define_json_methods(field, options)
|
9
|
-
|
8
|
+
if defined?(ActiveRecord::Base) && self.ancestors.include?(ActiveRecord::Base)
|
9
|
+
set_default_options(field, options)
|
10
|
+
end
|
10
11
|
end
|
11
12
|
|
12
13
|
private
|
@@ -26,12 +27,20 @@ module JsonDefaults
|
|
26
27
|
if defaults.is_a?(Hash) && defaults.has_key?(:value)
|
27
28
|
return defaults[:value]
|
28
29
|
else
|
29
|
-
return defaults
|
30
|
+
return defaults.is_a?(Hash) ? defaults.stringify_keys : defaults
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
36
|
+
def get_defult_data get_defult_data
|
37
|
+
if defaults.is_a?(Hash) && defaults.has_key?(:value)
|
38
|
+
return defaults[:value]
|
39
|
+
else
|
40
|
+
return defaults
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
35
44
|
def define_setter base_field, field, defaults
|
36
45
|
define_method "#{field}=" do |val|
|
37
46
|
object_value = send base_field
|
@@ -55,4 +64,30 @@ module JsonDefaults
|
|
55
64
|
})
|
56
65
|
end
|
57
66
|
end
|
67
|
+
|
68
|
+
def set_default_options field, options
|
69
|
+
|
70
|
+
after_initialize do |model|
|
71
|
+
if model.send(field).blank?
|
72
|
+
model.send("#{field}=", options.each {|key, value| options[key] = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value})
|
73
|
+
else
|
74
|
+
|
75
|
+
options.each do |key, value|
|
76
|
+
have_key = model.send(field).key?(key.to_s)
|
77
|
+
|
78
|
+
default_value = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value
|
79
|
+
default_value = default_value.stringify_keys if default_value && default_value.is_a?(Hash)
|
80
|
+
|
81
|
+
model_value = model.send(field).try(:[], key.to_s).try(:stringify_keys)
|
82
|
+
|
83
|
+
if !have_key
|
84
|
+
model.send(field)[key] = default_value
|
85
|
+
elsif have_key && model_value.is_a?(Hash)
|
86
|
+
model.send(field)[key] = default_value.merge(model_value)
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
58
93
|
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.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DenDos
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.2'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pg
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.18.4
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.18.4
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: rspec
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +95,6 @@ files:
|
|
67
95
|
- bin/setup
|
68
96
|
- json_defaults.gemspec
|
69
97
|
- lib/json_defaults.rb
|
70
|
-
- lib/json_defaults/active_record_module.rb
|
71
98
|
- lib/json_defaults/version.rb
|
72
99
|
homepage: ''
|
73
100
|
licenses: []
|
@@ -1,29 +0,0 @@
|
|
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 || model.class.columns_hash[field].type == :jsonb
|
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
|