flipper-api 0.11.0.beta4 → 0.11.0.beta5

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.
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