json_defaults 0.1.4 → 0.1.9

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
- SHA1:
3
- metadata.gz: 7f796ce48261e6fa69e220517bb01d94141948ca
4
- data.tar.gz: 44fcabe3fc5f8469d33720e31deb47534d8805f6
2
+ SHA256:
3
+ metadata.gz: edb266e8c31d0afd0a9dba8e3b32d6ba33f33ed9a5d788ec5b11b47db79fee12
4
+ data.tar.gz: 2e1ced8a6eeae357b2fd0cee2e71caff307efde41cb0ebf6aef6e97f5f1813ea
5
5
  SHA512:
6
- metadata.gz: 683f2ccc8470fb3540f3f4bc55d7d3463ec93fbf1ad3a1e913d116216d8bef8a1852d707af17e4b23d2718f50c48ca4b3f6137e9f67bcd997029db15b209f59f
7
- data.tar.gz: f17b049fbe9816e1cac54ae4f363857dbb281613f3625d87abc85d5aff3110942973ec3b0bc2a65897f15077daba4934c3ca75ca2c3d493a124f91aa29424297
6
+ metadata.gz: 3942a81529c1c21d86b8c55bcd05beb3300d35c0df0918f17bcd0059504b550483f51a92914798c6a4d12c15fd88d2635f41ff909d06d558670eaf8c24430652
7
+ data.tar.gz: d36ac9e6ae31a25824c4b02b53eeccf65b7181c1a786bc932a2e7270470b616a79cb8414e5ed6da9957ad9e21424ce83406f5d6d109b1c980d3e3842db6eda6d
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,97 @@ 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
+ options: {
102
+ key: "value",
103
+ key: {
104
+ value: 666,
105
+ integer: true
106
+ }
107
+ }
108
+ )
109
+ ```
34
110
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/json_defaults.
111
+ | Option | type | Description |
112
+ | :--- | :--- | :--- |
113
+ | `field` |String| This parameter specifies which field in the model the json_defaults plugin will be applied to. |
114
+ | `options` |Hash| Default hash for selected field with ```key``` and ```value``` |
115
+ | `key` || Key's name in default hash. Can be ```string``` or ```symbol```|
36
116
 
Binary file
@@ -1,35 +1,36 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'json_defaults/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "json_defaults"
6
+ spec.name = 'json_defaults'
8
7
  spec.version = JsonDefaults::VERSION
9
- spec.authors = ["DenDos"]
10
- spec.email = ["cotoha92@gmail.com"]
8
+ spec.authors = ['DenDos']
9
+ spec.email = ['cotoha92@gmail.com']
11
10
 
12
- spec.summary = %q{Create default structure for jsonb field}
13
- spec.description = %q{DEEEEEESSSSSCCCCRIRRRRRIIIIIPPPPTIOOOOONNNNN}
14
- spec.homepage = ""
11
+ spec.summary = 'Create default structure for jsonb field'
12
+ spec.description = 'https://github.com/DenDos/json-defaults'
13
+ spec.homepage = ''
15
14
 
16
15
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
16
  # to allow pushing to a single host or delete this section to allow pushing to any host.
18
17
  if spec.respond_to?(:metadata)
19
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
18
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
20
19
  else
21
- raise "RubyGems 2.0 or newer is required to protect against " \
22
- "public gem pushes."
20
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
21
+ 'public gem pushes.'
23
22
  end
24
23
 
25
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
24
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
25
  f.match(%r{^(test|spec|features)/})
27
26
  end
28
- spec.bindir = "exe"
27
+ spec.bindir = 'exe'
29
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
- spec.require_paths = ["lib"]
29
+ spec.require_paths = ['lib']
31
30
 
32
- spec.add_development_dependency "bundler", "~> 1.13"
33
- spec.add_development_dependency "rake", "~> 10.0"
34
- spec.add_development_dependency "rspec"
31
+ spec.add_development_dependency 'activerecord', '~> 4.2'
32
+ spec.add_development_dependency 'bundler', '~> 1.3'
33
+ spec.add_development_dependency 'pg', '~> 0.21.0'
34
+ spec.add_development_dependency 'rake', '~> 13.0.1'
35
+ spec.add_development_dependency 'rspec'
35
36
  end
data/lib/json_defaults.rb CHANGED
@@ -1,58 +1,94 @@
1
- require "json_defaults/version"
2
- require "json_defaults/active_record_module"
1
+ require 'json_defaults/version'
3
2
 
4
3
  module JsonDefaults
5
-
6
4
  def json_defaults(field: nil, options: {}, active_record: false)
7
5
  options = options.stringify_keys
8
6
  define_json_methods(field, options)
9
- set_default_options(field, options) if active_record
7
+ set_default_options(field, options) if defined?(ActiveRecord::Base) && ancestors.include?(ActiveRecord::Base)
10
8
  end
11
-
12
- private
13
- def define_json_methods(base_field, options)
14
- options.each do |field, defaults|
15
- define_getter(base_field, field, defaults)
16
- define_setter(base_field, field, defaults)
9
+
10
+ private
11
+
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
17
+ end
18
+
19
+ def define_getter(base_field, field, defaults)
20
+ return if attribute_names.include?(field)
21
+
22
+ define_method field do
23
+ val = send base_field
24
+ if val && val.is_a?(Hash) && val.has_key?(field)
25
+ val[field]
26
+ elsif defaults.is_a?(Hash) && defaults.has_key?(:value)
27
+ return defaults[:value]
28
+ else
29
+ return defaults.is_a?(Hash) ? defaults.stringify_keys : defaults
17
30
  end
18
31
  end
32
+ end
19
33
 
20
- def define_getter base_field, field, defaults
21
- define_method field do
22
- val = send base_field
23
- if val && val.is_a?(Hash) && val.has_key?(field)
24
- val[field]
25
- else
26
- if defaults.is_a?(Hash) && defaults.has_key?(:value)
27
- return defaults[:value]
28
- else
29
- return defaults
30
- end
31
- end
34
+ def get_defult_data(_get_defult_data)
35
+ if defaults.is_a?(Hash) && defaults.has_key?(:value)
36
+ defaults[:value]
37
+ else
38
+ defaults
39
+ end
40
+ end
41
+
42
+ def define_setter(base_field, field, defaults)
43
+ return if attribute_names.include?(field)
44
+
45
+ define_method "#{field}=" do |val|
46
+ object_value = send base_field
47
+ object_value = {} unless val && val.is_a?(Hash)
48
+
49
+ val = val.to_i if defaults.is_a?(Hash) && defaults.has_key?(:integer) && defaults[:integer]
50
+
51
+ if defaults.is_a?(Hash) && defaults.has_key?(:boolean) && defaults[:boolean]
52
+ val = val.is_a?(TrueClass) || val.respond_to?(:to_i) && val.to_i == 1
32
53
  end
54
+
55
+ object_value[field] = val
56
+
57
+ send("#{base_field}=", {
58
+ **send(base_field.to_s).symbolize_keys,
59
+ **object_value.symbolize_keys
60
+ })
33
61
  end
62
+ end
34
63
 
35
- def define_setter base_field, field, defaults
36
- define_method "#{field}=" do |val|
37
- object_value = send base_field
38
- unless val && val.is_a?(Hash)
39
- object_value = {}
40
- end
41
-
42
- if defaults.is_a?(Hash) && defaults.has_key?(:integer) && defaults[:integer]
43
- val = val.to_i
44
- end
64
+ def set_default_options(field, options)
65
+ after_initialize do |model|
66
+ if model.respond_to?(field)
67
+ if model.send(field).blank?
68
+ model.send("#{field}=", options.each do |key, value|
69
+ options[key] = if value.is_a?(Hash) && value.has_key?(:value)
70
+ value[:value]
71
+ else
72
+ value
73
+ end
74
+ end)
75
+ else
76
+ options.each do |key, value|
77
+ have_key = model.send(field).key?(key.to_s)
45
78
 
46
- if defaults.is_a?(Hash) && defaults.has_key?(:boolean) && defaults[:boolean]
47
- val = val.is_a?(TrueClass) || val.respond_to?(:to_i) && val.to_i == 1
48
- end
79
+ default_value = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value
80
+ default_value = default_value.stringify_keys if default_value && default_value.is_a?(Hash)
81
+
82
+ model_value = model.send(field).try(:[], key.to_s).try(:stringify_keys)
49
83
 
50
- object_value[field] = val
51
-
52
- send("#{base_field}=", {
53
- **send("#{base_field}").symbolize_keys,
54
- **object_value.symbolize_keys
55
- })
84
+ if !have_key
85
+ model.send(field)[key] = default_value
86
+ elsif have_key && model_value.is_a?(Hash)
87
+ model.send(field)[key] = default_value.merge(model_value)
88
+ end
89
+ end
90
+ end
56
91
  end
57
92
  end
93
+ end
58
94
  end
@@ -1,3 +1,3 @@
1
1
  module JsonDefaults
2
- VERSION = "0.1.4"
2
+ VERSION = '0.1.9'.freeze
3
3
  end
metadata CHANGED
@@ -1,43 +1,71 @@
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.9
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: 2021-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '1.13'
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pg
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.21.0
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: '1.13'
54
+ version: 0.21.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '10.0'
61
+ version: 13.0.1
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '10.0'
68
+ version: 13.0.1
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rspec
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +80,7 @@ dependencies:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
- description: DEEEEEESSSSSCCCCRIRRRRRIIIIIPPPPTIOOOOONNNNN
83
+ description: https://github.com/DenDos/json-defaults
56
84
  email:
57
85
  - cotoha92@gmail.com
58
86
  executables: []
@@ -65,9 +93,9 @@ files:
65
93
  - Rakefile
66
94
  - bin/console
67
95
  - bin/setup
96
+ - json_defaults-0.1.8.gem
68
97
  - json_defaults.gemspec
69
98
  - lib/json_defaults.rb
70
- - lib/json_defaults/active_record_module.rb
71
99
  - lib/json_defaults/version.rb
72
100
  homepage: ''
73
101
  licenses: []
@@ -88,8 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
116
  - !ruby/object:Gem::Version
89
117
  version: '0'
90
118
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.5.1
119
+ rubygems_version: 3.0.3
93
120
  signing_key:
94
121
  specification_version: 4
95
122
  summary: Create default structure for jsonb field
@@ -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