stopover 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +62 -0
  4. data/Rakefile +37 -0
  5. data/app/controllers/stopover/application_controller.rb +20 -0
  6. data/app/controllers/stopover/pages_controller.rb +13 -0
  7. data/config/routes.rb +4 -0
  8. data/lib/generators/stopover/install_generator.rb +45 -0
  9. data/lib/generators/stopover/templates/README +12 -0
  10. data/lib/generators/stopover/templates/layouts/stopover.html.erb +11 -0
  11. data/lib/generators/stopover/templates/layouts/stopover.html.haml +8 -0
  12. data/lib/generators/stopover/templates/layouts/stopover.html.slim +8 -0
  13. data/lib/generators/stopover/templates/stopover.rb +30 -0
  14. data/lib/generators/stopover/templates/views/404.html.erb +8 -0
  15. data/lib/generators/stopover/templates/views/404.html.haml +6 -0
  16. data/lib/generators/stopover/templates/views/404.html.slim +6 -0
  17. data/lib/stopover.rb +18 -0
  18. data/lib/stopover/engine.rb +9 -0
  19. data/lib/stopover/version.rb +3 -0
  20. data/lib/tasks/stopover_tasks.rake +27 -0
  21. data/test/controllers/stopover/application_controller_test.rb +30 -0
  22. data/test/controllers/stopover/pages_controller_test.rb +29 -0
  23. data/test/dummy/README.rdoc +28 -0
  24. data/test/dummy/Rakefile +6 -0
  25. data/test/dummy/app/assets/javascripts/application.js +13 -0
  26. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  27. data/test/dummy/app/controllers/application_controller.rb +5 -0
  28. data/test/dummy/app/helpers/application_helper.rb +2 -0
  29. data/test/dummy/app/views/layouts/stopover.html.erb +11 -0
  30. data/test/dummy/app/views/stopover/404.html.erb +2 -0
  31. data/test/dummy/app/views/stopover/test/500.html.erb +2 -0
  32. data/test/dummy/bin/bundle +3 -0
  33. data/test/dummy/bin/rails +4 -0
  34. data/test/dummy/bin/rake +4 -0
  35. data/test/dummy/bin/setup +29 -0
  36. data/test/dummy/config.ru +4 -0
  37. data/test/dummy/config/application.rb +26 -0
  38. data/test/dummy/config/boot.rb +5 -0
  39. data/test/dummy/config/database.yml +25 -0
  40. data/test/dummy/config/environment.rb +5 -0
  41. data/test/dummy/config/environments/development.rb +41 -0
  42. data/test/dummy/config/environments/production.rb +79 -0
  43. data/test/dummy/config/environments/test.rb +42 -0
  44. data/test/dummy/config/initializers/assets.rb +11 -0
  45. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  46. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  47. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  48. data/test/dummy/config/initializers/inflections.rb +16 -0
  49. data/test/dummy/config/initializers/mime_types.rb +4 -0
  50. data/test/dummy/config/initializers/session_store.rb +3 -0
  51. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  52. data/test/dummy/config/locales/en.yml +23 -0
  53. data/test/dummy/config/routes.rb +3 -0
  54. data/test/dummy/config/secrets.yml +22 -0
  55. data/test/dummy/db/development.sqlite3 +0 -0
  56. data/test/dummy/db/schema.rb +16 -0
  57. data/test/dummy/db/test.sqlite3 +0 -0
  58. data/test/dummy/log/development.log +6 -0
  59. data/test/dummy/log/test.log +3350 -0
  60. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/13vFgNREPJM6Q8uLzd_z5G1eFfryVsQ1GQyRIJG8NRU.cache +0 -0
  61. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/2tm-e99ymMHuCoxaFkkX5OgigBW0K13P6BMH1_ivfGU.cache +1 -0
  62. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6NyIf2w9_5CWgdkA89rQhiYmMbPusAvh-o7FOC_Vw2Q.cache +0 -0
  63. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6f30urS0bttAC6K9JYgN7stn6oclePZ202zy7l2Ufvk.cache +1 -0
  64. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/CnONmHGCRiQ727ok7kGB0YwxYscxe83JLjy4AzZNz4k.cache +1 -0
  65. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/D-10qsBPbfzvNUjLOyRt2vOHrL8iPIyceK6pAQahwH0.cache +3 -0
  66. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/DGHWN5jyVTB2n3oSDd3YcuGM_aF5pZzzJtMJ58EC3lo.cache +3 -0
  67. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/FaRsT96yvgVFtV7oPH-IhUZ9Bn1YGRFiE4Fy7ODRiEU.cache +1 -0
  68. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QI_-z3Hh8vBUbmQVDiwhttPisx2TvQ-JDRtgSO7KYp8.cache +2 -0
  69. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/RWJovNYBk5mPs9mt7icXK1Q7ZejYWSnTgW_RPh2yPsc.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/XGv0dHwvdx4ZrClMO7EmXRi_1INBHV8g1i6dhvLreUM.cache +2 -0
  71. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/fBxkp09ZPnLOYmhbOJ-fY55TWfX973dCnY1eCF1C3Sg.cache +1 -0
  72. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/mBVphRNXPLk8YAIiv5VPpPJGiHb--uXF9ZNZXJybRh8.cache +1 -0
  73. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ohLVSCeVwQvwjrdIxsv2eECG6-IyZcWWW8y-0x4pRCo.cache +0 -0
  74. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/uZjbH7kkiVoYz8GRNqDkgL-RM5WVG78uReJ7zkfJv0o.cache +0 -0
  75. data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/yf4qOZ9fx_rhzxUx3Ay47EfAq6mzp2D8yoX5h56obpo.cache +1 -0
  76. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0MVN8QA5tZIhCEKQBt6AWm2KeNNxbnGc5kBsQqNiarg.cache +1 -0
  77. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2tm-e99ymMHuCoxaFkkX5OgigBW0K13P6BMH1_ivfGU.cache +1 -0
  78. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3Gtp_19FjdmPmlbq4QM4uDXt4R2zK-fjgy94XtDDuwU.cache +0 -0
  79. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3lli2cTmF9c4JfqMPjXiHdOZUz0S1xAVlx9K-8N4sU0.cache +1 -0
  80. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
  81. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5zZypkw-gGU-QXfTz-sWzePaFz2PkraQGdoyP0bubuI.cache +0 -0
  82. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6QDkwlPXVlLG2emSnijdvKk80JZ-c23QFnDOWNwX4lk.cache +0 -0
  83. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6f30urS0bttAC6K9JYgN7stn6oclePZ202zy7l2Ufvk.cache +1 -0
  84. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/C-9wKSeSqCI1o_SjAxrJdq-ECzoCeBXcjkL7o96zZp8.cache +1 -0
  85. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/D-10qsBPbfzvNUjLOyRt2vOHrL8iPIyceK6pAQahwH0.cache +3 -0
  86. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DGHWN5jyVTB2n3oSDd3YcuGM_aF5pZzzJtMJ58EC3lo.cache +3 -0
  87. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/EY--dhVs1ktxMPXJFeuBmPMGjStGSp-X72LjFaL6mMY.cache +1 -0
  88. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FaRsT96yvgVFtV7oPH-IhUZ9Bn1YGRFiE4Fy7ODRiEU.cache +1 -0
  89. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Gw1gxrLzIItc-0Sgwy77rUEnDJcjU9CmnaJzTN9yem8.cache +0 -0
  90. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H_iZrHOKqT1GwN2ufPs5HziB4Tq3IoK1IjC7UFk29RQ.cache +0 -0
  91. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/L-x78Fq9kFKWV2F13IYl6UvAzTDLSLXJ5ZErenDEn-k.cache +1 -0
  92. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OECBy5kwNa6ryMp16fLOcu5l2lc70_CepSBlMXIa98A.cache +1 -0
  93. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OGV1tT8vwWuWSDQd4syfNdP0YAgmCm5y7nejTUGYwvs.cache +1 -0
  94. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +3 -0
  95. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QI_-z3Hh8vBUbmQVDiwhttPisx2TvQ-JDRtgSO7KYp8.cache +2 -0
  96. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QK8axMgeUcCpzvrnF_r5wmCi1ybTwmQRn16oYMIPnII.cache +0 -0
  97. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UH3uylfh-PiSZCE0cN8ymqjLaJ_3psZU0NVyt3CNMiI.cache +1 -0
  98. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Uf2fTm8SSgrcE1oOSf2MBAoRAGPJezIimIMsMgLiaKI.cache +1 -0
  99. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XGv0dHwvdx4ZrClMO7EmXRi_1INBHV8g1i6dhvLreUM.cache +2 -0
  100. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ccyGxyLBkUoYXDGX8CU2ku12qvoWxDQ6WhW3cRVdKlg.cache +0 -0
  101. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/epkkzDsbsm4X2xAXfhfHOZwSjrWaaQcTM3RNQ4d3TrI.cache +1 -0
  102. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +3 -0
  103. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ohLVSCeVwQvwjrdIxsv2eECG6-IyZcWWW8y-0x4pRCo.cache +0 -0
  104. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
  105. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qsrJG3imazXv3T6TJL_880mjSVvFbZCz4PNI7KjZmHA.cache +1 -0
  106. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/sjuu5y9lO1NU_vgfyQ3braG-vZTP2ja4bIBliE5nFzQ.cache +0 -0
  107. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ugaZYXd1A2DLz9kv85NnzQ65kbiZN2YiD-GU-JlcQUY.cache +0 -0
  108. data/test/rake_test.rb +22 -0
  109. data/test/stopover_test.rb +9 -0
  110. data/test/test_helper.rb +20 -0
  111. metadata +271 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2ef37222ad04c88ef9d17c7d1788a773d2cbd1c5
4
+ data.tar.gz: 0fde2222512d624748939c8254d86cebec79dbf8
5
+ SHA512:
6
+ metadata.gz: 099d0ec00dfd65f412d337e034cd2acded7de27b35ed9f9437f6381de3ccd8ad8911ac95e53912bb9d13e2d4cf8d15bf74879f4b185e856918299850be233482
7
+ data.tar.gz: dff288c3be6d32c99da9cd2709b1e94749406138645098e20e72197d64c5afcc7ce4cfd27b8e05412c326cd3c2d47e2697d7771e1d2816f1971a3e652371f780
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2015 rono23
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # Stopover
2
+
3
+ Generate static pages with the asset pipeline on Rails.
4
+
5
+ ## Installation
6
+
7
+ Put this line in your Gemfile:
8
+
9
+ ```
10
+ gem 'stopover'
11
+ ```
12
+
13
+ Run the bundle command to install it.
14
+
15
+ After you install Stopover, you need to run the generator:
16
+
17
+ ```
18
+ rails generate stopover:install
19
+ ```
20
+
21
+ And add to your routes.rb if you want to check pages on your browser:
22
+
23
+ ```
24
+ mount Stopover::Engine, at: '/stopover', as: :stopover if Rails.env.development?
25
+ ```
26
+
27
+ Then visit http://localhost:3000/stopover.
28
+
29
+ ## Usage
30
+
31
+ Stopover is called after `rake assets:precompile` automatically.
32
+ And for example, `app/views/stopover/404.html.erb` is compiled to `public/404.html`.
33
+
34
+ You can also stop the hook with `disable_hook_assets_precompile = true` in [stopover.rb](https://github.com/rono23/stopover/blob/master/lib/generators/stopover/templates/stopover.rb#L5) and call `rake stopover:create` by yourself.
35
+
36
+ #### Heroku
37
+
38
+ Using Stopover on Heroku requires settings:
39
+
40
+ ```
41
+ # config/environments/production.rb
42
+ config.action_controller.asset_host = 'https://xxx.herokuapp.com'
43
+
44
+ # config/initializers/stopover.rb
45
+ config.disable_hook_assets_precompile = false
46
+ ```
47
+
48
+ ## Notice
49
+
50
+ Before deploy, please run `rake assets:precompile` or `rake stopover:create` and check compiled html in local when created/updated views in stopover.
51
+ Because there are some differences between a browser and rake.
52
+
53
+ For example, when you are using devise and a view calls `user_signed_in?`, it will return true/false on a browser, but raise an error on rake because of `request.env['warden']` is nil.
54
+ In this case, you can set `current_user` in [stopover.rb](https://github.com/rono23/stopover/blob/master/lib/generators/stopover/templates/stopover.rb#L27) and it is always handled as a guest on both.
55
+
56
+ ## Contributing
57
+
58
+ 1. Fork it
59
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
60
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
61
+ 4. Push to the branch (`git push origin my-new-feature`)
62
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Stopover'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,20 @@
1
+ module Stopover
2
+ class ApplicationController < ActionController::Base
3
+ include Rails.application.routes.url_helpers
4
+ include Stopover::CustomMethods
5
+
6
+ def self.renderer
7
+ new.tap do |controller|
8
+ controller.request = ActionDispatch::Request.new({})
9
+ controller.response = ActionDispatch::Response.new
10
+ controller.params = {}
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def _prefixes
17
+ @_prefixes ||= [Stopover.view_path, 'application']
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ require_dependency "stopover/application_controller"
2
+
3
+ module Stopover
4
+ class PagesController < ApplicationController
5
+ def index
6
+ render text: "Create views in app/views/#{Stopover.view_path} and then you can access #{request.fullpath}FILENAME without an extension."
7
+ end
8
+
9
+ def show
10
+ render "#{Stopover.view_path}/#{params[:id]}", layout: Stopover.layout_name
11
+ end
12
+ end
13
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ Stopover::Engine.routes.draw do
2
+ get '/', to: 'pages#index', as: :index
3
+ get '*id', to: 'pages#show', as: :show
4
+ end
@@ -0,0 +1,45 @@
1
+ module Stopover
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ class_option :template_engine,
7
+ type: :string,
8
+ aliases: '-e',
9
+ desc: 'Template engine for the views. Available options are "erb", "haml", and "slim".'
10
+
11
+ def self.banner
12
+ <<-BANNER.chomp
13
+ rails g stopover:install
14
+
15
+ Copies a layout, template and initializer to your application.
16
+ BANNER
17
+ end
18
+
19
+ desc ''
20
+ def copy_initializer
21
+ template 'stopover.rb', 'config/initializers/stopover.rb'
22
+ end
23
+
24
+ def copy_layout
25
+ layout = "layouts/#{Stopover.layout_name}.html.#{template_engine}"
26
+ copy_file layout, "app/views/#{layout}"
27
+ end
28
+
29
+ def copy_view
30
+ view = "404.html.#{template_engine}"
31
+ copy_file "views/#{view}", "app/views/#{Stopover.view_path}/#{view}"
32
+ end
33
+
34
+ def show_readme
35
+ readme 'README' if behavior == :invoke
36
+ end
37
+
38
+ private
39
+
40
+ def template_engine
41
+ options[:template_engine].try(:to_s).try(:downcase) || 'erb'
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ ===============================================================================
2
+
3
+ Thank you for installing!
4
+ You can change a layout, view path, custom methods etc in config/initializers/stopover.rb.
5
+
6
+ Add to your routes.rb if you want to check pages on your browser:
7
+
8
+ mount Stopover::Engine, at: '/stopover', as: :stopover if Rails.env.development?
9
+
10
+ Then visit http://localhost:3000/stopover.
11
+
12
+ ===============================================================================
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= content_for :title %></title>
5
+ <%= stylesheet_link_tag 'application', media: 'all' %>
6
+ <%= javascript_include_tag 'application' %>
7
+ </head>
8
+ <body>
9
+ <%= yield %>
10
+ </body>
11
+ </html>
@@ -0,0 +1,8 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title= content_for :title
5
+ = stylesheet_link_tag 'application', media: 'all'
6
+ = javascript_include_tag 'application'
7
+ %body
8
+ = yield
@@ -0,0 +1,8 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title= content_for :title
5
+ = stylesheet_link_tag 'application', media: 'all'
6
+ = javascript_include_tag 'application'
7
+ body
8
+ = yield
@@ -0,0 +1,30 @@
1
+ Stopover.setup do |config|
2
+ # Stopover is called after `rake assets:precompile` automatically.
3
+ # Set `true` and use `rake stopover:create` if you don't want.
4
+ # Default is <%= Stopover.disable_hook_assets_precompile.to_s %>.
5
+ # config.disable_hook_assets_precompile = <%= Stopover.disable_hook_assets_precompile.to_s %>
6
+
7
+ # The name of layout for all static pages. Set `false` if you don't need a layout.
8
+ # Default is '<%= Stopover.layout_name %>'.
9
+ # config.layout_name = '<%= Stopover.layout_name %>'
10
+
11
+ # The directry name of views. For exmaple, if this value is set to '<%= Stopover.view_path %>', Stopover finds views from 'app/views/<%= Stopover.view_path %>'.
12
+ # Default is '<%= Stopover.view_path %>'.
13
+ # config.view_path = '<%= Stopover.view_path %>'
14
+
15
+ # When you set custom methods, it will be included to `Stopover::ApplicationController`.
16
+ config.custom_methods do
17
+ # Set host etc to generate path/url in views.
18
+ def default_url_options
19
+ Rails.application.config.action_mailer[:default_url_options] || { host: 'localhost', port: 3000 }
20
+ end
21
+
22
+ # Override current_user is useful when you are using devise etc.
23
+ # For example, when a view calls `user_signed_in?`, it will return true/false on a browser,
24
+ # but raise an error on rake because of `request.env['warden']` is nil.
25
+ # In order to avoid this, you can set `current_user` is nil and it is always handled as a guest on both.
26
+ # def current_user
27
+ # nil
28
+ # end
29
+ end
30
+ end
@@ -0,0 +1,8 @@
1
+ <%- content_for :title, "The page you were looking for doesn't exist (404)" %>
2
+ <div class="dialog">
3
+ <div>
4
+ <h1>The page you were looking for doesn't exist.</h1>
5
+ <p>You may have mistyped the address or the page may have moved.</p>
6
+ </div>
7
+ <p>If you are the application owner check the logs for more information.</p>
8
+ </div>
@@ -0,0 +1,6 @@
1
+ - content_for :title, "The page you were looking for doesn't exist (404)"
2
+ .dialog
3
+ %div
4
+ %h1 The page you were looking for doesn't exist.
5
+ %p You may have mistyped the address or the page may have moved.
6
+ %p If you are the application owner check the logs for more information.
@@ -0,0 +1,6 @@
1
+ - content_for :title, "The page you were looking for doesn't exist (404)"
2
+ .dialog
3
+ div
4
+ h1 The page you were looking for doesn't exist.
5
+ p You may have mistyped the address or the page may have moved.
6
+ p If you are the application owner check the logs for more information.
data/lib/stopover.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'stopover/engine'
2
+
3
+ module Stopover
4
+ mattr_accessor(:disable_hook_assets_precompile) { false }
5
+ mattr_accessor(:layout_name) { 'stopover' }
6
+ mattr_accessor(:view_path) { 'stopover' }
7
+
8
+ module CustomMethods
9
+ end
10
+
11
+ def self.custom_methods(&block)
12
+ Stopover::CustomMethods.module_eval(&block) if block
13
+ end
14
+
15
+ def self.setup
16
+ yield self
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ module Stopover
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Stopover
4
+
5
+ config.to_prepare do
6
+ Stopover::ApplicationController.helper Rails.application.helpers
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Stopover
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,27 @@
1
+ namespace :stopover do
2
+ desc 'Creates static pages'
3
+ task create: :environment do
4
+ logger = Logger.new(STDOUT)
5
+ renderer = Stopover::ApplicationController.renderer
6
+ view_path = Rails.root.join('app', 'views', Stopover.view_path).to_s
7
+
8
+ Dir["#{view_path}/**/*"].each do |path|
9
+ filename = File.basename(path)
10
+ next if File.directory?(path) || filename.index(/^_/)
11
+
12
+ name = filename.split('.').first
13
+ dir = path.remove(view_path).remove(filename)
14
+ html = renderer.render_to_string("#{Stopover.view_path}#{dir}#{name}", layout: Stopover.layout_name)
15
+ html_dir = "#{Rails.public_path}#{dir}"
16
+ html_path = "#{html_dir}#{name}.html"
17
+
18
+ logger.info("Writing #{html_path}")
19
+ FileUtils.mkdir_p(html_dir)
20
+ File.open(html_path, 'w') { |f| f.write(html) }
21
+ end
22
+ end
23
+ end
24
+
25
+ Rake::Task['assets:precompile'].enhance do
26
+ Rake::Task['stopover:create'].invoke unless Stopover.disable_hook_assets_precompile
27
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ module Stopover
4
+ class ApplicationControllerTest < ActiveSupport::TestCase
5
+ setup do
6
+ Stopover.setup do |config|
7
+ config.custom_methods do
8
+ def default_url_options
9
+ { host: 'testtest.host', port: 3001 }
10
+ end
11
+
12
+ def current_user
13
+ nil
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ test 'instance methods from module_eval' do
20
+ @controller = Stopover::ApplicationController.new
21
+ assert_equal({ host: 'testtest.host', port: 3001 }, @controller.default_url_options)
22
+ assert_equal nil, @controller.current_user
23
+ end
24
+
25
+ test '.renderer' do
26
+ @renderer = Stopover::ApplicationController.renderer
27
+ assert_equal "<!DOCTYPE html>\n<html>\n <head>\n <title>404</title>\n <link rel=\"stylesheet\" media=\"all\" href=\"/assets/application.css\" />\n <script src=\"/assets/application.js\"></script>\n </head>\n <body>\n <h1><a href=\"http://testtest.host:3001/stopover/\">404 - Test</a></h1>\n\n </body>\n</html>\n", @renderer.render_to_string('stopover/404', layout: 'stopover')
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ module Stopover
4
+ class PagesControllerTest < ActionController::TestCase
5
+ setup do
6
+ @routes = Engine.routes
7
+
8
+ Stopover.setup do |config|
9
+ config.custom_methods do
10
+ def default_url_options
11
+ { host: 'test.host' }
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ test 'GET index' do
18
+ get :index
19
+ assert_response :success
20
+ assert_equal 'Create views in app/views/stopover and then you can access /stopover/FILENAME without an extension.', @response.body
21
+ end
22
+
23
+ test 'GET show' do
24
+ get :show, id: 404
25
+ assert_response :success
26
+ assert_equal "<!DOCTYPE html>\n<html>\n <head>\n <title>404</title>\n <link rel=\"stylesheet\" media=\"all\" href=\"/assets/application.css\" />\n <script src=\"/assets/application.js\"></script>\n </head>\n <body>\n <h1><a href=\"http://test.host/stopover/\">404 - Test</a></h1>\n\n </body>\n</html>\n", @response.body
27
+ end
28
+ end
29
+ end