compact_flags 1.0.1 → 1.0.2
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 +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
|