hanami 1.0.0.beta2 → 1.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
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']