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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ae649be5e24261937664a2a59eefd82bca91aeb
4
- data.tar.gz: 352303d5bdb7711c09fd23f981bfa61b44dc818e
3
+ metadata.gz: 2635e0004fd2abdc928b43811878099fa64e29ae
4
+ data.tar.gz: dd51e9c57b399396d8547f8463947424bc776400
5
5
  SHA512:
6
- metadata.gz: dd5a6e8a80712b55f348f9138913ad66a66ee0ed8dff6d7477dd1342cbc1e74b9d60b9811888b9381ed577872613cdc023742c8b1d92b684920e7a22b78768e3
7
- data.tar.gz: 7965bf9098e8b13cd241017cf231ee5d4d948d8dfd9eaeef7a3cbbf611c665866e2db5a11384851906b4570ea3afc56727e7255c95c2ed515d05a28a24002322
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)
@@ -1,3 +1,3 @@
1
1
  module CompactFlags
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
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.1
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-13 00:00:00.000000000 Z
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