hanami 1.0.0.beta2 → 1.0.0.beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/FEATURES.md +2 -0
  4. data/LICENSE.md +1 -1
  5. data/README.md +1 -1
  6. data/hanami.gemspec +8 -8
  7. data/lib/hanami.rb +0 -5
  8. data/lib/hanami/action/csrf_protection.rb +35 -0
  9. data/lib/hanami/app.rb +1 -1
  10. data/lib/hanami/application.rb +2 -0
  11. data/lib/hanami/application_configuration.rb +1 -12
  12. data/lib/hanami/application_name.rb +8 -2
  13. data/lib/hanami/application_namespace.rb +2 -0
  14. data/lib/hanami/assets/asset.rb +1 -0
  15. data/lib/hanami/cli.rb +7 -0
  16. data/lib/hanami/cli_base.rb +3 -0
  17. data/lib/hanami/cli_sub_commands/assets.rb +2 -0
  18. data/lib/hanami/cli_sub_commands/db.rb +15 -2
  19. data/lib/hanami/cli_sub_commands/destroy.rb +6 -0
  20. data/lib/hanami/cli_sub_commands/generate.rb +7 -2
  21. data/lib/hanami/commands/assets/precompile.rb +4 -0
  22. data/lib/hanami/commands/command.rb +13 -0
  23. data/lib/hanami/commands/console.rb +6 -0
  24. data/lib/hanami/commands/db/apply.rb +3 -0
  25. data/lib/hanami/commands/db/console.rb +7 -0
  26. data/lib/hanami/commands/db/create.rb +3 -0
  27. data/lib/hanami/commands/db/drop.rb +3 -0
  28. data/lib/hanami/commands/db/migrate.rb +5 -0
  29. data/lib/hanami/commands/db/prepare.rb +3 -0
  30. data/lib/hanami/commands/db/version.rb +3 -0
  31. data/lib/hanami/commands/generate/abstract.rb +13 -1
  32. data/lib/hanami/commands/generate/action.rb +21 -0
  33. data/lib/hanami/commands/generate/app.rb +21 -0
  34. data/lib/hanami/commands/generate/mailer.rb +16 -3
  35. data/lib/hanami/commands/generate/migration.rb +13 -2
  36. data/lib/hanami/commands/generate/model.rb +14 -1
  37. data/lib/hanami/commands/generate/secret_token.rb +6 -0
  38. data/lib/hanami/commands/new/abstract.rb +39 -4
  39. data/lib/hanami/commands/new/app.rb +15 -0
  40. data/lib/hanami/commands/new/container.rb +14 -0
  41. data/lib/hanami/commands/routes.rb +2 -0
  42. data/lib/hanami/commands/server.rb +4 -0
  43. data/lib/hanami/components/app/assets.rb +4 -0
  44. data/lib/hanami/components/app/controller.rb +4 -0
  45. data/lib/hanami/components/app/routes.rb +6 -0
  46. data/lib/hanami/components/app/view.rb +4 -0
  47. data/lib/hanami/components/component.rb +2 -0
  48. data/lib/hanami/components/components.rb +12 -5
  49. data/lib/hanami/components/routes_inspector.rb +2 -0
  50. data/lib/hanami/config/cookies.rb +1 -0
  51. data/lib/hanami/config/framework_configuration.rb +1 -0
  52. data/lib/hanami/config/load_paths.rb +4 -0
  53. data/lib/hanami/config/mapper.rb +11 -0
  54. data/lib/hanami/config/routes.rb +4 -0
  55. data/lib/hanami/config/security.rb +2 -0
  56. data/lib/hanami/config/sessions.rb +6 -0
  57. data/lib/hanami/configuration.rb +102 -0
  58. data/lib/hanami/environment.rb +13 -0
  59. data/lib/hanami/environment_application_configurations.rb +7 -0
  60. data/lib/hanami/generators/app/application.rb.tt +31 -23
  61. data/lib/hanami/generators/app/favicon.ico +0 -0
  62. data/lib/hanami/generators/database_config.rb +19 -1
  63. data/lib/hanami/generators/generatable.rb +13 -0
  64. data/lib/hanami/generators/generator.rb +8 -0
  65. data/lib/hanami/generators/template_engine.rb +9 -0
  66. data/lib/hanami/generators/test_framework.rb +12 -0
  67. data/lib/hanami/hanamirc.rb +2 -0
  68. data/lib/hanami/mailer/glue.rb +1 -0
  69. data/lib/hanami/middleware.rb +24 -0
  70. data/lib/hanami/rendering_policy.rb +15 -0
  71. data/lib/hanami/routes.rb +14 -12
  72. data/lib/hanami/routing/default.rb +7 -0
  73. data/lib/hanami/server.rb +6 -0
  74. data/lib/hanami/version.rb +1 -1
  75. data/lib/hanami/views/default.rb +3 -0
  76. data/lib/hanami/views/default_template_finder.rb +2 -0
  77. data/lib/hanami/views/null_view.rb +2 -0
  78. data/lib/hanami/welcome.rb +7 -0
  79. metadata +18 -19
  80. data/lib/hanami/root.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4e1d0e19757f037bb968b5c6acf17695db9b4e5
4
- data.tar.gz: 5302957753149246d98fbc7a57a1c12ccd71cfad
3
+ metadata.gz: 35905305b2c9f5a20e639bf4de5ffc10c439732f
4
+ data.tar.gz: 86d99d157ea672bdddf8ecc338fe16abf833a099
5
5
  SHA512:
6
- metadata.gz: 2710c2f33d3ae3babd5f8b7414b30c05af685608f045c0d8e00af2cbf953e1991433a5e687d360bbacf26832ceddf2835898aac1776476167bfff92c97d2a344
7
- data.tar.gz: 15076a475ce82f35d55310d642207f3016c17b6ad856dab20dc99fa10f2ffee0356c140a73e805615a44667a7372fabbd4f3d939b1ae970a092320204840b5f7
6
+ metadata.gz: 55642dce6b8a8548a92592f843573488f9da21c6d099ab27f29b667c9249a5c0f7ed4ff584447b7ddd10cdedbbc3a92da34e349c6107979bcd80fa6eded53e76
7
+ data.tar.gz: c6ef7285048eb156ebf594bf632d51ac3b1149f49c1ec8869eebce0feb215b87c5cfb7145b005004ba290766a1e2a8e28c7e37eb5dd279b8fcb4ef063f1bc822
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Hanami
2
2
  The web, with simplicity.
3
3
 
4
+ ## v1.0.0.beta3 - 2017-03-17
5
+ ### Fixed
6
+ - [Luca Guidi] Try to disconnect from database at the boot time. This is useful to prune stale connection during production deploys.
7
+ - [Tobias Sandelius] Don't mount `Hanami::CommonLogger` middleware if logging is disabled for the project.
8
+ - [Anton Davydov] Don't configure mailers, if it's mailing is disabled for the project.
9
+ - [Marcello Rocha] Ensure code reloading don't misconfigure mailer settings
10
+
11
+ ### Changed
12
+ - [Luca Guidi] Removed deprecated `ApplicationConfiguration#default_format`. Use `#default_request_format` instead.
13
+
4
14
  ## v1.0.0.beta2 - 2017-03-02
5
15
 
6
16
  ## v1.0.0.beta1 - 2017-02-14
data/FEATURES.md CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
  ## Features
5
5
 
6
+ ## v1.0.0.beta3 - 2017-03-17
7
+
6
8
  ## v1.0.0.beta2 - 2017-03-02
7
9
  - Added: `Action#unsafe_send_file` to send files outside of the public directory
8
10
 
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2016 Luca Guidi
1
+ Copyright © 2014-2017 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -129,4 +129,4 @@ Released under MIT License.
129
129
 
130
130
  This project was formerly known as Lotus (`lotusrb`).
131
131
 
132
- Copyright © 2014-2016 Luca Guidi.
132
+ Copyright © 2014-2017 Luca Guidi.
data/hanami.gemspec CHANGED
@@ -21,14 +21,14 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
23
23
 
24
- spec.add_dependency 'hanami-utils', '~> 1.0.0.beta2'
25
- spec.add_dependency 'hanami-validations', '~> 1.0.0.beta1'
26
- spec.add_dependency 'hanami-router', '~> 1.0.0.beta2'
27
- spec.add_dependency 'hanami-controller', '~> 1.0.0.beta2'
28
- spec.add_dependency 'hanami-view', '~> 1.0.0.beta1'
29
- spec.add_dependency 'hanami-helpers', '~> 1.0.0.beta1'
30
- spec.add_dependency 'hanami-mailer', '~> 1.0.0.beta1'
31
- spec.add_dependency 'hanami-assets', '~> 1.0.0.beta1'
24
+ spec.add_dependency 'hanami-utils', '~> 1.0.0.beta3'
25
+ spec.add_dependency 'hanami-validations', '~> 1.0.0.beta2'
26
+ spec.add_dependency 'hanami-router', '~> 1.0.0.beta3'
27
+ spec.add_dependency 'hanami-controller', '~> 1.0.0.beta3'
28
+ spec.add_dependency 'hanami-view', '~> 1.0.0.beta2'
29
+ spec.add_dependency 'hanami-helpers', '~> 1.0.0.beta2'
30
+ spec.add_dependency 'hanami-mailer', '~> 1.0.0.beta2'
31
+ spec.add_dependency 'hanami-assets', '~> 1.0.0.beta2'
32
32
  spec.add_dependency 'concurrent-ruby', '~> 1.0'
33
33
  spec.add_dependency 'thor', '~> 0.19'
34
34
  spec.add_dependency 'bundler', '~> 1.13'
data/lib/hanami.rb CHANGED
@@ -82,13 +82,9 @@ module Hanami
82
82
  # NOTE: In case this is invoked many times, it guarantees that the boot
83
83
  # process happens only once.
84
84
  #
85
- # NOTE: There is no reason to cache the result with `@_booted`, because it
86
- # already caches it internally.
87
- #
88
85
  # NOTE: This MUST NOT be wrapped by a Mutex, because it would cause a deadlock.
89
86
  #
90
87
  # @since 0.9.0
91
- # @api private
92
88
  def self.boot
93
89
  Components.release if code_reloading?
94
90
  Components.resolve('all')
@@ -135,7 +131,6 @@ module Hanami
135
131
  # @return [Pathname] public directory
136
132
  #
137
133
  # @since 0.6.0
138
- # @api private
139
134
  #
140
135
  # @example
141
136
  # Hanami.public_directory # => #<Pathname:/Users/luca/Code/bookshelf/public>
@@ -1,6 +1,7 @@
1
1
  require 'securerandom'
2
2
 
3
3
  module Hanami
4
+ # @api private
4
5
  module Action
5
6
  # Invalid CSRF Token
6
7
  #
@@ -154,6 +155,23 @@ module Hanami
154
155
  # Override and return <tt>false</tt> if you want to bypass security check.
155
156
  #
156
157
  # @since 0.4.0
158
+ #
159
+ # @example
160
+ # module Web::Controllers::Books
161
+ # class Create
162
+ # include Web::Action
163
+ #
164
+ # def call(params)
165
+ # # ...
166
+ # end
167
+ #
168
+ # private
169
+ #
170
+ # def verify_csrf_token?
171
+ # false
172
+ # end
173
+ # end
174
+ # end
157
175
  def verify_csrf_token?
158
176
  !IDEMPOTENT_HTTP_METHODS[request_method]
159
177
  end
@@ -167,6 +185,23 @@ module Hanami
167
185
  # @raise [Hanami::Action::InvalidCSRFTokenError]
168
186
  #
169
187
  # @since 0.4.0
188
+ #
189
+ # @example
190
+ # module Web::Controllers::Books
191
+ # class Create
192
+ # include Web::Action
193
+ #
194
+ # def call(params)
195
+ # # ...
196
+ # end
197
+ #
198
+ # private
199
+ #
200
+ # def handle_invalid_csrf_token
201
+ # # custom invalid CSRF management goes here
202
+ # end
203
+ # end
204
+ # end
170
205
  def handle_invalid_csrf_token
171
206
  session.clear
172
207
  raise InvalidCSRFTokenError.new
data/lib/hanami/app.rb CHANGED
@@ -63,7 +63,7 @@ module Hanami
63
63
  # @since 0.9.0
64
64
  # @api private
65
65
  def middleware(environment)
66
- builder.use Hanami::CommonLogger, Hanami.logger
66
+ builder.use Hanami::CommonLogger, Hanami.logger unless Hanami.logger.nil?
67
67
  builder.use Rack::ContentLength
68
68
 
69
69
  if middleware = environment.static_assets_middleware # rubocop:disable Lint/AssignmentInCondition
@@ -50,6 +50,7 @@ module Hanami
50
50
  # Class interface for Hanami applications
51
51
  #
52
52
  # @since 0.9.0
53
+ # @api private
53
54
  module ClassMethods
54
55
  # Override Ruby's Class#extended
55
56
  #
@@ -146,6 +147,7 @@ module Hanami
146
147
  # @return [Hanami::Application] a new instance of the application
147
148
  #
148
149
  # @since 0.1.0
150
+ # @api private
149
151
  def initialize
150
152
  @renderer = RenderingPolicy.new(configuration)
151
153
  @middleware = configuration.middleware
@@ -1,5 +1,4 @@
1
1
  require 'hanami/utils/kernel'
2
- require 'hanami/utils/deprecation'
3
2
  require 'hanami/environment'
4
3
  require 'hanami/middleware'
5
4
  require 'hanami/config/cookies'
@@ -843,17 +842,6 @@ module Hanami
843
842
  end
844
843
  end
845
844
 
846
- # Set a format as default fallback for all the requests without a strict
847
- # requirement for the mime type.
848
- #
849
- # @since 0.1.0
850
- #
851
- # @deprecated Use {#default_request_format} instead.
852
- def default_format(format = nil)
853
- Hanami::Utils::Deprecation.new('default_format is deprecated, please use default_request_format')
854
- default_request_format(format)
855
- end
856
-
857
845
  # The URI scheme for this application.
858
846
  # This is used by the router helpers to generate absolute URLs.
859
847
  #
@@ -1502,6 +1490,7 @@ module Hanami
1502
1490
 
1503
1491
  private
1504
1492
 
1493
+ # @api private
1505
1494
  attr_reader :configurations
1506
1495
 
1507
1496
  # @since 0.2.0
@@ -4,11 +4,13 @@ module Hanami
4
4
  # An application name.
5
5
  #
6
6
  # @since 0.2.1
7
+ # @api private
7
8
  class ApplicationName
8
9
 
9
10
  # A list of words that are prohibited from forming the application name
10
11
  #
11
12
  # @since 0.2.1
13
+ # @api private
12
14
  RESERVED_WORDS = %w(hanami).freeze
13
15
 
14
16
  # Initialize and check against reserved words
@@ -29,6 +31,7 @@ module Hanami
29
31
  # @return [Hanami::ApplicationName] a new instance of the application name
30
32
  #
31
33
  # @since 0.2.1
34
+ # @api private
32
35
  def initialize(name)
33
36
  @name = sanitize(name.to_s)
34
37
  ensure_validity!
@@ -42,6 +45,7 @@ module Hanami
42
45
  # ApplicationName.new("my-App ").to_s # => "my_app"
43
46
  #
44
47
  # @since 0.2.1
48
+ # @api private
45
49
  def to_s
46
50
  @name
47
51
  end
@@ -59,6 +63,7 @@ module Hanami
59
63
  # ApplicationName.new("my-app").to_env_s => "MY_APP"
60
64
  #
61
65
  # @since 0.2.1
66
+ # @api private
62
67
  def to_env_s
63
68
  @name.upcase.gsub(/\W/, '_')
64
69
  end
@@ -73,6 +78,7 @@ module Hanami
73
78
  # Hanami::ApplicationName.invalid?("hanami") # => true
74
79
  #
75
80
  # @since 0.2.1
81
+ # @api private
76
82
  def self.invalid?(name)
77
83
  RESERVED_WORDS.include?(name)
78
84
  end
@@ -81,8 +87,8 @@ module Hanami
81
87
 
82
88
  # Raises RuntimeError with explanation if the provided name is invalid.
83
89
  #
84
- # @api private
85
90
  # @since 0.2.1
91
+ # @api private
86
92
  def ensure_validity!
87
93
  if self.class.invalid?(@name)
88
94
  raise RuntimeError,
@@ -93,8 +99,8 @@ module Hanami
93
99
 
94
100
  # Cleans a string to be a functioning application name.
95
101
  #
96
- # @api private
97
102
  # @since 0.2.1
103
+ # @api private
98
104
  def sanitize(name)
99
105
  Utils::String.new(
100
106
  name.strip
@@ -2,7 +2,9 @@ require 'hanami/utils/class'
2
2
  require 'hanami/utils/string'
3
3
 
4
4
  module Hanami
5
+ # @api private
5
6
  class ApplicationNamespace
7
+ # @api private
6
8
  def self.resolve(name)
7
9
  Utils::Class.load!(
8
10
  Utils::String.new(name).namespace
@@ -1,6 +1,7 @@
1
1
  require 'hanami/utils/file_list'
2
2
 
3
3
  module Hanami
4
+ # @api private
4
5
  module Assets
5
6
  # Requested asset
6
7
  #
data/lib/hanami/cli.rb CHANGED
@@ -5,6 +5,7 @@ require 'hanami/commands/new/app'
5
5
  require 'hanami/commands/new/container'
6
6
 
7
7
  module Hanami
8
+ # @api private
8
9
  class Cli < Thor
9
10
  # include Thor::Actions
10
11
  extend CliBase
@@ -13,6 +14,7 @@ module Hanami
13
14
  long_desc <<-EOS
14
15
  `hanami version` prints the version of the bundled hanami gem.
15
16
  EOS
17
+ # @api private
16
18
  def version
17
19
  require 'hanami/version'
18
20
  puts "v#{ Hanami::VERSION }"
@@ -38,6 +40,7 @@ module Hanami
38
40
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
39
41
  method_option :code_reloading, desc: 'Code reloading', type: :boolean, default: true
40
42
  method_option :help, desc: 'Displays the usage message'
43
+ # @api private
41
44
  def server
42
45
  if options[:help]
43
46
  invoke :help, ['server']
@@ -58,6 +61,7 @@ module Hanami
58
61
  method_option :pid, desc: 'path to write a pid file after daemonize'
59
62
  method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
60
63
  method_option :help, desc: 'displays the usage message'
64
+ # @api private
61
65
  def rackserver
62
66
  if options[:help]
63
67
  invoke :help, ['rackserver']
@@ -77,6 +81,7 @@ module Hanami
77
81
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
78
82
  method_option :engine, desc: "Choose a specific console engine: (#{Hanami::Commands::Console::ENGINES.keys.join('/')})"
79
83
  method_option :help, desc: 'Displays the usage method'
84
+ # @api private
80
85
  def console
81
86
  if options[:help]
82
87
  invoke :help, ['console']
@@ -104,6 +109,7 @@ $ > hanami new fancy_app --hanami-head=true
104
109
  method_option :test, desc: "Project test framework (#{Hanami::Generators::TestFramework::VALID_FRAMEWORKS.join('/')})", default: Hanami::Hanamirc::DEFAULT_TEST_SUITE
105
110
  method_option :hanami_head, desc: 'Use hanami HEAD (true/false)', type: :boolean, default: false
106
111
  method_option :help, desc: 'Displays the usage method'
112
+ # @api private
107
113
  def new(application_name=nil)
108
114
  if options[:help]
109
115
  invoke :help, ['new']
@@ -123,6 +129,7 @@ $ > hanami new fancy_app --hanami-head=true
123
129
  EOS
124
130
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
125
131
  method_option :help, desc: 'Displays the usage method'
132
+ # @api private
126
133
  def routes
127
134
  if options[:help]
128
135
  invoke :help, ['routes']
@@ -1,4 +1,5 @@
1
1
  module Hanami
2
+ # @api private
2
3
  module CliBase
3
4
  # Add new custom CLI command to special CLI class.
4
5
  # Please be careful. This is a private method that
@@ -28,10 +29,12 @@ module Hanami
28
29
  class_eval(&blk) if block_given?
29
30
  end
30
31
 
32
+ # @api private
31
33
  def banner(command, nspace = true, subcommand = false)
32
34
  super(command, nspace, namespace != 'hanami:cli')
33
35
  end
34
36
 
37
+ # @api private
35
38
  def handle_argument_error(command, error, args, arity)
36
39
  name = [(namespace == 'hanami:cli' ? nil : namespace), command.name].compact.join(" ")
37
40
 
@@ -13,6 +13,8 @@ module Hanami
13
13
  namespace :assets
14
14
 
15
15
  desc 'precompile', 'Precompile assets for deployment'
16
+ # @since 0.6.0
17
+ # @api private
16
18
  def precompile
17
19
  require 'hanami/commands/assets/precompile'
18
20
  Hanami::Commands::Assets::Precompile.new(options).start
@@ -1,4 +1,5 @@
1
1
  module Hanami
2
+ # @api private
2
3
  class CliSubCommands
3
4
  # A set of subcommands related to DB
4
5
  #
@@ -14,6 +15,8 @@ module Hanami
14
15
 
15
16
  desc 'console', 'Start DB console'
16
17
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
18
+ # @since 0.6.0
19
+ # @api private
17
20
  def console(name = nil)
18
21
  if options[:help]
19
22
  invoke :help, ['console']
@@ -25,6 +28,8 @@ module Hanami
25
28
 
26
29
  desc 'create', 'Create database for current environment'
27
30
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
31
+ # @since 0.6.0
32
+ # @api private
28
33
  def create
29
34
  if options[:help]
30
35
  invoke :help, ['create']
@@ -37,6 +42,8 @@ module Hanami
37
42
 
38
43
  desc 'drop', 'Drop database for current environment'
39
44
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
45
+ # @since 0.6.0
46
+ # @api private
40
47
  def drop
41
48
  if options[:help]
42
49
  invoke :help, ['drop']
@@ -49,6 +56,8 @@ module Hanami
49
56
 
50
57
  desc 'migrate', 'Migrate database for current environment'
51
58
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
59
+ # @since 0.6.0
60
+ # @api private
52
61
  def migrate(version = nil)
53
62
  if options[:help]
54
63
  invoke :help, ['migrate']
@@ -60,6 +69,8 @@ module Hanami
60
69
 
61
70
  desc 'apply', 'Migrate, dump schema, delete migrations (experimental)'
62
71
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
72
+ # @since 0.6.0
73
+ # @api private
63
74
  def apply
64
75
  if options[:help]
65
76
  invoke :help, ['apply']
@@ -72,6 +83,8 @@ module Hanami
72
83
 
73
84
  desc 'prepare', 'Create and migrate database'
74
85
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
86
+ # @since 0.6.0
87
+ # @api private
75
88
  def prepare
76
89
  if options[:help]
77
90
  invoke :help, ['prepare']
@@ -82,10 +95,10 @@ module Hanami
82
95
  end
83
96
  end
84
97
 
85
- # @since 0.6.0
86
- # @api private
87
98
  desc 'version', 'Current database version'
88
99
  method_option :environment, desc: 'Path to environment configuration (config/environment.rb)'
100
+ # @since 0.6.0
101
+ # @api private
89
102
  def version
90
103
  if options[:help]
91
104
  invoke :help, ['version']