hanami 1.3.5 → 2.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -41
  3. data/FEATURES.md +2 -12
  4. data/LICENSE.md +1 -1
  5. data/README.md +5 -8
  6. data/bin/hanami +6 -4
  7. data/hanami.gemspec +24 -28
  8. data/lib/hanami/application.rb +44 -176
  9. data/lib/hanami/boot.rb +6 -0
  10. data/lib/hanami/cli/commands/command.rb +21 -29
  11. data/lib/hanami/cli/commands/server.rb +63 -14
  12. data/lib/hanami/cli/commands.rb +5 -42
  13. data/lib/hanami/configuration/cookies.rb +24 -0
  14. data/lib/hanami/configuration/middleware.rb +8 -28
  15. data/lib/hanami/configuration/security.rb +141 -0
  16. data/lib/hanami/configuration/sessions.rb +50 -0
  17. data/lib/hanami/configuration.rb +181 -191
  18. data/lib/hanami/container.rb +107 -0
  19. data/lib/hanami/frameworks.rb +24 -18
  20. data/lib/hanami/routes.rb +17 -205
  21. data/lib/hanami/server.rb +5 -69
  22. data/lib/hanami/version.rb +3 -1
  23. data/lib/hanami.rb +39 -243
  24. metadata +36 -233
  25. data/lib/hanami/action/csrf_protection.rb +0 -211
  26. data/lib/hanami/action/routing_helpers.rb +0 -40
  27. data/lib/hanami/app.rb +0 -96
  28. data/lib/hanami/application_configuration.rb +0 -1495
  29. data/lib/hanami/application_name.rb +0 -108
  30. data/lib/hanami/application_namespace.rb +0 -14
  31. data/lib/hanami/assets/asset.rb +0 -72
  32. data/lib/hanami/assets/static.rb +0 -102
  33. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  34. data/lib/hanami/cli/commands/assets.rb +0 -16
  35. data/lib/hanami/cli/commands/console.rb +0 -95
  36. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  37. data/lib/hanami/cli/commands/db/console.rb +0 -44
  38. data/lib/hanami/cli/commands/db/create.rb +0 -32
  39. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  40. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  41. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  42. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  43. data/lib/hanami/cli/commands/db/version.rb +0 -32
  44. data/lib/hanami/cli/commands/db.rb +0 -32
  45. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  46. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  47. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  48. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  49. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  50. data/lib/hanami/cli/commands/destroy.rb +0 -26
  51. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  52. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  53. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  54. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  55. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  56. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  57. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  58. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  59. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  60. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  61. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  62. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  63. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  64. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  65. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  66. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  67. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  68. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  69. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  70. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  71. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  72. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  73. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  74. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  75. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  76. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  77. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  78. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  79. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  80. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  81. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  82. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  83. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  84. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  85. data/lib/hanami/cli/commands/generate.rb +0 -28
  86. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  87. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  88. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  89. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
  90. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  91. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  92. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  93. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  94. data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
  95. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
  96. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  97. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  98. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  99. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  100. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  101. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  102. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  103. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  104. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  105. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  106. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  107. data/lib/hanami/cli/commands/new.rb +0 -578
  108. data/lib/hanami/cli/commands/project.rb +0 -421
  109. data/lib/hanami/cli/commands/routes.rb +0 -21
  110. data/lib/hanami/cli/commands/templates.rb +0 -31
  111. data/lib/hanami/cli/commands/version.rb +0 -19
  112. data/lib/hanami/common_logger.rb +0 -109
  113. data/lib/hanami/components/app/assets.rb +0 -59
  114. data/lib/hanami/components/app/controller.rb +0 -74
  115. data/lib/hanami/components/app/routes.rb +0 -59
  116. data/lib/hanami/components/app/view.rb +0 -44
  117. data/lib/hanami/components/component.rb +0 -182
  118. data/lib/hanami/components/components.rb +0 -479
  119. data/lib/hanami/components/routes_inspector.rb +0 -72
  120. data/lib/hanami/components.rb +0 -156
  121. data/lib/hanami/config/cookies.rb +0 -69
  122. data/lib/hanami/config/framework_configuration.rb +0 -43
  123. data/lib/hanami/config/load_paths.rb +0 -46
  124. data/lib/hanami/config/mapper.rb +0 -47
  125. data/lib/hanami/config/routes.rb +0 -20
  126. data/lib/hanami/config/security.rb +0 -110
  127. data/lib/hanami/config/sessions.rb +0 -119
  128. data/lib/hanami/configuration/app.rb +0 -21
  129. data/lib/hanami/early_hints.rb +0 -129
  130. data/lib/hanami/env.rb +0 -69
  131. data/lib/hanami/environment.rb +0 -541
  132. data/lib/hanami/environment_application_configurations.rb +0 -37
  133. data/lib/hanami/hanamirc.rb +0 -169
  134. data/lib/hanami/mailer/glue.rb +0 -27
  135. data/lib/hanami/middleware_stack.rb +0 -172
  136. data/lib/hanami/rake_helper.rb +0 -78
  137. data/lib/hanami/rake_tasks.rb +0 -3
  138. data/lib/hanami/rendering_policy.rb +0 -94
  139. data/lib/hanami/routing/default.rb +0 -32
  140. data/lib/hanami/setup.rb +0 -3
  141. data/lib/hanami/static.rb +0 -63
  142. data/lib/hanami/templates/default.html.erb +0 -30
  143. data/lib/hanami/templates/welcome.html.erb +0 -52
  144. data/lib/hanami/views/default.rb +0 -37
  145. data/lib/hanami/views/default_template_finder.rb +0 -22
  146. data/lib/hanami/views/null_view.rb +0 -15
  147. data/lib/hanami/welcome.rb +0 -41
@@ -1,169 +0,0 @@
1
- require 'pathname'
2
- require 'hanami/utils/hash'
3
-
4
- module Hanami
5
- # Read the .hanamirc file in the root of the application
6
- #
7
- # @since 0.3.0
8
- # @api private
9
- class Hanamirc
10
- # Hanamirc name file
11
- #
12
- # @since 0.3.0
13
- # @api private
14
- #
15
- # @see Hanami::Hanamirc#path_file
16
- FILE_NAME = '.hanamirc'.freeze
17
-
18
- # Project name for writing the hanamirc file
19
- #
20
- # @since 0.8.0
21
- # @api private
22
- #
23
- # @see Hanami::Hanamirc#default_options
24
- PROJECT_NAME = 'project'.freeze
25
-
26
- # Test suite default value
27
- #
28
- # @since 0.3.0
29
- # @api private
30
- #
31
- # @see Hanami::Hanamirc#default_options
32
- DEFAULT_TEST_SUITE = 'rspec'.freeze
33
-
34
- # Test suite key for writing the hanamirc file
35
- #
36
- # @since 0.3.0
37
- # @api private
38
- #
39
- # @see Hanami::Hanamirc#default_options
40
- TEST_KEY = 'test'.freeze
41
-
42
- # Template default value
43
- #
44
- # @since 0.3.0
45
- # @api private
46
- #
47
- # @see Hanami::Hanamirc#default_options
48
- DEFAULT_TEMPLATE = 'erb'.freeze
49
-
50
- # Template key for writing the hanamirc file
51
- #
52
- # @since 0.3.0
53
- # @api private
54
- #
55
- # @see Hanami::Hanamirc#default_options
56
- TEMPLATE_KEY = 'template'.freeze
57
-
58
- # Key/value separator in hanamirc file
59
- #
60
- # @since 0.8.0
61
- # @api private
62
- SEPARATOR = '='.freeze
63
-
64
- # Initialize Hanamirc class with application's root and environment options.
65
- #
66
- # @param root [Pathname] Application's root
67
- #
68
- # @see Hanami::Environment#initialize
69
- def initialize(root)
70
- @root = root
71
- end
72
-
73
- # Read hanamirc file (if exists) and parse it's values or return default.
74
- #
75
- # @return [::Hash] parsed values
76
- #
77
- # @example Default values if file doesn't exist
78
- # Hanami::Hanamirc.new(Pathname.new(Dir.pwd)).options
79
- # # => { test: 'minitest', template: 'erb' }
80
- #
81
- # @example Custom values if file doesn't exist
82
- # options = { test: 'rspec', template: 'slim' }
83
- # Hanami::Hanamirc.new(Pathname.new(Dir.pwd), options).options
84
- # # => { test: 'rspec', template: 'slim' }
85
- def options
86
- @options ||= symbolize(default_options.merge(file_options))
87
- end
88
-
89
- # Default values for writing the hanamirc file
90
- #
91
- # @since 0.5.1
92
- # @api private
93
- #
94
- # @see Hanami::Hanamirc#options
95
- def default_options
96
- @default_options ||= Utils::Hash.symbolize({
97
- PROJECT_NAME => project_name,
98
- TEST_KEY => DEFAULT_TEST_SUITE,
99
- TEMPLATE_KEY => DEFAULT_TEMPLATE
100
- }).freeze
101
- end
102
-
103
- # Check if hanamirc file exists
104
- #
105
- # @since 0.3.0
106
- # @api private
107
- #
108
- # @return [Boolean] hanamirc file's path existing
109
- def exists?
110
- path_file.exist?
111
- end
112
-
113
- private
114
-
115
- # @api private
116
- def symbolize(hash)
117
- Utils::Hash.symbolize(hash)
118
- end
119
-
120
- # Returns options from hanamirc file
121
- #
122
- # @since 0.6.0
123
- # @api private
124
- #
125
- # @return [Hash] hanamirc parsed values
126
- def file_options
127
- symbolize(exists? ? parse_file(path_file) : {})
128
- end
129
-
130
- # Read hanamirc file and parse it's values
131
- #
132
- # @since 0.8.0
133
- # @api private
134
- #
135
- # @return [Hash] hanamirc parsed values
136
- def parse_file(path)
137
- {}.tap do |hash|
138
- File.readlines(path).each do |line|
139
- key, value = line.split(SEPARATOR)
140
- hash[key] = value.strip
141
- end
142
- end
143
- end
144
-
145
- # Return the hanamirc file's path
146
- #
147
- # @since 0.3.0
148
- # @api private
149
- #
150
- # @return [Pathname] hanamirc file's path
151
- #
152
- # @see Hanami::Hanamirc::FILE_NAME
153
- def path_file
154
- @root.join FILE_NAME
155
- end
156
-
157
- # Generates a default project name based on the application directory
158
- #
159
- # @since 0.8.0
160
- # @api private
161
- #
162
- # @return [String] application_name
163
- #
164
- # @see Hanami::Hanamirc::PROJECT_NAME
165
- def project_name
166
- ::File.basename(@root)
167
- end
168
- end
169
- end
@@ -1,27 +0,0 @@
1
- # @api private
2
- module Hanami::Mailer
3
- # @since 0.5.0
4
- # @api private
5
- module Glue
6
- # @since 0.5.0
7
- # @api private
8
- def self.included(configuration)
9
- configuration.class_eval do
10
- alias_method :delivery, :delivery_method
11
- end
12
- end
13
- end
14
-
15
- Configuration.class_eval do
16
- include Glue
17
- end
18
- end
19
-
20
- # @since 0.5.0
21
- # @api private
22
- module Mailers
23
- end
24
-
25
- Hanami::Mailer.configure do
26
- namespace Mailers
27
- end
@@ -1,172 +0,0 @@
1
- require 'rack/builder'
2
- require 'hanami/utils/class'
3
-
4
- module Hanami
5
- # Rack middleware stack for an application
6
- #
7
- # @since 0.1.0
8
- # @api private
9
- class MiddlewareStack
10
- # Instantiate a middleware stack
11
- #
12
- # @param configuration [Hanami::ApplicationConfiguration] the application's configuration
13
- #
14
- # @return [Hanami::MiddlewareStack] the new stack
15
- #
16
- # @since 0.1.0
17
- # @api private
18
- #
19
- # @see Hanami::ApplicationConfiguration
20
- def initialize(configuration)
21
- @stack = []
22
- @configuration = configuration
23
- @builder = Rack::Builder.new
24
- end
25
-
26
- # Load the middleware stack
27
- #
28
- # @return [Hanami::MiddlewareStack] the loaded middleware stack
29
- #
30
- # @since 0.2.0
31
- # @api private
32
- #
33
- # @see http://rdoc.info/gems/rack/Rack/Builder
34
- def load!
35
- load_default_stack
36
- stack.each { |m, args, block| builder.use(load_middleware(m), *args, &block) }
37
- builder.run routes
38
-
39
- self
40
- end
41
-
42
- # Process a request.
43
- # This method makes the middleware stack compatible with the Rack protocol.
44
- #
45
- # @param env [Hash] a Rack env
46
- #
47
- # @return [Array] a serialized Rack response
48
- #
49
- # @since 0.1.0
50
- # @api private
51
- def call(env)
52
- builder.call(env)
53
- end
54
-
55
- # Append a middleware to the stack.
56
- #
57
- # @param middleware [Object] a Rack middleware
58
- # @param args [Array] optional arguments to pass to the Rack middleware
59
- # @param blk [Proc] an optional block to pass to the Rack middleware
60
- #
61
- # @return [Array] the middleware that was added
62
- #
63
- # @since 0.2.0
64
- #
65
- # @see Hanami::MiddlewareStack#prepend
66
- #
67
- # @example
68
- # # apps/web/application.rb
69
- # module Web
70
- # class Application < Hanami::Application
71
- # configure do
72
- # # ...
73
- # use MyRackMiddleware, foo: 'bar'
74
- # end
75
- # end
76
- # end
77
- def use(middleware, *args, &blk)
78
- stack.push [middleware, args, blk]
79
- stack.uniq!
80
- end
81
-
82
- # Prepend a middleware to the stack.
83
- #
84
- # @param middleware [Object] a Rack middleware
85
- # @param args [Array] optional arguments to pass to the Rack middleware
86
- # @param blk [Proc] an optional block to pass to the Rack middleware
87
- #
88
- # @return [Array] the middleware that was added
89
- #
90
- # @since 0.6.0
91
- #
92
- # @see Hanami::MiddlewareStack#use
93
- #
94
- # @example
95
- # # apps/web/application.rb
96
- # module Web
97
- # class Application < Hanami::Application
98
- # configure do
99
- # # ...
100
- # prepend MyRackMiddleware, foo: 'bar'
101
- # end
102
- # end
103
- # end
104
- def prepend(middleware, *args, &blk)
105
- stack.unshift [middleware, args, blk]
106
- stack.uniq!
107
- end
108
-
109
- private
110
-
111
- # @api private
112
- # @since 0.9.0
113
- attr_reader :stack
114
-
115
- # @api private
116
- # @since 0.9.0
117
- attr_reader :builder
118
-
119
- # @api private
120
- # @since 0.9.0
121
- attr_reader :configuration
122
-
123
- # @api private
124
- # @since 0.2.0
125
- def load_middleware(middleware)
126
- case middleware
127
- when String
128
- Utils::Class.load!(middleware)
129
- else
130
- middleware
131
- end
132
- end
133
-
134
- # @api private
135
- # @since 0.9.0
136
- def routes
137
- Components["#{configuration.app_name}.routes"]
138
- end
139
-
140
- # @api private
141
- # @since 0.2.0
142
- def load_default_stack
143
- @default_stack_loaded ||= begin
144
- _load_session_middleware
145
- _load_default_welcome_page
146
-
147
- true
148
- end
149
- end
150
-
151
- # Default welcome page
152
- #
153
- # @api private
154
- # @since 0.2.0
155
- def _load_default_welcome_page
156
- unless Hanami.env?(:test) || routes.defined?
157
- require 'hanami/welcome'
158
- use Hanami::Welcome
159
- end
160
- end
161
-
162
- # Add session middleware
163
- #
164
- # @api private
165
- # @since 0.2.0
166
- def _load_session_middleware
167
- if configuration.sessions.enabled?
168
- prepend(*configuration.sessions.middleware)
169
- end
170
- end
171
- end
172
- end
@@ -1,78 +0,0 @@
1
- require 'rake'
2
-
3
- module Hanami
4
- # Install Rake tasks in projects
5
- #
6
- # @since 0.6.0
7
- # @api private
8
- class RakeHelper
9
- include Rake::DSL
10
-
11
- # @since 0.6.0
12
- # @api private
13
- def self.install_tasks
14
- new.install
15
- end
16
-
17
- # @since 0.6.0
18
- # @api private
19
- #
20
- # rubocop:disable Metrics/MethodLength
21
- def install
22
- desc "Load the full project"
23
- task :environment do
24
- require 'hanami/environment'
25
- Hanami::Environment.new.require_project_environment
26
- Components.resolve('all')
27
- end
28
-
29
- # Ruby ecosystem compatibility
30
- #
31
- # Most of the SaaS automatic tasks are designed after Ruby on Rails.
32
- # They expect the following Rake tasks to be present:
33
- #
34
- # * db:migrate
35
- # * assets:precompile
36
- #
37
- # See https://github.com/heroku/heroku-buildpack-ruby/issues/442
38
- #
39
- # ===
40
- #
41
- # These Rake tasks aren't listed when someone runs `rake -T`, because we
42
- # want to encourage developers to use `hanami` commands.
43
- #
44
- # In order to migrate the database or precompile assets a developer should
45
- # use:
46
- #
47
- # * hanami db migrate
48
- # * hanami assets precompile
49
- #
50
- # This is the preferred way to run Hanami command line tasks.
51
- # Please use them when you're in control of your deployment environment.
52
- #
53
- # If you're not in control and your deployment requires these "standard"
54
- # Rake tasks, they are here to solve this only specific problem.
55
- namespace :db do
56
- task :migrate do
57
- run_hanami_command("db migrate")
58
- end
59
- end
60
-
61
- namespace :assets do
62
- task :precompile do
63
- run_hanami_command("assets precompile")
64
- end
65
- end
66
- end
67
-
68
- private
69
-
70
- # @since 1.1.0
71
- # @api private
72
- def run_hanami_command(command)
73
- require "hanami/cli/commands"
74
- Dry::CLI.new(Hanami::CLI::Commands).call(arguments: command.split(/[[:space:]]/))
75
- end
76
- # rubocop:enable Metrics/MethodLength
77
- end
78
- end
@@ -1,3 +0,0 @@
1
- require 'hanami/rake_helper'
2
-
3
- Hanami::RakeHelper.install_tasks
@@ -1,94 +0,0 @@
1
- require 'hanami/utils/class'
2
- require 'hanami/views/default'
3
- require 'hanami/views/null_view'
4
- require 'hanami/action/rack/errors'
5
-
6
- module Hanami
7
- # Rendering policy
8
- #
9
- # @since 0.1.0
10
- # @api private
11
- class RenderingPolicy
12
- # @api private
13
- STATUS = 0
14
- # @api private
15
- HEADERS = 1
16
- # @api private
17
- BODY = 2
18
-
19
- # @api private
20
- HANAMI_ACTION = 'hanami.action'.freeze
21
-
22
- # @api private
23
- SUCCESSFUL_STATUSES = (200..201).freeze
24
- # @api private
25
- RENDERABLE_FORMATS = [:all, :html].freeze
26
- # @api private
27
- ERROR_STATUS = 500
28
-
29
- # @api private
30
- def initialize(configuration)
31
- @controller_pattern = %r{#{ configuration.controller_pattern.gsub(/\%\{(controller|action)\}/) { "(?<#{ $1 }>(.*))" } }}
32
- @configuration = configuration
33
- end
34
-
35
- # @api private
36
- def render(env, response)
37
- body = _render(env, response)
38
-
39
- response[BODY] = Array(body) unless body.nil? || body.respond_to?(:each)
40
- response
41
- end
42
-
43
- private
44
- # @api private
45
- def _render(env, response)
46
- if action = renderable?(env)
47
- _render_action(action, env, response) ||
48
- _render_status_page(action, response)
49
- end
50
- end
51
-
52
- # @api private
53
- def _render_action(action, env, response)
54
- begin
55
- view_for(action, response).render(
56
- action.exposures
57
- )
58
- rescue StandardError => e
59
- Hanami::Action::Rack::Errors.set(env, e)
60
- raise e unless @configuration.handle_exceptions
61
-
62
- response[STATUS] = ERROR_STATUS
63
- false
64
- end
65
- end
66
-
67
- # @api private
68
- def _render_status_page(action, response)
69
- if render_status_page?(action, response)
70
- Hanami::Views::Default.render(@configuration.templates, response[STATUS], response: response, format: :html)
71
- end
72
- end
73
-
74
- # @api private
75
- def renderable?(env)
76
- ((action = env.delete(HANAMI_ACTION)) && action.renderable?) and action
77
- end
78
-
79
- # @api private
80
- def render_status_page?(action, response)
81
- RENDERABLE_FORMATS.include?(action.format) && !SUCCESSFUL_STATUSES.include?(response[STATUS])
82
- end
83
-
84
- # @api private
85
- def view_for(action, response)
86
- view = if response[BODY].respond_to?(:empty?) && response[BODY].empty?
87
- captures = @controller_pattern.match(action.class.name)
88
- Utils::Class.load(@configuration.view_pattern % { controller: captures[:controller], action: captures[:action] }, @configuration.namespace)
89
- end
90
-
91
- view || Views::NullView.new
92
- end
93
- end
94
- end
@@ -1,32 +0,0 @@
1
- module Hanami
2
- # @api private
3
- module Routing
4
- # The default Rack application that responds when a resource cannot be found.
5
- #
6
- # @since 0.1.0
7
- # @api private
8
- class Default
9
- # @api private
10
- DEFAULT_CODE = 404
11
- # @api private
12
- DEFAULT_BODY = ['Not Found'].freeze
13
- # @api private
14
- CONTENT_TYPE = 'Content-Type'.freeze
15
-
16
- # @api private
17
- class NullAction
18
- include Hanami::Action
19
-
20
- # @api private
21
- def call(env)
22
- end
23
- end
24
-
25
- # @api private
26
- def call(env)
27
- action = NullAction.new.tap { |a| a.call(env) }
28
- [ DEFAULT_CODE, {CONTENT_TYPE => action.content_type}, DEFAULT_BODY, action ]
29
- end
30
- end
31
- end
32
- end
data/lib/hanami/setup.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'hanami'
2
-
3
- ::Bundler.require(*Hanami::Environment.new.bundler_groups)
data/lib/hanami/static.rb DELETED
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rack/static"
4
-
5
- module Hanami
6
- # Serve static assets in deployment environments (production, staging) where
7
- # the stack doesn't include a web server.
8
- #
9
- # Web servers like Nginx are the ideal candidate to serve static assets.
10
- # They are faster than Ruby application servers (eg. Puma) and they should be
11
- # always preferred for this specific task.
12
- #
13
- # But there are some PaaS that don't allow to use web servers in front of Ruby
14
- # web applications. A classical example is Heroku, which requires the web
15
- # application to serve static assets.
16
- #
17
- # Hanami::Static is designed for this specific scenario.
18
- #
19
- # To enable it set the env variable `SERVE_STATIC_ASSETS` on `true`.
20
- #
21
- # NOTE: Please remember to precompile the assets at the deploy time with
22
- # `bundle exec hanami assets precompile`.
23
- #
24
- # @since 0.6.0
25
- # @api private
26
- #
27
- # @see http://www.rubydoc.info/gems/rack/Rack/Static
28
- class Static < ::Rack::Static
29
- # @since 0.8.0
30
- # @api private
31
- MAX_AGE = 60 * 60 * 24 * 365 # One year
32
-
33
- # @since 0.8.0
34
- # @api private
35
- HEADER_RULES = [[:all, { "Cache-Control" => "public, max-age=#{MAX_AGE}" }]].freeze
36
-
37
- # @since 0.8.0
38
- # @api private
39
- URL_PREFIX = "/"
40
-
41
- # @since 0.6.0
42
- # @api private
43
- def initialize(app, root: Hanami.public_directory, header_rules: HEADER_RULES)
44
- super(app, urls: _urls(root), root: root, header_rules: header_rules)
45
- end
46
-
47
- private
48
-
49
- # @since 0.8.0
50
- # @api private
51
- def _urls(root)
52
- return [] unless root.exist?
53
-
54
- asset_files = Pathname.glob(root.join("**", "*"))
55
- .select(&:file?)
56
-
57
- asset_files.each_with_object({}) do |path, result|
58
- path = path.relative_path_from(root)
59
- result["#{URL_PREFIX}#{path}"] = path
60
- end
61
- end
62
- end
63
- end
@@ -1,30 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title><%= title %></title>
5
- <link rel="shortcut icon" type="image/x-icon" href="/assets/favicon.ico">
6
- <style>
7
- * { margin: 0; padding: 0; }
8
- body { font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; color: #333; background-color: #ecf0f1; font-size: 16px; line-height: 24px; }
9
- h2, h3 { margin: -20px; line-height: 100px; text-align: center; }
10
- .logo { text-align: center; margin-top: 0.5em; }
11
- h2 { font-size: 30px; }
12
- h3 { font-size: 20px; line-height: 22px; color: #666; }
13
- hr { margin: 2em; color: #ecf0f1; }
14
- ul { text-align: center; }
15
- li { display: inline; margin: 2em; line-height: 24px; list-style-type: none; vertical-align: text-top;}
16
- p { margin-top: 60px; text-align: center; }
17
- a { color: #333; padding: 1px; }
18
- code { padding: .2em; background-color: #ecf0f1 }
19
- #container { margin: 20% auto; padding: 24px; width: 75%; background-color: #fff; border: 1px solid #999; border-width: 1px; }
20
- #content { margin: 30px 10px 0 10px; }
21
- #footer { margin:0 auto 0; padding: 12px; width:700px; line-height: 24px; font-size: 12px; }
22
- .bold { font-weight: bold; }
23
- </style>
24
- </head>
25
- <body>
26
- <div id="container">
27
- <h2><%= title %></h2>
28
- </div>
29
- </body>
30
- </html>