aws-sessionstore-dynamodb 1.0.0 → 2.0.0
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 +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
|