active_flag 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +4 -1
- data/README.md +15 -3
- data/active_flag.gemspec +1 -1
- data/gemfiles/5.2.gemfile +12 -0
- data/gemfiles/6.0.gemfile +12 -0
- data/lib/active_flag/version.rb +1 -1
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f156db5cdf6e7c81eeec5d35fe84a5bf52d3543e1a274eb120ebe5961c3a2aae
|
4
|
+
data.tar.gz: 800c0c276ea269197360587b2b091fbb4208bf1312949eba7fb41568bea6b684
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0756d76fa4f609f39858f482a3f60cc429446fa8e3781ae157554e9cb5a6eb788663d3a46a32eaf360750083f5b771fdcffdbe4bb96c8166026e1f2e03bf03f
|
7
|
+
data.tar.gz: 4a1a0a5e0ba214b08977d04aa8b1f9ab41ee2a8906f968d05da05da1e35066e7208853405493073ff61cdbcd0972abedd2f3440f4837a0ff6f398b7a0c26ab0e
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -9,6 +9,10 @@ Perfect solution to store multiple boolean values such as preferences, notificat
|
|
9
9
|
* **Single column to group multiple boolean values.** You don't need to have many separate columns. You don't even need a migration when you add a new flag item to the list.
|
10
10
|
* **Fast bitwise operations.** `WHERE languages & 3 > 0` is faster than `WHERE (english = true) OR (spanish = true) OR ...`
|
11
11
|
|
12
|
+
If you want a simple enum column, take a look at [EnumAccessor](https://github.com/kenn/enum_accessor).
|
13
|
+
|
14
|
+
If you need to work with huge bit arrays, take a look at [Bitwise](https://github.com/kenn/bitwise).
|
15
|
+
|
12
16
|
## Usage
|
13
17
|
|
14
18
|
```ruby
|
@@ -16,6 +20,8 @@ class Profile < ActiveRecord::Base
|
|
16
20
|
flag :languages, [:english, :spanish, :chinese, :french, :japanese]
|
17
21
|
end
|
18
22
|
|
23
|
+
# {:english=>1, :spanish=>2, :chinese=>4, :french=>8, :japanese=>16 }
|
24
|
+
|
19
25
|
# Instance methods
|
20
26
|
profile.languages #=> #<ActiveFlag::Value: {:english, :japanese}>
|
21
27
|
profile.languages.english? #=> true
|
@@ -30,8 +36,12 @@ profile.languages.to_a #=> [:english, :spanish]
|
|
30
36
|
profile.languages = [:spanish, :japanese] # Direct assignment that works with forms
|
31
37
|
|
32
38
|
# Class methods
|
33
|
-
Profile.where_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 > 0
|
34
39
|
Profile.languages.maps #=> {:english=>1, :spanish=>2, :chinese=>4, :french=>8, :japanese=>16 }
|
40
|
+
Profile.languages.humans #=> {:english=>"English", :spanish=>"Spanish", :chinese=>"Chinese", :french=>"French", :japanese=>"Japanese"}
|
41
|
+
Profile.languages.pairs #=> {"English"=>:english, "Spanish"=>:spanish, "Chinese"=>:chinese, "French"=>:french, "Japanese"=>:japanese}
|
42
|
+
|
43
|
+
# Scope methods
|
44
|
+
Profile.where_languages(:french, :spanish) #=> SELECT * FROM profiles WHERE languages & 10 > 0
|
35
45
|
Profile.languages.set_all!(:chinese) #=> UPDATE "profiles" SET languages = COALESCE(languages, 0) | 4
|
36
46
|
Profile.languages.unset_all!(:chinese) #=> UPDATE "profiles" SET languages = COALESCE(languages, 0) & ~4
|
37
47
|
```
|
@@ -59,7 +69,7 @@ add_column :users, :languages, :integer, null: false, default: 0, limit: 8
|
|
59
69
|
For a querying purpose, use `where_[column]` scope.
|
60
70
|
|
61
71
|
```ruby
|
62
|
-
Profile.where_languages(:french) #=> SELECT * FROM profiles WHERE languages
|
72
|
+
Profile.where_languages(:french) #=> SELECT * FROM profiles WHERE languages & 8 > 0
|
63
73
|
```
|
64
74
|
|
65
75
|
Also takes multiple values.
|
@@ -73,7 +83,7 @@ By default, it searches with `or` operation, so the query above returns profiles
|
|
73
83
|
If you want to change it to `and` operation, you can specify:
|
74
84
|
|
75
85
|
```ruby
|
76
|
-
Profile.where_languages(:french, :spanish, op: :and)
|
86
|
+
Profile.where_languages(:french, :spanish, op: :and) #=> SELECT * FROM profiles WHERE languages = 10
|
77
87
|
```
|
78
88
|
|
79
89
|
## Translation
|
@@ -110,10 +120,12 @@ Thanks to the translation support, forms just work as you would expect with the
|
|
110
120
|
|
111
121
|
```ruby
|
112
122
|
# With FormBuilder
|
123
|
+
|
113
124
|
= form_for(@profile) do |f|
|
114
125
|
= f.collection_check_boxes :languages, Profile.languages.pairs
|
115
126
|
|
116
127
|
# With SimpleForm
|
128
|
+
|
117
129
|
= simple_form_for(@profile) do |f|
|
118
130
|
= f.input :languages, as: :check_boxes, collection: Profile.languages.pairs
|
119
131
|
```
|
data/active_flag.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_runtime_dependency 'activerecord', '
|
22
|
+
spec.add_runtime_dependency 'activerecord', '>= 5'
|
23
23
|
spec.add_development_dependency 'bundler'
|
24
24
|
spec.add_development_dependency 'rake'
|
25
25
|
spec.add_development_dependency 'minitest'
|
data/lib/active_flag/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_flag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.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:
|
11
|
+
date: 2019-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,6 +95,8 @@ files:
|
|
95
95
|
- active_flag.gemspec
|
96
96
|
- bin/console
|
97
97
|
- bin/setup
|
98
|
+
- gemfiles/5.2.gemfile
|
99
|
+
- gemfiles/6.0.gemfile
|
98
100
|
- lib/active_flag.rb
|
99
101
|
- lib/active_flag/definition.rb
|
100
102
|
- lib/active_flag/railtie.rb
|
@@ -118,8 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
120
|
- !ruby/object:Gem::Version
|
119
121
|
version: '0'
|
120
122
|
requirements: []
|
121
|
-
|
122
|
-
rubygems_version: 2.6.14
|
123
|
+
rubygems_version: 3.0.1
|
123
124
|
signing_key:
|
124
125
|
specification_version: 4
|
125
126
|
summary: Bit array for ActiveRecord
|