Class: Flag::Members
- Inherits:
-
Struct
- Object
- Struct
- Flag::Members
- Defined in:
- lib/flag.rb
Constant Summary collapse
- USERS =
"users".freeze
- GROUPS =
"groups".freeze
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
- #<<(item) ⇒ Object
- #activated ⇒ Object
- #groups ⇒ Object
- #include?(item) ⇒ Boolean
- #key ⇒ Object
- #percentage ⇒ Object
- #reset ⇒ Object
- #users ⇒ Object
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name
9 10 11 |
# File 'lib/flag.rb', line 9 def name @name end |
Instance Method Details
#<<(item) ⇒ Object
13 14 15 16 17 18 19 20 21 |
# File 'lib/flag.rb', line 13 def <<(item) Flag.execute do |store| if item.to_s.end_with?("%") store.call("HSET", Flag::FEATURES, name, item[0...-1]) else store.call("SADD", subkey(item), item) end end end |
#activated ⇒ Object
27 28 29 |
# File 'lib/flag.rb', line 27 def activated { percentage: percentage, users: users, groups: groups } end |
#groups ⇒ Object
31 32 33 |
# File 'lib/flag.rb', line 31 def groups members_for(GROUPS).map(&:to_sym) end |
#include?(item) ⇒ Boolean
39 40 41 42 43 44 45 46 |
# File 'lib/flag.rb', line 39 def include?(item) return percentage == item.to_i if item.to_s.end_with?("%") return true if Zlib.crc32(item.to_s) % 100 < percentage Flag.execute do |store| store.call("SISMEMBER", subkey(item), item).to_i == 1 end end |
#key ⇒ Object
23 24 25 |
# File 'lib/flag.rb', line 23 def key "#{Flag::FEATURES}:#{name}" end |
#percentage ⇒ Object
54 55 56 |
# File 'lib/flag.rb', line 54 def percentage Flag.execute { |store| store.call("HGET", Flag::FEATURES, name).to_i } end |
#reset ⇒ Object
48 49 50 51 52 |
# File 'lib/flag.rb', line 48 def reset [USERS, GROUPS].each do |k| Flag.execute { |store| store.call("DEL", "#{key}:#{k}") } end end |
#users ⇒ Object
35 36 37 |
# File 'lib/flag.rb', line 35 def users members_for(USERS) end |