attr_json 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +53 -17
- data/Appraisals +2 -2
- data/CHANGELOG.md +6 -1
- data/Gemfile +3 -3
- data/README.md +3 -0
- data/attr_json.gemspec +1 -1
- data/gemfiles/rails_5_0.gemfile +2 -2
- data/gemfiles/rails_5_1.gemfile +2 -2
- data/gemfiles/rails_5_2.gemfile +2 -2
- data/gemfiles/rails_6_0.gemfile +3 -3
- data/gemfiles/rails_edge.gemfile +19 -0
- data/gemfiles/rails_edge_6.gemfile +3 -3
- data/lib/attr_json/record.rb +1 -1
- data/lib/attr_json/record/query_builder.rb +15 -3
- data/lib/attr_json/record/query_scopes.rb +6 -0
- data/lib/attr_json/type/polymorphic_model.rb +2 -0
- data/lib/attr_json/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be1175039b6fbd78d5a9c1bcaae7c4ce003d29f403ef1e86d71d3c226e659a0b
|
4
|
+
data.tar.gz: 588710deb7c2b6076ba1cf1094f9b4ab67fb7bd74cecfc8c560de5b0ef50eafb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d71520892d16915465eab7c9e373f5e5ecabb8efee7a295da6532fbedd0c9817890da7e689e31f1bf1c7b3c1cad73f071f3563d7eb6d5637516de40174fce627
|
7
|
+
data.tar.gz: ea225c01754abfa5dec0e8749fd91ff68e1a329b54e684a27fee14655de7eb4eddf832538a961b14bbf83e222e0b90bfe554a8fdac001ca95aefb456353ed763
|
data/.travis.yml
CHANGED
@@ -1,28 +1,64 @@
|
|
1
1
|
#
|
2
|
-
dist: trusty
|
3
2
|
sudo: false
|
4
3
|
addons:
|
5
4
|
postgresql: '9.4'
|
6
5
|
chrome: stable
|
7
6
|
language: ruby
|
8
7
|
cache: bundler
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
|
9
|
+
# rvm:
|
10
|
+
# - 2.4.5
|
11
|
+
# - 2.5.3
|
12
|
+
# - 2.6.5
|
13
|
+
# - 2.7.0
|
14
|
+
# gemfile:
|
15
|
+
# - gemfiles/rails_5_0.gemfile
|
16
|
+
# - gemfiles/rails_5_1.gemfile
|
17
|
+
# - gemfiles/rails_5_2.gemfile
|
18
|
+
# - gemfiles/rails_6_0.gemfile
|
19
|
+
# - gemfiles/rails_edge.gemfile
|
20
|
+
|
18
21
|
before_install:
|
19
|
-
- gem install bundler -v
|
22
|
+
- gem install bundler -v "~> 2.0"
|
23
|
+
|
20
24
|
matrix:
|
25
|
+
include:
|
26
|
+
- rvm: 2.4.5
|
27
|
+
gemfile: gemfiles/rails_5_0.gemfile
|
28
|
+
|
29
|
+
- rvm: 2.4.5
|
30
|
+
gemfile: gemfiles/rails_5_1.gemfile
|
31
|
+
|
32
|
+
- rvm: 2.4.5
|
33
|
+
gemfile: gemfiles/rails_5_2.gemfile
|
34
|
+
|
35
|
+
- rvm: 2.5.3
|
36
|
+
gemfile: gemfiles/rails_5_0.gemfile
|
37
|
+
|
38
|
+
- rvm: 2.5.3
|
39
|
+
gemfile: gemfiles/rails_5_1.gemfile
|
40
|
+
|
41
|
+
- rvm: 2.5.3
|
42
|
+
gemfile: gemfiles/rails_5_2.gemfile
|
43
|
+
|
44
|
+
- rvm: 2.5.3
|
45
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
46
|
+
|
47
|
+
- rvm: 2.6.5
|
48
|
+
gemfile: gemfiles/rails_5_2.gemfile
|
49
|
+
|
50
|
+
- rvm: 2.6.5
|
51
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
52
|
+
|
53
|
+
- rvm: 2.7.0
|
54
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
55
|
+
|
56
|
+
- rvm: 2.7.0
|
57
|
+
gemfile: gemfiles/rails_edge.gemfile
|
58
|
+
|
21
59
|
allow_failures:
|
22
|
-
- gemfile: gemfiles/
|
60
|
+
- gemfile: gemfiles/rails_edge.gemfile
|
23
61
|
fast_finish: true
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- gemfile: gemfiles/rails_6_0.gemfile
|
28
|
-
rvm: 2.4.5
|
62
|
+
|
63
|
+
|
64
|
+
|
data/Appraisals
CHANGED
@@ -26,7 +26,7 @@ appraise "rails-5-2" do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
appraise "rails-6-0" do
|
29
|
-
gem 'combustion',
|
29
|
+
gem 'combustion', "~> 1.0"
|
30
30
|
|
31
31
|
gem "rails", ">= 6.0.0.beta1", "< 6.1"
|
32
32
|
gem "pg", "~> 1.0"
|
@@ -35,7 +35,7 @@ end
|
|
35
35
|
appraise "rails-edge-6" do
|
36
36
|
# Edge rails needs unreleased combustion
|
37
37
|
# https://github.com/pat/combustion/issues/92
|
38
|
-
gem 'combustion',
|
38
|
+
gem 'combustion', "~> 1.0"
|
39
39
|
|
40
40
|
gem "rails", git: "https://github.com/rails/rails.git", branch: "master"
|
41
41
|
gem "pg", "~> 1.0"
|
data/CHANGELOG.md
CHANGED
@@ -4,5 +4,10 @@ Notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
-
## [Unreleased]
|
7
|
+
## [Unreleased](https://github.com/jrochkind/attr_json/compare/v1.1.0...HEAD)
|
8
8
|
|
9
|
+
## [1.1.0](https://github.com/jrochkind/attr_json/compare/v1.0.0...v1.1.0)
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
* not_jsonb_contains query method, like `jsonb_contains` but negated. https://github.com/jrochkind/attr_json/pull/85
|
data/Gemfile
CHANGED
@@ -10,7 +10,7 @@ gemspec
|
|
10
10
|
# We also have these development dependencies here in the Gemfile instead of the
|
11
11
|
# gemspec so appraisal can override them from our Appraisal file.
|
12
12
|
|
13
|
-
gem 'combustion', '~>
|
13
|
+
gem 'combustion', '~> 1.1'
|
14
14
|
|
15
15
|
# all of rails is NOT a dependency, just activerecord.
|
16
16
|
# But we use it for integration testing with combustion. Hmm, a bit annoying
|
@@ -24,13 +24,13 @@ gem 'rails'
|
|
24
24
|
gem 'railties'
|
25
25
|
|
26
26
|
gem "pg"
|
27
|
-
gem "rspec-rails", "~>
|
27
|
+
gem "rspec-rails", "~> 4.0"
|
28
28
|
gem "simple_form", ">= 4.0"
|
29
29
|
gem 'cocoon', ">= 1.2"
|
30
30
|
gem 'jquery-rails'
|
31
31
|
|
32
32
|
gem 'capybara', "~> 3.0"
|
33
|
-
gem 'webdrivers', '~>
|
33
|
+
gem 'webdrivers', '~> 4.0'
|
34
34
|
gem "selenium-webdriver"
|
35
35
|
|
36
36
|
gem "byebug"
|
data/README.md
CHANGED
@@ -138,6 +138,9 @@ MyModel.jsonb_contains(my_string: "foo", my_integer: 100).first
|
|
138
138
|
# Implemented with scopes, this is an ordinary relation, you can
|
139
139
|
# combine it with whatever, just like ordinary `where`.
|
140
140
|
|
141
|
+
MyModel.not_jsonb_contains(my:string: "foo", my_integer: 100).to_sql
|
142
|
+
# SELECT "products".* FROM "products" WHERE NOT (products.json_attributes @> ('{"my_string":"foo","my_integer":100}')::jsonb)
|
143
|
+
|
141
144
|
# typecasts much like ActiveRecord on query too:
|
142
145
|
MyModel.jsonb_contains(my_string: "foo", my_integer: "100")
|
143
146
|
# no problem
|
data/attr_json.gemspec
CHANGED
@@ -48,7 +48,7 @@ attributes use as much of the existing ActiveRecord architecture as we can.}
|
|
48
48
|
spec.add_runtime_dependency "activerecord", ">= 5.0.0", "< 6.1"
|
49
49
|
end
|
50
50
|
|
51
|
-
spec.add_development_dependency "bundler"
|
51
|
+
spec.add_development_dependency "bundler"
|
52
52
|
spec.add_development_dependency "rake", ">= 10.0"
|
53
53
|
spec.add_development_dependency "rspec", "~> 3.7"
|
54
54
|
spec.add_development_dependency "database_cleaner", "~> 1.5"
|
data/gemfiles/rails_5_0.gemfile
CHANGED
@@ -6,12 +6,12 @@ gem "combustion", "~> 0.9.0"
|
|
6
6
|
gem "rails", "~> 5.0.0"
|
7
7
|
gem "railties"
|
8
8
|
gem "pg", "~> 0.18"
|
9
|
-
gem "rspec-rails", "~>
|
9
|
+
gem "rspec-rails", "~> 4.0"
|
10
10
|
gem "simple_form", ">= 4.0"
|
11
11
|
gem "cocoon", ">= 1.2"
|
12
12
|
gem "jquery-rails"
|
13
13
|
gem "capybara", "~> 3.0"
|
14
|
-
gem "webdrivers", "~>
|
14
|
+
gem "webdrivers", "~> 4.0"
|
15
15
|
gem "selenium-webdriver"
|
16
16
|
gem "byebug"
|
17
17
|
gem "rails-ujs", require: false
|
data/gemfiles/rails_5_1.gemfile
CHANGED
@@ -6,12 +6,12 @@ gem "combustion", "~> 0.9.0"
|
|
6
6
|
gem "rails", "~> 5.1.0"
|
7
7
|
gem "railties"
|
8
8
|
gem "pg", "~> 1.0"
|
9
|
-
gem "rspec-rails", "~>
|
9
|
+
gem "rspec-rails", "~> 4.0"
|
10
10
|
gem "simple_form", ">= 4.0"
|
11
11
|
gem "cocoon", ">= 1.2"
|
12
12
|
gem "jquery-rails"
|
13
13
|
gem "capybara", "~> 3.0"
|
14
|
-
gem "webdrivers", "~>
|
14
|
+
gem "webdrivers", "~> 4.0"
|
15
15
|
gem "selenium-webdriver"
|
16
16
|
gem "byebug"
|
17
17
|
|
data/gemfiles/rails_5_2.gemfile
CHANGED
@@ -6,12 +6,12 @@ gem "combustion", "~> 0.9.0"
|
|
6
6
|
gem "rails", "~> 5.2.0"
|
7
7
|
gem "railties"
|
8
8
|
gem "pg", "~> 1.0"
|
9
|
-
gem "rspec-rails", "~>
|
9
|
+
gem "rspec-rails", "~> 4.0"
|
10
10
|
gem "simple_form", ">= 4.0"
|
11
11
|
gem "cocoon", ">= 1.2"
|
12
12
|
gem "jquery-rails"
|
13
13
|
gem "capybara", "~> 3.0"
|
14
|
-
gem "webdrivers", "~>
|
14
|
+
gem "webdrivers", "~> 4.0"
|
15
15
|
gem "selenium-webdriver"
|
16
16
|
gem "byebug"
|
17
17
|
|
data/gemfiles/rails_6_0.gemfile
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "combustion",
|
5
|
+
gem "combustion", "~> 1.0"
|
6
6
|
gem "rails", ">= 6.0.0.beta1", "< 6.1"
|
7
7
|
gem "railties"
|
8
8
|
gem "pg", "~> 1.0"
|
9
|
-
gem "rspec-rails", "~>
|
9
|
+
gem "rspec-rails", "~> 4.0"
|
10
10
|
gem "simple_form", ">= 4.0"
|
11
11
|
gem "cocoon", ">= 1.2"
|
12
12
|
gem "jquery-rails"
|
13
13
|
gem "capybara", "~> 3.0"
|
14
|
-
gem "webdrivers", "~>
|
14
|
+
gem "webdrivers", "~> 4.0"
|
15
15
|
gem "selenium-webdriver"
|
16
16
|
gem "byebug"
|
17
17
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "combustion", "~> 1.0"
|
6
|
+
gem "rails", git: "https://github.com/rails/rails.git", branch: "master"
|
7
|
+
gem "railties"
|
8
|
+
gem "pg", "~> 1.0"
|
9
|
+
gem "rspec-rails", "~> 3.7"
|
10
|
+
gem "simple_form", ">= 4.0"
|
11
|
+
gem "cocoon", ">= 1.2"
|
12
|
+
gem "jquery-rails"
|
13
|
+
gem "capybara", "~> 3.0"
|
14
|
+
gem "webdrivers", "~> 4.0"
|
15
|
+
gem "selenium-webdriver"
|
16
|
+
gem "byebug"
|
17
|
+
gem "coffee-rails"
|
18
|
+
|
19
|
+
gemspec path: "../"
|
@@ -2,16 +2,16 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "combustion",
|
5
|
+
gem "combustion", "~> 1.0"
|
6
6
|
gem "rails", git: "https://github.com/rails/rails.git", branch: "master"
|
7
7
|
gem "railties"
|
8
8
|
gem "pg", "~> 1.0"
|
9
|
-
gem "rspec-rails", "~>
|
9
|
+
gem "rspec-rails", "~> 4.0"
|
10
10
|
gem "simple_form", ">= 4.0"
|
11
11
|
gem "cocoon", ">= 1.2"
|
12
12
|
gem "jquery-rails"
|
13
13
|
gem "capybara", "~> 3.0"
|
14
|
-
gem "webdrivers", "~>
|
14
|
+
gem "webdrivers", "~> 4.0"
|
15
15
|
gem "selenium-webdriver"
|
16
16
|
gem "byebug"
|
17
17
|
gem "coffee-rails"
|
data/lib/attr_json/record.rb
CHANGED
@@ -47,7 +47,7 @@ module AttrJson
|
|
47
47
|
when false, nil, ActiveModel::Type::Boolean::FALSE_VALUES
|
48
48
|
false
|
49
49
|
else
|
50
|
-
if value.respond_to?(:to_i) && ( Numeric === value || value !~ /[^0-9]/ )
|
50
|
+
if value.respond_to?(:to_i) && ( Numeric === value || value.to_s !~ /[^0-9]/ )
|
51
51
|
!value.to_i.zero?
|
52
52
|
elsif value.respond_to?(:zero?)
|
53
53
|
!value.zero?
|
@@ -10,6 +10,20 @@ module AttrJson
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def contains_relation
|
13
|
+
contains_relation_impl do |relation, query, params|
|
14
|
+
relation.where(query, params)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def contains_not_relation
|
19
|
+
contains_relation_impl do |relation, query, params|
|
20
|
+
relation.where.not(query, params)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def contains_relation_impl
|
13
27
|
result_relation = relation
|
14
28
|
|
15
29
|
group_attributes_by_container.each do |container_attribute, attributes|
|
@@ -18,14 +32,12 @@ module AttrJson
|
|
18
32
|
attributes.each do |key, value|
|
19
33
|
add_to_param_hash!(param_hash, key, value)
|
20
34
|
end
|
21
|
-
result_relation = result_relation
|
35
|
+
result_relation = yield(result_relation, "#{relation.table_name}.#{container_attribute} @> (?)::jsonb", param_hash.to_json)
|
22
36
|
end
|
23
37
|
|
24
38
|
result_relation
|
25
39
|
end
|
26
40
|
|
27
|
-
protected
|
28
|
-
|
29
41
|
def merge_param_hash!(original, new)
|
30
42
|
original.deep_merge!(new) do |key, old_val, new_val|
|
31
43
|
if old_val.is_a?(Array) && old_val.first.is_a?(Hash) && new_val.is_a?(Array) && new_val.first.is_a?(Hash)
|
@@ -17,6 +17,8 @@ module AttrJson
|
|
17
17
|
#
|
18
18
|
# some_model.jsonb_contains(a_string: "foo").first
|
19
19
|
#
|
20
|
+
# some_model.not_jsonb_contains(a_string: "bar").first
|
21
|
+
#
|
20
22
|
# See more in {file:README} docs.
|
21
23
|
module QueryScopes
|
22
24
|
extend ActiveSupport::Concern
|
@@ -29,6 +31,10 @@ module AttrJson
|
|
29
31
|
scope(:jsonb_contains, lambda do |attributes|
|
30
32
|
QueryBuilder.new(self, attributes).contains_relation
|
31
33
|
end)
|
34
|
+
|
35
|
+
scope(:not_jsonb_contains, lambda do |attributes|
|
36
|
+
QueryBuilder.new(self, attributes).contains_not_relation
|
37
|
+
end)
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
@@ -51,6 +51,8 @@ module AttrJson
|
|
51
51
|
# MyRecord.jsonb_contains(author: { name: "foo", type: "Corporation"})
|
52
52
|
# MyRecord.jsonb_contains(author: Corporation.new(name: "foo"))
|
53
53
|
#
|
54
|
+
# Additionally, there is not_jsonb_contains, which creates the same query terms like jsonb_contains, but negated.
|
55
|
+
#
|
54
56
|
class PolymorphicModel < ActiveModel::Type::Value
|
55
57
|
class TypeError < ::TypeError ; end
|
56
58
|
|
data/lib/attr_json/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -34,16 +34,16 @@ dependencies:
|
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '0'
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - "
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- gemfiles/rails_5_1.gemfile
|
152
152
|
- gemfiles/rails_5_2.gemfile
|
153
153
|
- gemfiles/rails_6_0.gemfile
|
154
|
+
- gemfiles/rails_edge.gemfile
|
154
155
|
- gemfiles/rails_edge_6.gemfile
|
155
156
|
- lib/attr_json.rb
|
156
157
|
- lib/attr_json/attribute_definition.rb
|