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 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