feature_definitions 0.3.2 → 0.4.0

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/README.rdoc CHANGED
@@ -5,15 +5,22 @@
5
5
  A minimal useful feature toggle mechanism.
6
6
 
7
7
  Thanks to Travis-CI, tested on:
8
- - "1.8.7"
8
+ - "1.8.7" ***
9
9
  - "1.9.2"
10
10
  - "1.9.3"
11
11
  - "2.0.0"
12
- - jruby-18mode # JRuby in 1.8 mode
12
+ - jruby-18mode # JRuby in 1.8 mode ***
13
13
  - jruby-19mode # JRuby in 1.9 mode
14
- - rbx-18mode
14
+ - rbx-18mode ***
15
15
  - rbx-19mode
16
16
 
17
+ ==== Note on 1.8
18
+
19
+ I've given up trying to find a cross version way of using instance_eval/exec
20
+ to give a nicer syntax to feature evaluation blocks, but it's just not
21
+ working out. If you're using 1.8, you're block will just have to take the
22
+ context as an argument.
23
+
17
24
  == Installation
18
25
 
19
26
  gem 'feature_definitions'
@@ -24,6 +31,8 @@ Thanks to Travis-CI, tested on:
24
31
  lib/features.rb:
25
32
  class Features < FeatureDefinitions
26
33
  AWESOME = self.new {|flags| flags.is_awesome? }
34
+ # > 1.8 only, evaluated in context of Features.context
35
+ AWESOME = self.new { is_awesome? }
27
36
  end
28
37
 
29
38
  app/main.rb:
@@ -51,6 +60,10 @@ app/model/features.rb:
51
60
  define_feature :AWESOME do |user|
52
61
  user.is_awesome?
53
62
  end
63
+ # > 1.8 only, evaluated in context of Features.context
64
+ define_feature :AWESOMER do
65
+ is_awesome?
66
+ end
54
67
  end
55
68
 
56
69
  app/controller/application_controller.rb:
@@ -65,7 +78,7 @@ app/views/some/view.erb.html:
65
78
  <% Features.AWESOME.enabled? do %>
66
79
  You have awesome blocks enabled!
67
80
  <% end %>
68
- <% Features.AWESOME do %>
81
+ <% Features.AWESOMER do %>
69
82
  Declarative feature blocks!
70
83
  <% end %>
71
84
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "feature_definitions"
8
- s.version = "0.3.2"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ryan Graham"]
12
- s.date = "2013-04-09"
12
+ s.date = "2013-04-12"
13
13
  s.description = "Simple and flexible feature toggle defintion"
14
14
  s.email = "r.m.graham@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -12,13 +12,13 @@ class FeatureDefinitions
12
12
  end
13
13
  end
14
14
 
15
- PASSTHROUGH = Proc.new { |arg| arg }
15
+ IDENTITY = Proc.new { |arg| arg }
16
16
 
17
17
  def initialize(&block)
18
18
  if block_given?
19
19
  @test_proc = block.to_proc
20
20
  else
21
- @test_proc = PASSTHROUGH
21
+ @test_proc = IDENTITY
22
22
  end
23
23
  end
24
24
 
@@ -31,10 +31,18 @@ class FeatureDefinitions
31
31
  end
32
32
 
33
33
  def enabled?(&block)
34
- test_proc.call(context).tap do |verdict|
34
+ eval_test_proc.tap do |verdict|
35
35
  if verdict and block_given?
36
36
  yield
37
37
  end
38
38
  end
39
39
  end
40
+
41
+ def eval_test_proc
42
+ if test_proc.arity == 0
43
+ context.instance_exec(&test_proc)
44
+ else
45
+ test_proc.call(context)
46
+ end
47
+ end
40
48
  end
@@ -89,6 +89,33 @@ class TestFeatureDefaultBlock < MiniTest::Unit::TestCase
89
89
  end
90
90
  end
91
91
 
92
+ # 1.8 instance_eval makes me sad :-(
93
+ if RUBY_VERSION.to_i > 1 or RUBY_VERSION.split('.')[1].to_i > 8
94
+ class TestFeatureEvalBlock < MiniTest::Unit::TestCase
95
+ def setup
96
+ @feature_class = Class.new(FeatureDefinitions) do
97
+ define_feature :AWESOME do
98
+ some_instance_method
99
+ end
100
+ end
101
+ end
102
+ def test_feature_enabled
103
+ @feature_class.context = OpenStruct.new(:some_instance_method => true)
104
+ assert @feature_class.AWESOME.enabled?
105
+ end
106
+ def test_feature_disabled
107
+ @feature_class.context = OpenStruct.new(:some_instance_method => false)
108
+ refute @feature_class.AWESOME.enabled?
109
+ end
110
+ def test_feature_toggling
111
+ @feature_class.context = OpenStruct.new(:some_instance_method => true)
112
+ assert @feature_class.AWESOME.enabled?
113
+ @feature_class.context = OpenStruct.new(:some_instance_method => false)
114
+ refute @feature_class.AWESOME.enabled?
115
+ end
116
+ end
117
+ end
118
+
92
119
  class TestDeclarativeFeatures < MiniTest::Unit::TestCase
93
120
  def setup
94
121
  @feature_class = Class.new(FeatureDefinitions) do
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: feature_definitions
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.2
5
+ version: 0.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ryan Graham
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-09 00:00:00.000000000 Z
12
+ date: 2013-04-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  version_requirements: !ruby/object:Gem::Requirement
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  - !ruby/object:Gem::Version
126
126
  segments:
127
127
  - 0
128
- hash: 4576073114140406011
128
+ hash: -230299105052606753
129
129
  version: '0'
130
130
  required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  none: false