s3_rails 0.1.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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +34 -0
  4. data/config/s3_rails.yml +5 -0
  5. data/lib/s3_rails/resolver.rb +53 -0
  6. data/lib/s3_rails/s3.rb +38 -0
  7. data/lib/s3_rails/version.rb +3 -0
  8. data/lib/s3_rails.rb +5 -0
  9. data/lib/tasks/s3_rails_tasks.rake +4 -0
  10. data/test/dummy/Rakefile +6 -0
  11. data/test/dummy/app/assets/javascripts/application.js +13 -0
  12. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  13. data/test/dummy/app/controllers/application_controller.rb +5 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  16. data/test/dummy/bin/bundle +3 -0
  17. data/test/dummy/bin/rails +4 -0
  18. data/test/dummy/bin/rake +4 -0
  19. data/test/dummy/bin/setup +29 -0
  20. data/test/dummy/config/application.rb +26 -0
  21. data/test/dummy/config/boot.rb +5 -0
  22. data/test/dummy/config/database.yml +25 -0
  23. data/test/dummy/config/environment.rb +5 -0
  24. data/test/dummy/config/environments/development.rb +41 -0
  25. data/test/dummy/config/environments/production.rb +76 -0
  26. data/test/dummy/config/environments/test.rb +39 -0
  27. data/test/dummy/config/initializers/assets.rb +11 -0
  28. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  29. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  30. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  31. data/test/dummy/config/initializers/inflections.rb +16 -0
  32. data/test/dummy/config/initializers/mime_types.rb +4 -0
  33. data/test/dummy/config/initializers/session_store.rb +3 -0
  34. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  35. data/test/dummy/config/locales/en.yml +23 -0
  36. data/test/dummy/config/routes.rb +56 -0
  37. data/test/dummy/config/secrets.yml +22 -0
  38. data/test/dummy/config.ru +4 -0
  39. data/test/dummy/db/test.sqlite3 +0 -0
  40. data/test/dummy/log/test.log +142 -0
  41. data/test/dummy/public/404.html +67 -0
  42. data/test/dummy/public/422.html +67 -0
  43. data/test/dummy/public/500.html +66 -0
  44. data/test/dummy/public/favicon.ico +0 -0
  45. data/test/s3_rails_test.rb +61 -0
  46. data/test/test_helper.rb +17 -0
  47. metadata +210 -0
@@ -0,0 +1,56 @@
1
+ Rails.application.routes.draw do
2
+ # The priority is based upon order of creation: first created -> highest priority.
3
+ # See how all your routes lay out with "rake routes".
4
+
5
+ # You can have the root of your site routed with "root"
6
+ # root 'welcome#index'
7
+
8
+ # Example of regular route:
9
+ # get 'products/:id' => 'catalog#view'
10
+
11
+ # Example of named route that can be invoked with purchase_url(id: product.id)
12
+ # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
13
+
14
+ # Example resource route (maps HTTP verbs to controller actions automatically):
15
+ # resources :products
16
+
17
+ # Example resource route with options:
18
+ # resources :products do
19
+ # member do
20
+ # get 'short'
21
+ # post 'toggle'
22
+ # end
23
+ #
24
+ # collection do
25
+ # get 'sold'
26
+ # end
27
+ # end
28
+
29
+ # Example resource route with sub-resources:
30
+ # resources :products do
31
+ # resources :comments, :sales
32
+ # resource :seller
33
+ # end
34
+
35
+ # Example resource route with more complex sub-resources:
36
+ # resources :products do
37
+ # resources :comments
38
+ # resources :sales do
39
+ # get 'recent', on: :collection
40
+ # end
41
+ # end
42
+
43
+ # Example resource route with concerns:
44
+ # concern :toggleable do
45
+ # post 'toggle'
46
+ # end
47
+ # resources :posts, concerns: :toggleable
48
+ # resources :photos, concerns: :toggleable
49
+
50
+ # Example resource route within a namespace:
51
+ # namespace :admin do
52
+ # # Directs /admin/products/* to Admin::ProductsController
53
+ # # (app/controllers/admin/products_controller.rb)
54
+ # resources :products
55
+ # end
56
+ end
@@ -0,0 +1,22 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Your secret key is used for verifying the integrity of signed cookies.
4
+ # If you change this key, all old signed cookies will become invalid!
5
+
6
+ # Make sure the secret is at least 30 characters and all random,
7
+ # no regular words or you'll be exposed to dictionary attacks.
8
+ # You can use `rake secret` to generate a secure secret key.
9
+
10
+ # Make sure the secrets in this file are kept private
11
+ # if you're sharing your code publicly.
12
+
13
+ development:
14
+ secret_key_base: 91e4af1788d4316ec8abddbadaae6fc689b9b45fe4a7c1250d1d8dfc7e590e669270480b11eeffe76e892f42c60d4cfab5dbe6dee9e30a6385a9860e1886f380
15
+
16
+ test:
17
+ secret_key_base: 8f5a98770750d03cb19a3a5ca449e721ed740fd1b7a754e5fb60fed6d99794c191466d0f63af568b5ce5d4f381fd67cc1ca0beb558075679a45f61c46aa5a12f
18
+
19
+ # Do not keep production secrets in the repository,
20
+ # instead read values from the environment.
21
+ production:
22
+ secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Rails.application
File without changes
@@ -0,0 +1,142 @@
1
+  (0.1ms) begin transaction
2
+ --------------------------------
3
+ S3RailsTest: test_connects_to_S3
4
+ --------------------------------
5
+  (0.1ms) rollback transaction
6
+  (0.1ms) begin transaction
7
+ --------------------------------
8
+ S3RailsTest: test_connects_to_S3
9
+ --------------------------------
10
+  (0.0ms) rollback transaction
11
+  (0.1ms) begin transaction
12
+ --------------------------------
13
+ S3RailsTest: test_connects_to_S3
14
+ --------------------------------
15
+  (0.0ms) rollback transaction
16
+  (0.1ms) begin transaction
17
+ --------------------------------
18
+ S3RailsTest: test_connects_to_S3
19
+ --------------------------------
20
+  (0.0ms) rollback transaction
21
+  (0.1ms) begin transaction
22
+ --------------------------------
23
+ S3RailsTest: test_connects_to_S3
24
+ --------------------------------
25
+  (0.0ms) rollback transaction
26
+  (0.1ms) begin transaction
27
+ --------------------------------
28
+ S3RailsTest: test_connects_to_S3
29
+ --------------------------------
30
+  (0.1ms) rollback transaction
31
+  (0.1ms) begin transaction
32
+ --------------------------------
33
+ S3RailsTest: test_connects_to_S3
34
+ --------------------------------
35
+  (0.0ms) rollback transaction
36
+  (0.1ms) begin transaction
37
+ --------------------------------
38
+ S3RailsTest: test_connects_to_S3
39
+ --------------------------------
40
+  (0.0ms) rollback transaction
41
+  (0.1ms) begin transaction
42
+ --------------------------------
43
+ S3RailsTest: test_connects_to_S3
44
+ --------------------------------
45
+ loading bucket
46
+ done
47
+  (0.1ms) rollback transaction
48
+  (0.1ms) begin transaction
49
+ --------------------------------
50
+ S3RailsTest: test_connects_to_S3
51
+ --------------------------------
52
+  (0.1ms) rollback transaction
53
+  (0.0ms) begin transaction
54
+ --------------------------------------------------
55
+ S3RailsTest: test_resolver_returns_a_template_body
56
+ --------------------------------------------------
57
+  (0.2ms) rollback transaction
58
+  (0.1ms) begin transaction
59
+ --------------------------------
60
+ S3RailsTest: test_connects_to_S3
61
+ --------------------------------
62
+  (0.0ms) rollback transaction
63
+  (0.1ms) begin transaction
64
+ --------------------------------------------------
65
+ S3RailsTest: test_resolver_returns_a_template_body
66
+ --------------------------------------------------
67
+  (0.0ms) rollback transaction
68
+  (0.1ms) begin transaction
69
+ --------------------------------
70
+ S3RailsTest: test_connects_to_S3
71
+ --------------------------------
72
+  (0.0ms) rollback transaction
73
+  (0.0ms) begin transaction
74
+ --------------------------------------------------
75
+ S3RailsTest: test_resolver_returns_a_template_body
76
+ --------------------------------------------------
77
+  (0.0ms) rollback transaction
78
+  (0.1ms) begin transaction
79
+ --------------------------------
80
+ S3RailsTest: test_connects_to_S3
81
+ --------------------------------
82
+  (0.0ms) rollback transaction
83
+  (0.0ms) begin transaction
84
+ --------------------------------------------------
85
+ S3RailsTest: test_resolver_returns_a_template_body
86
+ --------------------------------------------------
87
+  (0.0ms) rollback transaction
88
+  (0.1ms) begin transaction
89
+ --------------------------------
90
+ S3RailsTest: test_connects_to_S3
91
+ --------------------------------
92
+  (0.1ms) rollback transaction
93
+  (0.1ms) begin transaction
94
+ --------------------------------------------------
95
+ S3RailsTest: test_resolver_returns_a_template_body
96
+ --------------------------------------------------
97
+  (0.0ms) rollback transaction
98
+  (0.1ms) begin transaction
99
+ --------------------------------
100
+ S3RailsTest: test_connects_to_S3
101
+ --------------------------------
102
+  (0.2ms) rollback transaction
103
+  (0.1ms) begin transaction
104
+ --------------------------------------
105
+ S3RailsTest: test_reload_S3rails_cache
106
+ --------------------------------------
107
+  (0.1ms) rollback transaction
108
+  (0.1ms) begin transaction
109
+ --------------------------------------------------
110
+ S3RailsTest: test_resolver_returns_a_template_body
111
+ --------------------------------------------------
112
+  (0.1ms) rollback transaction
113
+  (0.1ms) begin transaction
114
+ --------------------------------
115
+ S3RailsTest: test_connects_to_S3
116
+ --------------------------------
117
+  (0.1ms) rollback transaction
118
+  (0.1ms) begin transaction
119
+ --------------------------------------
120
+ S3RailsTest: test_reload_S3rails_cache
121
+ --------------------------------------
122
+  (0.2ms) rollback transaction
123
+  (0.1ms) begin transaction
124
+ --------------------------------------------------
125
+ S3RailsTest: test_resolver_returns_a_template_body
126
+ --------------------------------------------------
127
+  (0.1ms) rollback transaction
128
+  (0.1ms) begin transaction
129
+ --------------------------------
130
+ S3RailsTest: test_connects_to_S3
131
+ --------------------------------
132
+  (0.1ms) rollback transaction
133
+  (0.0ms) begin transaction
134
+ --------------------------------------
135
+ S3RailsTest: test_reload_S3rails_cache
136
+ --------------------------------------
137
+  (0.2ms) rollback transaction
138
+  (0.1ms) begin transaction
139
+ --------------------------------------------------
140
+ S3RailsTest: test_resolver_returns_a_template_body
141
+ --------------------------------------------------
142
+  (0.1ms) rollback transaction
@@ -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,61 @@
1
+ require 'test_helper'
2
+
3
+ class S3RailsTest < ActiveSupport::TestCase
4
+ def setup
5
+ @resolver = S3Rails::Resolver.instance
6
+ @s3rails = @resolver.s3
7
+ end
8
+
9
+ test "connects to S3" do
10
+ assert_equal 'app-widgets', @s3rails.bucket_name, 'bucket_name'
11
+ bucket_size = 0
12
+ @s3rails.bucket.objects.each {|o| bucket_size+= 1}
13
+ assert_equal 9, bucket_size, 'bucket_size'
14
+ end
15
+
16
+ test "resolver returns a template body" do
17
+ details = {
18
+ locale:[],
19
+ formats:[:html],
20
+ variants:[],
21
+ handlers:[:erb]
22
+ }
23
+
24
+ template = @resolver.find_all("index", "widgets", false, details).first
25
+ assert_kind_of ActionView::Template, template, 'ActionView::Template'
26
+
27
+ assert_equal 's3/app-widgets/widgets/index.html.erb', template.identifier, 'identifier'
28
+ assert_kind_of ActionView::Template::Handlers::ERB, template.handler, 'handler'
29
+ assert_equal 'widgets/index', template.virtual_path, 'virtual_path'
30
+ assert_equal [:html], template.formats, 'formats'
31
+ assert_equal [nil], template.variants
32
+ assert_equal 1406666054, template.updated_at.to_i
33
+ end
34
+
35
+ test "reload S3rails cache" do
36
+ # last load time
37
+ last_load = @s3rails.last_load
38
+
39
+ # find widgets/index
40
+ details = {locale:[], formats:[:html], variants:[], handlers:[:erb]}
41
+ template = @resolver.find_all("index", "widgets", false, details).first
42
+ assert_match "<h1>Listing widgets</h1>", template.source
43
+
44
+ # simulate template change by changing bucktes
45
+ first_objects = @s3rails.objects
46
+ @s3rails.bucket = @s3rails.buckets['app-widgets2']
47
+ require 'fileutils'
48
+ FileUtils.touch 'tmp/reload_s3.txt', mtime: Time.now + 1.seconds
49
+
50
+ # find widgets/index again
51
+ template = @resolver.find_all("index", "widgets", false, details).first
52
+ assert_match "<h1>Listing widgets 2</h1>", template.source
53
+
54
+ # different?
55
+ assert_not_equal last_load, @s3rails.last_load
56
+
57
+ # reset to original conditions
58
+ @s3rails.bucket = @s3rails.buckets['app-widgets']
59
+ @s3rails.objects = first_objects
60
+ end
61
+ end
@@ -0,0 +1,17 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+ require 's3_rails'
7
+ require 'aws-sdk'
8
+
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ # Load fixtures from the engine
15
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
16
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
17
+ end