flipper-api 0.11.0.beta4 → 0.11.0.beta5

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: 3a26853ebf5075f4787bbfdb68ff46ed0802ad87
4
- data.tar.gz: 94a1fa6c3c6751a0754392f0e4680aa61bb2cbf3
3
+ metadata.gz: 5f47344a8b6c5e5aa22f885dca16202c8335bf7f
4
+ data.tar.gz: 38dcc1ca7f51ac4c0301ef80ddc08a610adf7dd8
5
5
  SHA512:
6
- metadata.gz: 8959693ec26ebb91565a56407dc83c55a818592ffaa24f8bf3d41681b245cc1d86dfd868b19bbdfeed85147262ddc802c4872b9740707f9d35bae40e33213eb5
7
- data.tar.gz: e9d707690cfacf6f370e313404ad7e0da9de8de70af5e46bd201ff7d1eff5e9e74525515eebec09a11d7447508ae45364d4275d0e81038d3114eb9eeb311236d
6
+ metadata.gz: 67c8a531a6ca084ad8e25a238f58e50f1f8db3db7233ac46bdf1affb53ca8e88e8546f138642bdbf426cec23c2e564fad51b1f867e30b4b8414280682b00318f
7
+ data.tar.gz: 05e52fd77c85f8bee42ec27985e8f926ae65565e6e9b5a3b3bbfcbf01c54acedcd2ecddf26ebe536d17617db35e496f8a23d012390d437c1e86a0af4126e411f
@@ -4,20 +4,20 @@ require 'flipper/middleware/setup_env'
4
4
  require 'flipper/middleware/memoizer'
5
5
  require 'flipper/api/middleware'
6
6
  require 'flipper/api/json_params'
7
- require 'flipper/api/actor'
8
7
 
9
8
  module Flipper
10
9
  module Api
11
10
  CONTENT_TYPE = 'application/json'.freeze
12
11
 
13
- def self.app(flipper = nil)
12
+ def self.app(flipper = nil, options = {})
13
+ env_key = options.fetch(:env_key, 'flipper')
14
14
  app = ->(_) { [404, { 'Content-Type'.freeze => CONTENT_TYPE }, ['{}'.freeze]] }
15
15
  builder = Rack::Builder.new
16
16
  yield builder if block_given?
17
- builder.use Flipper::Middleware::SetupEnv, flipper
18
- builder.use Flipper::Middleware::Memoizer
19
17
  builder.use Flipper::Api::JsonParams
20
- builder.use Flipper::Api::Middleware
18
+ builder.use Flipper::Middleware::SetupEnv, flipper, env_key: env_key
19
+ builder.use Flipper::Middleware::Memoizer, env_key: env_key
20
+ builder.use Flipper::Api::Middleware, env_key: env_key
21
21
  builder.run app
22
22
  klass = self
23
23
  builder.define_singleton_method(:inspect) { klass.inspect } # pretty rake routes output
@@ -9,8 +9,9 @@ end
9
9
  module Flipper
10
10
  module Api
11
11
  class Middleware
12
- def initialize(app)
12
+ def initialize(app, options = {})
13
13
  @app = app
14
+ @env_key = options.fetch(:env_key, 'flipper')
14
15
 
15
16
  @action_collection = ActionCollection.new
16
17
  @action_collection.add Api::V1::Actions::PercentageOfTimeGate
@@ -33,7 +34,7 @@ module Flipper
33
34
  if action_class.nil?
34
35
  @app.call(env)
35
36
  else
36
- flipper = env.fetch('flipper')
37
+ flipper = env.fetch(@env_key)
37
38
  action_class.run(flipper, request)
38
39
  end
39
40
  end
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = '0.11.0.beta4'.freeze
2
+ VERSION = '0.11.0.beta5'.freeze
3
3
  end
@@ -15,67 +15,67 @@ RSpec.describe Flipper::Api::JsonParams do
15
15
  describe 'json post request' do
16
16
  it 'adds request body to params' do
17
17
  response = post '/',
18
- JSON.generate(flipper_id: 'user:2'),
18
+ JSON.generate(flipper_id: 'User;2'),
19
19
  'CONTENT_TYPE' => 'application/json'
20
20
 
21
21
  params = JSON.parse(response.body)
22
- expect(params).to eq('flipper_id' => 'user:2')
22
+ expect(params).to eq('flipper_id' => 'User;2')
23
23
  end
24
24
 
25
25
  it 'handles request bodies with multiple params' do
26
26
  response = post '/',
27
- JSON.generate(flipper_id: 'user:2', language: 'ruby'),
27
+ JSON.generate(flipper_id: 'User;2', language: 'ruby'),
28
28
  'CONTENT_TYPE' => 'application/json'
29
29
 
30
30
  params = JSON.parse(response.body)
31
- expect(params).to eq('flipper_id' => 'user:2', 'language' => 'ruby')
31
+ expect(params).to eq('flipper_id' => 'User;2', 'language' => 'ruby')
32
32
  end
33
33
 
34
34
  it 'handles request bodies and single query string params' do
35
35
  response = post '/?language=ruby',
36
- JSON.generate(flipper_id: 'user:2'),
36
+ JSON.generate(flipper_id: 'User;2'),
37
37
  'CONTENT_TYPE' => 'application/json'
38
38
 
39
39
  params = JSON.parse(response.body)
40
- expect(params).to eq('flipper_id' => 'user:2', 'language' => 'ruby')
40
+ expect(params).to eq('flipper_id' => 'User;2', 'language' => 'ruby')
41
41
  end
42
42
 
43
43
  it 'handles request bodies and multiple query string params' do
44
44
  response = post '/?language=ruby&framework=rails',
45
- JSON.generate(flipper_id: 'user:2'),
45
+ JSON.generate(flipper_id: 'User;2'),
46
46
  'CONTENT_TYPE' => 'application/json'
47
47
 
48
48
  params = JSON.parse(response.body)
49
- expect(params).to eq('flipper_id' => 'user:2', 'language' => 'ruby', 'framework' => 'rails')
49
+ expect(params).to eq('flipper_id' => 'User;2', 'language' => 'ruby', 'framework' => 'rails')
50
50
  end
51
51
 
52
52
  it 'favors request body params' do
53
53
  response = post '/?language=javascript',
54
- JSON.generate(flipper_id: 'user:2', language: 'ruby'),
54
+ JSON.generate(flipper_id: 'User;2', language: 'ruby'),
55
55
  'CONTENT_TYPE' => 'application/json'
56
56
 
57
57
  params = JSON.parse(response.body)
58
- expect(params).to eq('flipper_id' => 'user:2', 'language' => 'ruby')
58
+ expect(params).to eq('flipper_id' => 'User;2', 'language' => 'ruby')
59
59
  end
60
60
  end
61
61
 
62
62
  describe 'url-encoded request' do
63
63
  it 'handles params the same as a json request' do
64
- response = post '/', flipper_id: 'user:2'
64
+ response = post '/', flipper_id: 'User;2'
65
65
  params = JSON.parse(response.body)
66
- expect(params).to eq('flipper_id' => 'user:2')
66
+ expect(params).to eq('flipper_id' => 'User;2')
67
67
  end
68
68
 
69
69
  it 'handles single query string params' do
70
- response = post '/?language=ruby', flipper_id: 'user:2'
70
+ response = post '/?language=ruby', flipper_id: 'User;2'
71
71
  params = JSON.parse(response.body)
72
- expect(params).to eq('flipper_id' => 'user:2', 'language' => 'ruby')
72
+ expect(params).to eq('flipper_id' => 'User;2', 'language' => 'ruby')
73
73
  end
74
74
 
75
75
  it 'handles multiple query string params' do
76
- response = post '/?language=ruby&framework=rails', flipper_id: 'user:2'
76
+ response = post '/?language=ruby&framework=rails', flipper_id: 'User;2'
77
77
  params = JSON.parse(response.body)
78
- expect(params).to eq('flipper_id' => 'user:2', 'language' => 'ruby', 'framework' => 'rails')
78
+ expect(params).to eq('flipper_id' => 'User;2', 'language' => 'ruby', 'framework' => 'rails')
79
79
  end
80
80
  end
81
81
  end
@@ -2,7 +2,7 @@ require 'helper'
2
2
 
3
3
  RSpec.describe Flipper::Api::V1::Actions::ActorsGate do
4
4
  let(:app) { build_api(flipper) }
5
- let(:actor) { Flipper::Api::Actor.new('1') }
5
+ let(:actor) { Flipper::Actor.new('1') }
6
6
 
7
7
  describe 'enable' do
8
8
  before do
@@ -23,7 +23,7 @@ RSpec.describe Flipper::Api::V1::Actions::ActorsGate do
23
23
  end
24
24
 
25
25
  describe 'disable' do
26
- let(:actor) { Flipper::Api::Actor.new('1') }
26
+ let(:actor) { Flipper::Actor.new('1') }
27
27
 
28
28
  before do
29
29
  flipper[:my_feature].enable_actor(actor)
@@ -43,6 +43,30 @@ RSpec.describe Flipper::Api do
43
43
  end
44
44
  end
45
45
 
46
+ context 'when initialized with env_key' do
47
+ let(:app) { build_api(flipper, env_key: 'flipper_api') }
48
+
49
+ it 'uses provided env key instead of default' do
50
+ flipper[:a].enable
51
+ flipper[:b].disable
52
+
53
+ default_env_flipper = build_flipper
54
+ default_env_flipper[:env_a].enable
55
+ default_env_flipper[:env_b].disable
56
+
57
+ params = {}
58
+ env = {
59
+ 'flipper' => default_env_flipper,
60
+ 'flipper_api' => flipper,
61
+ }
62
+ get '/features', params, env
63
+
64
+ expect(last_response.status).to eq(200)
65
+ feature_names = json_response.fetch('features').map { |feature| feature.fetch('key') }
66
+ expect(feature_names).to eq(%w(a b))
67
+ end
68
+ end
69
+
46
70
  context "when request does not match any api routes" do
47
71
  let(:app) { build_api(flipper) }
48
72
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0.beta4
4
+ version: 0.11.0.beta5
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-10 00:00:00.000000000 Z
11
+ date: 2017-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.11.0.beta4
39
+ version: 0.11.0.beta5
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.11.0.beta4
46
+ version: 0.11.0.beta5
47
47
  description: Rack middleware that provides an API for the flipper gem.
48
48
  email:
49
49
  - nunemaker@gmail.com
@@ -56,7 +56,6 @@ files:
56
56
  - lib/flipper/api.rb
57
57
  - lib/flipper/api/action.rb
58
58
  - lib/flipper/api/action_collection.rb
59
- - lib/flipper/api/actor.rb
60
59
  - lib/flipper/api/error.rb
61
60
  - lib/flipper/api/error_response.rb
62
61
  - lib/flipper/api/json_params.rb
@@ -1,13 +0,0 @@
1
- module Flipper
2
- module Api
3
- # Internal: Shim for turning a string flipper id into something that responds to
4
- # flipper_id for Flipper::Types::Actor.
5
- class Actor
6
- attr_reader :flipper_id
7
-
8
- def initialize(flipper_id)
9
- @flipper_id = flipper_id
10
- end
11
- end
12
- end
13
- end