green_flag 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.hound.yml +4 -0
  4. data/.rubocop.yml +1260 -0
  5. data/CONTRIBUTING.md +28 -0
  6. data/app/assets/javascripts/green_flag/admin/feature-deletion.js +3 -0
  7. data/app/assets/javascripts/green_flag/admin/features.js +1 -1
  8. data/app/assets/stylesheets/green_flag/admin/features.css.scss +5 -1
  9. data/app/controllers/green_flag/admin/features_controller.rb +22 -2
  10. data/app/helpers/green_flag/application_helper.rb +1 -0
  11. data/app/models/green_flag/feature.rb +13 -1
  12. data/app/views/green_flag/admin/features/_delete_flag_button.html.erb +18 -0
  13. data/app/views/green_flag/admin/features/index.html.erb +5 -0
  14. data/app/views/green_flag/admin/features/show.html.erb +4 -2
  15. data/green_flag.gemspec +1 -1
  16. data/lib/green_flag/version.rb +1 -1
  17. data/spec/controllers/admin/features_controller_spec.rb +51 -2
  18. data/spec/dummy/log/development.log +54000 -7025
  19. data/spec/dummy/log/test.log +37566 -31044
  20. data/spec/dummy/tmp/cache/assets/{D68/760/sprockets%2Fea24808c41a3dff75b995b0f090e1a6a → C4A/640/sprockets%2F8a0527fb4c2402950e34518216e856b5} +0 -0
  21. data/spec/dummy/tmp/cache/assets/C6A/420/sprockets%2F10f5bf24a82184a4790391b0321bd318 +0 -0
  22. data/spec/dummy/tmp/cache/assets/CB2/480/sprockets%2Fdffc90cb8265f2042063557905188b1f +0 -0
  23. data/spec/dummy/tmp/cache/assets/CB9/C30/sprockets%2F8c5e58364159f49f2242f171653cadf1 +0 -0
  24. data/spec/dummy/tmp/cache/assets/CEA/0F0/sprockets%2F7d5273f602c66c790a79a75c088ff01d +0 -0
  25. data/spec/dummy/tmp/cache/assets/{C89/D60/sprockets%2F73cd073739a0655341b7278fae57518f → D05/9B0/sprockets%2Fa5b09f162635302e890302aed86bbd6e} +0 -0
  26. data/spec/dummy/tmp/cache/assets/D1A/760/sprockets%2Fc2f1fda4977960d755da14289d49b51b +0 -0
  27. data/spec/dummy/tmp/cache/assets/D34/660/sprockets%2Fcfd906f8a0a2386735d1dcf52cc40403 +0 -0
  28. data/spec/dummy/tmp/cache/assets/{E34/D30/sprockets%2F99c2d0bbd78f1b867beeb3a2eefda618 → D3E/110/sprockets%2Fcb870c7f25e6162da93a720e1be65c76} +0 -0
  29. data/spec/dummy/tmp/cache/assets/D3E/340/sprockets%2Fad85a878e73a3075722c09b0bdc17cd8 +0 -0
  30. data/spec/dummy/tmp/cache/assets/{E07/200/sprockets%2F82a8ce7f5bcfb07f773df4cbfeb04762 → D3E/E90/sprockets%2F07bfdbaf75a7c43c05315078db879c43} +0 -0
  31. data/spec/dummy/tmp/cache/assets/{CE7/FF0/sprockets%2Fe45f3a7675a8c5a5b064117792bf5e28 → D40/260/sprockets%2F35049c3c82baf75b9adfc9662c05e172} +0 -0
  32. data/spec/dummy/tmp/cache/assets/D62/040/sprockets%2F388ca040babbebd910f7338b606736bd +0 -0
  33. data/spec/dummy/tmp/cache/assets/D6F/650/sprockets%2F9710be3c17f826e702a9ccea335cdf83 +0 -0
  34. data/spec/dummy/tmp/cache/assets/{D07/670/sprockets%2F761d03a66b753d628feccd12072c814c → D82/990/sprockets%2F708fb789dee8ecdf5a4a39b9216c1295} +0 -0
  35. data/spec/dummy/tmp/cache/assets/D8D/1D0/sprockets%2F0e45f412d3a303eda9d7d10d8fc3a5d3 +0 -0
  36. data/spec/dummy/tmp/cache/assets/D9D/660/sprockets%2Fd306fa5f1db77c33117fbf27276b3ffd +0 -0
  37. data/spec/dummy/tmp/cache/assets/{DB2/0C0/sprockets%2F95cf35cd3e97774df3c41ee0ef564a8d → DF4/060/sprockets%2F3a6c5e41f435db6af7fb91fa0da49bb1} +0 -0
  38. data/spec/dummy/tmp/cache/assets/{D13/270/sprockets%2F701a30cd450ae3cfa114092bafc16004 → DF8/280/sprockets%2Fa245a66abbfe76d9de5aa5a40c557f0e} +0 -0
  39. data/spec/dummy/tmp/cache/assets/DFC/AB0/sprockets%2Fcbca52f6723bcc63ade1b269e299a7bf +0 -0
  40. data/spec/dummy/tmp/cache/assets/{D6A/580/sprockets%2F18c12847aa1bb46ce9b5661f0e9e5fb0 → E0D/870/sprockets%2Fc21ca057d9f87e8cb797dbe5b8fe3bd2} +0 -0
  41. data/spec/dummy/tmp/pids/server.pid +1 -0
  42. data/spec/factories/green_flag/feature_decision.rb +5 -0
  43. data/spec/factories/green_flag/feature_event.rb +6 -0
  44. data/spec/factories/green_flag/rule.rb +2 -2
  45. data/spec/models/green_flag/feature_spec.rb +166 -108
  46. metadata +60 -60
  47. data/Gemfile.lock +0 -143
  48. data/spec/dummy/tmp/cache/assets/C47/3D0/sprockets%2F8f17c33229239b023190617bf2e915a3 +0 -0
  49. data/spec/dummy/tmp/cache/assets/C81/770/sprockets%2Fdbcf34796b062155788f0b550808541a +0 -0
  50. data/spec/dummy/tmp/cache/assets/CB6/8F0/sprockets%2F5ea0f1f2583683678e122a9a9391a80f +0 -0
  51. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  52. data/spec/dummy/tmp/cache/assets/D10/860/sprockets%2F4582878dbb5b72bfa76615d31b34ed51 +0 -0
  53. data/spec/dummy/tmp/cache/assets/D15/C10/sprockets%2F6f42f843c916d7864a0dfa912fb3194a +0 -0
  54. data/spec/dummy/tmp/cache/assets/D18/860/sprockets%2Fce00769800ae939cebb28501947ea96f +0 -0
  55. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  56. data/spec/dummy/tmp/cache/assets/D4A/970/sprockets%2F2a7d3b403cbdd8b59d57d26964ea5768 +0 -0
  57. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  58. data/spec/dummy/tmp/cache/assets/D59/090/sprockets%2F88788ba6a64e6279624e5c2ff7eead53 +0 -0
  59. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  60. data/spec/dummy/tmp/cache/assets/D5C/330/sprockets%2Fd1b1c9a53f4a8a5827e5b02bf0e100e8 +0 -0
  61. data/spec/dummy/tmp/cache/assets/DA1/210/sprockets%2F25a2979e392c8bc3adce7075cf19ab4b +0 -0
  62. data/spec/dummy/tmp/cache/assets/DA9/2C0/sprockets%2Ff95d82b2bbb6db8ffe1a87f67b415291 +0 -0
  63. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  64. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
@@ -0,0 +1 @@
1
+ 5073
@@ -0,0 +1,5 @@
1
+ FactoryGirl.define do
2
+ factory :green_flag_feature_decision, class: GreenFlag::FeatureDecision do
3
+ sequence(:site_visitor_id) { |n| 1 + n }
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :green_flag_feature_event, class: GreenFlag::FeatureEvent do
3
+ event_type_code "test_event"
4
+ count 1
5
+ end
6
+ end
@@ -1,8 +1,8 @@
1
1
  FactoryGirl.define do
2
2
  factory :green_flag_rule, class: GreenFlag::Rule do
3
- group_key 'Factory Test Group'
3
+ sequence(:group_key) { |n| "Factory Test Group #{n}" }
4
+ sequence(:order_by) { |n| 1 + n }
4
5
  feature_id 1
5
- order_by 1
6
6
  percentage 100
7
7
  version_number 1
8
8
  end
@@ -1,135 +1,193 @@
1
- require 'spec_helper'
2
- describe GreenFlag::Feature do
3
- describe '.for_code!' do
4
- subject { GreenFlag::Feature.for_code!('foo') }
5
-
6
- it 'when feature does not exist, creates a feature' do
7
- expect{ subject }.to change { GreenFlag::Feature.count }.by(1)
1
+ require "spec_helper"
2
+
3
+ describe GreenFlag::Feature do
4
+ describe ".for_code!" do
5
+ subject { GreenFlag::Feature.for_code!("foo") }
6
+
7
+ it "when feature does not exist, creates a feature" do
8
+ expect { subject }.to change { GreenFlag::Feature.count }.by(1)
9
+ end
10
+ it "when feature does exists, does not create a feature" do
11
+ FactoryGirl.create(:green_flag_feature, code: "foo")
12
+ expect { subject }.to_not change { GreenFlag::Feature.count }
13
+ end
14
+ end
15
+
16
+ describe "#decide_if_enabled_for_visitor" do
17
+ let(:feature) { GreenFlag::Feature.create(code: "big_font") }
18
+ let(:site_visitor_id) { 1 }
19
+
20
+ let(:non_applying_rule) { double(id: 1, applies_to?: false, decision?: true) }
21
+ let(:true_rule) { double(id: 2, applies_to?: true, decision?: true) }
22
+ let(:false_rule) { double(id: 3, applies_to?: true, decision?: false) }
23
+
24
+ context "there are no rules" do
25
+ it "returns a feature decision with the correct attributes" do
26
+ feature_decision = feature.decide_if_enabled_for_visitor(site_visitor_id)
27
+
28
+ expect(feature_decision.rule_id).to be_nil
29
+ expect(feature_decision.enabled).to be_nil
8
30
  end
9
- it 'when feature does exists, does not create a feature' do
10
- FactoryGirl.create(:green_flag_feature, code: 'foo')
11
- expect{ subject }.to_not change { GreenFlag::Feature.count }
31
+ end
32
+
33
+ context "the first applying rule is true" do
34
+ it "returns a feature decision with the correct attributes" do
35
+ feature.stub(rules: [non_applying_rule, true_rule])
36
+
37
+ feature_decision = feature.decide_if_enabled_for_visitor(site_visitor_id)
38
+
39
+ expect(feature_decision.rule_id).to eq true_rule.id
40
+ expect(feature_decision.enabled).to eq true
12
41
  end
13
42
  end
14
43
 
15
- describe '#decide_if_enabled_for_visitor' do
16
- let(:feature) { GreenFlag::Feature.create(code: 'big_font') }
17
- let(:site_visitor_id) { 1 }
44
+ context "the first applying rule is false" do
45
+ it "returns a feature decision with the correct attributes" do
46
+ feature.stub(rules: [false_rule, true_rule])
18
47
 
19
- let(:non_applying_rule) { double(id: 1, applies_to?: false, decision?: true) }
20
- let(:true_rule) { double(id: 2, applies_to?: true, decision?: true) }
21
- let(:false_rule) { double(id: 3, applies_to?: true, decision?: false) }
48
+ feature_decision = feature.decide_if_enabled_for_visitor(site_visitor_id)
22
49
 
23
- context 'there are no rules' do
24
- it 'returns a feature decision with the correct attributes' do
25
- feature_decision = feature.decide_if_enabled_for_visitor(site_visitor_id)
50
+ expect(feature_decision.rule_id).to eq false_rule.id
51
+ expect(feature_decision.enabled).to eq false
52
+ end
53
+ end
54
+ end
26
55
 
27
- expect(feature_decision.rule_id).to be_nil
28
- expect(feature_decision.enabled).to be_nil
29
- end
56
+ describe "#forget_non_manual_decisions!" do
57
+ let(:feature) { GreenFlag::Feature.create(code: "big_font") }
58
+ let(:enabled) { true }
59
+
60
+ context "when there are no decisions" do
61
+ subject { feature.forget_non_manual_decisions!(enabled) }
62
+
63
+ it "should not attempt to delete non-manual decisions" do
64
+ expect(GreenFlag::FeatureDecision.non_manual).to receive(:delete_all).never
30
65
  end
31
66
 
32
- context 'the first applying rule is true' do
33
- it 'returns a feature decision with the correct attributes' do
34
- feature.stub(rules: [non_applying_rule, true_rule])
67
+ it "should not create a feature event" do
68
+ expect(GreenFlag::FeatureEvent.count).to eq 0
69
+ end
70
+ end
35
71
 
36
- feature_decision = feature.decide_if_enabled_for_visitor(site_visitor_id)
72
+ context "when there are manual decisions" do
73
+ subject { feature.forget_non_manual_decisions!(enabled) }
37
74
 
38
- expect(feature_decision.rule_id).to eq true_rule.id
39
- expect(feature_decision.enabled).to eq true
40
- end
75
+ before(:each) do
76
+ @manual_fd = GreenFlag::FeatureDecision.create!(feature_id: feature.id, manual: true,
77
+ site_visitor_id: 1)
41
78
  end
42
79
 
43
- context 'the first applying rule is false' do
44
- it 'returns a feature decision with the correct attributes' do
45
- feature.stub(rules: [false_rule, true_rule])
80
+ it "should not delete the manual decisions" do
81
+ expect(GreenFlag::FeatureDecision.find_by_id(@manual_fd.id)).to be_present
82
+ end
46
83
 
47
- feature_decision = feature.decide_if_enabled_for_visitor(site_visitor_id)
84
+ it "should not create a feature event" do
85
+ expect(GreenFlag::FeatureEvent.count).to eq 0
86
+ end
87
+ end
48
88
 
49
- expect(feature_decision.rule_id).to eq false_rule.id
50
- expect(feature_decision.enabled).to eq false
51
- end
89
+ context "when there are automatic decisions" do
90
+ before(:each) do
91
+ @feature2 = GreenFlag::Feature.create!(code: "huge_banner_ad")
92
+ @auto_fd = GreenFlag::FeatureDecision.create!(feature_id: @feature2.id, manual: false,
93
+ enabled: true, site_visitor_id: 1)
94
+
95
+ @feature2.forget_non_manual_decisions!(enabled)
96
+ end
97
+
98
+ it "should delete the automatic decisions" do
99
+ @feature2.forget_non_manual_decisions!(enabled)
100
+ expect(GreenFlag::FeatureDecision.find_by_id(@auto_fd)).to be_nil
101
+ end
102
+
103
+ it "should create a feature event with the correct attributes" do
104
+ feature_event = GreenFlag::FeatureEvent.last
105
+ expect(feature_event).to be_present
106
+ expect(feature_event.feature_id).to eq @feature2.id
107
+ expect(feature_event.event_type_code).to eq \
108
+ GreenFlag::FeatureEvent::ENABLED_DECISIONS_FORGOTTEN
109
+ expect(feature_event.count).to eq 1
52
110
  end
53
111
  end
112
+ end
113
+
114
+ describe "#latest_version" do
115
+ let(:feature) { FactoryGirl.create(:green_flag_feature, version_number: 1) }
54
116
 
55
- describe '#forget_non_manual_decisions!' do
56
- let(:feature) { GreenFlag::Feature.create(code: 'big_font') }
57
- let(:enabled) { true }
117
+ subject { feature.latest_version }
58
118
 
59
- context 'when there are no decisions' do
60
- subject { feature.forget_non_manual_decisions!(enabled) }
119
+ context "when there are rules" do
120
+ before(:each) do
121
+ @latest_version_number = 15
61
122
 
62
- it 'should not attempt to delete non-manual decisions' do
63
- expect(GreenFlag::FeatureDecision.non_manual).to receive(:delete_all).never
123
+ (0...3).each do |i|
124
+ FactoryGirl.create(:green_flag_rule, feature_id: feature.id,
125
+ version_number: @latest_version_number - i)
64
126
  end
127
+ end
128
+
129
+ it "returns the version number of the last rule" do
130
+ expect(subject).to eq @latest_version_number
131
+ end
132
+ end
65
133
 
66
- it 'should not create a feature event' do
67
- expect(GreenFlag::FeatureEvent.count).to eq 0
68
- end
69
- end
70
-
71
- context 'when there are manual decisions' do
72
- subject { feature.forget_non_manual_decisions!(enabled) }
73
-
74
- before(:each) do
75
- @manual_fd = GreenFlag::FeatureDecision.create!(feature_id: feature.id, manual: true, site_visitor_id: 1)
76
- end
77
-
78
- it 'should not delete the manual decisions' do
79
- expect(GreenFlag::FeatureDecision.find_by_id(@manual_fd.id)).to be_present
80
- end
81
-
82
- it 'should not create a feature event' do
83
- expect(GreenFlag::FeatureEvent.count).to eq 0
84
- end
85
- end
86
-
87
- context 'when there are automatic decisions' do
88
- before(:each) do
89
- @feature2 = GreenFlag::Feature.create!(code: 'huge_banner_ad')
90
- @auto_fd = GreenFlag::FeatureDecision.create!(feature_id: @feature2.id, manual: false, enabled: true, site_visitor_id: 1)
91
-
92
- @feature2.forget_non_manual_decisions!(enabled)
93
- end
94
-
95
- it 'should delete the automatic decisions' do
96
- @feature2.forget_non_manual_decisions!(enabled)
97
- expect(GreenFlag::FeatureDecision.find_by_id(@auto_fd)).to be_nil
98
- end
99
-
100
- it 'should create a feature event with the correct attributes' do
101
- feature_event = GreenFlag::FeatureEvent.last
102
- expect(feature_event).to be_present
103
- expect(feature_event.feature_id).to eq @feature2.id
104
- expect(feature_event.event_type_code).to eq GreenFlag::FeatureEvent::ENABLED_DECISIONS_FORGOTTEN
105
- expect(feature_event.count).to eq 1
106
- end
107
- end
108
- end
109
-
110
- describe 'latest_version' do
111
- let(:feature) { FactoryGirl.create(:green_flag_feature, version_number: 1) }
112
-
113
- subject { feature.latest_version }
114
-
115
- context 'when there are rules' do
116
- before(:each) do
117
- @latest_version_number = 15
118
-
119
- (0...3).each do |i|
120
- FactoryGirl.create(:green_flag_rule, feature_id: feature.id, version_number: @latest_version_number - i)
121
- end
122
- end
123
-
124
- it 'returns the version number of the last rule' do
125
- expect(subject).to eq @latest_version_number
126
- end
127
- end
128
-
129
- context 'when there are no rules' do
130
- it 'returns the current version number of the feature' do
134
+ context "when there are no rules" do
135
+ it "returns the current version number of the feature" do
131
136
  expect(subject).to eq feature.version_number
132
137
  end
133
138
  end
134
139
  end
140
+
141
+ describe "delete_associated_data" do
142
+ let(:feature) { GreenFlag::Feature.create(code: "big_font") }
143
+
144
+ before(:each) do
145
+ 5.times do
146
+ FactoryGirl.create(:green_flag_rule, feature_id: feature.id)
147
+ FactoryGirl.create(:green_flag_feature_event, feature_id: feature.id)
148
+ FactoryGirl.create(:green_flag_feature_decision, feature_id: feature.id)
149
+ end
150
+
151
+ feature.delete_associated_data
152
+ end
153
+
154
+ it "deletes all associated rules" do
155
+ expect(feature.rules.count).to eq 0
156
+ end
157
+
158
+ it "deletes all associated events" do
159
+ expect(feature.feature_events.count).to eq 0
160
+ end
161
+
162
+ it "deletes all associated feature decisions" do
163
+ expect(feature.feature_decisions.count).to eq 0
164
+ end
165
+ end
166
+
167
+ describe "destroyable?" do
168
+ let(:feature) { GreenFlag::Feature.create(code: "big_font") }
169
+
170
+ context "when the feature is fully enabled" do
171
+ it "returns true" do
172
+ allow(feature).to receive(:fully_enabled?).and_return(true)
173
+ expect(feature.destroyable?).to be_true
174
+ end
175
+ end
176
+
177
+ context "when the feature is fully disabled" do
178
+ it "returns true" do
179
+ allow(feature).to receive(:fully_disabled?).and_return(true)
180
+ expect(feature.destroyable?).to be_true
181
+ end
182
+ end
183
+
184
+ context "when the feature is neither fully enabled nor fully disabled" do
185
+ it "returns false" do
186
+ allow(feature).to receive(:fully_enabled?).and_return(false)
187
+ allow(feature).to receive(:fully_disabled?).and_return(false)
188
+
189
+ expect(feature.destroyable?).to be_false
190
+ end
191
+ end
192
+ end
135
193
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: green_flag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Morton
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-10-02 00:00:00.000000000 Z
13
+ date: 2015-10-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -72,16 +72,16 @@ dependencies:
72
72
  name: rspec-rails
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '>='
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: '2'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - '>='
82
+ - - ~>
83
83
  - !ruby/object:Gem::Version
84
- version: '0'
84
+ version: '2'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: factory_girl_rails
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -137,12 +137,15 @@ extra_rdoc_files: []
137
137
  files:
138
138
  - .codeclimate.yml
139
139
  - .gitignore
140
+ - .hound.yml
141
+ - .rubocop.yml
142
+ - CONTRIBUTING.md
140
143
  - Gemfile
141
- - Gemfile.lock
142
144
  - MIT-LICENSE
143
145
  - README.md
144
146
  - Rakefile
145
147
  - app/assets/images/green_flag/.gitkeep
148
+ - app/assets/javascripts/green_flag/admin/feature-deletion.js
146
149
  - app/assets/javascripts/green_flag/admin/features.js
147
150
  - app/assets/javascripts/green_flag/admin/rules.js
148
151
  - app/assets/javascripts/green_flag/application.js
@@ -162,6 +165,7 @@ files:
162
165
  - app/models/green_flag/site_visitor.rb
163
166
  - app/models/green_flag/user_group.rb
164
167
  - app/models/green_flag/visitor_group.rb
168
+ - app/views/green_flag/admin/features/_delete_flag_button.html.erb
165
169
  - app/views/green_flag/admin/features/index.html.erb
166
170
  - app/views/green_flag/admin/features/show.html.erb
167
171
  - app/views/layouts/green_flag/application.html.erb
@@ -232,33 +236,31 @@ files:
232
236
  - spec/dummy/public/500.html
233
237
  - spec/dummy/public/favicon.ico
234
238
  - spec/dummy/script/rails
235
- - spec/dummy/tmp/cache/assets/C47/3D0/sprockets%2F8f17c33229239b023190617bf2e915a3
236
- - spec/dummy/tmp/cache/assets/C81/770/sprockets%2Fdbcf34796b062155788f0b550808541a
237
- - spec/dummy/tmp/cache/assets/C89/D60/sprockets%2F73cd073739a0655341b7278fae57518f
238
- - spec/dummy/tmp/cache/assets/CB6/8F0/sprockets%2F5ea0f1f2583683678e122a9a9391a80f
239
- - spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
240
- - spec/dummy/tmp/cache/assets/CE7/FF0/sprockets%2Fe45f3a7675a8c5a5b064117792bf5e28
241
- - spec/dummy/tmp/cache/assets/D07/670/sprockets%2F761d03a66b753d628feccd12072c814c
242
- - spec/dummy/tmp/cache/assets/D10/860/sprockets%2F4582878dbb5b72bfa76615d31b34ed51
243
- - spec/dummy/tmp/cache/assets/D13/270/sprockets%2F701a30cd450ae3cfa114092bafc16004
244
- - spec/dummy/tmp/cache/assets/D15/C10/sprockets%2F6f42f843c916d7864a0dfa912fb3194a
245
- - spec/dummy/tmp/cache/assets/D18/860/sprockets%2Fce00769800ae939cebb28501947ea96f
246
- - spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
247
- - spec/dummy/tmp/cache/assets/D4A/970/sprockets%2F2a7d3b403cbdd8b59d57d26964ea5768
248
- - spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
249
- - spec/dummy/tmp/cache/assets/D59/090/sprockets%2F88788ba6a64e6279624e5c2ff7eead53
250
- - spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
251
- - spec/dummy/tmp/cache/assets/D5C/330/sprockets%2Fd1b1c9a53f4a8a5827e5b02bf0e100e8
252
- - spec/dummy/tmp/cache/assets/D68/760/sprockets%2Fea24808c41a3dff75b995b0f090e1a6a
253
- - spec/dummy/tmp/cache/assets/D6A/580/sprockets%2F18c12847aa1bb46ce9b5661f0e9e5fb0
254
- - spec/dummy/tmp/cache/assets/DA1/210/sprockets%2F25a2979e392c8bc3adce7075cf19ab4b
255
- - spec/dummy/tmp/cache/assets/DA9/2C0/sprockets%2Ff95d82b2bbb6db8ffe1a87f67b415291
256
- - spec/dummy/tmp/cache/assets/DB2/0C0/sprockets%2F95cf35cd3e97774df3c41ee0ef564a8d
257
- - spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
258
- - spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
259
- - spec/dummy/tmp/cache/assets/E07/200/sprockets%2F82a8ce7f5bcfb07f773df4cbfeb04762
260
- - spec/dummy/tmp/cache/assets/E34/D30/sprockets%2F99c2d0bbd78f1b867beeb3a2eefda618
239
+ - spec/dummy/tmp/cache/assets/C4A/640/sprockets%2F8a0527fb4c2402950e34518216e856b5
240
+ - spec/dummy/tmp/cache/assets/C6A/420/sprockets%2F10f5bf24a82184a4790391b0321bd318
241
+ - spec/dummy/tmp/cache/assets/CB2/480/sprockets%2Fdffc90cb8265f2042063557905188b1f
242
+ - spec/dummy/tmp/cache/assets/CB9/C30/sprockets%2F8c5e58364159f49f2242f171653cadf1
243
+ - spec/dummy/tmp/cache/assets/CEA/0F0/sprockets%2F7d5273f602c66c790a79a75c088ff01d
244
+ - spec/dummy/tmp/cache/assets/D05/9B0/sprockets%2Fa5b09f162635302e890302aed86bbd6e
245
+ - spec/dummy/tmp/cache/assets/D1A/760/sprockets%2Fc2f1fda4977960d755da14289d49b51b
246
+ - spec/dummy/tmp/cache/assets/D34/660/sprockets%2Fcfd906f8a0a2386735d1dcf52cc40403
247
+ - spec/dummy/tmp/cache/assets/D3E/110/sprockets%2Fcb870c7f25e6162da93a720e1be65c76
248
+ - spec/dummy/tmp/cache/assets/D3E/340/sprockets%2Fad85a878e73a3075722c09b0bdc17cd8
249
+ - spec/dummy/tmp/cache/assets/D3E/E90/sprockets%2F07bfdbaf75a7c43c05315078db879c43
250
+ - spec/dummy/tmp/cache/assets/D40/260/sprockets%2F35049c3c82baf75b9adfc9662c05e172
251
+ - spec/dummy/tmp/cache/assets/D62/040/sprockets%2F388ca040babbebd910f7338b606736bd
252
+ - spec/dummy/tmp/cache/assets/D6F/650/sprockets%2F9710be3c17f826e702a9ccea335cdf83
253
+ - spec/dummy/tmp/cache/assets/D82/990/sprockets%2F708fb789dee8ecdf5a4a39b9216c1295
254
+ - spec/dummy/tmp/cache/assets/D8D/1D0/sprockets%2F0e45f412d3a303eda9d7d10d8fc3a5d3
255
+ - spec/dummy/tmp/cache/assets/D9D/660/sprockets%2Fd306fa5f1db77c33117fbf27276b3ffd
256
+ - spec/dummy/tmp/cache/assets/DF4/060/sprockets%2F3a6c5e41f435db6af7fb91fa0da49bb1
257
+ - spec/dummy/tmp/cache/assets/DF8/280/sprockets%2Fa245a66abbfe76d9de5aa5a40c557f0e
258
+ - spec/dummy/tmp/cache/assets/DFC/AB0/sprockets%2Fcbca52f6723bcc63ade1b269e299a7bf
259
+ - spec/dummy/tmp/cache/assets/E0D/870/sprockets%2Fc21ca057d9f87e8cb797dbe5b8fe3bd2
260
+ - spec/dummy/tmp/pids/server.pid
261
261
  - spec/factories/green_flag/feature.rb
262
+ - spec/factories/green_flag/feature_decision.rb
263
+ - spec/factories/green_flag/feature_event.rb
262
264
  - spec/factories/green_flag/rule.rb
263
265
  - spec/features/admin_spec.rb
264
266
  - spec/features/visitor_spec.rb
@@ -291,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
293
  version: '0'
292
294
  requirements: []
293
295
  rubyforge_project:
294
- rubygems_version: 2.4.8
296
+ rubygems_version: 2.4.5
295
297
  signing_key:
296
298
  specification_version: 4
297
299
  summary: A feature-flag system.
@@ -337,33 +339,31 @@ test_files:
337
339
  - spec/dummy/Rakefile
338
340
  - spec/dummy/README.rdoc
339
341
  - spec/dummy/script/rails
340
- - spec/dummy/tmp/cache/assets/C47/3D0/sprockets%2F8f17c33229239b023190617bf2e915a3
341
- - spec/dummy/tmp/cache/assets/C81/770/sprockets%2Fdbcf34796b062155788f0b550808541a
342
- - spec/dummy/tmp/cache/assets/C89/D60/sprockets%2F73cd073739a0655341b7278fae57518f
343
- - spec/dummy/tmp/cache/assets/CB6/8F0/sprockets%2F5ea0f1f2583683678e122a9a9391a80f
344
- - spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
345
- - spec/dummy/tmp/cache/assets/CE7/FF0/sprockets%2Fe45f3a7675a8c5a5b064117792bf5e28
346
- - spec/dummy/tmp/cache/assets/D07/670/sprockets%2F761d03a66b753d628feccd12072c814c
347
- - spec/dummy/tmp/cache/assets/D10/860/sprockets%2F4582878dbb5b72bfa76615d31b34ed51
348
- - spec/dummy/tmp/cache/assets/D13/270/sprockets%2F701a30cd450ae3cfa114092bafc16004
349
- - spec/dummy/tmp/cache/assets/D15/C10/sprockets%2F6f42f843c916d7864a0dfa912fb3194a
350
- - spec/dummy/tmp/cache/assets/D18/860/sprockets%2Fce00769800ae939cebb28501947ea96f
351
- - spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
352
- - spec/dummy/tmp/cache/assets/D4A/970/sprockets%2F2a7d3b403cbdd8b59d57d26964ea5768
353
- - spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
354
- - spec/dummy/tmp/cache/assets/D59/090/sprockets%2F88788ba6a64e6279624e5c2ff7eead53
355
- - spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
356
- - spec/dummy/tmp/cache/assets/D5C/330/sprockets%2Fd1b1c9a53f4a8a5827e5b02bf0e100e8
357
- - spec/dummy/tmp/cache/assets/D68/760/sprockets%2Fea24808c41a3dff75b995b0f090e1a6a
358
- - spec/dummy/tmp/cache/assets/D6A/580/sprockets%2F18c12847aa1bb46ce9b5661f0e9e5fb0
359
- - spec/dummy/tmp/cache/assets/DA1/210/sprockets%2F25a2979e392c8bc3adce7075cf19ab4b
360
- - spec/dummy/tmp/cache/assets/DA9/2C0/sprockets%2Ff95d82b2bbb6db8ffe1a87f67b415291
361
- - spec/dummy/tmp/cache/assets/DB2/0C0/sprockets%2F95cf35cd3e97774df3c41ee0ef564a8d
362
- - spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
363
- - spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
364
- - spec/dummy/tmp/cache/assets/E07/200/sprockets%2F82a8ce7f5bcfb07f773df4cbfeb04762
365
- - spec/dummy/tmp/cache/assets/E34/D30/sprockets%2F99c2d0bbd78f1b867beeb3a2eefda618
342
+ - spec/dummy/tmp/cache/assets/C4A/640/sprockets%2F8a0527fb4c2402950e34518216e856b5
343
+ - spec/dummy/tmp/cache/assets/C6A/420/sprockets%2F10f5bf24a82184a4790391b0321bd318
344
+ - spec/dummy/tmp/cache/assets/CB2/480/sprockets%2Fdffc90cb8265f2042063557905188b1f
345
+ - spec/dummy/tmp/cache/assets/CB9/C30/sprockets%2F8c5e58364159f49f2242f171653cadf1
346
+ - spec/dummy/tmp/cache/assets/CEA/0F0/sprockets%2F7d5273f602c66c790a79a75c088ff01d
347
+ - spec/dummy/tmp/cache/assets/D05/9B0/sprockets%2Fa5b09f162635302e890302aed86bbd6e
348
+ - spec/dummy/tmp/cache/assets/D1A/760/sprockets%2Fc2f1fda4977960d755da14289d49b51b
349
+ - spec/dummy/tmp/cache/assets/D34/660/sprockets%2Fcfd906f8a0a2386735d1dcf52cc40403
350
+ - spec/dummy/tmp/cache/assets/D3E/110/sprockets%2Fcb870c7f25e6162da93a720e1be65c76
351
+ - spec/dummy/tmp/cache/assets/D3E/340/sprockets%2Fad85a878e73a3075722c09b0bdc17cd8
352
+ - spec/dummy/tmp/cache/assets/D3E/E90/sprockets%2F07bfdbaf75a7c43c05315078db879c43
353
+ - spec/dummy/tmp/cache/assets/D40/260/sprockets%2F35049c3c82baf75b9adfc9662c05e172
354
+ - spec/dummy/tmp/cache/assets/D62/040/sprockets%2F388ca040babbebd910f7338b606736bd
355
+ - spec/dummy/tmp/cache/assets/D6F/650/sprockets%2F9710be3c17f826e702a9ccea335cdf83
356
+ - spec/dummy/tmp/cache/assets/D82/990/sprockets%2F708fb789dee8ecdf5a4a39b9216c1295
357
+ - spec/dummy/tmp/cache/assets/D8D/1D0/sprockets%2F0e45f412d3a303eda9d7d10d8fc3a5d3
358
+ - spec/dummy/tmp/cache/assets/D9D/660/sprockets%2Fd306fa5f1db77c33117fbf27276b3ffd
359
+ - spec/dummy/tmp/cache/assets/DF4/060/sprockets%2F3a6c5e41f435db6af7fb91fa0da49bb1
360
+ - spec/dummy/tmp/cache/assets/DF8/280/sprockets%2Fa245a66abbfe76d9de5aa5a40c557f0e
361
+ - spec/dummy/tmp/cache/assets/DFC/AB0/sprockets%2Fcbca52f6723bcc63ade1b269e299a7bf
362
+ - spec/dummy/tmp/cache/assets/E0D/870/sprockets%2Fc21ca057d9f87e8cb797dbe5b8fe3bd2
363
+ - spec/dummy/tmp/pids/server.pid
366
364
  - spec/factories/green_flag/feature.rb
365
+ - spec/factories/green_flag/feature_decision.rb
366
+ - spec/factories/green_flag/feature_event.rb
367
367
  - spec/factories/green_flag/rule.rb
368
368
  - spec/features/admin_spec.rb
369
369
  - spec/features/visitor_spec.rb