config_manager 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/config_manager/application.js +15 -0
  6. data/app/assets/stylesheets/config_manager/_reset.css.scss +74 -0
  7. data/app/assets/stylesheets/config_manager/application.css +5 -0
  8. data/app/assets/stylesheets/config_manager/generic.css.scss +19 -0
  9. data/app/controllers/config_manager/admins_controller.rb +59 -0
  10. data/app/controllers/config_manager/application_controller.rb +12 -0
  11. data/app/controllers/config_manager/sessions_controller.rb +5 -0
  12. data/app/controllers/config_manager/toggles_controller.rb +57 -0
  13. data/app/helpers/config_manager/application_helper.rb +11 -0
  14. data/app/helpers/config_manager/toggles_helper.rb +7 -0
  15. data/app/models/config_manager/admin.rb +18 -0
  16. data/app/views/config_manager/admins/_errors.html.slim +7 -0
  17. data/app/views/config_manager/admins/_form.html.slim +10 -0
  18. data/app/views/config_manager/admins/edit.html.slim +13 -0
  19. data/app/views/config_manager/admins/index.html.slim +28 -0
  20. data/app/views/config_manager/admins/new.html.slim +10 -0
  21. data/app/views/config_manager/sessions/new.html.slim +23 -0
  22. data/app/views/config_manager/toggles/_form.html.slim +12 -0
  23. data/app/views/config_manager/toggles/index.html.slim +45 -0
  24. data/app/views/layouts/config_manager/application.html.slim +54 -0
  25. data/config/initializers/devise.rb +258 -0
  26. data/config/locales/devise.en.yml +59 -0
  27. data/config/routes.rb +17 -0
  28. data/db/migrate/20140725161636_create_config_manager_admins.rb +41 -0
  29. data/lib/config_manager.rb +6 -0
  30. data/lib/config_manager/engine.rb +20 -0
  31. data/lib/config_manager/toggle.rb +66 -0
  32. data/lib/config_manager/toggles/boolean.rb +21 -0
  33. data/lib/config_manager/toggles/definition.rb +103 -0
  34. data/lib/config_manager/toggles/null.rb +18 -0
  35. data/lib/config_manager/toggles/set.rb +21 -0
  36. data/lib/config_manager/version.rb +3 -0
  37. data/lib/tasks/config_manager_tasks.rake +4 -0
  38. data/spec/dummy/README.rdoc +28 -0
  39. data/spec/dummy/Rakefile +6 -0
  40. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  41. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  42. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  43. data/spec/dummy/app/controllers/dummy_controller.rb +4 -0
  44. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  45. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  46. data/spec/dummy/bin/bundle +3 -0
  47. data/spec/dummy/bin/rails +4 -0
  48. data/spec/dummy/bin/rake +4 -0
  49. data/spec/dummy/config.ru +4 -0
  50. data/spec/dummy/config/application.rb +28 -0
  51. data/spec/dummy/config/bad_toggles.yml +8 -0
  52. data/spec/dummy/config/boot.rb +5 -0
  53. data/spec/dummy/config/config_manager_toggles.yml +7 -0
  54. data/spec/dummy/config/database.yml +21 -0
  55. data/spec/dummy/config/environment.rb +5 -0
  56. data/spec/dummy/config/environments/development.rb +37 -0
  57. data/spec/dummy/config/environments/production.rb +82 -0
  58. data/spec/dummy/config/environments/test.rb +39 -0
  59. data/spec/dummy/config/initializers/assets.rb +8 -0
  60. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  61. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  62. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  63. data/spec/dummy/config/initializers/inflections.rb +16 -0
  64. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  65. data/spec/dummy/config/initializers/redis.rb +12 -0
  66. data/spec/dummy/config/initializers/session_store.rb +3 -0
  67. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  68. data/spec/dummy/config/locales/en.yml +23 -0
  69. data/spec/dummy/config/redis.yml +8 -0
  70. data/spec/dummy/config/routes.rb +5 -0
  71. data/spec/dummy/config/secrets.yml +22 -0
  72. data/spec/dummy/config/toggles.yml +8 -0
  73. data/spec/dummy/db/development.sqlite3 +0 -0
  74. data/spec/dummy/db/schema.rb +31 -0
  75. data/spec/dummy/db/test.sqlite3 +0 -0
  76. data/spec/dummy/log/development.log +9283 -0
  77. data/spec/dummy/log/test.log +557 -0
  78. data/spec/dummy/public/404.html +67 -0
  79. data/spec/dummy/public/422.html +67 -0
  80. data/spec/dummy/public/500.html +66 -0
  81. data/spec/dummy/public/favicon.ico +0 -0
  82. data/spec/dummy/tmp/cache/assets/development/sass/786e38d79a0d3df53e8917152c8f9ebd061f1eac/_reset.css.scssc +0 -0
  83. data/spec/dummy/tmp/cache/assets/development/sass/786e38d79a0d3df53e8917152c8f9ebd061f1eac/generic.css.scssc +0 -0
  84. data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  85. data/spec/dummy/tmp/cache/assets/development/sprockets/1d468d61d8002d0709400b7ab8112441 +0 -0
  86. data/spec/dummy/tmp/cache/assets/development/sprockets/259bf4d13dff689b9dbca70a598c3755 +0 -0
  87. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  88. data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  89. data/spec/dummy/tmp/cache/assets/development/sprockets/4c700e6b525103954790256e74000237 +0 -0
  90. data/spec/dummy/tmp/cache/assets/development/sprockets/53db5a69412d8243c467b6af17d2f483 +0 -0
  91. data/spec/dummy/tmp/cache/assets/development/sprockets/550cbb5bc745772776097bec6b7ee6db +0 -0
  92. data/spec/dummy/tmp/cache/assets/development/sprockets/6159fbf8e1fca57907de03eef7ed9cdb +0 -0
  93. data/spec/dummy/tmp/cache/assets/development/sprockets/69d29900d66ffd35bf01cae75f4e0fe6 +0 -0
  94. data/spec/dummy/tmp/cache/assets/development/sprockets/6d3f4fe92dd890a8bbdaf3f21eae0615 +0 -0
  95. data/spec/dummy/tmp/cache/assets/development/sprockets/b248de24a4d5454a0dcf2490dc088b8e +0 -0
  96. data/spec/dummy/tmp/cache/assets/development/sprockets/bfdd9543b7b28b65c9d760f854cc387c +0 -0
  97. data/spec/dummy/tmp/cache/assets/development/sprockets/c5471c9026b426e70abbb969df7ba671 +0 -0
  98. data/spec/dummy/tmp/cache/assets/development/sprockets/c69bf92b5432ae5a1c2044ebc2923c71 +0 -0
  99. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  100. data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  101. data/spec/dummy/tmp/cache/assets/development/sprockets/dbbeb33ef5af4bd661989cf666fde840 +0 -0
  102. data/spec/dummy/tmp/cache/assets/development/sprockets/e808c4872b8e90c978084811080405ee +0 -0
  103. data/spec/dummy/tmp/cache/assets/development/sprockets/ecd5a5f69d121045c4fc39b914215798 +0 -0
  104. data/spec/dummy/tmp/cache/assets/development/sprockets/f0bf3eb5da8250b91d2179600efef783 +0 -0
  105. data/spec/dummy/tmp/cache/assets/development/sprockets/f318cd7091c78a646f7e5bed19e774bf +0 -0
  106. data/spec/dummy/tmp/cache/assets/development/sprockets/f33a897212fccae3670eab346f4e193e +0 -0
  107. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  108. data/spec/dummy/tmp/pids/server.pid +1 -0
  109. data/spec/dummy/tmp/test.yml +7 -0
  110. data/spec/integration/navigation_test.rb +10 -0
  111. data/spec/lib/config_manager/toggle_spec.rb +110 -0
  112. data/spec/lib/config_manager/toggles/boolean_spec.rb +34 -0
  113. data/spec/lib/config_manager/toggles/definition_spec.rb +130 -0
  114. data/spec/lib/config_manager/toggles/set_spec.rb +34 -0
  115. data/spec/rails_helper.rb +48 -0
  116. data/spec/spec_helper.rb +78 -0
  117. data/spec/support/rspec_redis_helper.rb +28 -0
  118. data/spec/test_helper.rb +15 -0
  119. metadata +486 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1 @@
1
+ 85868
@@ -0,0 +1,7 @@
1
+ ---
2
+ center_mids:
3
+ type: set
4
+ acceptable_values: Kroos,Schwinsteiger
5
+ center_defense:
6
+ type: set
7
+ acceptable_values: Hummel,Boateng
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActionDispatch::IntegrationTest
4
+ fixtures :all
5
+
6
+ # test "the truth" do
7
+ # assert true
8
+ # end
9
+ end
10
+
@@ -0,0 +1,110 @@
1
+ require 'rails_helper'
2
+
3
+ module ConfigManager
4
+ describe Toggle, :redis => true do
5
+ describe ".toggles" do
6
+ context "when there are no toggles" do
7
+ it "returns an empty array" do
8
+ Toggle.toggles.should == []
9
+ end
10
+
11
+ it "returns the an array of currently defined toggles" do
12
+ Toggles::Definition.new('d').type = 'set'
13
+ Toggles::Definition.new('d1').type = 'boolean'
14
+ Toggle.toggles.should have(2).toggles
15
+ end
16
+ end
17
+ end
18
+
19
+ describe ".active?" do
20
+ before do
21
+ definition.type = 'set'
22
+ definition.acceptable_values = %w(a b)
23
+ end
24
+ let(:definition) { Toggles::Definition.new('d1') }
25
+
26
+ context "when the challenge is in the acceptable answer test" do
27
+ it "returns true" do
28
+ Toggle.active?('d1', 'a').should be_truthy
29
+ end
30
+ end
31
+
32
+ context "when the challenge is not in the acceptable answer test" do
33
+ it "returns false" do
34
+ Toggle.active?('d1', 'c').should be_falsy
35
+ end
36
+ end
37
+
38
+ context "when the toggle is undefined" do
39
+ it "returns false" do
40
+ Toggle.active?('d2', 'a').should be_falsy
41
+ end
42
+ end
43
+ end
44
+
45
+ describe ".create" do
46
+ let(:definition) { Toggles::Definition.new('ut') }
47
+
48
+ it "creates a new boolean toggle" do
49
+ Toggle.create(:name => 'ut', :type => 'boolean', :formatted_acceptable_values => 'true')
50
+ definition.name.should == 'ut'
51
+ definition.type.should == 'boolean'
52
+ definition.acceptable_values.should == true
53
+ end
54
+
55
+ it "creates a new set toggle" do
56
+ Toggle.create(:name => 'ut', :type => 'set', :formatted_acceptable_values => 'a, b , d')
57
+ definition.name.should == 'ut'
58
+ definition.type.should == 'set'
59
+ definition.acceptable_values.should == %w{a b d}
60
+ end
61
+
62
+ it "returns a toggle definition instance" do
63
+ Toggle.create(:name => 'ut', :type => 'set', :formatted_acceptable_values => 'a, b , d').
64
+ should be_instance_of(Toggles::Definition)
65
+ end
66
+ end
67
+
68
+ describe ".delete" do
69
+ it "deletes the toggle" do
70
+ Toggle.create(:name => 'ut', :type => 'boolean', :formatted_acceptable_values => 'true')
71
+ Toggle.delete('ut')
72
+ d = Toggles::Definition.new('ut')
73
+ d.name.should == 'ut'
74
+ d.type.should == nil
75
+ d.acceptable_values.should == nil
76
+ end
77
+ end
78
+
79
+ describe ".from_yaml" do
80
+ context "when file exists" do
81
+ it "creates toggles (set and boolean) defined in file" do
82
+ Toggle.from_yaml(Rails.root.join('config/toggles.yml'))
83
+ Toggle.toggles.should have(3).toggles
84
+ end
85
+
86
+ it "returns number of created toggles and 0 failed" do
87
+ Toggle.from_yaml(Rails.root.join('config/toggles.yml')).should == [3, 0]
88
+ end
89
+
90
+ context "when file has one bad toggle" do
91
+ it "skips the bad toggle" do
92
+ Toggle.from_yaml(Rails.root.join('config/bad_toggles.yml'))
93
+ Toggle.toggles.should have(2).toggles
94
+ end
95
+
96
+ it "returns number of created toggles and 1 failed" do
97
+ Toggle.from_yaml(Rails.root.join('config/bad_toggles.yml')).should == [2, 1]
98
+ end
99
+ end
100
+ end
101
+
102
+ context "when files doesn't exist" do
103
+ it "raises an ENOENT error" do
104
+ expect { Toggle.from_yaml(Rails.root.join('config/noexist.yml')) }.
105
+ to raise_error(Errno::ENOENT)
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,34 @@
1
+ require 'rails_helper'
2
+
3
+ module ConfigManager
4
+ module Toggles
5
+ describe Boolean, :redis => true do
6
+ describe ".active?" do
7
+ before { definition.type = 'boolean' }
8
+ let(:definition) { Definition.new('ut') }
9
+
10
+ context "when the acceptable answer is true" do
11
+ before { definition.acceptable_values = true }
12
+
13
+ it "returns true" do
14
+ Boolean.active?(definition).should be_truthy
15
+ end
16
+ end
17
+
18
+ context "when the acceptable answer is false" do
19
+ before { definition.acceptable_values = false }
20
+
21
+ it "returns false" do
22
+ Boolean.active?(definition).should be_falsy
23
+ end
24
+ end
25
+
26
+ context "when the acceptable answer is not set" do
27
+ it "returns false" do
28
+ Boolean.active?(definition).should be_falsy
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,130 @@
1
+ require 'rails_helper'
2
+
3
+ module ConfigManager
4
+ module Toggles
5
+ describe Definition, :redis => true do
6
+ let(:definition) { Definition.new('ut') }
7
+
8
+ describe "validness" do
9
+ context "when name is blank" do
10
+ let(:definition) { Definition.new(nil) }
11
+
12
+ it "is false" do
13
+ definition.should_not be_valid
14
+ end
15
+
16
+ context "after setting the type" do
17
+ before { definition.type == 'set' }
18
+
19
+ it "is still false" do
20
+ definition.should_not be_valid
21
+ end
22
+
23
+ it "doesn't really set the type" do
24
+ definition.type.should be_nil
25
+ end
26
+ end
27
+ end
28
+
29
+ context "when type is not set" do
30
+ it "is false" do
31
+ definition.should_not be_valid
32
+ end
33
+ end
34
+
35
+ context "when type is set" do
36
+ before { definition.type = 'set' }
37
+
38
+ it "is true" do
39
+ definition.should be_valid
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "#type" do
45
+ context "when not set" do
46
+ it "returns nil" do
47
+ definition.type.should be_nil
48
+ end
49
+ end
50
+
51
+ context "when set" do
52
+ before { definition.type = 'set' }
53
+
54
+ it "returns the stored value" do
55
+ definition.type.should == 'set'
56
+ end
57
+
58
+ it "updates the stored value to a new value" do
59
+ definition.type.should == 'set'
60
+ definition.type = 'boolean'
61
+ definition.type.should == 'boolean'
62
+ end
63
+
64
+ context "when the type is not in the supported list" do
65
+ it "raises an error" do
66
+ expect { definition.type = 'blah' }.to raise_error
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "#acceptable_values" do
73
+
74
+ context "when not set" do
75
+ context" when type is not set" do
76
+ it "returns nil" do
77
+ definition.acceptable_values.should == nil
78
+ end
79
+ end
80
+
81
+ context "when type is set" do
82
+ before { definition.type = 'set' }
83
+
84
+ it "returns an empty array" do
85
+ definition.acceptable_values.should == []
86
+ end
87
+ end
88
+ end
89
+
90
+ context "when set" do
91
+ context "when type is set to 'set'" do
92
+ before do
93
+ definition.type = 'set'
94
+ definition.acceptable_values = %w(a b)
95
+ end
96
+
97
+ it "returns the stored values in set format" do
98
+ definition.acceptable_values.should == %w(a b)
99
+ end
100
+
101
+ it "updates the stored values to a new value" do
102
+ definition.acceptable_values = %w(c d)
103
+ definition.acceptable_values.should == %w(c d)
104
+ end
105
+ end
106
+
107
+ context "when type is boolean" do
108
+ before { definition.type = 'boolean' }
109
+
110
+ it "converts the string to a bool and store it" do
111
+ definition.acceptable_values = 'true'
112
+ definition.acceptable_values.should == true
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ describe "#delete" do
119
+ it "deletes the stored toggle" do
120
+ definition.type = 'set'
121
+ definition.acceptable_values = %w(a b)
122
+ key = definition.instance_variable_get(:@key)
123
+ $redis.exists(key).should be_truthy
124
+ definition.delete
125
+ $redis.exists(key).should be_falsy
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end