hanami 0.0.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +214 -0
- data/FEATURES.md +156 -0
- data/LICENSE.md +22 -0
- data/README.md +80 -15
- data/bin/hanami +5 -0
- data/hanami.gemspec +27 -12
- data/lib/hanami.rb +78 -2
- data/lib/hanami/action/csrf_protection.rb +167 -0
- data/lib/hanami/action/routing_helpers.rb +40 -0
- data/lib/hanami/application.rb +244 -0
- data/lib/hanami/application_name.rb +101 -0
- data/lib/hanami/cli.rb +119 -0
- data/lib/hanami/cli_sub_commands/assets.rb +29 -0
- data/lib/hanami/cli_sub_commands/db.rb +124 -0
- data/lib/hanami/cli_sub_commands/destroy.rb +102 -0
- data/lib/hanami/cli_sub_commands/generate.rb +127 -0
- data/lib/hanami/commands/assets/precompile.rb +35 -0
- data/lib/hanami/commands/console.rb +90 -0
- data/lib/hanami/commands/db/abstract.rb +19 -0
- data/lib/hanami/commands/db/apply.rb +14 -0
- data/lib/hanami/commands/db/console.rb +50 -0
- data/lib/hanami/commands/db/create.rb +14 -0
- data/lib/hanami/commands/db/drop.rb +14 -0
- data/lib/hanami/commands/db/migrate.rb +19 -0
- data/lib/hanami/commands/db/prepare.rb +14 -0
- data/lib/hanami/commands/db/version.rb +14 -0
- data/lib/hanami/commands/generate/abstract.rb +63 -0
- data/lib/hanami/commands/generate/action.rb +262 -0
- data/lib/hanami/commands/generate/app.rb +116 -0
- data/lib/hanami/commands/generate/mailer.rb +118 -0
- data/lib/hanami/commands/generate/migration.rb +63 -0
- data/lib/hanami/commands/generate/model.rb +96 -0
- data/lib/hanami/commands/new/abstract.rb +128 -0
- data/lib/hanami/commands/new/app.rb +116 -0
- data/lib/hanami/commands/new/container.rb +102 -0
- data/lib/hanami/commands/routes.rb +41 -0
- data/lib/hanami/commands/server.rb +79 -0
- data/lib/hanami/config/configure.rb +17 -0
- data/lib/hanami/config/cookies.rb +68 -0
- data/lib/hanami/config/framework_configuration.rb +42 -0
- data/lib/hanami/config/load_paths.rb +27 -0
- data/lib/hanami/config/mapper.rb +36 -0
- data/lib/hanami/config/mapping.rb +12 -0
- data/lib/hanami/config/routes.rb +16 -0
- data/lib/hanami/config/security.rb +58 -0
- data/lib/hanami/config/sessions.rb +97 -0
- data/lib/hanami/configuration.rb +1728 -0
- data/lib/hanami/container.rb +59 -0
- data/lib/hanami/environment.rb +485 -0
- data/lib/hanami/frameworks.rb +14 -0
- data/lib/hanami/generators/action/action.rb.tt +8 -0
- data/lib/hanami/generators/action/action_spec.minitest.tt +12 -0
- data/lib/hanami/generators/action/action_spec.rspec.tt +11 -0
- data/lib/hanami/generators/action/action_without_view.rb.tt +9 -0
- data/lib/hanami/generators/action/template.tt +0 -0
- data/lib/hanami/generators/action/view.rb.tt +5 -0
- data/lib/hanami/generators/action/view_spec.minitest.tt +13 -0
- data/lib/hanami/generators/action/view_spec.rspec.tt +12 -0
- data/lib/hanami/generators/app/.gitkeep.tt +1 -0
- data/lib/hanami/generators/app/application.rb.tt +273 -0
- data/lib/hanami/generators/app/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/app/config/routes.rb.tt +2 -0
- data/lib/hanami/generators/app/favicon.ico +0 -0
- data/lib/hanami/generators/app/templates/application.html.erb.tt +10 -0
- data/lib/hanami/generators/app/views/application_layout.rb.tt +7 -0
- data/lib/hanami/generators/application/app/.env.development.tt +4 -0
- data/lib/hanami/generators/application/app/.env.test.tt +4 -0
- data/lib/hanami/generators/application/app/.env.tt +1 -0
- data/lib/hanami/generators/application/app/.gitignore +0 -0
- data/lib/hanami/generators/application/app/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/Gemfile.tt +37 -0
- data/lib/hanami/generators/application/app/Rakefile.minitest.tt +11 -0
- data/lib/hanami/generators/application/app/Rakefile.rspec.tt +6 -0
- data/lib/hanami/generators/application/app/apps/.gitkeep.tt +1 -0
- data/lib/hanami/generators/application/app/capybara.rb.rspec.tt +8 -0
- data/lib/hanami/generators/application/app/config.ru.tt +3 -0
- data/lib/hanami/generators/application/app/config/application.rb.tt +270 -0
- data/lib/hanami/generators/application/app/config/environment.rb.tt +5 -0
- data/lib/hanami/generators/application/app/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/application/app/config/routes.rb.tt +2 -0
- data/lib/hanami/generators/application/app/db/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/favicon.ico +0 -0
- data/lib/hanami/generators/application/app/features_helper.rb.minitest.tt +11 -0
- data/lib/hanami/generators/application/app/features_helper.rb.rspec.tt +12 -0
- data/lib/hanami/generators/application/app/gitignore.tt +2 -0
- data/lib/hanami/generators/application/app/gitignore_with_db.tt +4 -0
- data/lib/hanami/generators/application/app/hanamirc.tt +3 -0
- data/lib/hanami/generators/application/app/lib/app_name.rb.tt +59 -0
- data/lib/hanami/generators/application/app/lib/chirp/entities/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/lib/chirp/repositories/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/lib/config/mapping.rb.tt +7 -0
- data/lib/hanami/generators/application/app/rspec.rspec.tt +2 -0
- data/lib/hanami/generators/application/app/schema.sql.tt +0 -0
- data/lib/hanami/generators/application/app/spec_helper.rb.minitest.tt +7 -0
- data/lib/hanami/generators/application/app/spec_helper.rb.rspec.tt +104 -0
- data/lib/hanami/generators/application/app/templates/application.html.erb.tt +10 -0
- data/lib/hanami/generators/application/app/views/application_layout.rb.tt +7 -0
- data/lib/hanami/generators/application/container/.env.development.tt +3 -0
- data/lib/hanami/generators/application/container/.env.test.tt +3 -0
- data/lib/hanami/generators/application/container/.env.tt +1 -0
- data/lib/hanami/generators/application/container/.gitignore +0 -0
- data/lib/hanami/generators/application/container/.gitkeep +1 -0
- data/lib/hanami/generators/application/container/Gemfile.tt +36 -0
- data/lib/hanami/generators/application/container/Rakefile.minitest.tt +11 -0
- data/lib/hanami/generators/application/container/Rakefile.rspec.tt +6 -0
- data/lib/hanami/generators/application/container/capybara.rb.rspec.tt +8 -0
- data/lib/hanami/generators/application/container/config.ru.tt +3 -0
- data/lib/hanami/generators/application/container/config/environment.rb.tt +7 -0
- data/lib/hanami/generators/application/container/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/db/.gitkeep +1 -0
- data/lib/hanami/generators/application/container/features_helper.rb.minitest.tt +11 -0
- data/lib/hanami/generators/application/container/features_helper.rb.rspec.tt +12 -0
- data/lib/hanami/generators/application/container/gitignore.tt +2 -0
- data/lib/hanami/generators/application/container/gitignore_with_db.tt +4 -0
- data/lib/hanami/generators/application/container/hanamirc.tt +3 -0
- data/lib/hanami/generators/application/container/lib/app_name.rb.tt +60 -0
- data/lib/hanami/generators/application/container/lib/chirp/entities/.gitkeep +1 -0
- data/lib/hanami/generators/application/container/lib/chirp/mailers/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/lib/chirp/mailers/templates/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/lib/chirp/repositories/.gitkeep +1 -0
- data/lib/hanami/generators/application/container/lib/config/mapping.rb.tt +7 -0
- data/lib/hanami/generators/application/container/rspec.rspec.tt +2 -0
- data/lib/hanami/generators/application/container/schema.sql.tt +0 -0
- data/lib/hanami/generators/application/container/spec_helper.rb.minitest.tt +7 -0
- data/lib/hanami/generators/application/container/spec_helper.rb.rspec.tt +104 -0
- data/lib/hanami/generators/database_config.rb +99 -0
- data/lib/hanami/generators/generatable.rb +51 -0
- data/lib/hanami/generators/generator.rb +35 -0
- data/lib/hanami/generators/mailer/mailer.rb.tt +7 -0
- data/lib/hanami/generators/mailer/mailer_spec.rb.tt +7 -0
- data/lib/hanami/generators/mailer/template.html.tt +0 -0
- data/lib/hanami/generators/mailer/template.txt.tt +0 -0
- data/lib/hanami/generators/migration/migration.rb.tt +4 -0
- data/lib/hanami/generators/model/entity.rb.tt +3 -0
- data/lib/hanami/generators/model/entity_spec.minitest.tt +5 -0
- data/lib/hanami/generators/model/entity_spec.rspec.tt +3 -0
- data/lib/hanami/generators/model/repository.rb.tt +3 -0
- data/lib/hanami/generators/model/repository_spec.minitest.tt +5 -0
- data/lib/hanami/generators/model/repository_spec.rspec.tt +3 -0
- data/lib/hanami/generators/test_framework.rb +42 -0
- data/lib/hanami/hanamirc.rb +152 -0
- data/lib/hanami/loader.rb +258 -0
- data/lib/hanami/mailer/glue.rb +68 -0
- data/lib/hanami/middleware.rb +143 -0
- data/lib/hanami/rake_helper.rb +68 -0
- data/lib/hanami/rake_tasks.rb +2 -0
- data/lib/hanami/rendering_policy.rb +77 -0
- data/lib/hanami/repositories/car_repository.rb +3 -0
- data/lib/hanami/repositories/name_repository.rb +3 -0
- data/lib/hanami/root.rb +7 -0
- data/lib/hanami/routes.rb +151 -0
- data/lib/hanami/routing/default.rb +25 -0
- data/lib/hanami/setup.rb +3 -0
- data/lib/hanami/static.rb +77 -0
- data/lib/hanami/templates/default.html.erb +9 -0
- data/lib/hanami/templates/welcome.html.erb +52 -0
- data/lib/hanami/version.rb +4 -1
- data/lib/hanami/views/default.rb +34 -0
- data/lib/hanami/views/default_template_finder.rb +20 -0
- data/lib/hanami/views/null_view.rb +17 -0
- data/lib/hanami/welcome.rb +40 -0
- metadata +357 -16
- data/.gitignore +0 -9
- data/Gemfile +0 -4
- data/Rakefile +0 -2
- data/bin/console +0 -14
- data/bin/setup +0 -8
@@ -0,0 +1,25 @@
|
|
1
|
+
module Hanami
|
2
|
+
module Routing
|
3
|
+
# The default Rack application that responds when a resource cannot be found.
|
4
|
+
#
|
5
|
+
# @since 0.1.0
|
6
|
+
# @api private
|
7
|
+
class Default
|
8
|
+
DEFAULT_CODE = 404
|
9
|
+
DEFAULT_BODY = ['Not Found'].freeze
|
10
|
+
CONTENT_TYPE = 'Content-Type'.freeze
|
11
|
+
|
12
|
+
class NullAction
|
13
|
+
include Hanami::Action
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(env)
|
20
|
+
action = NullAction.new.tap { |a| a.call(env) }
|
21
|
+
[ DEFAULT_CODE, {CONTENT_TYPE => action.content_type}, DEFAULT_BODY, action ]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/hanami/setup.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'rack/static'
|
2
|
+
require 'hanami/assets/compiler'
|
3
|
+
|
4
|
+
module Hanami
|
5
|
+
class Static < ::Rack::Static
|
6
|
+
PATH_INFO = 'PATH_INFO'.freeze
|
7
|
+
PUBLIC_DIRECTORY = Hanami.public_directory.join('**', '*').to_s.freeze
|
8
|
+
|
9
|
+
def initialize(app)
|
10
|
+
super(app, root: Hanami.public_directory, header_rules: _header_rules)
|
11
|
+
@sources = _sources_from_applications
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
path = env[PATH_INFO]
|
16
|
+
|
17
|
+
prefix, config = @sources.find {|p, _| path.start_with?(p) }
|
18
|
+
original = if prefix && config
|
19
|
+
config.sources.find(path.sub(prefix, ''))
|
20
|
+
end
|
21
|
+
|
22
|
+
if can_serve(path, original)
|
23
|
+
super
|
24
|
+
else
|
25
|
+
precompile(original, config) ?
|
26
|
+
call(env) :
|
27
|
+
@app.call(env)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def can_serve(path, original = nil)
|
34
|
+
destination = Dir[PUBLIC_DIRECTORY].find do |file|
|
35
|
+
file.index(path).to_i > 0
|
36
|
+
end
|
37
|
+
|
38
|
+
(super(path) || !!destination) && _fresh?(original, destination)
|
39
|
+
end
|
40
|
+
|
41
|
+
def _fresh?(original, destination)
|
42
|
+
# At this point we're sure that destination exist.
|
43
|
+
#
|
44
|
+
# If original is missing, it could be a file that a developer manually
|
45
|
+
# created into public directory without having the corresponding original.
|
46
|
+
# In this case we return true, so the destination file can be served.
|
47
|
+
return true if original.nil? || !::File.exist?(original.to_s)
|
48
|
+
|
49
|
+
::File.mtime(destination) >
|
50
|
+
::File.mtime(original)
|
51
|
+
end
|
52
|
+
|
53
|
+
def precompile(original, config)
|
54
|
+
return unless original && config
|
55
|
+
|
56
|
+
Hanami::Assets::Compiler.compile(config, original)
|
57
|
+
true
|
58
|
+
end
|
59
|
+
|
60
|
+
def _sources_from_applications
|
61
|
+
Hanami::Application.applications.each_with_object({}) do |application, result|
|
62
|
+
config = _assets_configuration(application)
|
63
|
+
result["#{ config.prefix }/"] = config
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def _assets_configuration(application)
|
68
|
+
application.configuration.namespace::Assets.configuration
|
69
|
+
end
|
70
|
+
|
71
|
+
def _header_rules
|
72
|
+
unless Hanami.env?(:development, :test)
|
73
|
+
[[:all, {'Cache-Control' => 'public, max-age=31536000'}]]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Hanami | The web, with simplicity</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:0 auto; padding: 24px; width:700px; background-color:#fff; border: 1px solid #999; border-width: 0 1px 1px 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
|
+
<div class="logo">
|
28
|
+
<img alt="Hanami Logo" width="350" src="data:image/png;base64,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"/>
|
29
|
+
</div>
|
30
|
+
<hr />
|
31
|
+
<h2>The web, with simplicity.</h2>
|
32
|
+
|
33
|
+
<h3>Hanami is Open Source Software for MVC web development with Ruby.</h3>
|
34
|
+
|
35
|
+
<p>Please generate a new action with:<br><code>bundle exec hanami generate action<%= application_name %> home#index --url=/</code>.</p>
|
36
|
+
|
37
|
+
<hr style="margin-top: 4em;"/>
|
38
|
+
<div id="content">
|
39
|
+
<ul>
|
40
|
+
<li><a href="http://hanamirb.org">Website</a></li>
|
41
|
+
<li><a href="http://hanamirb.org/guides">Guides</a></li>
|
42
|
+
<li><a href="http://www.rubydoc.info/gems/hanami">API docs</a></li>
|
43
|
+
<li><a href="https://github.com/hanami/hanami">Source code</a></li>
|
44
|
+
<li><a href="https://gitter.im/hanami/chat">Chat</a></li>
|
45
|
+
</ul>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
<div id="footer">
|
49
|
+
© 2014 ‐ <%= Time.now.year %> Luca Guidi — Hanami is released under the MIT License.
|
50
|
+
</div>
|
51
|
+
</body>
|
52
|
+
</html>
|
data/lib/hanami/version.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'hanami/views/default_template_finder'
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
module Views
|
5
|
+
# The default view that is rendered for non successful responses (200 and 201)
|
6
|
+
#
|
7
|
+
# @since 0.1.0
|
8
|
+
# @api private
|
9
|
+
class Default
|
10
|
+
include Hanami::View
|
11
|
+
|
12
|
+
configuration.reset!
|
13
|
+
|
14
|
+
layout nil
|
15
|
+
root Pathname.new(File.dirname(__FILE__)).join('../templates').realpath
|
16
|
+
template 'default'
|
17
|
+
|
18
|
+
def title
|
19
|
+
response[2].first
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.render(root, template_name, context)
|
23
|
+
format = context[:format]
|
24
|
+
template = DefaultTemplateFinder.new(self, root, template_name, format).find
|
25
|
+
|
26
|
+
if template
|
27
|
+
new(template, context).render
|
28
|
+
else
|
29
|
+
super(context)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Hanami
|
2
|
+
module Views
|
3
|
+
class DefaultTemplateFinder < View::Rendering::TemplateFinder
|
4
|
+
# Template Finder
|
5
|
+
#
|
6
|
+
# @since 0.2.0
|
7
|
+
# @api private
|
8
|
+
def initialize(view, root, template_name, format)
|
9
|
+
@view = view
|
10
|
+
@root = root
|
11
|
+
@options = { template: template_name, format: format }
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def root
|
16
|
+
@root
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'pathname'
|
3
|
+
require 'hanami/environment'
|
4
|
+
require 'hanami/utils/string'
|
5
|
+
|
6
|
+
module Hanami
|
7
|
+
class Welcome
|
8
|
+
def initialize(app)
|
9
|
+
@root = Pathname.new(__dir__).join('templates').realpath
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
@request_path = env['REQUEST_PATH'] || ''
|
14
|
+
@body = [ERB.new(@root.join('welcome.html.erb').read).result(binding)]
|
15
|
+
|
16
|
+
[200, {}, @body]
|
17
|
+
end
|
18
|
+
|
19
|
+
def application_name
|
20
|
+
" #{ app }" if container?
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def container?
|
26
|
+
Environment.new.container?
|
27
|
+
end
|
28
|
+
|
29
|
+
def application_class
|
30
|
+
applications = Hanami::Application.applications.to_a
|
31
|
+
applications.select do |app|
|
32
|
+
@request_path.include? app.configuration.path_prefix.to_s
|
33
|
+
end.first
|
34
|
+
end
|
35
|
+
|
36
|
+
def app
|
37
|
+
Utils::String.new(application_class).namespace.downcase
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,61 +1,401 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
|
+
- Trung Lê
|
9
|
+
- Alfonso Uceda Pompa
|
8
10
|
autorequire:
|
9
|
-
bindir:
|
11
|
+
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
13
|
+
date: 2016-01-22 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hanami-utils
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.7'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0.7'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: hanami-router
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0.6'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0.6'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: hanami-controller
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.6'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.6'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: hanami-view
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0.6'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0.6'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: hanami-helpers
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.3'
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0.3'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: hanami-mailer
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0.2'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0.2'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: hanami-assets
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0.2'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0.2'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: shotgun
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.9'
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.9'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: dotenv
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - "~>"
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '2.0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - "~>"
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '2.0'
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: thor
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - "~>"
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '0.19'
|
148
|
+
type: :runtime
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0.19'
|
13
155
|
- !ruby/object:Gem::Dependency
|
14
156
|
name: bundler
|
15
157
|
requirement: !ruby/object:Gem::Requirement
|
16
158
|
requirements:
|
17
159
|
- - "~>"
|
18
160
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
161
|
+
version: '1.6'
|
162
|
+
type: :runtime
|
163
|
+
prerelease: false
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - "~>"
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '1.6'
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: minispec-metadata
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - "~>"
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: 3.2.1
|
20
176
|
type: :development
|
21
177
|
prerelease: false
|
22
178
|
version_requirements: !ruby/object:Gem::Requirement
|
23
179
|
requirements:
|
24
180
|
- - "~>"
|
25
181
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
182
|
+
version: 3.2.1
|
183
|
+
- !ruby/object:Gem::Dependency
|
184
|
+
name: minitest
|
185
|
+
requirement: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - "~>"
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '5'
|
190
|
+
type: :development
|
191
|
+
prerelease: false
|
192
|
+
version_requirements: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - "~>"
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '5'
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: rack-test
|
199
|
+
requirement: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - "~>"
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '0.6'
|
204
|
+
type: :development
|
205
|
+
prerelease: false
|
206
|
+
version_requirements: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - "~>"
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0.6'
|
27
211
|
- !ruby/object:Gem::Dependency
|
28
212
|
name: rake
|
29
213
|
requirement: !ruby/object:Gem::Requirement
|
30
214
|
requirements:
|
31
215
|
- - "~>"
|
32
216
|
- !ruby/object:Gem::Version
|
33
|
-
version: '10
|
217
|
+
version: '10'
|
34
218
|
type: :development
|
35
219
|
prerelease: false
|
36
220
|
version_requirements: !ruby/object:Gem::Requirement
|
37
221
|
requirements:
|
38
222
|
- - "~>"
|
39
223
|
- !ruby/object:Gem::Version
|
40
|
-
version: '10
|
224
|
+
version: '10'
|
41
225
|
description: Hanami is a web framework for Ruby
|
42
226
|
email:
|
43
227
|
- me@lucaguidi.com
|
44
|
-
|
228
|
+
- trung.le@ruby-journal.com
|
229
|
+
- uceda73@gmail.com
|
230
|
+
executables:
|
231
|
+
- hanami
|
45
232
|
extensions: []
|
46
233
|
extra_rdoc_files: []
|
47
234
|
files:
|
48
|
-
-
|
49
|
-
-
|
235
|
+
- CHANGELOG.md
|
236
|
+
- FEATURES.md
|
237
|
+
- LICENSE.md
|
50
238
|
- README.md
|
51
|
-
-
|
52
|
-
- bin/console
|
53
|
-
- bin/setup
|
239
|
+
- bin/hanami
|
54
240
|
- hanami.gemspec
|
55
241
|
- lib/hanami.rb
|
242
|
+
- lib/hanami/action/csrf_protection.rb
|
243
|
+
- lib/hanami/action/routing_helpers.rb
|
244
|
+
- lib/hanami/application.rb
|
245
|
+
- lib/hanami/application_name.rb
|
246
|
+
- lib/hanami/cli.rb
|
247
|
+
- lib/hanami/cli_sub_commands/assets.rb
|
248
|
+
- lib/hanami/cli_sub_commands/db.rb
|
249
|
+
- lib/hanami/cli_sub_commands/destroy.rb
|
250
|
+
- lib/hanami/cli_sub_commands/generate.rb
|
251
|
+
- lib/hanami/commands/assets/precompile.rb
|
252
|
+
- lib/hanami/commands/console.rb
|
253
|
+
- lib/hanami/commands/db/abstract.rb
|
254
|
+
- lib/hanami/commands/db/apply.rb
|
255
|
+
- lib/hanami/commands/db/console.rb
|
256
|
+
- lib/hanami/commands/db/create.rb
|
257
|
+
- lib/hanami/commands/db/drop.rb
|
258
|
+
- lib/hanami/commands/db/migrate.rb
|
259
|
+
- lib/hanami/commands/db/prepare.rb
|
260
|
+
- lib/hanami/commands/db/version.rb
|
261
|
+
- lib/hanami/commands/generate/abstract.rb
|
262
|
+
- lib/hanami/commands/generate/action.rb
|
263
|
+
- lib/hanami/commands/generate/app.rb
|
264
|
+
- lib/hanami/commands/generate/mailer.rb
|
265
|
+
- lib/hanami/commands/generate/migration.rb
|
266
|
+
- lib/hanami/commands/generate/model.rb
|
267
|
+
- lib/hanami/commands/new/abstract.rb
|
268
|
+
- lib/hanami/commands/new/app.rb
|
269
|
+
- lib/hanami/commands/new/container.rb
|
270
|
+
- lib/hanami/commands/routes.rb
|
271
|
+
- lib/hanami/commands/server.rb
|
272
|
+
- lib/hanami/config/configure.rb
|
273
|
+
- lib/hanami/config/cookies.rb
|
274
|
+
- lib/hanami/config/framework_configuration.rb
|
275
|
+
- lib/hanami/config/load_paths.rb
|
276
|
+
- lib/hanami/config/mapper.rb
|
277
|
+
- lib/hanami/config/mapping.rb
|
278
|
+
- lib/hanami/config/routes.rb
|
279
|
+
- lib/hanami/config/security.rb
|
280
|
+
- lib/hanami/config/sessions.rb
|
281
|
+
- lib/hanami/configuration.rb
|
282
|
+
- lib/hanami/container.rb
|
283
|
+
- lib/hanami/environment.rb
|
284
|
+
- lib/hanami/frameworks.rb
|
285
|
+
- lib/hanami/generators/action/action.rb.tt
|
286
|
+
- lib/hanami/generators/action/action_spec.minitest.tt
|
287
|
+
- lib/hanami/generators/action/action_spec.rspec.tt
|
288
|
+
- lib/hanami/generators/action/action_without_view.rb.tt
|
289
|
+
- lib/hanami/generators/action/template.tt
|
290
|
+
- lib/hanami/generators/action/view.rb.tt
|
291
|
+
- lib/hanami/generators/action/view_spec.minitest.tt
|
292
|
+
- lib/hanami/generators/action/view_spec.rspec.tt
|
293
|
+
- lib/hanami/generators/app/.gitkeep.tt
|
294
|
+
- lib/hanami/generators/app/application.rb.tt
|
295
|
+
- lib/hanami/generators/app/config/initializers/.gitkeep
|
296
|
+
- lib/hanami/generators/app/config/routes.rb.tt
|
297
|
+
- lib/hanami/generators/app/favicon.ico
|
298
|
+
- lib/hanami/generators/app/templates/application.html.erb.tt
|
299
|
+
- lib/hanami/generators/app/views/application_layout.rb.tt
|
300
|
+
- lib/hanami/generators/application/app/.env.development.tt
|
301
|
+
- lib/hanami/generators/application/app/.env.test.tt
|
302
|
+
- lib/hanami/generators/application/app/.env.tt
|
303
|
+
- lib/hanami/generators/application/app/.gitignore
|
304
|
+
- lib/hanami/generators/application/app/.gitkeep
|
305
|
+
- lib/hanami/generators/application/app/Gemfile.tt
|
306
|
+
- lib/hanami/generators/application/app/Rakefile.minitest.tt
|
307
|
+
- lib/hanami/generators/application/app/Rakefile.rspec.tt
|
308
|
+
- lib/hanami/generators/application/app/apps/.gitkeep.tt
|
309
|
+
- lib/hanami/generators/application/app/capybara.rb.rspec.tt
|
310
|
+
- lib/hanami/generators/application/app/config.ru.tt
|
311
|
+
- lib/hanami/generators/application/app/config/application.rb.tt
|
312
|
+
- lib/hanami/generators/application/app/config/environment.rb.tt
|
313
|
+
- lib/hanami/generators/application/app/config/initializers/.gitkeep
|
314
|
+
- lib/hanami/generators/application/app/config/routes.rb.tt
|
315
|
+
- lib/hanami/generators/application/app/db/.gitkeep
|
316
|
+
- lib/hanami/generators/application/app/favicon.ico
|
317
|
+
- lib/hanami/generators/application/app/features_helper.rb.minitest.tt
|
318
|
+
- lib/hanami/generators/application/app/features_helper.rb.rspec.tt
|
319
|
+
- lib/hanami/generators/application/app/gitignore.tt
|
320
|
+
- lib/hanami/generators/application/app/gitignore_with_db.tt
|
321
|
+
- lib/hanami/generators/application/app/hanamirc.tt
|
322
|
+
- lib/hanami/generators/application/app/lib/app_name.rb.tt
|
323
|
+
- lib/hanami/generators/application/app/lib/chirp/entities/.gitkeep
|
324
|
+
- lib/hanami/generators/application/app/lib/chirp/repositories/.gitkeep
|
325
|
+
- lib/hanami/generators/application/app/lib/config/mapping.rb.tt
|
326
|
+
- lib/hanami/generators/application/app/rspec.rspec.tt
|
327
|
+
- lib/hanami/generators/application/app/schema.sql.tt
|
328
|
+
- lib/hanami/generators/application/app/spec_helper.rb.minitest.tt
|
329
|
+
- lib/hanami/generators/application/app/spec_helper.rb.rspec.tt
|
330
|
+
- lib/hanami/generators/application/app/templates/application.html.erb.tt
|
331
|
+
- lib/hanami/generators/application/app/views/application_layout.rb.tt
|
332
|
+
- lib/hanami/generators/application/container/.env.development.tt
|
333
|
+
- lib/hanami/generators/application/container/.env.test.tt
|
334
|
+
- lib/hanami/generators/application/container/.env.tt
|
335
|
+
- lib/hanami/generators/application/container/.gitignore
|
336
|
+
- lib/hanami/generators/application/container/.gitkeep
|
337
|
+
- lib/hanami/generators/application/container/Gemfile.tt
|
338
|
+
- lib/hanami/generators/application/container/Rakefile.minitest.tt
|
339
|
+
- lib/hanami/generators/application/container/Rakefile.rspec.tt
|
340
|
+
- lib/hanami/generators/application/container/capybara.rb.rspec.tt
|
341
|
+
- lib/hanami/generators/application/container/config.ru.tt
|
342
|
+
- lib/hanami/generators/application/container/config/environment.rb.tt
|
343
|
+
- lib/hanami/generators/application/container/config/initializers/.gitkeep
|
344
|
+
- lib/hanami/generators/application/container/db/.gitkeep
|
345
|
+
- lib/hanami/generators/application/container/features_helper.rb.minitest.tt
|
346
|
+
- lib/hanami/generators/application/container/features_helper.rb.rspec.tt
|
347
|
+
- lib/hanami/generators/application/container/gitignore.tt
|
348
|
+
- lib/hanami/generators/application/container/gitignore_with_db.tt
|
349
|
+
- lib/hanami/generators/application/container/hanamirc.tt
|
350
|
+
- lib/hanami/generators/application/container/lib/app_name.rb.tt
|
351
|
+
- lib/hanami/generators/application/container/lib/chirp/entities/.gitkeep
|
352
|
+
- lib/hanami/generators/application/container/lib/chirp/mailers/.gitkeep
|
353
|
+
- lib/hanami/generators/application/container/lib/chirp/mailers/templates/.gitkeep
|
354
|
+
- lib/hanami/generators/application/container/lib/chirp/repositories/.gitkeep
|
355
|
+
- lib/hanami/generators/application/container/lib/config/mapping.rb.tt
|
356
|
+
- lib/hanami/generators/application/container/rspec.rspec.tt
|
357
|
+
- lib/hanami/generators/application/container/schema.sql.tt
|
358
|
+
- lib/hanami/generators/application/container/spec_helper.rb.minitest.tt
|
359
|
+
- lib/hanami/generators/application/container/spec_helper.rb.rspec.tt
|
360
|
+
- lib/hanami/generators/database_config.rb
|
361
|
+
- lib/hanami/generators/generatable.rb
|
362
|
+
- lib/hanami/generators/generator.rb
|
363
|
+
- lib/hanami/generators/mailer/mailer.rb.tt
|
364
|
+
- lib/hanami/generators/mailer/mailer_spec.rb.tt
|
365
|
+
- lib/hanami/generators/mailer/template.html.tt
|
366
|
+
- lib/hanami/generators/mailer/template.txt.tt
|
367
|
+
- lib/hanami/generators/migration/migration.rb.tt
|
368
|
+
- lib/hanami/generators/model/entity.rb.tt
|
369
|
+
- lib/hanami/generators/model/entity_spec.minitest.tt
|
370
|
+
- lib/hanami/generators/model/entity_spec.rspec.tt
|
371
|
+
- lib/hanami/generators/model/repository.rb.tt
|
372
|
+
- lib/hanami/generators/model/repository_spec.minitest.tt
|
373
|
+
- lib/hanami/generators/model/repository_spec.rspec.tt
|
374
|
+
- lib/hanami/generators/test_framework.rb
|
375
|
+
- lib/hanami/hanamirc.rb
|
376
|
+
- lib/hanami/loader.rb
|
377
|
+
- lib/hanami/mailer/glue.rb
|
378
|
+
- lib/hanami/middleware.rb
|
379
|
+
- lib/hanami/rake_helper.rb
|
380
|
+
- lib/hanami/rake_tasks.rb
|
381
|
+
- lib/hanami/rendering_policy.rb
|
382
|
+
- lib/hanami/repositories/car_repository.rb
|
383
|
+
- lib/hanami/repositories/name_repository.rb
|
384
|
+
- lib/hanami/root.rb
|
385
|
+
- lib/hanami/routes.rb
|
386
|
+
- lib/hanami/routing/default.rb
|
387
|
+
- lib/hanami/setup.rb
|
388
|
+
- lib/hanami/static.rb
|
389
|
+
- lib/hanami/templates/default.html.erb
|
390
|
+
- lib/hanami/templates/welcome.html.erb
|
56
391
|
- lib/hanami/version.rb
|
392
|
+
- lib/hanami/views/default.rb
|
393
|
+
- lib/hanami/views/default_template_finder.rb
|
394
|
+
- lib/hanami/views/null_view.rb
|
395
|
+
- lib/hanami/welcome.rb
|
57
396
|
homepage: http://hanamirb.org
|
58
|
-
licenses:
|
397
|
+
licenses:
|
398
|
+
- MIT
|
59
399
|
metadata: {}
|
60
400
|
post_install_message:
|
61
401
|
rdoc_options: []
|
@@ -65,7 +405,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
405
|
requirements:
|
66
406
|
- - ">="
|
67
407
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
408
|
+
version: 2.0.0
|
69
409
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
410
|
requirements:
|
71
411
|
- - ">="
|
@@ -76,5 +416,6 @@ rubyforge_project:
|
|
76
416
|
rubygems_version: 2.5.1
|
77
417
|
signing_key:
|
78
418
|
specification_version: 4
|
79
|
-
summary: The web, with simplicity
|
419
|
+
summary: The web, with simplicity.
|
80
420
|
test_files: []
|
421
|
+
has_rdoc:
|