flipper-api 0.9.0.beta1 → 0.9.0

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: 3dc0d6945ca1251ecb23381d67619c4b47037182
4
- data.tar.gz: ef1f23b1ca4de85e97c761c9769fb7f8e44b74d3
3
+ metadata.gz: 190b68fb4dca2dbed9035080387164ddf37f803a
4
+ data.tar.gz: 987efcf4cfa1434b3d02110e80985a23cc6f2aff
5
5
  SHA512:
6
- metadata.gz: 5d1927804aa8737cd37fec2ca50ef4a4121887ca854a0ee80ea3b8e0d810f423564cc54240e18a66a2a873ed95f2e6b86c9c92062129ef7774f25ef4a26445bc
7
- data.tar.gz: 7b5965dbf784cdabc3850e54220e0258010f435e4fb6926121ad951950cc0ffceab0223ed7da72e9d1917e5a2efa681fd0218a2ee47329c972a1dc386af88f93
6
+ metadata.gz: a0b8d6d33fa9590e32f1cb44f70c485957b23fb11bf614c3882d3c509f5a39d9b81a8ea331b85811b9003f32130e5c6c05f04a3210a514e0d9312248c7dffe26
7
+ data.tar.gz: 61433fe1086f7a69779a36effc45ec36dad24b1fbca77789991917675f35da4af91dfc056ef37fe9afc39a25b84aff165572b5c1d02365fa3e835cfb043f5f67
@@ -1,8 +1,19 @@
1
+ require 'forwardable'
2
+ require 'flipper/api/error'
3
+ require 'json'
4
+
1
5
  module Flipper
2
6
  module Api
3
7
  class Action
4
8
  extend Forwardable
5
9
 
10
+ VALID_REQUEST_METHOD_NAMES = Set.new([
11
+ "get".freeze,
12
+ "post".freeze,
13
+ "put".freeze,
14
+ "delete".freeze,
15
+ ]).freeze
16
+
6
17
  # Public: Call this in subclasses so the action knows its route.
7
18
  #
8
19
  # regex - The Regexp that this action should run for.
@@ -47,7 +58,7 @@ module Flipper
47
58
  #
48
59
  # Returns whatever the request method returns in the action.
49
60
  def run
50
- if respond_to?(request_method_name)
61
+ if valid_request_method? && respond_to?(request_method_name)
51
62
  catch(:halt) { send(request_method_name) }
52
63
  else
53
64
  raise Api::RequestMethodNotSupported, "#{self.class} does not support request method #{request_method_name.inspect}"
@@ -111,6 +122,10 @@ module Flipper
111
122
  def path_parts
112
123
  @request.path.split("/")
113
124
  end
125
+
126
+ def valid_request_method?
127
+ VALID_REQUEST_METHOD_NAMES.include?(request_method_name)
128
+ end
114
129
  end
115
130
  end
116
131
  end
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = "0.9.0.beta1".freeze
2
+ VERSION = "0.9.0".freeze
3
3
  end
@@ -0,0 +1,59 @@
1
+ require 'helper'
2
+
3
+ RSpec.describe Flipper::Api::Action do
4
+ let(:action_subclass) {
5
+ Class.new(described_class) do
6
+ def noooope
7
+ raise "should never run this"
8
+ end
9
+
10
+ def get
11
+ [200, {}, "get"]
12
+ end
13
+
14
+ def post
15
+ [200, {}, "post"]
16
+ end
17
+
18
+ def put
19
+ [200, {}, "put"]
20
+ end
21
+
22
+ def delete
23
+ [200, {}, "delete"]
24
+ end
25
+ end
26
+ }
27
+
28
+ it "won't run method that isn't whitelisted" do
29
+ fake_request = Struct.new(:request_method, :env, :session).new("NOOOOPE", {}, {})
30
+ action = action_subclass.new(flipper, fake_request)
31
+ expect {
32
+ action.run
33
+ }.to raise_error(Flipper::Api::RequestMethodNotSupported)
34
+ end
35
+
36
+ it "will run get" do
37
+ fake_request = Struct.new(:request_method, :env, :session).new("GET", {}, {})
38
+ action = action_subclass.new(flipper, fake_request)
39
+ expect(action.run).to eq([200, {}, "get"])
40
+ end
41
+
42
+ it "will run post" do
43
+ fake_request = Struct.new(:request_method, :env, :session).new("POST", {}, {})
44
+ action = action_subclass.new(flipper, fake_request)
45
+ expect(action.run).to eq([200, {}, "post"])
46
+ end
47
+
48
+ it "will run put" do
49
+ fake_request = Struct.new(:request_method, :env, :session).new("PUT", {}, {})
50
+ action = action_subclass.new(flipper, fake_request)
51
+ expect(action.run).to eq([200, {}, "put"])
52
+ end
53
+
54
+ it "will run delete" do
55
+ fake_request = Struct.new(:request_method, :env, :session).new("DELETE", {}, {})
56
+ action = action_subclass.new(flipper, fake_request)
57
+ expect(action.run).to eq([200, {}, "delete"])
58
+ end
59
+ end
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.9.0.beta1
4
+ version: 0.9.0
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-06-23 00:00:00.000000000 Z
11
+ date: 2016-07-05 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.9.0.beta1
39
+ version: 0.9.0
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.9.0.beta1
46
+ version: 0.9.0
47
47
  description: Rack middleware that provides an API for the flipper gem.
48
48
  email:
49
49
  - nunemaker@gmail.com
@@ -63,6 +63,7 @@ files:
63
63
  - lib/flipper/api/v1/decorators/feature.rb
64
64
  - lib/flipper/api/v1/decorators/gate.rb
65
65
  - lib/flipper/version.rb
66
+ - spec/flipper/api/action_spec.rb
66
67
  - spec/flipper/api/v1/actions/boolean_gate_spec.rb
67
68
  - spec/flipper/api/v1/actions/feature_spec.rb
68
69
  homepage: https://github.com/jnunemaker/flipper
@@ -80,9 +81,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
81
  version: '0'
81
82
  required_rubygems_version: !ruby/object:Gem::Requirement
82
83
  requirements:
83
- - - ">"
84
+ - - ">="
84
85
  - !ruby/object:Gem::Version
85
- version: 1.3.1
86
+ version: '0'
86
87
  requirements: []
87
88
  rubyforge_project:
88
89
  rubygems_version: 2.4.5.1
@@ -90,5 +91,6 @@ signing_key:
90
91
  specification_version: 4
91
92
  summary: API for the Flipper gem
92
93
  test_files:
94
+ - spec/flipper/api/action_spec.rb
93
95
  - spec/flipper/api/v1/actions/boolean_gate_spec.rb
94
96
  - spec/flipper/api/v1/actions/feature_spec.rb