aviator_session_pool 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: