hanami 1.3.5 → 2.0.0.alpha1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -41
- data/FEATURES.md +2 -12
- data/LICENSE.md +1 -1
- data/README.md +5 -8
- data/bin/hanami +6 -4
- data/hanami.gemspec +24 -28
- data/lib/hanami/application.rb +44 -176
- data/lib/hanami/boot.rb +6 -0
- data/lib/hanami/cli/commands/command.rb +21 -29
- data/lib/hanami/cli/commands/server.rb +63 -14
- data/lib/hanami/cli/commands.rb +5 -42
- data/lib/hanami/configuration/cookies.rb +24 -0
- data/lib/hanami/configuration/middleware.rb +8 -28
- data/lib/hanami/configuration/security.rb +141 -0
- data/lib/hanami/configuration/sessions.rb +50 -0
- data/lib/hanami/configuration.rb +181 -191
- data/lib/hanami/container.rb +107 -0
- data/lib/hanami/frameworks.rb +24 -18
- data/lib/hanami/routes.rb +17 -205
- data/lib/hanami/server.rb +5 -69
- data/lib/hanami/version.rb +3 -1
- data/lib/hanami.rb +39 -243
- metadata +36 -233
- data/lib/hanami/action/csrf_protection.rb +0 -211
- data/lib/hanami/action/routing_helpers.rb +0 -40
- data/lib/hanami/app.rb +0 -96
- data/lib/hanami/application_configuration.rb +0 -1495
- data/lib/hanami/application_name.rb +0 -108
- data/lib/hanami/application_namespace.rb +0 -14
- data/lib/hanami/assets/asset.rb +0 -72
- data/lib/hanami/assets/static.rb +0 -102
- data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
- data/lib/hanami/cli/commands/assets.rb +0 -16
- data/lib/hanami/cli/commands/console.rb +0 -95
- data/lib/hanami/cli/commands/db/apply.rb +0 -32
- data/lib/hanami/cli/commands/db/console.rb +0 -44
- data/lib/hanami/cli/commands/db/create.rb +0 -32
- data/lib/hanami/cli/commands/db/drop.rb +0 -32
- data/lib/hanami/cli/commands/db/migrate.rb +0 -39
- data/lib/hanami/cli/commands/db/prepare.rb +0 -32
- data/lib/hanami/cli/commands/db/rollback.rb +0 -59
- data/lib/hanami/cli/commands/db/version.rb +0 -32
- data/lib/hanami/cli/commands/db.rb +0 -32
- data/lib/hanami/cli/commands/destroy/action.rb +0 -137
- data/lib/hanami/cli/commands/destroy/app.rb +0 -159
- data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
- data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
- data/lib/hanami/cli/commands/destroy/model.rb +0 -84
- data/lib/hanami/cli/commands/destroy.rb +0 -26
- data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
- data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
- data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
- data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
- data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
- data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
- data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
- data/lib/hanami/cli/commands/generate/action.rb +0 -321
- data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
- data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
- data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
- data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
- data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
- data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
- data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
- data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
- data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
- data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
- data/lib/hanami/cli/commands/generate/app.rb +0 -243
- data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
- data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
- data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
- data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
- data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
- data/lib/hanami/cli/commands/generate/migration.rb +0 -41
- data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
- data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
- data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
- data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
- data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
- data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
- data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
- data/lib/hanami/cli/commands/generate/model.rb +0 -125
- data/lib/hanami/cli/commands/generate/secret.rb +0 -48
- data/lib/hanami/cli/commands/generate.rb +0 -28
- data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
- data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
- data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
- data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
- data/lib/hanami/cli/commands/new/README.md.erb +0 -33
- data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
- data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
- data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
- data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
- data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
- data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
- data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
- data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
- data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
- data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
- data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
- data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
- data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
- data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
- data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
- data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
- data/lib/hanami/cli/commands/new.rb +0 -578
- data/lib/hanami/cli/commands/project.rb +0 -421
- data/lib/hanami/cli/commands/routes.rb +0 -21
- data/lib/hanami/cli/commands/templates.rb +0 -31
- data/lib/hanami/cli/commands/version.rb +0 -19
- data/lib/hanami/common_logger.rb +0 -109
- data/lib/hanami/components/app/assets.rb +0 -59
- data/lib/hanami/components/app/controller.rb +0 -74
- data/lib/hanami/components/app/routes.rb +0 -59
- data/lib/hanami/components/app/view.rb +0 -44
- data/lib/hanami/components/component.rb +0 -182
- data/lib/hanami/components/components.rb +0 -479
- data/lib/hanami/components/routes_inspector.rb +0 -72
- data/lib/hanami/components.rb +0 -156
- data/lib/hanami/config/cookies.rb +0 -69
- data/lib/hanami/config/framework_configuration.rb +0 -43
- data/lib/hanami/config/load_paths.rb +0 -46
- data/lib/hanami/config/mapper.rb +0 -47
- data/lib/hanami/config/routes.rb +0 -20
- data/lib/hanami/config/security.rb +0 -110
- data/lib/hanami/config/sessions.rb +0 -119
- data/lib/hanami/configuration/app.rb +0 -21
- data/lib/hanami/early_hints.rb +0 -129
- data/lib/hanami/env.rb +0 -69
- data/lib/hanami/environment.rb +0 -541
- data/lib/hanami/environment_application_configurations.rb +0 -37
- data/lib/hanami/hanamirc.rb +0 -169
- data/lib/hanami/mailer/glue.rb +0 -27
- data/lib/hanami/middleware_stack.rb +0 -172
- data/lib/hanami/rake_helper.rb +0 -78
- data/lib/hanami/rake_tasks.rb +0 -3
- data/lib/hanami/rendering_policy.rb +0 -94
- data/lib/hanami/routing/default.rb +0 -32
- data/lib/hanami/setup.rb +0 -3
- data/lib/hanami/static.rb +0 -63
- data/lib/hanami/templates/default.html.erb +0 -30
- data/lib/hanami/templates/welcome.html.erb +0 -52
- data/lib/hanami/views/default.rb +0 -37
- data/lib/hanami/views/default_template_finder.rb +0 -22
- data/lib/hanami/views/null_view.rb +0 -15
- data/lib/hanami/welcome.rb +0 -41
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
require "hanami/utils/file_list"
|
|
2
|
-
require "securerandom"
|
|
3
|
-
|
|
4
|
-
module Hanami
|
|
5
|
-
# Hanami CLI
|
|
6
|
-
#
|
|
7
|
-
# @since 1.1.0
|
|
8
|
-
class CLI
|
|
9
|
-
module Commands
|
|
10
|
-
# @since 1.1.0
|
|
11
|
-
# @api private
|
|
12
|
-
module Project # rubocop:disable Metrics/ModuleLength
|
|
13
|
-
# @since 1.1.0
|
|
14
|
-
# @api private
|
|
15
|
-
def self.readme(*)
|
|
16
|
-
root.join("README.md")
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# @since 1.1.0
|
|
20
|
-
# @api private
|
|
21
|
-
def self.gemfile(*)
|
|
22
|
-
root.join("Gemfile")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @since 1.1.0
|
|
26
|
-
# @api private
|
|
27
|
-
def self.rakefile(*)
|
|
28
|
-
root.join("Rakefile")
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# @since 1.1.0
|
|
32
|
-
# @api private
|
|
33
|
-
def self.hanamirc(*)
|
|
34
|
-
root.join(".hanamirc")
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# @since 1.1.0
|
|
38
|
-
# @api private
|
|
39
|
-
def self.gitignore(*)
|
|
40
|
-
root.join(".gitignore")
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @since 1.1.0
|
|
44
|
-
# @api private
|
|
45
|
-
def self.config_ru(*)
|
|
46
|
-
root.join("config.ru")
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# @since 1.1.0
|
|
50
|
-
# @api private
|
|
51
|
-
def self.environment(*)
|
|
52
|
-
root.join("config", "environment.rb")
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# @since 1.1.0
|
|
56
|
-
# @api private
|
|
57
|
-
def self.boot(*)
|
|
58
|
-
root.join("config", "boot.rb")
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# @since 1.1.0
|
|
62
|
-
# @api private
|
|
63
|
-
def self.initializers(*)
|
|
64
|
-
root.join("config", "initializers")
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# @since 1.1.0
|
|
68
|
-
# @api private
|
|
69
|
-
def self.env(*, environment)
|
|
70
|
-
root.join(".env.#{environment}")
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# @since 1.1.0
|
|
74
|
-
# @api private
|
|
75
|
-
def self.db(*)
|
|
76
|
-
root.join("db")
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# @since 1.1.0
|
|
80
|
-
# @api private
|
|
81
|
-
def self.db_schema(*)
|
|
82
|
-
root.join("db", "schema.sql")
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# @since 1.1.0
|
|
86
|
-
# @api private
|
|
87
|
-
def self.migrations(*)
|
|
88
|
-
root.join("db", "migrations")
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# @since 1.1.0
|
|
92
|
-
# @api private
|
|
93
|
-
def self.migration(context)
|
|
94
|
-
filename = MIGRATION_FILENAME_PATTERN % { timestamp: migration_timestamp, name: context.migration }
|
|
95
|
-
|
|
96
|
-
root.join("db", "migrations", "#{filename}.rb")
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# @since 1.1.0
|
|
100
|
-
# @api private
|
|
101
|
-
def self.migration_timestamp
|
|
102
|
-
Time.now.utc.strftime(MIGRATION_TIMESTAMP_FORMAT)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# @since 1.1.0
|
|
106
|
-
# @api private
|
|
107
|
-
def self.find_migration(context)
|
|
108
|
-
list(root.join("db", "migrations", "*_#{context.migration}.rb")).first
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# @since 1.1.0
|
|
112
|
-
# @api private
|
|
113
|
-
def self.project(context)
|
|
114
|
-
root.join("lib", "#{context.options.fetch(:project)}.rb")
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# @since 1.1.0
|
|
118
|
-
# @api private
|
|
119
|
-
def self.mailers(context)
|
|
120
|
-
root.join("lib", context.options.fetch(:project), "mailers")
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# @since 1.1.0
|
|
124
|
-
# @api private
|
|
125
|
-
def self.mailers_templates(context)
|
|
126
|
-
root.join("lib", context.options.fetch(:project), "mailers", "templates")
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# @since 1.1.0
|
|
130
|
-
# @api private
|
|
131
|
-
def self.mailer(context)
|
|
132
|
-
root.join("lib", context.options.fetch(:project), "mailers", "#{context.mailer}.rb")
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# @since 1.1.0
|
|
136
|
-
# @api private
|
|
137
|
-
def self.mailer_templates(context)
|
|
138
|
-
list root.join("lib", context.options.fetch(:project), "mailers", "templates", "#{context.mailer}.*.*")
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# @since 1.1.0
|
|
142
|
-
# @api private
|
|
143
|
-
def self.entities(context)
|
|
144
|
-
root.join("lib", context.options.fetch(:project), "entities")
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# @since 1.1.0
|
|
148
|
-
# @api private
|
|
149
|
-
def self.entity(context)
|
|
150
|
-
root.join("lib", context.options.fetch(:project), "entities", "#{context.model}.rb")
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# @since 1.1.0
|
|
154
|
-
# @api private
|
|
155
|
-
def self.repositories(context)
|
|
156
|
-
root.join("lib", context.options.fetch(:project), "repositories")
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# @since 1.1.0
|
|
160
|
-
# @api private
|
|
161
|
-
def self.repository(context)
|
|
162
|
-
root.join("lib", context.options.fetch(:project), "repositories", "#{context.model}_repository.rb")
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# @since 1.1.0
|
|
166
|
-
# @api private
|
|
167
|
-
def self.public_directory(*)
|
|
168
|
-
root.join("public")
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
# @since 1.1.0
|
|
172
|
-
# @api private
|
|
173
|
-
def self.assets_manifest(*)
|
|
174
|
-
root.join("public", "assets.json")
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
# @since 1.1.0
|
|
178
|
-
# @api private
|
|
179
|
-
def self.public_app_assets(context)
|
|
180
|
-
# FIXME: extract this URL to path conversion into Hanami::Utils
|
|
181
|
-
assets_directory = context.base_url.sub(/\A\//, "").split("/")
|
|
182
|
-
root.join("public", "assets", *assets_directory)
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
# @since 1.1.0
|
|
186
|
-
# @api private
|
|
187
|
-
def self.mailer_template(context, format)
|
|
188
|
-
root.join("lib", context.options.fetch(:project), "mailers", "templates", "#{context.mailer}.#{format}.#{context.options.fetch(:template)}")
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
# @since 1.1.0
|
|
192
|
-
# @api private
|
|
193
|
-
def self.app_application(context)
|
|
194
|
-
root.join("apps", context.app, "application.rb")
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
# @since 1.1.0
|
|
198
|
-
# @api private
|
|
199
|
-
def self.app_sessions_secret
|
|
200
|
-
SecureRandom.hex(32)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
# @since 1.1.0
|
|
204
|
-
# @api private
|
|
205
|
-
def self.app_routes(context)
|
|
206
|
-
root.join("apps", context.app, "config", "routes.rb")
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
# @since 1.1.0
|
|
210
|
-
# @api private
|
|
211
|
-
def self.app_layout(context)
|
|
212
|
-
root.join("apps", context.app, "views", "application_layout.rb")
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
# @since 1.1.0
|
|
216
|
-
# @api private
|
|
217
|
-
def self.app_template(context)
|
|
218
|
-
root.join("apps", context.app, "templates", "application.html.#{context.template}")
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
# @since 1.1.0
|
|
222
|
-
# @api private
|
|
223
|
-
def self.app_favicon(context)
|
|
224
|
-
root.join("apps", context.app, "assets", "favicon.ico")
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
# @since 1.1.0
|
|
228
|
-
# @api private
|
|
229
|
-
def self.controllers(context)
|
|
230
|
-
root.join("apps", context.app, "controllers")
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
# @since 1.1.0
|
|
234
|
-
# @api private
|
|
235
|
-
def self.images(context)
|
|
236
|
-
root.join("apps", context.app, "assets", "images")
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
# @since 1.1.0
|
|
240
|
-
# @api private
|
|
241
|
-
def self.javascripts(context)
|
|
242
|
-
root.join("apps", context.app, "assets", "javascripts")
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
# @since 1.1.0
|
|
246
|
-
# @api private
|
|
247
|
-
def self.stylesheets(context)
|
|
248
|
-
root.join("apps", context.app, "assets", "stylesheets")
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
# @since 1.1.0
|
|
252
|
-
# @api private
|
|
253
|
-
def self.action(context)
|
|
254
|
-
root.join("apps", context.app, "controllers", context.controller, "#{context.action}.rb")
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
# @since 1.1.0
|
|
258
|
-
# @api private
|
|
259
|
-
def self.view(context)
|
|
260
|
-
root.join("apps", context.app, "views", context.controller, "#{context.action}.rb")
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
# @since 1.1.0
|
|
264
|
-
# @api private
|
|
265
|
-
def self.template(context)
|
|
266
|
-
root.join("apps", context.app, "templates", context.controller, "#{context.action}.html.#{context.options.fetch(:template)}")
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
# @since 1.1.0
|
|
270
|
-
# @api private
|
|
271
|
-
def self.templates(context)
|
|
272
|
-
list root.join("apps", context.app, "templates", context.controller, "#{context.action}.*.*")
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
# @since 1.1.0
|
|
276
|
-
# @api private
|
|
277
|
-
def self.entities_spec(context)
|
|
278
|
-
root.join("spec", context.options.fetch(:project), "entities")
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
# @since 1.1.0
|
|
282
|
-
# @api private
|
|
283
|
-
def self.entity_spec(context)
|
|
284
|
-
root.join("spec", context.options.fetch(:project), "entities", "#{context.model}_spec.rb")
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
# @since 1.1.0
|
|
288
|
-
# @api private
|
|
289
|
-
def self.repositories_spec(context)
|
|
290
|
-
root.join("spec", context.options.fetch(:project), "repositories")
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
# @since 1.1.0
|
|
294
|
-
# @api private
|
|
295
|
-
def self.repository_spec(context)
|
|
296
|
-
root.join("spec", context.options.fetch(:project), "repositories", "#{context.model}_repository_spec.rb")
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
# @since 1.1.0
|
|
300
|
-
# @api private
|
|
301
|
-
def self.mailers_spec(context)
|
|
302
|
-
root.join("spec", context.options.fetch(:project), "mailers")
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
# @since 1.1.0
|
|
306
|
-
# @api private
|
|
307
|
-
def self.mailer_spec(context)
|
|
308
|
-
root.join("spec", context.options.fetch(:project), "mailers", "#{context.mailer}_spec.rb")
|
|
309
|
-
end
|
|
310
|
-
|
|
311
|
-
# @since 1.1.0
|
|
312
|
-
# @api private
|
|
313
|
-
def self.app_spec(context)
|
|
314
|
-
root.join("spec", context.app)
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
def self.app_layout_spec(context)
|
|
318
|
-
root.join("spec", context.app, "views", "application_layout_spec.rb")
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
# @since 1.1.0
|
|
322
|
-
# @api private
|
|
323
|
-
def self.controllers_spec(context)
|
|
324
|
-
root.join("spec", context.app, "controllers")
|
|
325
|
-
end
|
|
326
|
-
|
|
327
|
-
# @since 1.1.0
|
|
328
|
-
# @api private
|
|
329
|
-
def self.action_spec(context)
|
|
330
|
-
root.join("spec", context.app, "controllers", context.controller, "#{context.action}_spec.rb")
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
# @since 1.1.0
|
|
334
|
-
# @api private
|
|
335
|
-
def self.view_spec(context)
|
|
336
|
-
root.join("spec", context.app, "views", context.controller, "#{context.action}_spec.rb")
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
# @since 1.1.0
|
|
340
|
-
# @api private
|
|
341
|
-
def self.features_spec(context)
|
|
342
|
-
root.join("spec", context.app, "features")
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
# @since 1.1.0
|
|
346
|
-
# @api private
|
|
347
|
-
def self.dotrspec(*)
|
|
348
|
-
root.join(".rspec")
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
# @since 1.1.0
|
|
352
|
-
# @api private
|
|
353
|
-
def self.spec_helper(*)
|
|
354
|
-
root.join("spec", "spec_helper.rb")
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
# @since 1.1.0
|
|
358
|
-
# @api private
|
|
359
|
-
def self.features_helper(*)
|
|
360
|
-
root.join("spec", "features_helper.rb")
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
# @since 1.1.0
|
|
364
|
-
# @api private
|
|
365
|
-
def self.support_spec(*)
|
|
366
|
-
root.join("spec", "support")
|
|
367
|
-
end
|
|
368
|
-
|
|
369
|
-
# @since 1.1.0
|
|
370
|
-
# @api private
|
|
371
|
-
def self.capybara(*)
|
|
372
|
-
root.join("spec", "support", "capybara.rb")
|
|
373
|
-
end
|
|
374
|
-
|
|
375
|
-
# @since 1.1.0
|
|
376
|
-
# @api private
|
|
377
|
-
def self.app(context)
|
|
378
|
-
root.join("apps", context.app)
|
|
379
|
-
end
|
|
380
|
-
|
|
381
|
-
# @since 1.1.0
|
|
382
|
-
# @api private
|
|
383
|
-
def self.app?(context)
|
|
384
|
-
apps.include?(context.app)
|
|
385
|
-
end
|
|
386
|
-
|
|
387
|
-
# @since 1.1.0
|
|
388
|
-
# @api private
|
|
389
|
-
def self.apps
|
|
390
|
-
Dir.glob(root.join("apps", "*")).map { |app| File.basename(app) }
|
|
391
|
-
end
|
|
392
|
-
|
|
393
|
-
# @since 1.1.0
|
|
394
|
-
# @api private
|
|
395
|
-
def self.keep(path)
|
|
396
|
-
root.join(path, ".gitkeep")
|
|
397
|
-
end
|
|
398
|
-
|
|
399
|
-
# @since 1.1.0
|
|
400
|
-
# @api private
|
|
401
|
-
def self.list(pattern)
|
|
402
|
-
Hanami::Utils::FileList[pattern]
|
|
403
|
-
end
|
|
404
|
-
|
|
405
|
-
# @since 1.1.0
|
|
406
|
-
# @api private
|
|
407
|
-
def self.root
|
|
408
|
-
File
|
|
409
|
-
end
|
|
410
|
-
|
|
411
|
-
# @since 1.1.0
|
|
412
|
-
# @api private
|
|
413
|
-
MIGRATION_TIMESTAMP_FORMAT = "%Y%m%d%H%M%S".freeze
|
|
414
|
-
|
|
415
|
-
# @since 1.1.0
|
|
416
|
-
# @api private
|
|
417
|
-
MIGRATION_FILENAME_PATTERN = "%{timestamp}_%{name}".freeze # rubocop:disable Style/FormatStringToken
|
|
418
|
-
end
|
|
419
|
-
end
|
|
420
|
-
end
|
|
421
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
class CLI
|
|
3
|
-
module Commands
|
|
4
|
-
# @since 1.1.0
|
|
5
|
-
# @api private
|
|
6
|
-
class Routes < Command
|
|
7
|
-
requires "routes.inspector"
|
|
8
|
-
|
|
9
|
-
desc "Prints routes"
|
|
10
|
-
|
|
11
|
-
# @since 1.1.0
|
|
12
|
-
# @api private
|
|
13
|
-
def call(*)
|
|
14
|
-
puts requirements['routes.inspector'].inspect
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
register "routes", Commands::Routes
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
class CLI
|
|
3
|
-
module Commands
|
|
4
|
-
# @since 1.1.0
|
|
5
|
-
# @api private
|
|
6
|
-
class Templates
|
|
7
|
-
NAMESPACE = name.sub(Utils::String.demodulize(name), "").freeze
|
|
8
|
-
|
|
9
|
-
# @since 1.1.0
|
|
10
|
-
# @api private
|
|
11
|
-
def initialize(klass)
|
|
12
|
-
word = klass.name.sub(NAMESPACE, "").split("::").map(&:downcase)
|
|
13
|
-
@root = Pathname.new(File.join(__dir__, *word))
|
|
14
|
-
freeze
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# @since 1.1.0
|
|
18
|
-
# @api private
|
|
19
|
-
def find(*names)
|
|
20
|
-
@root.join(*names)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
# @since 1.1.0
|
|
26
|
-
# @api private
|
|
27
|
-
attr_reader :root
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
class CLI
|
|
3
|
-
module Commands
|
|
4
|
-
# @since 1.1.0
|
|
5
|
-
# @api private
|
|
6
|
-
class Version < Command
|
|
7
|
-
desc "Print Hanami version"
|
|
8
|
-
|
|
9
|
-
# @since 1.1.0
|
|
10
|
-
# @api private
|
|
11
|
-
def call(*)
|
|
12
|
-
puts "v#{Hanami::VERSION}"
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
register "version", Commands::Version, aliases: ["v", "-v", "--version"]
|
|
18
|
-
end
|
|
19
|
-
end
|
data/lib/hanami/common_logger.rb
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
require 'rack/common_logger'
|
|
2
|
-
require 'hanami/utils/hash'
|
|
3
|
-
|
|
4
|
-
module Hanami
|
|
5
|
-
# Rack logger for Hanami.app
|
|
6
|
-
#
|
|
7
|
-
# @since 1.0.0
|
|
8
|
-
# @api private
|
|
9
|
-
class CommonLogger < Rack::CommonLogger
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
# @since 1.0.0
|
|
13
|
-
# @api private
|
|
14
|
-
HTTP_VERSION = 'HTTP_VERSION'.freeze
|
|
15
|
-
|
|
16
|
-
# @since 1.0.0
|
|
17
|
-
# @api private
|
|
18
|
-
REQUEST_METHOD = 'REQUEST_METHOD'.freeze
|
|
19
|
-
|
|
20
|
-
# @since 1.0.0
|
|
21
|
-
# @api private
|
|
22
|
-
HTTP_X_FORWARDED_FOR = 'HTTP_X_FORWARDED_FOR'.freeze
|
|
23
|
-
|
|
24
|
-
# @since 1.0.0
|
|
25
|
-
# @api private
|
|
26
|
-
REMOTE_ADDR = 'REMOTE_ADDR'.freeze
|
|
27
|
-
|
|
28
|
-
# @since 1.0.0
|
|
29
|
-
# @api private
|
|
30
|
-
SCRIPT_NAME = 'SCRIPT_NAME'.freeze
|
|
31
|
-
|
|
32
|
-
# @since 1.0.0
|
|
33
|
-
# @api private
|
|
34
|
-
PATH_INFO = 'PATH_INFO'.freeze
|
|
35
|
-
|
|
36
|
-
# @since 1.0.0
|
|
37
|
-
# @api private
|
|
38
|
-
RACK_ERRORS = 'rack.errors'.freeze
|
|
39
|
-
|
|
40
|
-
# @since 1.1.0
|
|
41
|
-
# @api private
|
|
42
|
-
QUERY_HASH = 'rack.request.query_hash'.freeze
|
|
43
|
-
|
|
44
|
-
# @since 1.1.0
|
|
45
|
-
# @api private
|
|
46
|
-
FORM_HASH = 'rack.request.form_hash'.freeze
|
|
47
|
-
|
|
48
|
-
# @since 1.3.0
|
|
49
|
-
# @api private
|
|
50
|
-
ROUTER_PARAMS = 'router.params'.freeze
|
|
51
|
-
|
|
52
|
-
# @since 1.0.0
|
|
53
|
-
# @api private
|
|
54
|
-
#
|
|
55
|
-
# rubocop:disable Metrics/AbcSize
|
|
56
|
-
# rubocop:disable Metrics/MethodLength
|
|
57
|
-
def log(env, status, header, began_at)
|
|
58
|
-
now = ElapsedTime.call
|
|
59
|
-
length = extract_content_length(header)
|
|
60
|
-
|
|
61
|
-
msg = Hash[
|
|
62
|
-
http: env[HTTP_VERSION],
|
|
63
|
-
verb: env[REQUEST_METHOD],
|
|
64
|
-
status: status.to_s[0..3],
|
|
65
|
-
ip: env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR],
|
|
66
|
-
path: env[SCRIPT_NAME] + env[PATH_INFO].to_s,
|
|
67
|
-
length: length,
|
|
68
|
-
params: extract_params(env),
|
|
69
|
-
elapsed: now - began_at
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
logger = @logger || env[RACK_ERRORS]
|
|
73
|
-
# Standard library logger doesn't support write but it supports << which actually
|
|
74
|
-
# calls to write on the log device without formatting
|
|
75
|
-
if logger.respond_to?(:write)
|
|
76
|
-
logger.write(msg)
|
|
77
|
-
else
|
|
78
|
-
logger.info(msg)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
# rubocop:enable Metrics/MethodLength
|
|
82
|
-
# rubocop:enable Metrics/AbcSize
|
|
83
|
-
|
|
84
|
-
# @since 1.1.0
|
|
85
|
-
# @api private
|
|
86
|
-
def extract_params(env)
|
|
87
|
-
result = env.fetch(QUERY_HASH, {})
|
|
88
|
-
result.merge!(env.fetch(FORM_HASH, {}))
|
|
89
|
-
result.merge!(Utils::Hash.deep_stringify(env.fetch(ROUTER_PARAMS, {})))
|
|
90
|
-
result
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Wrapper which uses Rack's monotonic clock_time (used for began_at since Rack 2.1.0)
|
|
94
|
-
#
|
|
95
|
-
# @since 1.3.4
|
|
96
|
-
# @api private
|
|
97
|
-
class ElapsedTime
|
|
98
|
-
@clock = if Gem::Version.new(Rack::RELEASE) >= Gem::Version.new('2.1.0')
|
|
99
|
-
-> { Rack::Utils.clock_time }
|
|
100
|
-
else
|
|
101
|
-
-> { Time.now }
|
|
102
|
-
end.freeze
|
|
103
|
-
|
|
104
|
-
def self.call
|
|
105
|
-
@clock.call
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
# @since 0.9.0
|
|
3
|
-
# @api private
|
|
4
|
-
module Components
|
|
5
|
-
# @since 0.9.0
|
|
6
|
-
# @api private
|
|
7
|
-
module App
|
|
8
|
-
# hanami-assets configuration for a single Hanami application in the project.
|
|
9
|
-
#
|
|
10
|
-
# @since 0.9.0
|
|
11
|
-
# @api private
|
|
12
|
-
class Assets
|
|
13
|
-
# Configure hanami-assets for a single Hanami application in the project.
|
|
14
|
-
#
|
|
15
|
-
# @param app [Hanami::Configuration::App] a Hanami application
|
|
16
|
-
#
|
|
17
|
-
# @since 0.9.0
|
|
18
|
-
# @api private
|
|
19
|
-
#
|
|
20
|
-
# rubocop:disable Metrics/AbcSize
|
|
21
|
-
# rubocop:disable Metrics/MethodLength
|
|
22
|
-
def self.resolve(app)
|
|
23
|
-
config = app.configuration
|
|
24
|
-
namespace = app.namespace
|
|
25
|
-
|
|
26
|
-
unless namespace.const_defined?('Assets', false)
|
|
27
|
-
assets = Hanami::Assets.duplicate(namespace) do
|
|
28
|
-
root config.root
|
|
29
|
-
|
|
30
|
-
scheme config.scheme
|
|
31
|
-
host config.host
|
|
32
|
-
port config.port
|
|
33
|
-
|
|
34
|
-
public_directory Hanami.public_directory
|
|
35
|
-
prefix Utils::PathPrefix.new('/assets').join(config.path_prefix)
|
|
36
|
-
|
|
37
|
-
manifest Hanami.public_directory.join('assets.json')
|
|
38
|
-
compile true
|
|
39
|
-
|
|
40
|
-
config.assets.__apply(self)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
assets.configure do
|
|
44
|
-
cdn host != config.host
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
namespace.const_set('Assets', assets)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
name = "#{app.app_name}.assets"
|
|
51
|
-
Components.resolved(name, namespace.const_get('Assets').configuration)
|
|
52
|
-
Components[name]
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
# rubocop:enable Metrics/MethodLength
|
|
56
|
-
# rubocop:enable Metrics/AbcSize
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|