flipper-ui 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6adad8c8cbe91976b7766209ebd2879b7c0f71e
4
- data.tar.gz: bfbfc00ee23ca3d8f509b9397397c04be6f37ed4
3
+ metadata.gz: 45f1990bf36f30c757d4ac3624c3807cfaf38fc5
4
+ data.tar.gz: dbc9ad3ae6148944440c71fcbeab8f6a9fc16564
5
5
  SHA512:
6
- metadata.gz: 0422cc3f69f79cd10284648441496e983d88f8e09cbd86f5d0502976d9f23eb18c505523c1e9893aa99e07aa2195f20c09fa4b90debe06d9d46e4401200b81df
7
- data.tar.gz: e83b75638051d69cf1ec222dfdad106f148b2cff1fef2d302a4b6350a2bc354a65d79d20b413ff97bae5ebf30b0a95da284a3828aca0cd99dc160680dea4f85b
6
+ metadata.gz: eb661b83d7071b9f038554a6e48a7f595c241aef211eaf1cbca14bf9127f8102c5a4efe3e04f9b201e3c819ff26c98b56e4d8f016b2215d9f85e09730eedcba3
7
+ data.tar.gz: 9793109586cf8620ad6756ed56c63b9857a6444607c20bc3e52da28240ed98de7864d04421d7f01c93a69c112a5fd6c135f0982149078e5482908e2e303bc8c2
data/flipper-ui.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.version = Flipper::VERSION
21
21
 
22
22
  gem.add_dependency 'rack', '>= 1.4', '< 3'
23
- gem.add_dependency 'rack-protection', '~> 1.5.3'
23
+ gem.add_dependency 'rack-protection', '>= 1.5.3', '< 2.1.0'
24
24
  gem.add_dependency 'flipper', "~> #{Flipper::VERSION}"
25
25
  gem.add_dependency 'erubis', '~> 2.7.0'
26
26
  end
data/lib/flipper/ui.rb CHANGED
@@ -44,6 +44,8 @@ module Flipper
44
44
  builder.use Flipper::Middleware::Memoizer, flipper
45
45
  builder.use Middleware, flipper
46
46
  builder.run app
47
+ klass = self
48
+ builder.define_singleton_method(:inspect) { klass } # pretty rake routes output
47
49
  builder
48
50
  end
49
51
  end
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = "0.9.1".freeze
2
+ VERSION = "0.9.2".freeze
3
3
  end
@@ -1,6 +1,21 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::ActorsGate do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "GET /features/:feature/actors" do
5
20
  before do
6
21
  get "features/search/actors"
@@ -19,8 +34,8 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
19
34
  context "enabling an actor" do
20
35
  before do
21
36
  post "features/search/actors",
22
- {"value" => "User:6", "operation" => "enable", "authenticity_token" => "a"},
23
- "rack.session" => {"_csrf_token" => "a"}
37
+ {"value" => "User:6", "operation" => "enable", "authenticity_token" => token},
38
+ "rack.session" => session
24
39
  end
25
40
 
26
41
  it "adds item to members" do
@@ -37,8 +52,8 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
37
52
  before do
38
53
  flipper[:search].enable_actor Flipper::UI::Actor.new("User:6")
39
54
  post "features/search/actors",
40
- {"value" => "User:6", "operation" => "disable", "authenticity_token" => "a"},
41
- "rack.session" => {"_csrf_token" => "a"}
55
+ {"value" => "User:6", "operation" => "disable", "authenticity_token" => token},
56
+ "rack.session" => session
42
57
  end
43
58
 
44
59
  it "removes item from members" do
@@ -54,8 +69,8 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
54
69
  context "for an invalid actor value" do
55
70
  before do
56
71
  post "features/search/actors",
57
- {"value" => "", "operation" => "enable", "authenticity_token" => "a"},
58
- "rack.session" => {"_csrf_token" => "a"}
72
+ {"value" => "", "operation" => "enable", "authenticity_token" => token},
73
+ "rack.session" => session
59
74
  end
60
75
 
61
76
  it "redirects back to feature" do
@@ -1,13 +1,28 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::BooleanGate do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "POST /features/:feature/boolean" do
5
20
  context "with enable" do
6
21
  before do
7
22
  flipper.disable :search
8
23
  post "features/search/boolean",
9
- {"action" => "Enable", "authenticity_token" => "a"},
10
- "rack.session" => {"_csrf_token" => "a"}
24
+ {"action" => "Enable", "authenticity_token" => token},
25
+ "rack.session" => session
11
26
  end
12
27
 
13
28
  it "enables the feature" do
@@ -24,8 +39,8 @@ RSpec.describe Flipper::UI::Actions::BooleanGate do
24
39
  before do
25
40
  flipper.enable :search
26
41
  post "features/search/boolean",
27
- {"action" => "Disable", "authenticity_token" => "a"},
28
- "rack.session" => {"_csrf_token" => "a"}
42
+ {"action" => "Disable", "authenticity_token" => token},
43
+ "rack.session" => session
29
44
  end
30
45
 
31
46
  it "disables the feature" do
@@ -1,12 +1,27 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::Feature do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "DELETE /features/:feature" do
5
20
  before do
6
21
  flipper.enable :search
7
22
  delete "/features/search",
8
- {"authenticity_token" => "a"},
9
- "rack.session" => {"_csrf_token" => "a"}
23
+ {"authenticity_token" => token},
24
+ "rack.session" => session
10
25
  end
11
26
 
12
27
  it "removes feature" do
@@ -23,8 +38,8 @@ RSpec.describe Flipper::UI::Actions::Feature do
23
38
  before do
24
39
  flipper.enable :search
25
40
  post "/features/search",
26
- {"_method" => "DELETE", "authenticity_token" => "a"},
27
- "rack.session" => {"_csrf_token" => "a"}
41
+ {"_method" => "DELETE", "authenticity_token" => token},
42
+ "rack.session" => session
28
43
  end
29
44
 
30
45
  it "removes feature" do
@@ -1,6 +1,21 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::Features do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "GET /features" do
5
20
  before do
6
21
  flipper[:stats].enable
@@ -23,8 +38,8 @@ RSpec.describe Flipper::UI::Actions::Features do
23
38
  @original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
24
39
  Flipper::UI.feature_creation_enabled = true
25
40
  post "/features",
26
- {"value" => "notifications_next", "authenticity_token" => "a"},
27
- "rack.session" => {"_csrf_token" => "a"}
41
+ {"value" => "notifications_next", "authenticity_token" => token},
42
+ "rack.session" => session
28
43
  end
29
44
 
30
45
  after do
@@ -46,8 +61,8 @@ RSpec.describe Flipper::UI::Actions::Features do
46
61
  @original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
47
62
  Flipper::UI.feature_creation_enabled = false
48
63
  post "/features",
49
- {"value" => "notifications_next", "authenticity_token" => "a"},
50
- "rack.session" => {"_csrf_token" => "a"}
64
+ {"value" => "notifications_next", "authenticity_token" => token},
65
+ "rack.session" => session
51
66
  end
52
67
 
53
68
  after do
@@ -1,11 +1,26 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::Gate do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "POST /features/:feature/non-existent-gate" do
5
20
  before do
6
21
  post "/features/search/non-existent-gate",
7
- {"authenticity_token" => "a"},
8
- "rack.session" => {"_csrf_token" => "a"}
22
+ {"authenticity_token" => token},
23
+ "rack.session" => session
9
24
  end
10
25
 
11
26
  it "responds with redirect" do
@@ -1,6 +1,21 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::GroupsGate do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "GET /features/:feature/groups" do
5
20
  before do
6
21
  Flipper.register(:admins) { |user| user.admin? }
@@ -32,8 +47,8 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
32
47
  context "enabling a group" do
33
48
  before do
34
49
  post "features/search/groups",
35
- {"value" => "admins", "operation" => "enable", "authenticity_token" => "a"},
36
- "rack.session" => {"_csrf_token" => "a"}
50
+ {"value" => "admins", "operation" => "enable", "authenticity_token" => token},
51
+ "rack.session" => session
37
52
  end
38
53
 
39
54
  it "adds item to members" do
@@ -50,8 +65,8 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
50
65
  before do
51
66
  flipper[:search].enable_group :admins
52
67
  post "features/search/groups",
53
- {"value" => "admins", "operation" => "disable", "authenticity_token" => "a"},
54
- "rack.session" => {"_csrf_token" => "a"}
68
+ {"value" => "admins", "operation" => "disable", "authenticity_token" => token},
69
+ "rack.session" => session
55
70
  end
56
71
 
57
72
  it "removes item from members" do
@@ -67,8 +82,8 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
67
82
  context "for an unregistered group" do
68
83
  before do
69
84
  post "features/search/groups",
70
- {"value" => "not_here", "operation" => "enable", "authenticity_token" => "a"},
71
- "rack.session" => {"_csrf_token" => "a"}
85
+ {"value" => "not_here", "operation" => "enable", "authenticity_token" => token},
86
+ "rack.session" => session
72
87
  end
73
88
 
74
89
  it "redirects back to feature" do
@@ -1,12 +1,27 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::PercentageOfActorsGate do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "POST /features/:feature/percentage_of_actors" do
5
20
  context "with valid value" do
6
21
  before do
7
22
  post "features/search/percentage_of_actors",
8
- {"value" => "24", "authenticity_token" => "a"},
9
- "rack.session" => {"_csrf_token" => "a"}
23
+ {"value" => "24", "authenticity_token" => token},
24
+ "rack.session" => session
10
25
  end
11
26
 
12
27
  it "enables the feature" do
@@ -22,8 +37,8 @@ RSpec.describe Flipper::UI::Actions::PercentageOfActorsGate do
22
37
  context "with invalid value" do
23
38
  before do
24
39
  post "features/search/percentage_of_actors",
25
- {"value" => "555", "authenticity_token" => "a"},
26
- "rack.session" => {"_csrf_token" => "a"}
40
+ {"value" => "555", "authenticity_token" => token},
41
+ "rack.session" => session
27
42
  end
28
43
 
29
44
  it "does not change value" do
@@ -1,12 +1,27 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI::Actions::PercentageOfTimeGate do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "POST /features/:feature/percentage_of_time" do
5
20
  context "with valid value" do
6
21
  before do
7
22
  post "features/search/percentage_of_time",
8
- {"value" => "24", "authenticity_token" => "a"},
9
- "rack.session" => {"_csrf_token" => "a"}
23
+ {"value" => "24", "authenticity_token" => token},
24
+ "rack.session" => session
10
25
  end
11
26
 
12
27
  it "enables the feature" do
@@ -22,8 +37,8 @@ RSpec.describe Flipper::UI::Actions::PercentageOfTimeGate do
22
37
  context "with invalid value" do
23
38
  before do
24
39
  post "features/search/percentage_of_time",
25
- {"value" => "555", "authenticity_token" => "a"},
26
- "rack.session" => {"_csrf_token" => "a"}
40
+ {"value" => "555", "authenticity_token" => token},
41
+ "rack.session" => session
27
42
  end
28
43
 
29
44
  it "does not change value" do
@@ -1,6 +1,21 @@
1
1
  require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::UI do
4
+ let(:token) {
5
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
6
+ Rack::Protection::AuthenticityToken.random_token
7
+ else
8
+ "a"
9
+ end
10
+ }
11
+ let(:session) {
12
+ if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
13
+ {:csrf => token}
14
+ else
15
+ {"_csrf_token" => token}
16
+ end
17
+ }
18
+
4
19
  describe "Initializing middleware with flipper instance" do
5
20
  let(:app) { build_app(flipper) }
6
21
 
@@ -36,8 +51,8 @@ RSpec.describe Flipper::UI do
36
51
  # See https://github.com/jnunemaker/flipper/issues/80
37
52
  it "can route features with names that match static directories" do
38
53
  post "features/refactor-images/actors",
39
- {"value" => "User:6", "operation" => "enable", "authenticity_token" => "a"},
40
- "rack.session" => {"_csrf_token" => "a"}
54
+ {"value" => "User:6", "operation" => "enable", "authenticity_token" => token},
55
+ "rack.session" => session
41
56
  expect(last_response.status).to be(302)
42
57
  expect(last_response.headers["Location"]).to eq("/features/refactor-images")
43
58
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-07 00:00:00.000000000 Z
11
+ date: 2016-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -34,30 +34,36 @@ dependencies:
34
34
  name: rack-protection
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: 1.5.3
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: 2.1.0
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
49
  version: 1.5.3
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 2.1.0
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: flipper
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - "~>"
52
58
  - !ruby/object:Gem::Version
53
- version: 0.9.1
59
+ version: 0.9.2
54
60
  type: :runtime
55
61
  prerelease: false
56
62
  version_requirements: !ruby/object:Gem::Requirement
57
63
  requirements:
58
64
  - - "~>"
59
65
  - !ruby/object:Gem::Version
60
- version: 0.9.1
66
+ version: 0.9.2
61
67
  - !ruby/object:Gem::Dependency
62
68
  name: erubis
63
69
  requirement: !ruby/object:Gem::Requirement