active_flag 1.5.2 → 1.6.0
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 +4 -4
- data/README.md +20 -4
- data/lib/active_flag/version.rb +1 -1
- data/lib/active_flag.rb +25 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2410c1b0af6f52df6e74bbbb1dee7f4aa445d7914ec9f63caffc843a4f8453a0
|
4
|
+
data.tar.gz: b4877beab21724bf362fe26fdeb3e3d7d9de532170a46acf638dcad36df15d09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84efcd90ecdc82c0e93074902a8bee8f88fb114035a1680808b1f53840e8224388d372872aa3d3d392ad4c36bd0bc5301d48eba21adb5a275b869c5b90d3098f
|
7
|
+
data.tar.gz: 721d7dec4c58f396427bb50dfa4c577bf9aa23bfb871c27f4da8b1d20a9d1aa026e2ec163bdf58927548a4c28ff8f389008fb639d58f8b23f3d3c38c7fb68004
|
data/README.md
CHANGED
@@ -43,6 +43,9 @@ Profile.languages.to_array(3) #=> [:english, :spanish]
|
|
43
43
|
|
44
44
|
# Scope methods
|
45
45
|
Profile.where_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 > 0
|
46
|
+
Profile.where_all_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 = 10
|
47
|
+
Profile.where_not_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 = 0
|
48
|
+
Profile.where_not_all_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 < 10
|
46
49
|
Profile.languages.set_all!(:chinese) #=> UPDATE "profiles" SET languages = COALESCE(languages, 0) | 4
|
47
50
|
Profile.languages.unset_all!(:chinese) #=> UPDATE "profiles" SET languages = COALESCE(languages, 0) & ~4
|
48
51
|
```
|
@@ -67,7 +70,8 @@ add_column :users, :languages, :integer, null: false, default: 0, limit: 8
|
|
67
70
|
|
68
71
|
## Query
|
69
72
|
|
70
|
-
For a querying purpose, use `where_[column]`
|
73
|
+
For a querying purpose, use `where_[column]`, `where_all_[column]`,
|
74
|
+
`where_not_[column]` and `where_not_all_[column]` scopes.
|
71
75
|
|
72
76
|
```ruby
|
73
77
|
Profile.where_languages(:french) #=> SELECT * FROM profiles WHERE languages & 8 > 0
|
@@ -79,12 +83,24 @@ Also takes multiple values.
|
|
79
83
|
Profile.where_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 > 0
|
80
84
|
```
|
81
85
|
|
82
|
-
By default, it
|
86
|
+
By default, it returns profiles that have either French or Spanish.
|
83
87
|
|
84
|
-
|
88
|
+
To get profiles that have both French and Spanish, use:
|
85
89
|
|
86
90
|
```ruby
|
87
|
-
Profile.
|
91
|
+
Profile.where_all_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 = 10
|
92
|
+
```
|
93
|
+
|
94
|
+
To get profiles that do not have either French or Spanish, use:
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
Profile.where_not_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 = 0
|
98
|
+
```
|
99
|
+
|
100
|
+
To get profiles that do not have both French and Spanish, use:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
Profile.where_not_all_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 < 10
|
88
104
|
```
|
89
105
|
|
90
106
|
## Translation
|
data/lib/active_flag/version.rb
CHANGED
data/lib/active_flag.rb
CHANGED
@@ -35,15 +35,37 @@ module ActiveFlag
|
|
35
35
|
|
36
36
|
# Scopes
|
37
37
|
define_singleton_method "where_#{column}" do |*args|
|
38
|
-
options = args
|
39
|
-
integer = active_flags[column].to_i(args)
|
40
|
-
column_name = connection.quote_table_name_for_assignment(table_name, column)
|
38
|
+
options, integer, column_name = send "_where_#{column}", *args
|
41
39
|
if options[:op] == :and
|
40
|
+
ActiveSupport::Deprecation.warn('op: :and is deprecated, use where_all instead')
|
42
41
|
where("#{column_name} & #{integer} = #{integer}")
|
43
42
|
else
|
44
43
|
where("#{column_name} & #{integer} > 0")
|
45
44
|
end
|
46
45
|
end
|
46
|
+
|
47
|
+
define_singleton_method "where_all_#{column}" do |*args|
|
48
|
+
_options, integer, column_name = send "_where_#{column}", *args
|
49
|
+
where("#{column_name} & #{integer} = #{integer}")
|
50
|
+
end
|
51
|
+
|
52
|
+
define_singleton_method "where_not_#{column}" do |*args|
|
53
|
+
_options, integer, column_name = send "_where_#{column}", *args
|
54
|
+
where("#{column_name} & #{integer} = 0")
|
55
|
+
end
|
56
|
+
|
57
|
+
define_singleton_method "where_not_all_#{column}" do |*args|
|
58
|
+
_options, integer, column_name = send "_where_#{column}", *args
|
59
|
+
where("#{column_name} & #{integer} < #{integer}")
|
60
|
+
end
|
61
|
+
|
62
|
+
define_singleton_method "_where_#{column}" do |*args|
|
63
|
+
return [
|
64
|
+
args.extract_options!,
|
65
|
+
active_flags[column].to_i(args),
|
66
|
+
connection.quote_table_name_for_assignment(table_name, column)
|
67
|
+
]
|
68
|
+
end
|
47
69
|
end
|
48
70
|
end
|
49
71
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_flag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenn Ejima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|