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.
Files changed (50) hide show
  1. checksums.yaml +5 -5
  2. data/.github/PULL_REQUEST_TEMPLATE.md +6 -0
  3. data/.gitignore +1 -0
  4. data/.gitmodules +3 -0
  5. data/.travis.yml +16 -5
  6. data/.yardopts +3 -2
  7. data/CHANGELOG.md +24 -0
  8. data/CODE_OF_CONDUCT.md +4 -0
  9. data/CONTRIBUTING.md +61 -0
  10. data/Gemfile +7 -19
  11. data/{LICENSE.txt → LICENSE} +0 -0
  12. data/README.md +17 -63
  13. data/Rakefile +37 -14
  14. data/VERSION +1 -0
  15. data/aws-sessionstore-dynamodb.gemspec +7 -5
  16. data/doc-src/templates/default/layout/html/footer.erb +10 -0
  17. data/doc-src/templates/default/layout/html/layout.erb +31 -0
  18. data/lib/aws-sessionstore-dynamodb.rb +0 -15
  19. data/lib/aws/session_store/dynamo_db/configuration.rb +2 -29
  20. data/lib/aws/session_store/dynamo_db/errors/base_handler.rb +0 -14
  21. data/lib/aws/session_store/dynamo_db/errors/default_handler.rb +0 -14
  22. data/lib/aws/session_store/dynamo_db/garbage_collection.rb +2 -15
  23. data/lib/aws/session_store/dynamo_db/invalid_id_error.rb +0 -14
  24. data/lib/aws/session_store/dynamo_db/lock_wait_timeout_error.rb +0 -14
  25. data/lib/aws/session_store/dynamo_db/locking/base.rb +14 -17
  26. data/lib/aws/session_store/dynamo_db/locking/null.rb +0 -14
  27. data/lib/aws/session_store/dynamo_db/locking/pessimistic.rb +0 -16
  28. data/lib/aws/session_store/dynamo_db/missing_secret_key_error.rb +0 -14
  29. data/lib/aws/session_store/dynamo_db/rack_middleware.rb +11 -24
  30. data/lib/aws/session_store/dynamo_db/table.rb +1 -14
  31. data/lib/aws/session_store/dynamo_db/version.rb +1 -15
  32. data/spec/aws/session_store/dynamo_db/app_config.yml +6 -6
  33. data/spec/aws/session_store/dynamo_db/configuration_spec.rb +28 -51
  34. data/spec/aws/session_store/dynamo_db/error/default_error_handler_spec.rb +23 -21
  35. data/spec/aws/session_store/dynamo_db/garbage_collection_spec.rb +68 -69
  36. data/spec/aws/session_store/dynamo_db/locking/threaded_sessions_spec.rb +17 -16
  37. data/spec/aws/session_store/dynamo_db/rack_middleware_database_spec.rb +47 -46
  38. data/spec/aws/session_store/dynamo_db/rack_middleware_spec.rb +59 -61
  39. data/spec/aws/session_store/dynamo_db/table_spec.rb +9 -7
  40. data/spec/spec_helper.rb +14 -11
  41. metadata +27 -29
  42. data/lib/aws/session_store/dynamo_db/railtie.rb +0 -28
  43. data/lib/aws/session_store/dynamo_db/tasks/session_table.rake +0 -21
  44. data/lib/rails/generators/sessionstore/dynamodb/dynamodb_generator.rb +0 -55
  45. data/lib/rails/generators/sessionstore/dynamodb/templates/sessionstore/USAGE +0 -13
  46. data/lib/rails/generators/sessionstore/dynamodb/templates/sessionstore/dynamodb.yml +0 -71
  47. data/lib/rails/generators/sessionstore/dynamodb/templates/sessionstore_migration.rb +0 -10
  48. data/spec/aws/session_store/dynamo_db/config/dynamo_db_session.yml +0 -24
  49. data/spec/aws/session_store/dynamo_db/rails_app_config.yml +0 -24
  50. data/tasks/test.rake +0 -29
@@ -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
@@ -22,19 +24,19 @@ module Aws
22
24
  before { @options = {} }
23
25
 
24
26
  def ensure_data_updated(mutated_data)
25
- dynamo_db_client.should_receive(:update_item) do |options|
27
+ expect(dynamo_db_client).to receive(:update_item) do |options|
26
28
  if mutated_data
27
- options[:attribute_updates]["data"].should_not be_nil
29
+ expect(options[:attribute_updates]['data']).not_to be_nil
28
30
  else
29
- options[:attribute_updates]["data"].should be_nil
31
+ expect(options[:attribute_updates]['data']).to be_nil
30
32
  end
31
33
  end
32
34
  end
33
35
 
34
36
  before do
35
37
  @options = {
36
- :dynamo_db_client => dynamo_db_client,
37
- :secret_key => 'watermelon_cherries'
38
+ dynamo_db_client: dynamo_db_client,
39
+ secret_key: 'watermelon_cherries'
38
40
  }
39
41
  end
40
42
 
@@ -42,105 +44,101 @@ module Aws
42
44
  let(:app) { RackMiddleware.new(base_app, @options) }
43
45
 
44
46
  let(:sample_packed_data) do
45
- [Marshal.dump("multiplier" => 1)].pack("m*")
47
+ [Marshal.dump('multiplier' => 1)].pack('m*')
46
48
  end
47
49
 
48
50
  let(:dynamo_db_client) do
49
- client = double('Aws::DynamoDB::Client')
50
- client.stub(:delete_item) { 'Deleted' }
51
- client.stub(:list_tables) { {:table_names => ['Sessions']} }
52
- client.stub(:get_item) do
53
- { :item => { 'data' => sample_packed_data } }
54
- end
55
- client.stub(:update_item) do
56
- { :attributes => { :created_at => 'now' } }
57
- end
58
- client
51
+ double(
52
+ 'Aws::DynamoDB::Client',
53
+ delete_item: 'Deleted',
54
+ list_tables: { table_names: ['Sessions'] },
55
+ get_item: { item: { 'data' => sample_packed_data } },
56
+ update_item: { attributes: { created_at: 'now' } }
57
+ )
59
58
  end
60
59
 
61
- context "Testing best case session storage with mock client" do
62
- it "stores session data in session object" do
63
- get "/"
64
- last_request.session.to_hash.should eq("multiplier" => 1)
60
+ context 'Testing best case session storage with mock client' do
61
+ it 'stores session data in session object' do
62
+ get '/'
63
+ expect(last_request.session.to_hash).to eq('multiplier' => 1)
65
64
  end
66
65
 
67
- it "creates a new HTTP cookie when Cookie not supplied" do
68
- get "/"
69
- last_response.body.should eq('All good!')
70
- last_response['Set-Cookie'].should be_truthy
66
+ it 'creates a new HTTP cookie when Cookie not supplied' do
67
+ get '/'
68
+ expect(last_response.body).to eq('All good!')
69
+ expect(last_response['Set-Cookie']).to be_truthy
71
70
  end
72
71
 
73
- it "loads/manipulates a session based on id from HTTP-Cookie" do
74
- get "/"
75
- last_request.session.to_hash.should eq("multiplier" => 1)
72
+ it 'loads/manipulates a session based on id from HTTP-Cookie' do
73
+ get '/'
74
+ expect(last_request.session.to_hash).to eq('multiplier' => 1)
76
75
 
77
- get "/"
78
- last_request.session.to_hash.should eq("multiplier" => 2)
76
+ get '/'
77
+ expect(last_request.session.to_hash).to eq('multiplier' => 2)
79
78
  end
80
79
 
81
- it "does not rewrite Cookie if cookie previously/accuarately set" do
82
- get "/"
83
- last_response['Set-Cookie'].should_not be_nil
80
+ it 'does not rewrite Cookie if cookie previously/accuarately set' do
81
+ get '/'
82
+ expect(last_response['Set-Cookie']).not_to be_nil
84
83
 
85
- get "/"
86
- last_response['Set-Cookie'].should be_nil
84
+ get '/'
85
+ expect(last_response['Set-Cookie']).to be_nil
87
86
  end
88
87
 
89
- it "does not set cookie when defer option is specifed" do
88
+ it 'does not set cookie when defer option is specifed' do
90
89
  @options[:defer] = true
91
- get "/"
92
- last_response['Set-Cookie'].should eq(nil)
90
+ get '/'
91
+ expect(last_response['Set-Cookie']).to be_nil
93
92
  end
94
93
 
95
- it "creates new sessopm with false/nonexistant http-cookie id" do
96
- get "/"
97
- last_response['Set-Cookie'].should_not eq('1234')
98
- last_response['Set-Cookie'].should_not be_nil
94
+ it 'creates new session with false/nonexistant http-cookie id' do
95
+ get '/'
96
+ expect(last_response['Set-Cookie']).not_to eq('1234')
97
+ expect(last_response['Set-Cookie']).not_to be_nil
99
98
  end
100
99
 
101
- it "expires after specified time and sets date for cookie to expire" do
100
+ it 'expires after specified time and sets date for cookie to expire' do
102
101
  @options[:expire_after] = 0
103
- get "/"
102
+ get '/'
104
103
  session_cookie = last_response['Set-Cookie']
105
104
 
106
- get "/"
107
- last_response['Set-Cookie'].should_not be_nil
108
- last_response['Set-Cookie'].should_not eq(session_cookie)
105
+ get '/'
106
+ expect(last_response['Set-Cookie']).not_to be_nil
107
+ expect(last_response['Set-Cookie']).not_to eq(session_cookie)
109
108
  end
110
109
 
111
110
  it "doesn't reset Cookie if not outside expire date" do
112
111
  @options[:expire_after] = 3600
113
- get "/"
112
+ get '/'
114
113
  session_cookie = last_response['Set-Cookie']
115
- get "/"
116
- last_response['Set-Cookie'].should eq(session_cookie)
114
+ get '/'
115
+ expect(last_response['Set-Cookie']).to eq(session_cookie)
117
116
  end
118
117
 
119
- it "will not set a session cookie when defer is true" do
118
+ it 'will not set a session cookie when defer is true' do
120
119
  @options[:defer] = true
121
- get "/"
122
- last_response['Set-Cookie'].should eq(nil)
120
+ get '/'
121
+ expect(last_response['Set-Cookie']).to be_nil
123
122
  end
124
123
 
125
- it "generates sid and migrates data to new sid when renew is selected" do
124
+ it 'generates sid and migrates data to new sid when renew is selected' do
126
125
  @options[:renew] = true
127
- get "/"
128
- last_request.session.to_hash.should eq("multiplier" => 1)
126
+ get '/'
127
+ expect(last_request.session.to_hash).to eq('multiplier' => 1)
129
128
  session_cookie = last_response['Set-Cookie']
130
129
 
131
- get "/" , "HTTP_Cookie" => session_cookie
132
- last_response['Set-Cookie'].should_not eq(session_cookie)
133
- last_request.session.to_hash.should eq("multiplier" => 2)
134
- session_cookie = last_response['Set-Cookie']
130
+ get '/', 'HTTP_Cookie' => session_cookie
131
+ expect(last_response['Set-Cookie']).not_to eq(session_cookie)
132
+ expect(last_request.session.to_hash).to eq('multiplier' => 2)
135
133
  end
136
134
 
137
135
  it "doesn't resend unmutated data" do
138
136
  ensure_data_updated(true)
139
137
  @options[:renew] = true
140
- get "/"
138
+ get '/'
141
139
 
142
140
  ensure_data_updated(false)
143
- get "/", {}, { "rack.session" => { "multiplier" => nil } }
141
+ get '/', {}, { 'rack.session' => { 'multiplier' => nil } }
144
142
  end
145
143
  end
146
144
  end
@@ -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
@@ -19,22 +21,22 @@ module Aws
19
21
  module SessionStore
20
22
  module DynamoDB
21
23
  describe Table do
22
- context "Mock Table Methods Tests", :integration => true do
24
+ context 'Mock Table Methods Tests', integration: true do
23
25
  let(:table_name) { "sessionstore-integration-test-#{Time.now.to_i}" }
24
- let(:options) { {:table_name => table_name} }
26
+ let(:options) { { table_name: table_name } }
25
27
  let(:io) { StringIO.new }
26
28
 
27
- before { Table.stub(:logger) { Logger.new(io) } }
29
+ before { allow(Table).to receive(:logger) { Logger.new(io) } }
28
30
 
29
- it "Creates and deletes a new table" do
31
+ it 'Creates and deletes a new table' do
30
32
  Table.create_table(options)
31
33
 
32
34
  # second attempt should warn
33
35
  Table.create_table(options)
34
36
 
35
- io.string.should include("Table #{table_name} created, waiting for activation...\n")
36
- io.string.should include("Table #{table_name} is now ready to use.\n")
37
- io.string.should include("Table #{table_name} already exists, skipping creation.\n")
37
+ expect(io.string).to include("Table #{table_name} created, waiting for activation...\n")
38
+ expect(io.string).to include("Table #{table_name} is now ready to use.\n")
39
+ expect(io.string).to include("Table #{table_name} already exists, skipping creation.\n")
38
40
 
39
41
  # now delete table
40
42
  Table.delete_table(options)
@@ -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
@@ -19,7 +21,7 @@ begin
19
21
  rescue LoadError
20
22
  end
21
23
 
22
- $: << File.join(File.dirname(File.dirname(__FILE__)), "lib")
24
+ $LOAD_PATH << File.join(File.dirname(File.dirname(__FILE__)), 'lib')
23
25
 
24
26
  require 'rspec'
25
27
  require 'aws-sessionstore-dynamodb'
@@ -33,35 +35,36 @@ class MultiplierApplication
33
35
  else
34
36
  env['rack.session'][:multiplier] = 1
35
37
  end
36
- [200, {'Content-Type' => 'text/plain'}, ['All good!']]
38
+ [200, { 'Content-Type' => 'text/plain' }, ['All good!']]
37
39
  end
38
40
  end
39
41
 
40
42
  ConstantHelpers = lambda do
41
43
  let(:token_error_msg) { 'The security token included in the request is invalid' }
42
- let(:resource_error) {
44
+ let(:resource_error) do
43
45
  Aws::DynamoDB::Errors::ResourceNotFoundException.new(double('Seahorse::Client::RequestContext'), resource_error_msg)
44
- }
46
+ end
45
47
  let(:resource_error_msg) { 'The Resource is not found.' }
46
48
  let(:key_error) { Aws::DynamoDB::Errors::ValidationException.new(double('Seahorse::Client::RequestContext'), key_error_msg) }
47
49
  let(:key_error_msg) { 'The provided key element does not match the schema' }
48
- let(:client_error) {
50
+ let(:client_error) do
49
51
  Aws::DynamoDB::Errors::UnrecognizedClientException.new(double('Seahorse::Client::RequestContext'), client_error_msg)
50
- }
52
+ end
51
53
  let(:client_error_msg) { 'Unrecognized Client.'}
52
- let(:invalid_cookie) { {"HTTP_COOKIE" => "rack.session=ApplePieBlueberries"} }
53
- let(:invalid_session_data) { {"rack.session"=>{"multiplier" => 1}} }
54
+ let(:invalid_cookie) { { 'HTTP_COOKIE' => 'rack.session=ApplePieBlueberries' } }
55
+ let(:invalid_session_data) { { 'rack.session' => { 'multiplier' => 1 } } }
54
56
  let(:rack_default_error_msg) { "Warning! Aws::SessionStore::DynamoDB failed to save session. Content dropped.\n" }
55
57
  let(:missing_key_error) { Aws::SessionStore::DynamoDB::MissingSecretKeyError }
56
58
  end
57
59
 
58
60
  RSpec.configure do |c|
59
- c.before(:each, :integration => true) do
60
- opts = {:table_name => 'sessionstore-integration-test'}
61
+ c.raise_errors_for_deprecations!
62
+ c.before(:each, integration: true) do
63
+ opts = { table_name: 'sessionstore-integration-test' }
61
64
 
62
65
  defaults = Aws::SessionStore::DynamoDB::Configuration::DEFAULTS
63
66
  defaults = defaults.merge(opts)
64
- stub_const("Aws::SessionStore::DynamoDB::Configuration::DEFAULTS", defaults)
67
+ stub_const('Aws::SessionStore::DynamoDB::Configuration::DEFAULTS', defaults)
65
68
  Aws::SessionStore::DynamoDB::Table.create_table(opts)
66
69
  end
67
70
  end
metadata CHANGED
@@ -1,57 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sessionstore-dynamodb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Ruby Robinson
8
- autorequire:
7
+ - Amazon Web Services
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-14 00:00:00.000000000 Z
11
+ date: 2020-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aws-sdk
14
+ name: aws-sdk-dynamodb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.6.4
33
+ version: '2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.6.4
41
- description:
42
- email:
40
+ version: '2'
41
+ description:
42
+ email:
43
+ - mamuller@amazon.com
44
+ - alexwoo@amazon.com
43
45
  executables: []
44
46
  extensions: []
45
47
  extra_rdoc_files: []
46
48
  files:
49
+ - ".github/PULL_REQUEST_TEMPLATE.md"
47
50
  - ".gitignore"
51
+ - ".gitmodules"
48
52
  - ".travis.yml"
49
53
  - ".yardopts"
54
+ - CHANGELOG.md
55
+ - CODE_OF_CONDUCT.md
56
+ - CONTRIBUTING.md
50
57
  - Gemfile
51
- - LICENSE.txt
58
+ - LICENSE
52
59
  - README.md
53
60
  - Rakefile
61
+ - VERSION
54
62
  - aws-sessionstore-dynamodb.gemspec
63
+ - doc-src/templates/default/layout/html/footer.erb
64
+ - doc-src/templates/default/layout/html/layout.erb
55
65
  - lib/aws-sessionstore-dynamodb.rb
56
66
  - lib/aws/session_store/dynamo_db/configuration.rb
57
67
  - lib/aws/session_store/dynamo_db/errors/base_handler.rb
@@ -64,31 +74,22 @@ files:
64
74
  - lib/aws/session_store/dynamo_db/locking/pessimistic.rb
65
75
  - lib/aws/session_store/dynamo_db/missing_secret_key_error.rb
66
76
  - lib/aws/session_store/dynamo_db/rack_middleware.rb
67
- - lib/aws/session_store/dynamo_db/railtie.rb
68
77
  - lib/aws/session_store/dynamo_db/table.rb
69
- - lib/aws/session_store/dynamo_db/tasks/session_table.rake
70
78
  - lib/aws/session_store/dynamo_db/version.rb
71
- - lib/rails/generators/sessionstore/dynamodb/dynamodb_generator.rb
72
- - lib/rails/generators/sessionstore/dynamodb/templates/sessionstore/USAGE
73
- - lib/rails/generators/sessionstore/dynamodb/templates/sessionstore/dynamodb.yml
74
- - lib/rails/generators/sessionstore/dynamodb/templates/sessionstore_migration.rb
75
79
  - spec/aws/session_store/dynamo_db/app_config.yml
76
- - spec/aws/session_store/dynamo_db/config/dynamo_db_session.yml
77
80
  - spec/aws/session_store/dynamo_db/configuration_spec.rb
78
81
  - spec/aws/session_store/dynamo_db/error/default_error_handler_spec.rb
79
82
  - spec/aws/session_store/dynamo_db/garbage_collection_spec.rb
80
83
  - spec/aws/session_store/dynamo_db/locking/threaded_sessions_spec.rb
81
84
  - spec/aws/session_store/dynamo_db/rack_middleware_database_spec.rb
82
85
  - spec/aws/session_store/dynamo_db/rack_middleware_spec.rb
83
- - spec/aws/session_store/dynamo_db/rails_app_config.yml
84
86
  - spec/aws/session_store/dynamo_db/table_spec.rb
85
87
  - spec/spec_helper.rb
86
- - tasks/test.rake
87
88
  homepage: http://github.com/aws/aws-sessionstore-dynamodb-ruby
88
89
  licenses:
89
90
  - Apache License 2.0
90
91
  metadata: {}
91
- post_install_message:
92
+ post_install_message:
92
93
  rdoc_options: []
93
94
  require_paths:
94
95
  - lib
@@ -103,21 +104,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
104
  - !ruby/object:Gem::Version
104
105
  version: '0'
105
106
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.5.2
108
- signing_key:
107
+ rubygems_version: 3.0.3
108
+ signing_key:
109
109
  specification_version: 4
110
110
  summary: The Amazon DynamoDB Session Store handles sessions for Ruby web applications
111
111
  using a DynamoDB backend.
112
112
  test_files:
113
113
  - spec/aws/session_store/dynamo_db/app_config.yml
114
- - spec/aws/session_store/dynamo_db/config/dynamo_db_session.yml
115
114
  - spec/aws/session_store/dynamo_db/configuration_spec.rb
116
115
  - spec/aws/session_store/dynamo_db/error/default_error_handler_spec.rb
117
116
  - spec/aws/session_store/dynamo_db/garbage_collection_spec.rb
118
117
  - spec/aws/session_store/dynamo_db/locking/threaded_sessions_spec.rb
119
118
  - spec/aws/session_store/dynamo_db/rack_middleware_database_spec.rb
120
119
  - spec/aws/session_store/dynamo_db/rack_middleware_spec.rb
121
- - spec/aws/session_store/dynamo_db/rails_app_config.yml
122
120
  - spec/aws/session_store/dynamo_db/table_spec.rb
123
121
  - spec/spec_helper.rb
@@ -1,28 +0,0 @@
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
- module Aws::SessionStore::DynamoDB
16
- class Railtie < Rails::Railtie
17
- initializer 'aws-sessionstore-dynamodb-rack-middleware' do
18
- ActionDispatch::Session::DynamodbStore = Aws::SessionStore::DynamoDB::RackMiddleware
19
- end
20
-
21
- # Load all rake tasks
22
- rake_tasks do
23
- Dir[File.expand_path("../tasks/*.rake", __FILE__)].each do |rake_task|
24
- load rake_task
25
- end
26
- end
27
- end
28
- end