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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f796ce48261e6fa69e220517bb01d94141948ca
4
- data.tar.gz: 44fcabe3fc5f8469d33720e31deb47534d8805f6
3
+ metadata.gz: 7fcdd7c7bb6915818e07ece1680190306da69a82
4
+ data.tar.gz: a57c67ba21367d881ecdc094f95d6f332c41b4de
5
5
  SHA512:
6
- metadata.gz: 683f2ccc8470fb3540f3f4bc55d7d3463ec93fbf1ad3a1e913d116216d8bef8a1852d707af17e4b23d2718f50c48ca4b3f6137e9f67bcd997029db15b209f59f
7
- data.tar.gz: f17b049fbe9816e1cac54ae4f363857dbb281613f3625d87abc85d5aff3110942973ec3b0bc2a65897f15077daba4934c3ca75ca2c3d493a124f91aa29424297
6
+ metadata.gz: a917c008923168a7a7079c41a769c0ec220d173f313c085f394ce9555040e63e0e0a0bdfe57a62f314c5df8891ad596261a290f2c7a49f54af48fa6158b33e97
7
+ data.tar.gz: ca9d60434d82740d7bffba778bde66e48b011da755d0a2229b801f1043070bc3be62c0477f7ba30d908146bbcf47f7338d3d419a202b2d46cca946c12af6c855
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # JsonDefaults
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/json_defaults`. To experiment with that code, run `bin/console` for an interactive prompt.
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
- TODO: Write usage instructions here
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
- ## Development
65
+ - You can also define type for each field:
28
66
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
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
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
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
- ## Contributing
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
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/json_defaults.
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
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module JsonDefaults
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  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
- set_default_options(field, options) if active_record
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
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-03 00:00:00.000000000 Z
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