json_defaults 0.1.3 → 0.1.8

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