aws-sessionstore-dynamodb 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/PULL_REQUEST_TEMPLATE.md +6 -0
- data/.gitignore +1 -0
- data/.gitmodules +3 -0
- data/.travis.yml +16 -5
- data/.yardopts +3 -2
- data/CHANGELOG.md +24 -0
- data/CODE_OF_CONDUCT.md +4 -0
- data/CONTRIBUTING.md +61 -0
- data/Gemfile +7 -19
- data/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +17 -63
- data/Rakefile +37 -14
- data/VERSION +1 -0
- data/aws-sessionstore-dynamodb.gemspec +7 -5
- data/doc-src/templates/default/layout/html/footer.erb +10 -0
- data/doc-src/templates/default/layout/html/layout.erb +31 -0
- data/lib/aws-sessionstore-dynamodb.rb +0 -15
- data/lib/aws/session_store/dynamo_db/configuration.rb +2 -29
- data/lib/aws/session_store/dynamo_db/errors/base_handler.rb +0 -14
- data/lib/aws/session_store/dynamo_db/errors/default_handler.rb +0 -14
- data/lib/aws/session_store/dynamo_db/garbage_collection.rb +2 -15
- data/lib/aws/session_store/dynamo_db/invalid_id_error.rb +0 -14
- data/lib/aws/session_store/dynamo_db/lock_wait_timeout_error.rb +0 -14
- data/lib/aws/session_store/dynamo_db/locking/base.rb +14 -17
- data/lib/aws/session_store/dynamo_db/locking/null.rb +0 -14
- data/lib/aws/session_store/dynamo_db/locking/pessimistic.rb +0 -16
- data/lib/aws/session_store/dynamo_db/missing_secret_key_error.rb +0 -14
- data/lib/aws/session_store/dynamo_db/rack_middleware.rb +11 -24
- data/lib/aws/session_store/dynamo_db/table.rb +1 -14
- data/lib/aws/session_store/dynamo_db/version.rb +1 -15
- data/spec/aws/session_store/dynamo_db/app_config.yml +6 -6
- data/spec/aws/session_store/dynamo_db/configuration_spec.rb +28 -51
- data/spec/aws/session_store/dynamo_db/error/default_error_handler_spec.rb +23 -21
- data/spec/aws/session_store/dynamo_db/garbage_collection_spec.rb +68 -69
- data/spec/aws/session_store/dynamo_db/locking/threaded_sessions_spec.rb +17 -16
- data/spec/aws/session_store/dynamo_db/rack_middleware_database_spec.rb +47 -46
- data/spec/aws/session_store/dynamo_db/rack_middleware_spec.rb +59 -61
- data/spec/aws/session_store/dynamo_db/table_spec.rb +9 -7
- data/spec/spec_helper.rb +14 -11
- metadata +27 -29
- data/lib/aws/session_store/dynamo_db/railtie.rb +0 -28
- data/lib/aws/session_store/dynamo_db/tasks/session_table.rake +0 -21
- data/lib/rails/generators/sessionstore/dynamodb/dynamodb_generator.rb +0 -55
- data/lib/rails/generators/sessionstore/dynamodb/templates/sessionstore/USAGE +0 -13
- data/lib/rails/generators/sessionstore/dynamodb/templates/sessionstore/dynamodb.yml +0 -71
- data/lib/rails/generators/sessionstore/dynamodb/templates/sessionstore_migration.rb +0 -10
- data/spec/aws/session_store/dynamo_db/config/dynamo_db_session.yml +0 -24
- data/spec/aws/session_store/dynamo_db/rails_app_config.yml +0 -24
- data/tasks/test.rake +0 -29
@@ -1,18 +1,5 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
1
|
require 'yaml'
|
15
|
-
require 'aws-sdk'
|
2
|
+
require 'aws-sdk-dynamodb'
|
16
3
|
|
17
4
|
module Aws::SessionStore::DynamoDB
|
18
5
|
# This class provides a Configuration object for all DynamoDB transactions
|
@@ -240,24 +227,15 @@ module Aws::SessionStore::DynamoDB
|
|
240
227
|
file_path = config_file_path(options)
|
241
228
|
if file_path
|
242
229
|
load_from_file(file_path)
|
243
|
-
elsif rails_defined && File.exists?(rails_config_file_path)
|
244
|
-
load_from_file(rails_config_file_path)
|
245
230
|
else
|
246
231
|
{}
|
247
232
|
end
|
248
233
|
end
|
249
234
|
|
250
|
-
#
|
251
|
-
def rails_defined
|
252
|
-
defined?(Rails) && defined?(Rails.root) && defined?(Rails.env)
|
253
|
-
end
|
254
|
-
|
255
|
-
# Load options from YAML file depending on existence of Rails
|
256
|
-
# and possible development stage defined.
|
235
|
+
# Load options from YAML file
|
257
236
|
def load_from_file(file_path)
|
258
237
|
require "erb"
|
259
238
|
opts = YAML.load(ERB.new(File.read(file_path)).result) || {}
|
260
|
-
opts = opts[Rails.env] if rails_defined && opts.key?(Rails.env)
|
261
239
|
symbolize_keys(opts)
|
262
240
|
end
|
263
241
|
|
@@ -266,11 +244,6 @@ module Aws::SessionStore::DynamoDB
|
|
266
244
|
options[:config_file] || ENV["DYNAMO_DB_SESSION_CONFIG_FILE"]
|
267
245
|
end
|
268
246
|
|
269
|
-
# @return [String] Rails configuraton path to YAML file default.
|
270
|
-
def rails_config_file_path
|
271
|
-
File.join(Rails.root, "config", "sessionstore/dynamodb.yml")
|
272
|
-
end
|
273
|
-
|
274
247
|
# Set accessible attributes after merged options.
|
275
248
|
def set_attributes(options)
|
276
249
|
@options.keys.each do |opt_name|
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB::Errors
|
16
2
|
# BaseErrorHandler provides an interface for error handlers
|
17
3
|
# that can be passed in to {Aws::SessionStore::DynamoDB::RackMiddleware}.
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB::Errors
|
16
2
|
# This class handles errors raised from DynamoDB.
|
17
3
|
class DefaultHandler < Aws::SessionStore::DynamoDB::Errors::BaseHandler
|
@@ -1,17 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
require 'aws-sdk'
|
1
|
+
require 'aws-sdk-dynamodb'
|
15
2
|
|
16
3
|
module Aws::SessionStore::DynamoDB
|
17
4
|
# Collects and deletes unwanted sessions based on
|
@@ -50,7 +37,7 @@ module Aws::SessionStore::DynamoDB
|
|
50
37
|
# @api private
|
51
38
|
def eliminate_unwanted_sessions(config, last_key = nil)
|
52
39
|
scan_result = scan(config, last_key)
|
53
|
-
batch_delete(config, scan_result[:
|
40
|
+
batch_delete(config, scan_result[:items])
|
54
41
|
scan_result[:last_evaluated_key] || {}
|
55
42
|
end
|
56
43
|
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB
|
16
2
|
class InvalidIDError < RuntimeError
|
17
3
|
def initialize(msg = "Corrupt Session ID!")
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB
|
16
2
|
class LockWaitTimeoutError < RuntimeError
|
17
3
|
def initialize(msg = 'Maximum time spent to acquire lock has been exceeded!')
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB::Locking
|
16
2
|
# This class provides a framework for implementing
|
17
3
|
# locking strategies.
|
@@ -65,7 +51,7 @@ module Aws::SessionStore::DynamoDB::Locking
|
|
65
51
|
|
66
52
|
# @return [Hash] Options for deleting session.
|
67
53
|
def delete_opts(sid)
|
68
|
-
|
54
|
+
table_opts(sid)
|
69
55
|
end
|
70
56
|
|
71
57
|
# @return [Hash] Options for updating item in Session table.
|
@@ -109,8 +95,8 @@ module Aws::SessionStore::DynamoDB::Locking
|
|
109
95
|
def attr_updts(env, session, add_attrs = {})
|
110
96
|
data = data_unchanged?(env, session) ? {} : data_attr(session)
|
111
97
|
{
|
112
|
-
:
|
113
|
-
:
|
98
|
+
attribute_updates: merge_all(updated_attr, data, add_attrs, expire_attr),
|
99
|
+
return_values: 'UPDATED_NEW'
|
114
100
|
}
|
115
101
|
end
|
116
102
|
|
@@ -124,6 +110,17 @@ module Aws::SessionStore::DynamoDB::Locking
|
|
124
110
|
{ "created_at" => updated_at }
|
125
111
|
end
|
126
112
|
|
113
|
+
# Update client with current time + max_stale.
|
114
|
+
def expire_at
|
115
|
+
max_stale = @config.max_stale || 0
|
116
|
+
{ value: (Time.now + max_stale).to_i, action: 'PUT' }
|
117
|
+
end
|
118
|
+
|
119
|
+
# Attribute for TTL expiration of session.
|
120
|
+
def expire_attr
|
121
|
+
{ 'expire_at' => expire_at }
|
122
|
+
end
|
123
|
+
|
127
124
|
# Attribute for updating session.
|
128
125
|
def updated_attr
|
129
126
|
{
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB::Locking
|
16
2
|
# This class gets and sets sessions
|
17
3
|
# without a locking strategy.
|
@@ -1,24 +1,8 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB::Locking
|
16
2
|
# This class implements a pessimistic locking strategy for the
|
17
3
|
# DynamoDB session handler. Sessions obtain an exclusive lock
|
18
4
|
# for reads that is only released when the session is saved.
|
19
5
|
class Pessimistic < Aws::SessionStore::DynamoDB::Locking::Base
|
20
|
-
WAIT_ERROR =
|
21
|
-
|
22
6
|
# Saves the session.
|
23
7
|
def set_session_data(env, sid, session, options = {})
|
24
8
|
super(env, sid, session, set_lock_options(env, options))
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws::SessionStore::DynamoDB
|
16
2
|
class MissingSecretKeyError < RuntimeError
|
17
3
|
def initialize(msg = "No secret key provided!")
|
@@ -1,24 +1,11 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
1
|
require 'rack/session/abstract/id'
|
15
2
|
require 'openssl'
|
16
|
-
require 'aws-sdk'
|
3
|
+
require 'aws-sdk-dynamodb'
|
17
4
|
|
18
5
|
module Aws::SessionStore::DynamoDB
|
19
6
|
# This class is an ID based Session Store Rack Middleware
|
20
7
|
# that uses a DynamoDB backend for session storage.
|
21
|
-
class RackMiddleware < Rack::Session::Abstract::
|
8
|
+
class RackMiddleware < Rack::Session::Abstract::Persisted
|
22
9
|
|
23
10
|
# Initializes SessionStore middleware.
|
24
11
|
#
|
@@ -58,16 +45,16 @@ module Aws::SessionStore::DynamoDB
|
|
58
45
|
end
|
59
46
|
|
60
47
|
# Gets session data.
|
61
|
-
def
|
48
|
+
def find_session(req, sid)
|
62
49
|
validate_config
|
63
50
|
case verify_hmac(sid)
|
64
51
|
when nil
|
65
|
-
set_new_session_properties(env)
|
52
|
+
set_new_session_properties(req.env)
|
66
53
|
when false
|
67
|
-
handle_error {raise InvalidIDError}
|
68
|
-
set_new_session_properties(env)
|
54
|
+
handle_error { raise InvalidIDError }
|
55
|
+
set_new_session_properties(req.env)
|
69
56
|
else
|
70
|
-
data = @lock.get_session_data(env, sid)
|
57
|
+
data = @lock.get_session_data(req.env, sid)
|
71
58
|
[sid, data || {}]
|
72
59
|
end
|
73
60
|
end
|
@@ -81,15 +68,15 @@ module Aws::SessionStore::DynamoDB
|
|
81
68
|
#
|
82
69
|
# @return [Hash] If session has been saved.
|
83
70
|
# @return [false] If session has could not be saved.
|
84
|
-
def
|
85
|
-
@lock.set_session_data(env, sid, session, options)
|
71
|
+
def write_session(req, sid, session, options)
|
72
|
+
@lock.set_session_data(req.env, sid, session, options)
|
86
73
|
end
|
87
74
|
|
88
75
|
# Destroys session and removes session from database.
|
89
76
|
#
|
90
77
|
# @return [String] return a new session id or nil if options[:drop]
|
91
|
-
def
|
92
|
-
@lock.delete_session(env, sid)
|
78
|
+
def delete_session(req, sid, options)
|
79
|
+
@lock.delete_session(req.env, sid)
|
93
80
|
generate_sid unless options[:drop]
|
94
81
|
end
|
95
82
|
|
@@ -1,17 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
require 'aws-sdk'
|
1
|
+
require 'aws-sdk-dynamodb'
|
15
2
|
require 'logger'
|
16
3
|
|
17
4
|
module Aws::SessionStore::DynamoDB
|
@@ -1,21 +1,7 @@
|
|
1
|
-
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
6
|
-
#
|
7
|
-
# http://aws.amazon.com/apache2.0/
|
8
|
-
#
|
9
|
-
# or in the "license" file accompanying this file. This file is
|
10
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
-
# ANY KIND, either express or implied. See the License for the specific
|
12
|
-
# language governing permissions and limitations under the License.
|
13
|
-
|
14
|
-
|
15
1
|
module Aws
|
16
2
|
module SessionStore
|
17
3
|
module DynamoDB
|
18
|
-
VERSION = "
|
4
|
+
VERSION = "2.0.0"
|
19
5
|
end
|
20
6
|
end
|
21
7
|
end
|
@@ -11,9 +11,9 @@
|
|
11
11
|
# ANY KIND, either express or implied. See the License for the specific
|
12
12
|
# language governing permissions and limitations under the License.
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
table_name: NewTable
|
15
|
+
table_key: Somekey
|
16
|
+
consistent_read: true
|
17
|
+
AWS_ACCESS_KEY_ID: FakeKey
|
18
|
+
AWS_SECRET_ACCESS_KEY: Secret
|
19
|
+
AWS_REGION: New York
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
4
|
#
|
3
5
|
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
@@ -11,91 +13,66 @@
|
|
11
13
|
# ANY KIND, either express or implied. See the License for the specific
|
12
14
|
# language governing permissions and limitations under the License.
|
13
15
|
|
14
|
-
require
|
16
|
+
require 'spec_helper'
|
15
17
|
|
16
18
|
describe Aws::SessionStore::DynamoDB::Configuration do
|
17
|
-
|
18
19
|
let(:defaults) do
|
19
20
|
{
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
21
|
+
table_name: 'sessions',
|
22
|
+
table_key: 'session_id',
|
23
|
+
consistent_read: true,
|
24
|
+
read_capacity: 10,
|
25
|
+
write_capacity: 5,
|
26
|
+
raise_errors: false
|
26
27
|
}
|
27
28
|
end
|
28
29
|
|
29
30
|
let(:expected_file_opts) do
|
30
31
|
{
|
31
|
-
:
|
32
|
-
:
|
33
|
-
:
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
32
|
+
consistent_read: true,
|
33
|
+
AWS_ACCESS_KEY_ID: 'FakeKey',
|
34
|
+
AWS_REGION: 'New York',
|
35
|
+
table_name: 'NewTable',
|
36
|
+
table_key: 'Somekey',
|
37
|
+
AWS_SECRET_ACCESS_KEY: 'Secret'
|
37
38
|
}
|
38
39
|
end
|
39
40
|
|
40
41
|
let(:runtime_options) do
|
41
42
|
{
|
42
|
-
:
|
43
|
-
:
|
43
|
+
table_name: 'SessionTable',
|
44
|
+
table_key: 'session_id_stuff'
|
44
45
|
}
|
45
46
|
end
|
46
47
|
|
47
48
|
def expected_options(opts)
|
48
49
|
cfg = Aws::SessionStore::DynamoDB::Configuration.new(opts)
|
49
50
|
expected_opts = defaults.merge(expected_file_opts).merge(opts)
|
50
|
-
cfg.to_hash.
|
51
|
+
expect(cfg.to_hash).to include(expected_opts)
|
51
52
|
end
|
52
53
|
|
53
|
-
context
|
54
|
-
it
|
54
|
+
context 'Configuration Tests' do
|
55
|
+
it 'configures option with out runtime,YAML or ENV options' do
|
55
56
|
cfg = Aws::SessionStore::DynamoDB::Configuration.new
|
56
|
-
cfg.to_hash.
|
57
|
+
expect(cfg.to_hash).to include(defaults)
|
57
58
|
end
|
58
59
|
|
59
|
-
it
|
60
|
+
it 'configures accurate option hash with runtime options, no YAML or ENV' do
|
60
61
|
cfg = Aws::SessionStore::DynamoDB::Configuration.new(runtime_options)
|
61
62
|
expected_opts = defaults.merge(runtime_options)
|
62
|
-
cfg.to_hash.
|
63
|
+
expect(cfg.to_hash).to include(expected_opts)
|
63
64
|
end
|
64
65
|
|
65
|
-
it
|
66
|
+
it 'merge YAML and runtime options giving runtime precendence' do
|
66
67
|
config_path = File.dirname(__FILE__) + '/app_config.yml'
|
67
|
-
runtime_opts = {:
|
68
|
+
runtime_opts = { config_file: config_path }.merge(runtime_options)
|
68
69
|
expected_options(runtime_opts)
|
69
70
|
end
|
70
71
|
|
71
|
-
it
|
72
|
-
rails = double('Rails', {:env => 'test', :root => ''})
|
73
|
-
stub_const("Rails", rails)
|
74
|
-
config_path = File.dirname(__FILE__) + '/rails_app_config.yml'
|
75
|
-
runtime_opts = {:config_file => config_path}.merge(runtime_options)
|
76
|
-
expected_options(runtime_opts)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "has rails defiend but no file specified, no error thrown" do
|
80
|
-
rails = double('Rails', {:env => 'test', :root => ''})
|
81
|
-
stub_const("Rails", rails)
|
82
|
-
cfg = Aws::SessionStore::DynamoDB::Configuration.new(runtime_options)
|
83
|
-
expected_opts = defaults.merge(runtime_options)
|
84
|
-
cfg.to_hash.should include(expected_opts)
|
85
|
-
end
|
86
|
-
|
87
|
-
it "has rails defiend but and default rails YAML file loads" do
|
88
|
-
rails = double('Rails', {:env => 'test', :root => File.dirname(__FILE__)})
|
89
|
-
stub_const("Rails", rails)
|
90
|
-
cfg = Aws::SessionStore::DynamoDB::Configuration.new(runtime_options)
|
91
|
-
expected_opts = defaults.merge(runtime_options)
|
92
|
-
cfg.to_hash.should include(expected_opts)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "throws an exception when wrong path for file" do
|
72
|
+
it 'throws an exception when wrong path for file' do
|
96
73
|
config_path = 'Wrong path!'
|
97
|
-
runtime_opts = {:
|
98
|
-
expect{cfg = Aws::SessionStore::DynamoDB::Configuration.new(runtime_opts)}.to raise_error(Errno::ENOENT)
|
74
|
+
runtime_opts = { config_file: config_path }.merge(runtime_options)
|
75
|
+
expect { cfg = Aws::SessionStore::DynamoDB::Configuration.new(runtime_opts) }.to raise_error(Errno::ENOENT)
|
99
76
|
end
|
100
77
|
end
|
101
78
|
end
|