aviator_session_pool 0.0.1

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODEwZWMwYmIxY2I5ODZkZmU3YTVhMmY3NTEwYmIyYTM4Yjg3OTJhMw==
5
+ data.tar.gz: !binary |-
6
+ ZjUxOTMzYzJhM2M4ZDBlNzIzZTg5MWFhMzlmZTU0ZWQ0YjU5ODA2ZQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NjQ2MDRmMjJjZGU1MTExNTg5ODdiMWYwNGVjMDAxMzlmODc5NDU2NTYwNzI1
10
+ YTIzNjcyNjliZDUxYWE4MjI1MmQ3ODI1YThlNDY1ZThjMTAyMzU0M2I3MzQ2
11
+ ZjllYzE2MzEzYjgwYjA5ZmE2MWJjNGFlMTgwZGY2ZjgzNTQ5NjU=
12
+ data.tar.gz: !binary |-
13
+ MDNmMjkyZGNhZjg0ZTZlYWE3MWRlOWUwZmJjMjE2MDg1Mjk3NzI4NmE5MzA1
14
+ ZmM4Y2E2ZWI3Yzg2ZDBkNjdkY2I1ZDNhM2Y2Y2RjMGMzZGI0ZWQ2NGI2NmVj
15
+ OTgzY2Q5ZTMyNjVlMGNkZTJkZDk5MjNmZmZlMmY4NmFmMzNmMzk=
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp/*.*
18
+ !tmp/.gitignore
19
+ .DS_Store
20
+ test/environment.yml
21
+ vcr.log
22
+ dump.rdb
@@ -0,0 +1 @@
1
+ aviator_session_pool
@@ -0,0 +1 @@
1
+ ruby-1.9.3-p448
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ branches:
6
+ only:
7
+ - master
8
+ - release
9
+ bundler_args: --without development
10
+ script:
11
+ - bundle exec rake
12
+ services:
13
+ - redis-server
data/Gemfile ADDED
@@ -0,0 +1,17 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in aviator.gemspec
4
+ gemspec
5
+
6
+ # Putting these gems in the test group so that
7
+ # we can tell travis-ci not to build any of the
8
+ # development gems. Makes the build run faster.
9
+ group :test do
10
+ gem 'rake'
11
+ gem 'simplecov', '~> 0.7.0'
12
+ gem 'coveralls', '~> 0.6.0'
13
+ gem 'json', '~> 1.7.0'
14
+ gem 'minitest', '~> 4.7.0'
15
+ gem 'minitest-reporters', '~> 0.14.20'
16
+ gem 'vcr', '~> 2.5.0'
17
+ end
@@ -0,0 +1,6 @@
1
+ guard 'minitest' do
2
+ watch(%r|^lib/aviator/session_pool\.rb|) { "test" }
3
+ watch(%r|^test/test_helper\.rb|) { "test" }
4
+ watch(%r|^lib/aviator/(.*)\.rb|) { |m| "test/aviator/#{m[1]}_test.rb" }
5
+ watch(%r|^test/aviator/.*_test\.rb|) # Run the matched file
6
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Mark Maglana, Alfonso Dillera
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,97 @@
1
+ # Aviator Session Pool
2
+
3
+ Experimental library for managing [Aviator](http://aviator.github.io/www) sessions.
4
+
5
+ [![Build Status](https://travis-ci.org/aviator/session_pool.png?branch=master)](https://travis-ci.org/aviator/session_pool)
6
+ [![Coverage Status](https://coveralls.io/repos/aviator/session_pool/badge.png)](https://coveralls.io/r/aviator/session_pool)
7
+
8
+ ```ruby
9
+ require 'aviator'
10
+ require 'aviator/session_pool'
11
+
12
+ Aviator::SessionPool.configure(
13
+ config_file: 'path/to/aviator.yml',
14
+ environment: :production,
15
+ log_file: 'path/to/aviator.log',
16
+ redis_host: 'localhost',
17
+ redis_port: 6785
18
+ )
19
+
20
+
21
+ #==================
22
+ # LOGIN CONTROLLER
23
+ #==================
24
+
25
+ # Create an unscoped session
26
+ Aviator::SessionPool.get_or_create(session[:session_id]) do |creds|
27
+ creds.username = username
28
+ creds.password = password
29
+ end
30
+
31
+
32
+ # Moments pass...
33
+
34
+ # Now the user is requesting access to a specific project/tenant
35
+
36
+ #===============================
37
+ # IN A CONTROLLER BEFORE_FILTER
38
+ #===============================
39
+
40
+ # Attempt to get the unscoped session which is an indicator that
41
+ # the user has been previously authenticated.
42
+ #
43
+ # When getting a session from the pool, SessionPool calls the
44
+ # object's validate method. If that method returns false, then
45
+ # SessionPool will return nil. If there is no session with the
46
+ # given key, SessionPool will also return nil.
47
+ unless unscoped = Aviator::SessionPool.get(session[:session_id])
48
+ # This means the user is not yet authenticated or
49
+ # her session with OpenStack has expired. Do the ff:
50
+ # - Log out user
51
+ # - Redirect user to login page
52
+ end
53
+
54
+
55
+ #=====================================
56
+ # IN ANOTHER CONTROLLER BEFORE_FILTER
57
+ #=====================================
58
+
59
+ # Since user is asking for resources for a specific tenant, let's
60
+ # get a session scoped to that tenant.
61
+ Aviator::SessionPool.get_or_create(session[:session_id] + tenant_name.underscore) do |creds|
62
+ creds.token_id = unscoped[:auth_info][:access][:token][:id]
63
+ creds.tenant_name = tenant_name
64
+ end
65
+
66
+ # scoped will have to be shared between the controller and
67
+ # whichever model or object will need to use it.
68
+ Aviator::SessionPool.set_current(session[:session_id] + tenant_name.underscore)
69
+
70
+
71
+ #=========================
72
+ # IN SOME MODEL OR OBJECT
73
+ #=========================
74
+
75
+ # Use current session like any other Aviator session. If set_current was not
76
+ # called prior to this, get_current will raise a CurrentSessionNotDefinedError
77
+ #
78
+ # WARNING: Since get_current uses a class instance variable, it will contain
79
+ # a value between http requests whether set_current was called or not for as long
80
+ # as it was called at least once.
81
+ Aviator::SessionPool.get_current.compute_service.request(:list_servers)
82
+
83
+
84
+
85
+ # Maintaining an admin session
86
+
87
+ # Authentication will use credentials in the config file since
88
+ # a block is not provided in this call.
89
+ admin = Aviator::SessionPool.get_or_create('admin')
90
+
91
+ #=========================
92
+ # IN SOME MODEL OR OBJECT
93
+ #=========================
94
+
95
+ # Use the admin session
96
+ Aviator::SessionPool.get_or_create('admin').identity_service.request(:list_tenants, endpoint_type: :admin)
97
+ ```
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.pattern = "test/aviator/**/*_test.rb"
6
+ t.libs.push 'test'
7
+ end
8
+
9
+ task :default => :test
@@ -0,0 +1,3 @@
1
+ require 'redis'
2
+ require 'aviator/session_pool/version'
3
+ require 'aviator/session_pool/session_pool'
@@ -0,0 +1,101 @@
1
+ require 'redis'
2
+
3
+ module Aviator
4
+ class SessionPool
5
+
6
+ class CurrentSessionNotDefinedError < StandardError
7
+ def initialize
8
+ super "Current session is not defined. Make sure to call ::set_current first."
9
+ end
10
+ end
11
+
12
+ class SessionNotFoundError < StandardError
13
+ def initialize(key)
14
+ super "There is no session with key #{ key } in the pool"
15
+ end
16
+ end
17
+
18
+
19
+ REDIS_KEY_PREFIX = 'aviator.session_dumps'
20
+
21
+ class << self
22
+
23
+ def []=(key, session)
24
+ session_key = build_key(key)
25
+
26
+ redis.set(session_key, session.dump)
27
+ end
28
+
29
+
30
+ def [](key)
31
+ session_dump = redis.get(build_key(key))
32
+
33
+ return nil unless session_dump
34
+
35
+ session = Aviator::Session.load(session_dump)
36
+
37
+ session.validate ? session : nil
38
+ end
39
+ alias :get :[]
40
+
41
+
42
+ # Not thread safe! BUT good enough for
43
+ # a single-threaded web application.
44
+ def configure(options)
45
+ @configuration = options
46
+
47
+ # So that the redis configuration will
48
+ # be reloaded on the next ::redis call
49
+ @redis = nil
50
+ end
51
+ attr_reader :configuration
52
+ alias :c :configuration
53
+
54
+
55
+ # WARNING: Since get_current uses a class instance variable, it will contain
56
+ # a value between http requests whether set_current was called or not for as long
57
+ # as it was called at least once.
58
+ def get_current
59
+ self.get(@current_key) || (raise CurrentSessionNotDefinedError.new)
60
+ end
61
+
62
+
63
+ def get_or_create(key, &block)
64
+ # If session is invalid or does not exist, self[] will return nil
65
+ unless session = self[key]
66
+ config = configuration.dup
67
+ [:redis_host, :redis_port].each{|k| config.delete k }
68
+ session = Aviator::Session.new(config)
69
+
70
+ session.authenticate &block
71
+
72
+ self[key] = session
73
+ end
74
+
75
+ session
76
+ end
77
+
78
+
79
+ # Not thread safe! BUT good enough for
80
+ # a single-threaded web application.
81
+ def set_current(key)
82
+ raise SessionNotFoundError.new(key) unless self.get(key)
83
+
84
+ @current_key = key
85
+ end
86
+
87
+
88
+ private
89
+
90
+ def build_key(key)
91
+ "#{ REDIS_KEY_PREFIX }.#{ key }"
92
+ end
93
+
94
+ def redis
95
+ @redis ||= Redis.new(host: c[:redis_host], port: c[:redis_port])
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,5 @@
1
+ module Aviator
2
+ class SessionPool
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'aviator/session_pool'
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'aviator/session_pool/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "aviator_session_pool"
8
+ spec.version = Aviator::SessionPool::VERSION
9
+ spec.authors = ["Mark Maglana", "Alfonso Dillera"]
10
+ spec.email = ["mmaglana@gmail.com", "aj.dillera@gmail.com"]
11
+ spec.description = %q{ A library for managing multiple Aviator sessions }
12
+ spec.summary = %q{ A library for managing multiple Aviator sessions }
13
+ spec.homepage = "http://github.io/aviator/session_pool"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'aviator', '>= 0.0.6'
22
+ spec.add_dependency 'redis', '>= 3.0.4'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency 'rb-fsevent', '~> 0.9.0'
27
+ spec.add_development_dependency 'guard', '~> 1.8.0'
28
+ spec.add_development_dependency 'guard-rake', '~> 0.0.0'
29
+ spec.add_development_dependency 'guard-minitest', '~> 0.5.0'
30
+ spec.add_development_dependency 'ruby_gntp', '~> 0.3.0'
31
+ spec.add_development_dependency 'pry', '~> 0.9.0'
32
+ spec.add_development_dependency 'yard', '~> 0.8.0'
33
+ spec.add_development_dependency 'redcarpet', '~> 2.3.0'
34
+ end
@@ -0,0 +1,225 @@
1
+ require 'test_helper'
2
+
3
+ class Aviator::Test
4
+
5
+ describe 'aviator/session_pool/session_pool' do
6
+
7
+ def default_options
8
+ {
9
+ config_file: 'path/to/aviator.yml',
10
+ environment: :production,
11
+ log_file: 'path/to/aviator.log',
12
+ redis_host: 'localhost',
13
+ redis_port: 6379
14
+ }
15
+ end
16
+
17
+
18
+ def redis
19
+ @redis ||= Redis.new(host: default_options[:redis_host], port: default_options[:redis_port])
20
+ end
21
+
22
+
23
+ def session
24
+ @session ||= Aviator::Session.new default_options
25
+ end
26
+
27
+
28
+ def subject
29
+ Aviator::SessionPool
30
+ end
31
+
32
+
33
+ before do
34
+ redis.flushdb
35
+
36
+ # Reload Session mocks each time
37
+ load 'support/aviator_session_mock.rb'
38
+
39
+ subject.configure default_options
40
+ end
41
+
42
+
43
+ describe '::[]=' do
44
+
45
+ it 'stores the session dump in redis' do
46
+ key = 'somestring'
47
+
48
+ subject[key] = session
49
+
50
+ stored = redis.get(subject.send(:build_key, key))
51
+
52
+ stored.wont_be_nil
53
+ stored.must_equal session.dump
54
+ end
55
+
56
+ end # describe '::[]='
57
+
58
+
59
+ describe '::[]' do
60
+
61
+ it 'retrieves a previously stored session from redis' do
62
+ key = 'somestring'
63
+
64
+ subject[key] = session
65
+
66
+ retrieved = subject[key]
67
+
68
+ retrieved.class.must_equal Aviator::Session
69
+ retrieved.dump.must_equal session.dump
70
+ end
71
+
72
+
73
+ it 'returns nil when a stored session is invalid' do
74
+ key = 'somestring'
75
+
76
+ subject[key] = session
77
+
78
+ Aviator::Session.class_eval do
79
+ def validate
80
+ false
81
+ end
82
+ end
83
+
84
+ subject[key].must_be_nil
85
+ end
86
+
87
+
88
+ it 'returns nil when the session does not exist' do
89
+ subject['boguskey'].must_be_nil
90
+ end
91
+
92
+ end # describe '::[]'
93
+
94
+
95
+ describe '::configure' do
96
+
97
+ it 'sets the class\'s configuration' do
98
+ opts = {
99
+ config_file: 'the quick',
100
+ environment: 'brown fox',
101
+ log_file: 'jumps over',
102
+ redis_host: 'the lazy',
103
+ redis_port: 'dog'
104
+ }
105
+
106
+ subject.configure opts
107
+
108
+ subject.configuration.each{ |key, value| value.must_equal opts[key] }
109
+ end
110
+
111
+ end # describe '::configure'
112
+
113
+
114
+ describe '::get' do
115
+
116
+ it 'aliases ::[]' do
117
+ key = 'somestring'
118
+
119
+ subject[key] = session
120
+
121
+ subject.get(key).dump.must_equal subject[key].dump
122
+ end
123
+
124
+ end # describe '::get'
125
+
126
+
127
+ describe '::get_or_create' do
128
+
129
+ it 'loads a session if the associated session dump exists' do
130
+ key = 'loadsessionkey'
131
+
132
+ subject[key] = session
133
+
134
+ subject.get_or_create(key).dump.must_equal session.dump
135
+ end
136
+
137
+
138
+ it 'creates a new session if one with the given key does not exist' do
139
+ key = 'createsessionkey'
140
+
141
+ subject.get_or_create(key).wont_be_nil
142
+ subject.get_or_create(key).class.must_equal session.class
143
+ end
144
+
145
+
146
+ it 'creates a new session if one with the given key is invalid' do
147
+ key = 'invalidsessionkey'
148
+
149
+ subject[key] = session
150
+
151
+
152
+ Aviator::Session.class_eval do
153
+ def validate
154
+ false
155
+ end
156
+ end
157
+
158
+
159
+ subject.get_or_create(key).dump.wont_equal session.dump
160
+ end
161
+
162
+
163
+ it 'authenticates newly created sessions' do
164
+ key = 'authenticatesnewsessionkey'
165
+
166
+ session = subject.get_or_create(key)
167
+
168
+ session.authenticated?.must_equal true
169
+ end
170
+
171
+
172
+ it 'passes on a block to the newly create session if provided' do
173
+ key = 'passessonblocktosessionkey'
174
+
175
+ session = subject.get_or_create(key) do |c|
176
+ c.username = 'anything'
177
+ end
178
+
179
+ session.block_provided?.must_equal true
180
+ end
181
+
182
+ end # describe '::get_or_create'
183
+
184
+
185
+ describe '::set_current' do
186
+
187
+ it 'sets the current session' do
188
+ key = 'setcurrentsessionkey'
189
+
190
+ s = subject.get_or_create(key)
191
+
192
+ subject.set_current(key)
193
+
194
+ subject.get_current.dump.must_equal s.dump
195
+ end
196
+
197
+
198
+ it 'raises an error when the key does not exist' do
199
+ key = 'setcurrentnonexistentsessionkey'
200
+
201
+ the_method = lambda do
202
+ subject.set_current(key)
203
+ end
204
+
205
+ the_method.must_raise Aviator::SessionPool::SessionNotFoundError
206
+ end
207
+
208
+ end
209
+
210
+
211
+ describe '::get_current' do
212
+
213
+ it 'raises an error if set_current was no previously called' do
214
+ the_method = lambda do
215
+ subject.get_current
216
+ end
217
+
218
+ the_method.must_raise Aviator::SessionPool::CurrentSessionNotDefinedError
219
+ end
220
+
221
+ end
222
+
223
+ end
224
+
225
+ end
@@ -0,0 +1,38 @@
1
+ require 'aviator'
2
+
3
+ module Aviator
4
+ class Session
5
+ def initialize(opts=nil)
6
+ @session_dump = opts[:session_dump] || (0...50).map{ ('a'..'z').to_a[rand(26)] }.join
7
+ @authenticated = opts[:session_dump] ? true : false
8
+ @block_provided = false
9
+ end
10
+
11
+ def authenticate(&block)
12
+ @authenticated = true
13
+ @block_provided = (block ? true : false)
14
+ end
15
+
16
+ def authenticated?
17
+ @authenticated
18
+ end
19
+
20
+ def block_provided?
21
+ @block_provided
22
+ end
23
+
24
+ def dump
25
+ @session_dump
26
+ end
27
+
28
+ def validate
29
+ true
30
+ end
31
+
32
+ class << self
33
+ def load(session_dump)
34
+ new(session_dump: session_dump)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,29 @@
1
+ module Aviator
2
+ class Test < MiniTest::Spec
3
+
4
+ def cassette_name
5
+ path = self.class.to_s
6
+ .gsub(/^aviator\//, '')
7
+ .gsub(/^Aviator::Test::/, '')
8
+ .gsub(/::#/, '/i_')
9
+ .gsub(/::::/, '/c_')
10
+ .gsub(/::/, '/')
11
+ .underscore
12
+
13
+ basename = __name__.gsub(/test_\d+_/, '')
14
+
15
+ "#{ path }/#{ basename }"
16
+ end
17
+
18
+
19
+ before do
20
+ # ::VCR.insert_cassette cassette_name
21
+ end
22
+
23
+
24
+ after do
25
+ # ::VCR.eject_cassette
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ require "minitest/reporters"
2
+
3
+ module Aviator
4
+ class Test
5
+
6
+ class SpecReporter < MiniTest::Reporters::SpecReporter
7
+
8
+ private
9
+
10
+ def pad_test(test)
11
+ str = test.to_s.gsub(/(test_)/, '').gsub(/_/, ' ')
12
+ pad("%-#{TEST_SIZE}s" % str, TEST_PADDING)[0..TEST_SIZE]
13
+ end
14
+
15
+ def print_info(e)
16
+ print " #{e.exception.class.to_s}:\n"
17
+ e.message.each_line { |line| print_with_info_padding(line) }
18
+
19
+ trace = filter_backtrace(e.backtrace)
20
+
21
+ # TODO: Use the proper MiniTest way of customizing the filter
22
+ trace.each { |line| print_with_info_padding(line) unless line =~ /\.rvm|gems|_run_anything/ }
23
+ end
24
+
25
+ def print_suite(suite)
26
+ puts suite.name.gsub('::#', '#')
27
+ @suites << suite
28
+ end
29
+ end
30
+
31
+
32
+ class ProgressReporter < MiniTest::Reporters::ProgressReporter
33
+
34
+ private
35
+
36
+ def print_test_with_time(suite, test)
37
+ total_time = Time.now - (runner.test_start_time || Time.now)
38
+ suite_name = suite.name.gsub('::#', '#').gsub('::::', '::')
39
+ test_name = test.to_s.gsub(/test_\d+|_/, ' ').strip
40
+ print(" %s %s (%.2fs)%s" % [suite_name, test_name, total_time, clr])
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+
47
+ MiniTest::Reporters.use! Aviator::Test::ProgressReporter.new
@@ -0,0 +1,33 @@
1
+ # Add the gem's lib folder to the load path
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+
5
+ # Set-up coverage reporting (local and Coveralls.com)
6
+ require 'simplecov'
7
+ require 'coveralls'
8
+ SimpleCov.command_name 'MiniTest'
9
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ Coveralls::SimpleCov::Formatter
12
+ ]
13
+ SimpleCov.start do
14
+ add_filter '/test/'
15
+ end
16
+
17
+ require 'minitest/autorun'
18
+
19
+ # Do not require these gems when running in the CI
20
+ unless ENV['CI'] || ENV['TRAVIS']
21
+ require 'pry'
22
+ end
23
+
24
+ # Clean the tmp dir of log files
25
+ Dir[Pathname.new(__FILE__).expand_path.join('..', '..', 'tmp', '*.log')].each { |f| File.delete(f) }
26
+
27
+ # Load all helpers in test/support
28
+ Dir[Pathname.new(__FILE__).join('..', 'support', '*.rb')].each do |f|
29
+ require f
30
+ end
31
+
32
+ require 'aviator'
33
+ require 'aviator/session_pool'
metadata ADDED
@@ -0,0 +1,239 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aviator_session_pool
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mark Maglana
8
+ - Alfonso Dillera
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aviator
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: 0.0.6
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>='
26
+ - !ruby/object:Gem::Version
27
+ version: 0.0.6
28
+ - !ruby/object:Gem::Dependency
29
+ name: redis
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: 3.0.4
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: 3.0.4
42
+ - !ruby/object:Gem::Dependency
43
+ name: bundler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '1.3'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '1.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rb-fsevent
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 0.9.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: 0.9.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: guard
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: 1.8.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: 1.8.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: guard-rake
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: 0.0.0
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: 0.0.0
112
+ - !ruby/object:Gem::Dependency
113
+ name: guard-minitest
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: 0.5.0
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.5.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: ruby_gntp
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ~>
131
+ - !ruby/object:Gem::Version
132
+ version: 0.3.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: 0.3.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: pry
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ~>
145
+ - !ruby/object:Gem::Version
146
+ version: 0.9.0
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: 0.9.0
154
+ - !ruby/object:Gem::Dependency
155
+ name: yard
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ~>
159
+ - !ruby/object:Gem::Version
160
+ version: 0.8.0
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ~>
166
+ - !ruby/object:Gem::Version
167
+ version: 0.8.0
168
+ - !ruby/object:Gem::Dependency
169
+ name: redcarpet
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: 2.3.0
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 2.3.0
182
+ description: ! ' A library for managing multiple Aviator sessions '
183
+ email:
184
+ - mmaglana@gmail.com
185
+ - aj.dillera@gmail.com
186
+ executables: []
187
+ extensions: []
188
+ extra_rdoc_files: []
189
+ files:
190
+ - .gitignore
191
+ - .ruby-gemset
192
+ - .ruby-version
193
+ - .travis.yml
194
+ - Gemfile
195
+ - Guardfile
196
+ - LICENSE.txt
197
+ - README.md
198
+ - Rakefile
199
+ - lib/aviator/session_pool.rb
200
+ - lib/aviator/session_pool/session_pool.rb
201
+ - lib/aviator/session_pool/version.rb
202
+ - lib/aviator_session_pool.rb
203
+ - session_pool.gemspec
204
+ - test/aviator/session_pool/session_pool_test.rb
205
+ - test/support/aviator_session_mock.rb
206
+ - test/support/test_base_class.rb
207
+ - test/support/test_reporter.rb
208
+ - test/test_helper.rb
209
+ homepage: http://github.io/aviator/session_pool
210
+ licenses:
211
+ - MIT
212
+ metadata: {}
213
+ post_install_message:
214
+ rdoc_options: []
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ required_rubygems_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ! '>='
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ requirements: []
228
+ rubyforge_project:
229
+ rubygems_version: 2.1.0
230
+ signing_key:
231
+ specification_version: 4
232
+ summary: A library for managing multiple Aviator sessions
233
+ test_files:
234
+ - test/aviator/session_pool/session_pool_test.rb
235
+ - test/support/aviator_session_mock.rb
236
+ - test/support/test_base_class.rb
237
+ - test/support/test_reporter.rb
238
+ - test/test_helper.rb
239
+ has_rdoc: