json_defaults 0.1.3 → 0.1.8

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
- SHA1:
3
- metadata.gz: 60f305396dc9abd03d063ac7d9bbac666c287407
4
- data.tar.gz: 4c7049e6e8630b2105e5da085278d00ff214baef
2
+ SHA256:
3
+ metadata.gz: 3a2838d635fd659872ea17ce7b9a98a8f9b357f389e1b243f81872bbacca820a
4
+ data.tar.gz: e365be73d60e7491e02f4087ea770f5bd49c8f83ef23b68754707e73ad591c90
5
5
  SHA512:
6
- metadata.gz: 43c7e1990c2dc185751254d5a6e4691ce51b66e163c56273e6ebd775e1f3e2c13cb4f1c023b77a912517b96d877b1fe422ad06ab8c91e29dc1fbbf8f969e339b
7
- data.tar.gz: 1c87fd5813d4f93097864f158dcf199db587635fc570d9429dccf6b64b335b4dffd53d4b83a900e0578f1b549e2c6852d0d8c3bda4a2a411434cd0bfa27e3a35
6
+ metadata.gz: 261b08abe50895e600607d9f7a23ad3d259db765b58c08959fdee5fc0517ce36cc17442c16e0c83e51c0d6fad8a857177e0e1d87f9cdb47435b87bf2ba5c93fd
7
+ data.tar.gz: 7f088e2bb6c93ef5e165d14638a0c3bec33d1127855318d1a12cd40a9b7f4d0d45a1e131944e2b486e90f842d9fa028624ac409e1ee6221e8d4bc5185d8cf43f
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
 
@@ -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
@@ -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
@@ -18,6 +19,8 @@ module JsonDefaults
18
19
  end
19
20
 
20
21
  def define_getter base_field, field, defaults
22
+ return if self.attribute_names.include?(field)
23
+
21
24
  define_method field do
22
25
  val = send base_field
23
26
  if val && val.is_a?(Hash) && val.has_key?(field)
@@ -26,13 +29,23 @@ module JsonDefaults
26
29
  if defaults.is_a?(Hash) && defaults.has_key?(:value)
27
30
  return defaults[:value]
28
31
  else
29
- return defaults
32
+ return defaults.is_a?(Hash) ? defaults.stringify_keys : defaults
30
33
  end
31
34
  end
32
35
  end
33
36
  end
34
37
 
38
+ def get_defult_data get_defult_data
39
+ if defaults.is_a?(Hash) && defaults.has_key?(:value)
40
+ return defaults[:value]
41
+ else
42
+ return defaults
43
+ end
44
+ end
45
+
35
46
  def define_setter base_field, field, defaults
47
+ return if self.attribute_names.include?(field)
48
+
36
49
  define_method "#{field}=" do |val|
37
50
  object_value = send base_field
38
51
  unless val && val.is_a?(Hash)
@@ -55,4 +68,30 @@ module JsonDefaults
55
68
  })
56
69
  end
57
70
  end
71
+
72
+ def set_default_options field, options
73
+
74
+ after_initialize do |model|
75
+ if model.send(field).blank?
76
+ model.send("#{field}=", options.each {|key, value| options[key] = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value})
77
+ else
78
+
79
+ options.each do |key, value|
80
+ have_key = model.send(field).key?(key.to_s)
81
+
82
+ default_value = value.is_a?(Hash) && value.has_key?(:value) ? value[:value] : value
83
+ default_value = default_value.stringify_keys if default_value && default_value.is_a?(Hash)
84
+
85
+ model_value = model.send(field).try(:[], key.to_s).try(:stringify_keys)
86
+
87
+ if !have_key
88
+ model.send(field)[key] = default_value
89
+ elsif have_key && model_value.is_a?(Hash)
90
+ model.send(field)[key] = default_value.merge(model_value)
91
+ end
92
+
93
+ end
94
+ end
95
+ end
96
+ end
58
97
  end
@@ -1,3 +1,3 @@
1
1
  module JsonDefaults
2
- VERSION = "0.1.3"
2
+ VERSION = '0.1.8'.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.3
4
+ version: 0.1.8
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-01-07 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: []
@@ -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: []
@@ -88,8 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
115
  - !ruby/object:Gem::Version
89
116
  version: '0'
90
117
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.5.1
118
+ rubygems_version: 3.0.3
93
119
  signing_key:
94
120
  specification_version: 4
95
121
  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
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