green_flag 0.2.0 → 0.3.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.
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