amazon_s3_index_proxy 1.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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/controllers/amazon_s3_index_proxy/application_controller.rb +21 -0
  5. data/config/routes.rb +3 -0
  6. data/lib/amazon_s3_index_proxy.rb +17 -0
  7. data/lib/amazon_s3_index_proxy/engine.rb +5 -0
  8. data/lib/amazon_s3_index_proxy/proxy.rb +42 -0
  9. data/lib/amazon_s3_index_proxy/version.rb +3 -0
  10. data/test/controllers/amazon_s3_index_proxy/application_controller_test.rb +30 -0
  11. data/test/dummy/README.rdoc +28 -0
  12. data/test/dummy/Rakefile +6 -0
  13. data/test/dummy/app/assets/javascripts/application.js +13 -0
  14. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  15. data/test/dummy/app/controllers/application_controller.rb +5 -0
  16. data/test/dummy/app/helpers/application_helper.rb +2 -0
  17. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  18. data/test/dummy/bin/bundle +3 -0
  19. data/test/dummy/bin/rails +4 -0
  20. data/test/dummy/bin/rake +4 -0
  21. data/test/dummy/bin/setup +29 -0
  22. data/test/dummy/config.ru +4 -0
  23. data/test/dummy/config/application.rb +26 -0
  24. data/test/dummy/config/boot.rb +5 -0
  25. data/test/dummy/config/database.yml +25 -0
  26. data/test/dummy/config/environment.rb +5 -0
  27. data/test/dummy/config/environments/development.rb +41 -0
  28. data/test/dummy/config/environments/production.rb +79 -0
  29. data/test/dummy/config/environments/test.rb +42 -0
  30. data/test/dummy/config/initializers/amazon_s3_index_proxy.rb +3 -0
  31. data/test/dummy/config/initializers/assets.rb +11 -0
  32. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  33. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  34. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  35. data/test/dummy/config/initializers/inflections.rb +16 -0
  36. data/test/dummy/config/initializers/mime_types.rb +4 -0
  37. data/test/dummy/config/initializers/session_store.rb +3 -0
  38. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  39. data/test/dummy/config/locales/en.yml +23 -0
  40. data/test/dummy/config/routes.rb +3 -0
  41. data/test/dummy/config/secrets.yml +22 -0
  42. data/test/dummy/db/development.sqlite3 +0 -0
  43. data/test/dummy/db/schema.rb +16 -0
  44. data/test/dummy/db/test.sqlite3 +0 -0
  45. data/test/dummy/log/development.log +4 -0
  46. data/test/dummy/log/test.log +1413 -0
  47. data/test/dummy/public/404.html +67 -0
  48. data/test/dummy/public/422.html +67 -0
  49. data/test/dummy/public/500.html +66 -0
  50. data/test/dummy/public/favicon.ico +0 -0
  51. data/test/dummy/tmp/cache/12D/031/amazon_s3_index_proxy%5Chttp%3A%2F%2Fexample.com +1 -0
  52. data/test/integration/navigation_test.rb +18 -0
  53. data/test/lib/proxy_test.rb +38 -0
  54. data/test/test_helper.rb +24 -0
  55. metadata +198 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @valueI"hello world:ET:@created_atf1481303412.910104:@expires_inf6e1
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActionDispatch::IntegrationTest
4
+ def setup
5
+ Rails.cache.clear
6
+ end
7
+
8
+ test "it serves the file from external server" do
9
+ url = 'http://example.com'
10
+ content = 'hello world'
11
+ stub_request(:get, url).to_return(body: content, status: 200)
12
+
13
+ get '/amazon_s3_index_proxy'
14
+ assert_equal 200, status
15
+ assert_includes body, content
16
+ end
17
+ end
18
+
@@ -0,0 +1,38 @@
1
+ module AmazonS3IndexProxy
2
+ class ProxyTest < ActiveSupport::TestCase
3
+ def setup
4
+ Timecop.freeze
5
+ Rails.cache.clear
6
+ @url = 'http://example.com'
7
+ @content = "file from the url"
8
+ end
9
+
10
+ def teardown
11
+ Timecop.return
12
+ WebMock.reset!
13
+ end
14
+
15
+ def make_proxy
16
+ AmazonS3IndexProxy::Proxy.new(@url)
17
+ end
18
+
19
+ test "returns the file located at given url address" do
20
+ stub_request(:get, @url).to_return(body: @content, status: 200)
21
+ assert_equal make_proxy.call, @content
22
+ end
23
+
24
+ test "caches the file to be used for repeated requests" do
25
+ stub_request(:get, @url).to_return(body: @content, status: 200)
26
+ 2.times { make_proxy.call }
27
+ assert_requested(:get, @url, times: 1)
28
+ end
29
+
30
+ test "the cache expires in 1 minute by default" do
31
+ stub_request(:get, @url).to_return(body: @content, status: 200)
32
+ make_proxy.call
33
+ Timecop.travel(1.minute.from_now)
34
+ make_proxy.call
35
+ assert_requested(:get, @url, times: 2)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,24 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
5
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
6
+ ActiveRecord::Migrator.migrations_paths << File.expand_path('../../db/migrate', __FILE__)
7
+ require "rails/test_help"
8
+
9
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
10
+ # to be shown.
11
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
12
+
13
+ require 'timecop'
14
+ require 'webmock/minitest'
15
+
16
+ # Load support files
17
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
18
+
19
+ # Load fixtures from the engine
20
+ if ActiveSupport::TestCase.respond_to?(:fixture_path=)
21
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
22
+ ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
23
+ ActiveSupport::TestCase.fixtures :all
24
+ end
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amazon_s3_index_proxy
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Netguru
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: timecop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Proxies a page stored on s3 through the Rails app. Also takes care of
70
+ caching.
71
+ email:
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - Rakefile
78
+ - app/controllers/amazon_s3_index_proxy/application_controller.rb
79
+ - config/routes.rb
80
+ - lib/amazon_s3_index_proxy.rb
81
+ - lib/amazon_s3_index_proxy/engine.rb
82
+ - lib/amazon_s3_index_proxy/proxy.rb
83
+ - lib/amazon_s3_index_proxy/version.rb
84
+ - test/controllers/amazon_s3_index_proxy/application_controller_test.rb
85
+ - test/dummy/README.rdoc
86
+ - test/dummy/Rakefile
87
+ - test/dummy/app/assets/javascripts/application.js
88
+ - test/dummy/app/assets/stylesheets/application.css
89
+ - test/dummy/app/controllers/application_controller.rb
90
+ - test/dummy/app/helpers/application_helper.rb
91
+ - test/dummy/app/views/layouts/application.html.erb
92
+ - test/dummy/bin/bundle
93
+ - test/dummy/bin/rails
94
+ - test/dummy/bin/rake
95
+ - test/dummy/bin/setup
96
+ - test/dummy/config.ru
97
+ - test/dummy/config/application.rb
98
+ - test/dummy/config/boot.rb
99
+ - test/dummy/config/database.yml
100
+ - test/dummy/config/environment.rb
101
+ - test/dummy/config/environments/development.rb
102
+ - test/dummy/config/environments/production.rb
103
+ - test/dummy/config/environments/test.rb
104
+ - test/dummy/config/initializers/amazon_s3_index_proxy.rb
105
+ - test/dummy/config/initializers/assets.rb
106
+ - test/dummy/config/initializers/backtrace_silencers.rb
107
+ - test/dummy/config/initializers/cookies_serializer.rb
108
+ - test/dummy/config/initializers/filter_parameter_logging.rb
109
+ - test/dummy/config/initializers/inflections.rb
110
+ - test/dummy/config/initializers/mime_types.rb
111
+ - test/dummy/config/initializers/session_store.rb
112
+ - test/dummy/config/initializers/wrap_parameters.rb
113
+ - test/dummy/config/locales/en.yml
114
+ - test/dummy/config/routes.rb
115
+ - test/dummy/config/secrets.yml
116
+ - test/dummy/db/development.sqlite3
117
+ - test/dummy/db/schema.rb
118
+ - test/dummy/db/test.sqlite3
119
+ - test/dummy/log/development.log
120
+ - test/dummy/log/test.log
121
+ - test/dummy/public/404.html
122
+ - test/dummy/public/422.html
123
+ - test/dummy/public/500.html
124
+ - test/dummy/public/favicon.ico
125
+ - test/dummy/tmp/cache/12D/031/amazon_s3_index_proxy%5Chttp%3A%2F%2Fexample.com
126
+ - test/integration/navigation_test.rb
127
+ - test/lib/proxy_test.rb
128
+ - test/test_helper.rb
129
+ homepage: https://github.com/netguru/amazon_s3_index_proxy
130
+ licenses:
131
+ - MIT
132
+ metadata: {}
133
+ post_install_message:
134
+ rdoc_options: []
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubyforge_project:
149
+ rubygems_version: 2.5.1
150
+ signing_key:
151
+ specification_version: 4
152
+ summary: Proxies a page stored on s3 through the Rails app.
153
+ test_files:
154
+ - test/controllers/amazon_s3_index_proxy/application_controller_test.rb
155
+ - test/dummy/app/assets/javascripts/application.js
156
+ - test/dummy/app/assets/stylesheets/application.css
157
+ - test/dummy/app/controllers/application_controller.rb
158
+ - test/dummy/app/helpers/application_helper.rb
159
+ - test/dummy/app/views/layouts/application.html.erb
160
+ - test/dummy/bin/bundle
161
+ - test/dummy/bin/rails
162
+ - test/dummy/bin/rake
163
+ - test/dummy/bin/setup
164
+ - test/dummy/config/application.rb
165
+ - test/dummy/config/boot.rb
166
+ - test/dummy/config/database.yml
167
+ - test/dummy/config/environment.rb
168
+ - test/dummy/config/environments/development.rb
169
+ - test/dummy/config/environments/production.rb
170
+ - test/dummy/config/environments/test.rb
171
+ - test/dummy/config/initializers/amazon_s3_index_proxy.rb
172
+ - test/dummy/config/initializers/assets.rb
173
+ - test/dummy/config/initializers/backtrace_silencers.rb
174
+ - test/dummy/config/initializers/cookies_serializer.rb
175
+ - test/dummy/config/initializers/filter_parameter_logging.rb
176
+ - test/dummy/config/initializers/inflections.rb
177
+ - test/dummy/config/initializers/mime_types.rb
178
+ - test/dummy/config/initializers/session_store.rb
179
+ - test/dummy/config/initializers/wrap_parameters.rb
180
+ - test/dummy/config/locales/en.yml
181
+ - test/dummy/config/routes.rb
182
+ - test/dummy/config/secrets.yml
183
+ - test/dummy/config.ru
184
+ - test/dummy/db/development.sqlite3
185
+ - test/dummy/db/schema.rb
186
+ - test/dummy/db/test.sqlite3
187
+ - test/dummy/log/development.log
188
+ - test/dummy/log/test.log
189
+ - test/dummy/public/404.html
190
+ - test/dummy/public/422.html
191
+ - test/dummy/public/500.html
192
+ - test/dummy/public/favicon.ico
193
+ - test/dummy/Rakefile
194
+ - test/dummy/README.rdoc
195
+ - test/dummy/tmp/cache/12D/031/amazon_s3_index_proxy%5Chttp%3A%2F%2Fexample.com
196
+ - test/integration/navigation_test.rb
197
+ - test/lib/proxy_test.rb
198
+ - test/test_helper.rb