compact_flags 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -1
- data/lib/compact_flags/version.rb +1 -1
- data/lib/compact_flags.rb +22 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2635e0004fd2abdc928b43811878099fa64e29ae
|
4
|
+
data.tar.gz: dd51e9c57b399396d8547f8463947424bc776400
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ac36b435baaece3c5b468ac1136642181d0aabf67ebfa643ccf8ee790b6e4dd363fbd5f625043a3612f912dc115ea9e6de3aed60f988058e7468b6603c2eeee
|
7
|
+
data.tar.gz: 87bb8386e371312979aa2d2b824947a7c9fd6b828627cd11561410ee149b969a86371b128f19e2a55b75ccfc4e42315fee160ee1442f9a543574ad4b67914ead
|
data/README.md
CHANGED
@@ -68,7 +68,7 @@ scopes gives a suitable flexibility because they can be used in a cascaded style
|
|
68
68
|
User.not_moderators.admins
|
69
69
|
```
|
70
70
|
|
71
|
-
Other methods are also available to return the relevant condition part as a string, for concatenation with a condition string. those comes with the in the form of _where_ and _where_not_
|
71
|
+
Other methods are also available to return the relevant condition part as a string, for concatenation with a condition string. those comes with the in the form of _where_ and _where_not_, Also available methods to send "OR" in the where clause
|
72
72
|
|
73
73
|
```ruby
|
74
74
|
User.admin_value # => returns associated value to admin => 1
|
@@ -78,6 +78,15 @@ Other methods are also available to return the relevant condition part as a stri
|
|
78
78
|
User.where_not_moderator # => "(roles & 2) = 0"
|
79
79
|
```
|
80
80
|
|
81
|
+
```ruby
|
82
|
+
User.roles_or([:admin, :editor]) # => returns SELECT "users".* FROM "users" WHERE (((roles & 1) > 0) or ((roles & 4) > 0))
|
83
|
+
User.roles_or([:admin, :editor], "users.roles") # => returns SELECT "users".* FROM "users" WHERE (((users.roles & 1) > 0) or ((users.roles & 4) > 0))
|
84
|
+
```
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
User.roles_values # => returns ["Admin", "Editor"]
|
88
|
+
```
|
89
|
+
|
81
90
|
## Contributions
|
82
91
|
|
83
92
|
* Mahmoud Said aka modsaid (mahmoud@modsaid.com)
|
data/lib/compact_flags.rb
CHANGED
@@ -41,23 +41,43 @@ module CompactFlags
|
|
41
41
|
self.send(store_column) & (MAX_FLAGS_MAPPING ^ @@flags[flag]) ))
|
42
42
|
end
|
43
43
|
|
44
|
+
define_method "#{store_column}_values" do
|
45
|
+
vals = []
|
46
|
+
flags.each do |flag|
|
47
|
+
vals << flag.to_s.titleize if self.send(flag)
|
48
|
+
end
|
49
|
+
return vals
|
50
|
+
end
|
51
|
+
|
44
52
|
# named scopes to be used in conditions
|
45
53
|
scope "#{flag}".pluralize.to_sym, -> {where("(#{@@store_columns[flag]} & #{@@flags[flag]}) > 0")}
|
46
54
|
scope "not_#{flag}".pluralize.to_sym, -> {where("(#{@@store_columns[flag]} & #{@@flags[flag]}) = 0")}
|
47
55
|
end
|
48
56
|
|
49
57
|
class << self
|
58
|
+
@@store_columns.values.uniq.each do |store_column|
|
59
|
+
define_method "#{store_column}_or" do |flags, column_name=store_column|
|
60
|
+
raise "Expected array of flags" unless flags.is_a? Array
|
61
|
+
raise "Expected array of flags, Minimum 2 flags" if flags.count < 2
|
62
|
+
where_query = []
|
63
|
+
flags.each do |flag|
|
64
|
+
where_query << self.send("where_#{flag}")
|
65
|
+
end
|
66
|
+
return self.where(where_query.join(' or '))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
50
70
|
@@flags.each do |key, value|
|
51
71
|
define_method "#{key}_value" do
|
52
72
|
return value
|
53
73
|
end
|
54
74
|
|
55
75
|
define_method "where_#{key}" do
|
56
|
-
return "(#{@@store_columns[key]} & #{@@flags[key]}) > 0"
|
76
|
+
return "((#{@@store_columns[key]} & #{@@flags[key]}) > 0)"
|
57
77
|
end
|
58
78
|
|
59
79
|
define_method "where_not_#{key}" do
|
60
|
-
return "(#{@@store_columns[key]} & #{@@flags[key]}) = 0"
|
80
|
+
return "((#{@@store_columns[key]} & #{@@flags[key]}) = 0)"
|
61
81
|
end
|
62
82
|
end
|
63
83
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compact_flags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dr-Click
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-03-
|
12
|
+
date: 2017-03-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ruby Gem to store many boolean flags in an integer column by utilizing
|
15
15
|
bits, CompactFlags comes to serve models with several boolean flags. in large data
|