json_defaults 0.1.4 → 0.1.5

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: 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