floodgate 0.0.11 → 0.0.12

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: d934a5e26e5c75cb0b000f321de8a0ccfc42c010
4
- data.tar.gz: 82b0183c0ec1edf9d9703635c2f003e856a65795
3
+ metadata.gz: 02d0a31c5adc8fc0c05a7adfc8851e847f203534
4
+ data.tar.gz: 48cd70c1585d07a4ded3756439512ce71b31088c
5
5
  SHA512:
6
- metadata.gz: da323e40805cee980fac69efa28f8ee1e803c81c55b2d792f0444e17c879aa370325a3e6841c0c8f8c1132faf2b35405920ef421dc962594ed71783be34a8bc7
7
- data.tar.gz: 5aa2e49eeefd7c396c3f21d7403c630f222b581e9d61fc20bb50288a715f3f25d45baaa593a3ca5c8478e98a9e33c87d8ab3bdbd7e7e2f5b30bdc898de84a5e1
6
+ metadata.gz: 5c3a580540a16329b822ca4a99998beeaa44881730fe05a7ffe87233b4946e2625ff41ca516620f5064eead86b2627e7ba773cf85a0b55ce6dfb02a5a03e4623
7
+ data.tar.gz: 1a97ae00ddeaf916ce97908f3b267f99fdc7a39f2b9b3a4e079d77fbab33128acdbd217efdbf0b4c18623b70b96e6ae4558a99200c772abdb7b3b037b2f2af60
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.0.0-p353
1
+ 2.1.0
data/floodgate.gemspec CHANGED
@@ -18,6 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
+ spec.add_runtime_dependency 'faraday', '~> 0.8.9'
22
+ spec.add_runtime_dependency 'faraday_middleware', '~> 0.9.0'
23
+ spec.add_runtime_dependency 'hashie', '~> 2.0.5'
24
+
21
25
  spec.add_development_dependency 'pry'
22
26
  spec.add_development_dependency 'rake'
23
27
  spec.add_development_dependency 'rspec', '~> 2.14'
@@ -1,11 +1,116 @@
1
- require 'json'
2
- require 'open-uri'
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'hashie'
3
4
 
4
5
  module Floodgate
5
6
  class Client
6
- def self.status(app_id, api_token)
7
- # TODO: Handle errors, timeouts, proxies, environments, etc.
8
- JSON.parse(open("https://floodgate-api-staging.herokuapp.com/api/v1/apps/#{app_id}/status?api_token=#{api_token}").read)
7
+ def self.add_ip_address(ip_address)
8
+ return if ip_address.nil? || ip_address.empty?
9
+
10
+ params = { ip_address: { ip_address: ip_address } }
11
+
12
+ post('ip_addresses', params)
13
+ end
14
+
15
+ def self.allowed_ip_addresses
16
+ status.allowed_ip_addresses
17
+ end
18
+
19
+ def self.close
20
+ params = { app: { filter_traffic: true } }
21
+
22
+ put('', params)
23
+ end
24
+
25
+ def self.open
26
+ params = { app: { filter_traffic: false } }
27
+
28
+ put('', params)
29
+ end
30
+
31
+ def self.remove_ip_address(ip_address)
32
+ return if ip_address.nil? || ip_address.empty?
33
+
34
+ params = { ip_address: { ip_address: ip_address } }
35
+
36
+ delete('ip_addresses', params)
37
+ end
38
+
39
+ def self.set_redirect_url(redirect_url)
40
+ params = { app: { redirect_url: redirect_url } }
41
+
42
+ put('', params)
43
+ end
44
+
45
+ def self.default_status
46
+ Hashie::Mash.new(
47
+ default_status: true,
48
+ filter_traffic: false,
49
+ allowed_ip_addresses: [],
50
+ redirect_url: nil
51
+ )
52
+ end
53
+
54
+ def self.status
55
+ begin
56
+ get('status')
57
+ rescue Faraday::Error::ClientError => e
58
+ # TODO: Log
59
+ default_status
60
+ end
61
+ end
62
+
63
+ def self.delete(path, params = {})
64
+ verb_with_params_in_body(:delete, path, params)
65
+ end
66
+
67
+ def self.get(path, params = {})
68
+ params.merge!(api_token: Config.api_token)
69
+
70
+ response = get_connection.get(path, params)
71
+
72
+ response.body
73
+ end
74
+
75
+ def self.post(path, params = {})
76
+ verb_with_params_in_body(:post, path, params)
77
+ end
78
+
79
+ def self.put(path, params = {})
80
+ verb_with_params_in_body(:put, path, params)
81
+ end
82
+
83
+ def self.verb_with_params_in_body(verb, path, params = {})
84
+ params.merge!(api_token: Config.api_token)
85
+
86
+ response = get_connection.public_send(verb, path) do |request|
87
+ request.body = params
88
+ end
89
+
90
+ response.body
91
+ end
92
+
93
+ def self.base_url
94
+ "https://floodgate-api-staging.herokuapp.com/api/v1/apps/#{Config.app_id}"
95
+ end
96
+
97
+ def self.user_agent
98
+ 'FloodgateAgent'
99
+ end
100
+
101
+ def self.get_connection
102
+ conn = Faraday.new(url: base_url) do |builder|
103
+ builder.use Faraday::Response::Mashify
104
+ builder.use FaradayMiddleware::ParseJson, content_type: 'application/json'
105
+ builder.use Faraday::Request::UrlEncoded
106
+ builder.use Faraday::Response::RaiseError
107
+ builder.use Faraday::Adapter::NetHttp
108
+ end
109
+
110
+ conn.headers[:user_agent] = user_agent
111
+
112
+ conn
9
113
  end
10
114
  end
11
115
  end
116
+
@@ -1,17 +1,20 @@
1
1
  module Floodgate
2
2
  class Config
3
+ class << self
4
+ attr_accessor :app_id, :api_token
5
+
6
+ def reset
7
+ @app_id = @api_token = nil
8
+ end
9
+ end
10
+
3
11
  attr_accessor \
4
12
  :allowed_ip_addresses,
5
- :api_token,
6
- :app_id,
7
13
  :filter_traffic,
8
14
  :redirect_url
9
15
 
10
- def initialize(app_id, api_token)
11
- @app_id = app_id
12
- @api_token = api_token
13
-
14
- json = Client.status(app_id, api_token)
16
+ def initialize
17
+ json = Client.status
15
18
 
16
19
  @filter_traffic = json['filter_traffic']
17
20
  @redirect_url = json['redirect_url']
@@ -35,5 +38,10 @@ module Floodgate
35
38
  def redirect?
36
39
  !redirect_url.nil? && !redirect_url.empty?
37
40
  end
41
+
42
+ def reset
43
+ @redirect_url = nil
44
+ @filter_traffic = false
45
+ end
38
46
  end
39
47
  end
@@ -3,8 +3,11 @@ module Floodgate
3
3
  attr_accessor :app, :config
4
4
 
5
5
  def initialize(app, app_id, api_token)
6
+ Config.app_id = app_id
7
+ Config.api_token = api_token
8
+
6
9
  @app = app
7
- @config = Config.new(app_id, api_token)
10
+ @config = Config.new
8
11
  end
9
12
 
10
13
  def call(env)
@@ -0,0 +1,13 @@
1
+ require 'floodgate'
2
+ require 'rails'
3
+
4
+ module Floodgate
5
+ class Railtie < Rails::Railtie
6
+ railtie_name :floodgate
7
+
8
+ rake_tasks do
9
+ load 'tasks/floodgate_tasks.rake'
10
+ end
11
+ end
12
+ end
13
+
@@ -1,3 +1,3 @@
1
1
  module Floodgate
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
data/lib/floodgate.rb CHANGED
@@ -3,3 +3,5 @@ require 'floodgate/config'
3
3
  require 'floodgate/control'
4
4
  require 'floodgate/version'
5
5
 
6
+ require 'floodgate/railtie' if defined?(Rails)
7
+
@@ -0,0 +1,45 @@
1
+ namespace :floodgate do
2
+ desc 'Display the floodgate status'
3
+ task :status => :environment do
4
+ puts Floodgate::Client.status
5
+ end
6
+
7
+ desc 'Close the floodgate'
8
+ task :close => :environment do
9
+ Floodgate::Client.close
10
+ end
11
+
12
+ desc 'Open the floodgate'
13
+ task :open => :environment do
14
+ Floodgate::Client.open
15
+ end
16
+
17
+ desc 'Set the URL floodgate redirects to when filtering traffic'
18
+ task :set_redirect_url => :environment do
19
+ redirect_url = ENV['redirect_url']
20
+
21
+ Floodgate::Client.set_redirect_url(redirect_url)
22
+ end
23
+
24
+ namespace :ip_address do
25
+ desc 'Display a list of allowed IP Addresses'
26
+ task :all => :environment do
27
+ puts Floodgate::Client.allowed_ip_addresses
28
+ end
29
+
30
+ desc 'Add an IP Address to allow through the floodgate'
31
+ task :add => :environment do
32
+ ip_address = ENV['ip_address']
33
+
34
+ Floodgate::Client.add_ip_address(ip_address)
35
+ end
36
+
37
+ desc 'Remove an IP Address from the list allowed through the floodgate'
38
+ task :remove => :environment do
39
+ ip_address = ENV['ip_address']
40
+
41
+ Floodgate::Client.remove_ip_address(ip_address)
42
+ end
43
+ end
44
+ end
45
+
@@ -2,15 +2,155 @@ require 'spec_helper'
2
2
 
3
3
  module Floodgate
4
4
  describe Client do
5
- let(:json) { Client.status(app_id, api_token) }
5
+ let(:app_id) { '9d2852cff163507330242460c0ca5eec' }
6
+ let(:api_token) { 'f28b5848e158f96e96168aa37f0002f2' }
7
+ let(:status) { Client.status }
8
+
9
+ before do
10
+ Config.app_id = app_id
11
+ Config.api_token = api_token
12
+ end
13
+
14
+ describe '.add_ip_address' do
15
+ context 'when an ip address is specified' do
16
+ let(:ip_address) { random_ip_address }
17
+ let(:params) do
18
+ { ip_address: { ip_address: ip_address } }
19
+ end
20
+
21
+ after { Client.remove_ip_address(ip_address) }
22
+
23
+ it 'adds it to the list of allowed ip addresses' do
24
+ expect { Client.add_ip_address(ip_address) }.to change { Client.allowed_ip_addresses.include?(ip_address) }.from(false).to(true)
25
+ end
26
+ end
27
+
28
+ context 'when an ip address is not specified' do
29
+ context 'and it is nil' do
30
+ let(:ip_address) { nil }
31
+
32
+ it' does not post' do
33
+ expect(Client).not_to receive(:post)
34
+
35
+ Client.add_ip_address(ip_address)
36
+ end
37
+ end
38
+
39
+ context 'and it is empty' do
40
+ let(:ip_address) { '' }
41
+
42
+ it' does not post' do
43
+ expect(Client).not_to receive(:post)
44
+
45
+ Client.add_ip_address(ip_address)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ describe '.allowed_ip_addresses' do
52
+ let(:ip_address) { random_ip_address }
53
+
54
+ before { Client.add_ip_address(ip_address) }
55
+ after { Client.remove_ip_address(ip_address) }
56
+
57
+ it 'returns the allowed ip addresses' do
58
+ expect(Client.allowed_ip_addresses).to include(ip_address)
59
+ end
60
+ end
61
+
62
+ describe '.close' do
63
+ before { Client.open }
64
+
65
+ it 'changes filter_traffic from false to true' do
66
+ expect { Client.close }.to change { Client.status.filter_traffic }.from(false).to(true)
67
+ end
68
+ end
69
+
70
+ describe '.open' do
71
+ before { Client.close }
72
+
73
+ it 'changes filter_traffic from true to false' do
74
+ expect { Client.open }.to change { Client.status.filter_traffic }.from(true).to(false)
75
+ end
76
+ end
77
+
78
+ describe '.remove_ip_address' do
79
+ context 'when an ip address is specified' do
80
+ let(:ip_address) { random_ip_address }
81
+ let(:params) do
82
+ { ip_address: { ip_address: ip_address } }
83
+ end
84
+
85
+ before { Client.add_ip_address(ip_address) }
86
+
87
+ it 'removes it from the list of allowed ip addresses' do
88
+ expect { Client.remove_ip_address(ip_address) }.to change { Client.allowed_ip_addresses.include?(ip_address) }.from(true).to(false)
89
+ end
90
+ end
91
+
92
+ context 'when an ip address is not specified' do
93
+ context 'and it is nil' do
94
+ let(:ip_address) { nil }
95
+
96
+ it' does not post' do
97
+ expect(Client).not_to receive(:post)
98
+
99
+ Client.remove_ip_address(ip_address)
100
+ end
101
+ end
102
+
103
+ context 'and it is empty' do
104
+ let(:ip_address) { '' }
105
+
106
+ it' does not post' do
107
+ expect(Client).not_to receive(:post)
108
+
109
+ Client.remove_ip_address(ip_address)
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ describe '.set_redirect_url' do
116
+ before { Client.set_redirect_url(initial_redirect_url) }
117
+
118
+ context 'when a redirect_url is specified' do
119
+ let(:initial_redirect_url) { nil }
120
+ let(:redirect_url) { 'http://example.com' }
121
+
122
+ it 'changes the redirect_url' do
123
+ expect { Client.set_redirect_url(redirect_url) }.to change { Client.status.redirect_url }.from(initial_redirect_url).to(redirect_url)
124
+ end
125
+ end
126
+
127
+ context 'when nil is specified' do
128
+ let(:initial_redirect_url) { 'http://example.com' }
129
+ let(:redirect_url) { nil }
130
+
131
+ it 'clears the redirect_url' do
132
+ expect { Client.set_redirect_url(redirect_url) }.to change { Client.status.redirect_url }
133
+ end
134
+ end
135
+ end
136
+
137
+ describe '.default_status' do
138
+ it 'does not filter traffic' do
139
+ expect(Client.default_status.filter_traffic).to be_false
140
+ end
141
+
142
+ it 'has a flag indicating that it is the default status' do
143
+ expect(Client.default_status.default_status).to be_true
144
+ end
145
+ end
6
146
 
7
147
  describe '.status' do
8
148
  context 'when the credentials are not valid' do
9
149
  let(:app_id) { 'foo' }
10
150
  let(:api_token) { 'bar' }
11
151
 
12
- it 'is an error' do
13
- expect { json }.to raise_error(OpenURI::HTTPError)
152
+ it 'returns the default status' do
153
+ expect(status).to eq Client.default_status
14
154
  end
15
155
  end
16
156
 
@@ -20,7 +160,7 @@ module Floodgate
20
160
  let(:api_token) { 'da2f2d06c102eea0f1971c2c90936ee3' }
21
161
 
22
162
  it 'filter_traffic is true' do
23
- expect(json['filter_traffic']).to be_true
163
+ expect(status.filter_traffic).to be_true
24
164
  end
25
165
  end
26
166
 
@@ -29,10 +169,11 @@ module Floodgate
29
169
  let(:api_token) { '349d2b1ee8ec56eb04b909b1eb9993b0' }
30
170
 
31
171
  it 'filter_traffic is false' do
32
- expect(json['filter_traffic']).to be_false
172
+ expect(status.filter_traffic).to be_false
33
173
  end
34
174
  end
35
175
  end
36
176
  end
37
177
  end
38
178
  end
179
+
@@ -2,7 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  module Floodgate
4
4
  describe Config do
5
- before { Client.stub(:status).and_return json }
5
+ before do
6
+ Client.stub(:status).and_return json
7
+ Config.app_id = app_id
8
+ Config.api_token = api_token
9
+ end
6
10
 
7
11
  let(:json) do
8
12
  {
@@ -18,7 +22,7 @@ module Floodgate
18
22
 
19
23
  let(:app_id) { 'abc123' }
20
24
  let(:api_token) { 'def456' }
21
- let(:config) { Config.new(app_id, api_token) }
25
+ let(:config) { Config.new }
22
26
 
23
27
  describe '#client_allowed?' do
24
28
  context 'when the environment specifies the client address in REMOTE_ADDR' do
@@ -185,6 +189,29 @@ module Floodgate
185
189
  end
186
190
  end
187
191
  end
192
+
193
+ describe '.reset' do
194
+ let(:config) { Config.new }
195
+ let(:filter_traffic) { true }
196
+ let(:redirect_url) { 'someurl' }
197
+
198
+ it 'sets filter_traffic to nil' do
199
+ expect{ config.reset }. to change{ config.filter_traffic }.from(true).to(false)
200
+ end
201
+
202
+ it 'sets redirect_url to nil' do
203
+ expect{ config.reset }. to change{ config.redirect_url }.from('someurl').to(nil)
204
+ end
205
+
206
+ it 'sets api_token to nil' do
207
+ expect{ Config.reset }. to change{ Config.api_token }.from('def456').to(nil)
208
+ end
209
+
210
+ it 'sets app_id to nil' do
211
+ expect{ Config.reset }. to change{ Config.app_id }.from('abc123').to(nil)
212
+ end
213
+
214
+ end
188
215
  end
189
216
  end
190
217
 
data/spec/spec_helper.rb CHANGED
@@ -8,10 +8,7 @@ require 'rspec'
8
8
 
9
9
  require 'floodgate'
10
10
 
11
- RSpec.configure do |config|
12
- config.treat_symbols_as_metadata_keys_with_true_values = true
13
- config.filter_run focused: true
14
- config.alias_example_to :fit, focused: true
15
- config.alias_example_to :pit, pending: true
16
- config.run_all_when_everything_filtered = true
17
- end
11
+ # Requires supporting ruby files with custom matchers and macros, etc,
12
+ # in spec/support/ and its subdirectories.
13
+ Dir[File.expand_path(File.join(__FILE__, '../support/**/*.rb'))].each { |f| require f }
14
+
@@ -0,0 +1,6 @@
1
+ require 'ipaddr'
2
+
3
+ def random_ip_address
4
+ IPAddr.new(rand(2**32), Socket::AF_INET).to_s
5
+ end
6
+
@@ -0,0 +1,7 @@
1
+ RSpec.configure do |config|
2
+ config.treat_symbols_as_metadata_keys_with_true_values = true
3
+ config.filter_run focused: true
4
+ config.alias_example_to :fit, focused: true
5
+ config.alias_example_to :pit, pending: true
6
+ config.run_all_when_everything_filtered = true
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: floodgate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark McEahern
@@ -9,62 +9,104 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-26 00:00:00.000000000 Z
12
+ date: 2014-02-28 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 0.8.9
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 0.8.9
28
+ - !ruby/object:Gem::Dependency
29
+ name: faraday_middleware
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 0.9.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.9.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: hashie
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 2.0.5
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 2.0.5
14
56
  - !ruby/object:Gem::Dependency
15
57
  name: pry
16
58
  requirement: !ruby/object:Gem::Requirement
17
59
  requirements:
18
- - - '>='
60
+ - - ">="
19
61
  - !ruby/object:Gem::Version
20
62
  version: '0'
21
63
  type: :development
22
64
  prerelease: false
23
65
  version_requirements: !ruby/object:Gem::Requirement
24
66
  requirements:
25
- - - '>='
67
+ - - ">="
26
68
  - !ruby/object:Gem::Version
27
69
  version: '0'
28
70
  - !ruby/object:Gem::Dependency
29
71
  name: rake
30
72
  requirement: !ruby/object:Gem::Requirement
31
73
  requirements:
32
- - - '>='
74
+ - - ">="
33
75
  - !ruby/object:Gem::Version
34
76
  version: '0'
35
77
  type: :development
36
78
  prerelease: false
37
79
  version_requirements: !ruby/object:Gem::Requirement
38
80
  requirements:
39
- - - '>='
81
+ - - ">="
40
82
  - !ruby/object:Gem::Version
41
83
  version: '0'
42
84
  - !ruby/object:Gem::Dependency
43
85
  name: rspec
44
86
  requirement: !ruby/object:Gem::Requirement
45
87
  requirements:
46
- - - ~>
88
+ - - "~>"
47
89
  - !ruby/object:Gem::Version
48
90
  version: '2.14'
49
91
  type: :development
50
92
  prerelease: false
51
93
  version_requirements: !ruby/object:Gem::Requirement
52
94
  requirements:
53
- - - ~>
95
+ - - "~>"
54
96
  - !ruby/object:Gem::Version
55
97
  version: '2.14'
56
98
  - !ruby/object:Gem::Dependency
57
99
  name: simplecov
58
100
  requirement: !ruby/object:Gem::Requirement
59
101
  requirements:
60
- - - ~>
102
+ - - "~>"
61
103
  - !ruby/object:Gem::Version
62
104
  version: '0.8'
63
105
  type: :development
64
106
  prerelease: false
65
107
  version_requirements: !ruby/object:Gem::Requirement
66
108
  requirements:
67
- - - ~>
109
+ - - "~>"
68
110
  - !ruby/object:Gem::Version
69
111
  version: '0.8'
70
112
  description: floodgate helps you control access to your app
@@ -75,9 +117,9 @@ executables: []
75
117
  extensions: []
76
118
  extra_rdoc_files: []
77
119
  files:
78
- - .gitignore
79
- - .ruby-gemset
80
- - .ruby-version
120
+ - ".gitignore"
121
+ - ".ruby-gemset"
122
+ - ".ruby-version"
81
123
  - Gemfile
82
124
  - LICENSE.txt
83
125
  - README.md
@@ -87,11 +129,15 @@ files:
87
129
  - lib/floodgate/client.rb
88
130
  - lib/floodgate/config.rb
89
131
  - lib/floodgate/control.rb
132
+ - lib/floodgate/railtie.rb
90
133
  - lib/floodgate/version.rb
134
+ - lib/tasks/floodgate_tasks.rake
91
135
  - spec/lib/floodgate/client_spec.rb
92
136
  - spec/lib/floodgate/config_spec.rb
93
137
  - spec/lib/floodgate/control_spec.rb
94
138
  - spec/spec_helper.rb
139
+ - spec/support/helpers/ip_address_helpers.rb
140
+ - spec/support/rspec.rb
95
141
  homepage: http://github.com/adorableio/floodgate
96
142
  licenses:
97
143
  - MIT
@@ -102,17 +148,17 @@ require_paths:
102
148
  - lib
103
149
  required_ruby_version: !ruby/object:Gem::Requirement
104
150
  requirements:
105
- - - '>='
151
+ - - ">="
106
152
  - !ruby/object:Gem::Version
107
153
  version: '0'
108
154
  required_rubygems_version: !ruby/object:Gem::Requirement
109
155
  requirements:
110
- - - '>='
156
+ - - ">="
111
157
  - !ruby/object:Gem::Version
112
158
  version: '0'
113
159
  requirements: []
114
160
  rubyforge_project:
115
- rubygems_version: 2.1.11
161
+ rubygems_version: 2.2.2
116
162
  signing_key:
117
163
  specification_version: 4
118
164
  summary: floodgate helps you control access to your app
@@ -121,3 +167,5 @@ test_files:
121
167
  - spec/lib/floodgate/config_spec.rb
122
168
  - spec/lib/floodgate/control_spec.rb
123
169
  - spec/spec_helper.rb
170
+ - spec/support/helpers/ip_address_helpers.rb
171
+ - spec/support/rspec.rb