dipswitch 0.1.0 → 0.1.1

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: 94b8c0a76241b0407d627065ae164dc89e98c42a
4
- data.tar.gz: 061dedd58084984535636ecc8e73de3f0b04d016
3
+ metadata.gz: 3649d4f78f5379fa6eaaf54d583e980ca97e0b89
4
+ data.tar.gz: 51e3fa1d064d0eb6c4221529433c0ae32b3a620c
5
5
  SHA512:
6
- metadata.gz: ea541d75fd6938aeb325705a1ad1178e4a682ca5515c7583fc7cf0c547eaffe1322d95f62e68bebd1b586edc3c26ff89ee389d114947e9fd48c44fd5ef760053
7
- data.tar.gz: 5ef8b338f35a2531dc5790ca5a92bcc6192d3295a3dc238d74b3ef3f209a87a61592ae1adb02fdefa59d303e006c131ba21a7b2ee00f207be55448ffea4247e3
6
+ metadata.gz: 10812d0e7e04594306904e57e7ec802e90290782edb63654c405b57baf4f5fc05393a9544d9a5f3c27ca0f1f65cdeac0443f7bb26913ff008fe16ae0b6a8df9c
7
+ data.tar.gz: ff3b2bc6d9bf41f93c0aa7c1158f49dacd782c465edf0787b83cd773d89bdcd88d2c66292f10b95b09a0410569f5192ea9a9f9085904ae7fb3967eb55876bc69
data/README.md CHANGED
@@ -39,7 +39,9 @@ in an initializer for example.
39
39
  In your application code ask Dipswitch if a feature is enabled:
40
40
 
41
41
  ```ruby
42
- Dipswitch.on?(:new_ui, current_user)
42
+ if Dipswitch.on?(:new_ui, current_user)
43
+ # do stuff
44
+ end
43
45
  ```
44
46
 
45
47
  That's it.
data/dipswitch.gemspec CHANGED
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "bundler", "~> 1.13"
32
32
  spec.add_development_dependency "rake", "~> 10.0"
33
33
  spec.add_development_dependency "rspec", "~> 3.0"
34
+ spec.add_development_dependency "opal"
34
35
  end
@@ -14,6 +14,14 @@ module Dipswitch
14
14
  configuration.features.on?(name, *args)
15
15
  end
16
16
 
17
+ def self.with(name, *args, &block)
18
+ configuration.features.with(name, *args, &block)
19
+ end
20
+
21
+ def self.clear!
22
+ configuration.clear!
23
+ end
24
+
17
25
  class Configuration
18
26
  attr_reader :features
19
27
 
@@ -25,9 +33,10 @@ module Dipswitch
25
33
  @features.add(name, &block)
26
34
  end
27
35
 
28
- def freeze
29
- @features.freeze
36
+ def clear!
37
+ @features.clear!
30
38
  end
39
+
31
40
  end
32
41
 
33
42
  end
@@ -0,0 +1,30 @@
1
+ module Dipswitch
2
+
3
+ class Feature
4
+ attr_reader :name, :gate
5
+
6
+ def initialize(name, gate = nil, &block)
7
+ @name = name
8
+
9
+ if block_given?
10
+ @gate = block
11
+ else
12
+ @gate = gate
13
+ end
14
+ end
15
+
16
+ def on?(*args)
17
+ @gate.call(*args)
18
+ end
19
+
20
+ def ==(o)
21
+ o.class == self.class && o.name == name && o.gate == gate
22
+ end
23
+ alias_method :eql?, :==
24
+
25
+ def hash
26
+ "#{name}_#{gate.hash}".hash
27
+ end
28
+
29
+ end
30
+ end
@@ -1,25 +1,51 @@
1
+ require 'set'
2
+
1
3
  module Dipswitch
4
+
5
+ # A Collection of +Feature+s with some helper methods to make the overall
6
+ # determination of a feature with multiple gates is enabled or not
2
7
  class Features
8
+ include Enumerable
9
+
3
10
  def initialize
4
11
  @features = {}
5
12
  end
6
13
 
14
+ def clear!
15
+ @features = {}
16
+ end
17
+
7
18
  def add(name, &block)
8
19
  @features[name] ||= []
9
- @features[name] << block
20
+ @features[name] << Feature.new(name, block)
10
21
  end
11
22
 
12
23
  def on?(name, *args)
13
- (@features[name.to_sym] || []).any? {|feature| feature.call(*args) }
24
+ Array(@features[name.to_sym]).any? {|feature| feature.on?(*args) }
14
25
  end
15
26
 
16
- def list
17
- @features.keys
27
+ def with(name, *args, &block)
28
+ block.call if on?(name, *args)
18
29
  end
19
30
 
20
- def freeze
21
- @features.freeze
31
+ def for(*args)
32
+ to_a.reduce({}) do |acc, feature|
33
+ acc[feature.name] = true if feature.on?(*args)
34
+ acc
35
+ end
22
36
  end
37
+
38
+
39
+ def to_a
40
+ @features.values.flatten
41
+ end
42
+
43
+ def each
44
+ to_a.each do |f|
45
+ yield f
46
+ end
47
+ end
48
+
23
49
  end
24
50
 
25
51
  end
@@ -1,3 +1,3 @@
1
1
  module Dipswitch
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/dipswitch.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'dipswitch/version'
2
2
  require 'dipswitch/configuration'
3
+ require 'dipswitch/feature'
3
4
  require 'dipswitch/features'
4
5
 
5
6
  module Dipswitch
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dipswitch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - rainkinz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-08 00:00:00.000000000 Z
11
+ date: 2017-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: opal
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Super simple feature flag toggler
70
84
  email:
71
85
  - brendan.grainger@gmail.com
@@ -85,6 +99,7 @@ files:
85
99
  - dipswitch.gemspec
86
100
  - lib/dipswitch.rb
87
101
  - lib/dipswitch/configuration.rb
102
+ - lib/dipswitch/feature.rb
88
103
  - lib/dipswitch/features.rb
89
104
  - lib/dipswitch/version.rb
90
105
  homepage: http://github.com/rainkinz/dipswitch