ruby_flipper 0.0.2 → 0.0.3
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.
- data/Gemfile.lock +1 -1
- data/README.rdoc +1 -1
- data/lib/ruby_flipper/railtie.rb +18 -0
- data/lib/ruby_flipper.rb +15 -2
- data/ruby_flipper.gemspec +1 -1
- data/spec/ruby_flipper_spec.rb +67 -0
- metadata +4 -3
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -76,7 +76,7 @@ This defines a feature that is only enabled when the feature :development_featur
|
|
76
76
|
|
77
77
|
=== More
|
78
78
|
|
79
|
-
For more examples, see spec/fixtures/features.rb and spec/ruby_flipper_spec.rb (section .
|
79
|
+
For more examples, see spec/fixtures/features.rb and spec/ruby_flipper_spec.rb (section 'integration specs using spec/fixtures/features.rb' which is an end-to-end integration test).
|
80
80
|
|
81
81
|
|
82
82
|
== Condition Definitions
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'ruby_flipper'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
module RubyFlipper
|
5
|
+
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
|
8
|
+
initializer :initialize_ruby_flipper_config, :before => :load_config_initializers do
|
9
|
+
RubyFlipper.config[:feature_file] = Rails.root.join 'config/features.rb'
|
10
|
+
end
|
11
|
+
|
12
|
+
initializer :load_ruby_flipper_features, :after => :load_config_initializers do
|
13
|
+
RubyFlipper.load
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/lib/ruby_flipper.rb
CHANGED
@@ -8,12 +8,25 @@ module RubyFlipper
|
|
8
8
|
autoload :Dsl, 'ruby_flipper/dsl'
|
9
9
|
autoload :Feature, 'ruby_flipper/feature'
|
10
10
|
|
11
|
-
def self.
|
12
|
-
|
11
|
+
def self.config
|
12
|
+
@@config ||= {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.config=(config)
|
16
|
+
@@config = config
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.load(file = nil)
|
20
|
+
file ||= config[:feature_file]
|
21
|
+
raise ArgumentError, 'you have to either specify or configure a feature definition file in RubyFlipper::config[:feature_file]' if file.nil?
|
22
|
+
Dsl.new.instance_eval(IO.read file) if File.exist?(file)
|
13
23
|
end
|
14
24
|
|
15
25
|
def self.reset
|
26
|
+
@@config = nil
|
16
27
|
Feature.reset
|
17
28
|
end
|
18
29
|
|
19
30
|
end
|
31
|
+
|
32
|
+
require 'ruby_flipper/railtie' if defined?(Rails)
|
data/ruby_flipper.gemspec
CHANGED
data/spec/ruby_flipper_spec.rb
CHANGED
@@ -2,8 +2,75 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe RubyFlipper do
|
4
4
|
|
5
|
+
describe '.config' do
|
6
|
+
|
7
|
+
it 'should initially be an empty hash' do
|
8
|
+
RubyFlipper.config.should == {}
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should be changeable' do
|
12
|
+
RubyFlipper.config[:key] = :value
|
13
|
+
RubyFlipper.config.should == {:key => :value}
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should be overwritable' do
|
17
|
+
RubyFlipper.config[:key] = :value
|
18
|
+
RubyFlipper.config = {:another_key => :another_value}
|
19
|
+
RubyFlipper.config.should == {:another_key => :another_value}
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
5
24
|
describe '.load' do
|
6
25
|
|
26
|
+
it 'should load the given file' do
|
27
|
+
File.expects(:exist?).with('features.rb').returns(true)
|
28
|
+
IO.expects(:read).with('features.rb').returns('feature :loaded_feature')
|
29
|
+
RubyFlipper.load('features.rb')
|
30
|
+
RubyFlipper::Feature.find(:loaded_feature).should be_a(RubyFlipper::Feature)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should load the configured file when none given' do
|
34
|
+
File.expects(:exist?).with('configured_features.rb').returns(true)
|
35
|
+
IO.expects(:read).with('configured_features.rb').returns('feature :loaded_feature_from_configured')
|
36
|
+
RubyFlipper.config[:feature_file] = 'configured_features.rb'
|
37
|
+
RubyFlipper.load
|
38
|
+
RubyFlipper::Feature.find(:loaded_feature_from_configured).should be_a(RubyFlipper::Feature)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should raise an error when a file is neither given nor configured' do
|
42
|
+
File.expects(:exist?).never
|
43
|
+
IO.expects(:read).never
|
44
|
+
lambda { RubyFlipper.load }.should raise_error ArgumentError, 'you have to either specify or configure a feature definition file in RubyFlipper::config[:feature_file]'
|
45
|
+
RubyFlipper::Feature.all.should be_empty
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should fail silently if file does not exist' do
|
49
|
+
File.expects(:exist?).with('features.rb').returns(false)
|
50
|
+
IO.expects(:read).never
|
51
|
+
RubyFlipper.load('features.rb')
|
52
|
+
RubyFlipper::Feature.all.should be_empty
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '.reset' do
|
58
|
+
|
59
|
+
it 'should clean config hash' do
|
60
|
+
RubyFlipper.config[:key] = :value
|
61
|
+
RubyFlipper.reset
|
62
|
+
RubyFlipper.config.should == {}
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should reset features' do
|
66
|
+
RubyFlipper::Feature.expects(:reset).twice # once from here and once from spec_helper
|
67
|
+
RubyFlipper.reset
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'integration specs using spec/fixtures/features.rb' do
|
73
|
+
|
7
74
|
def load_features
|
8
75
|
RubyFlipper.load(File.expand_path '../fixtures/features.rb', __FILE__)
|
9
76
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_flipper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Thomas Jachmann
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- lib/ruby_flipper/dsl.rb
|
89
89
|
- lib/ruby_flipper/feature.rb
|
90
90
|
- lib/ruby_flipper/object_mixin.rb
|
91
|
+
- lib/ruby_flipper/railtie.rb
|
91
92
|
- ruby_flipper.gemspec
|
92
93
|
- spec/fixtures/features.rb
|
93
94
|
- spec/ruby_flipper/condition_context_spec.rb
|