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
@@ -1,14 +1,19 @@
1
1
  require 'hanami/commands/new/abstract'
2
2
 
3
3
  module Hanami
4
+ # @api private
4
5
  module Commands
6
+ # @api private
5
7
  class New
8
+ # @api private
6
9
  class App < Abstract
7
10
 
11
+ # @api private
8
12
  def initialize(options, name)
9
13
  super(options, name)
10
14
  end
11
15
 
16
+ # @api private
12
17
  def map_templates
13
18
  add_application_templates
14
19
  add_empty_directories
@@ -17,6 +22,7 @@ module Hanami
17
22
  add_git_templates
18
23
  end
19
24
 
25
+ # @api private
20
26
  def template_options
21
27
  {
22
28
  app_name: app_name,
@@ -33,12 +39,14 @@ module Hanami
33
39
  }
34
40
  end
35
41
 
42
+ # @api private
36
43
  def post_process_templates
37
44
  init_git
38
45
  end
39
46
 
40
47
  private
41
48
 
49
+ # @api private
42
50
  def add_application_templates
43
51
  add_mapping('hanamirc.tt', '.hanamirc')
44
52
  add_mapping('.env.development.tt', '.env.development')
@@ -54,6 +62,7 @@ module Hanami
54
62
  add_mapping('favicon.ico', 'app/assets/favicon.ico')
55
63
  end
56
64
 
65
+ # @api private
57
66
  def add_test_templates
58
67
  if test_framework.rspec?
59
68
  add_mapping('Rakefile.rspec.tt', 'Rakefile')
@@ -68,6 +77,7 @@ module Hanami
68
77
  end
69
78
  end
70
79
 
80
+ # @api private
71
81
  def add_empty_directories
72
82
  add_mapping('.gitkeep', 'config/initializers/.gitkeep')
73
83
  add_mapping('.gitkeep', 'app/controllers/.gitkeep')
@@ -95,18 +105,23 @@ module Hanami
95
105
  add_mapping('.gitkeep', 'db/.gitkeep')
96
106
  end
97
107
  end
108
+
109
+ # @api private
98
110
  def template_source_path
99
111
  Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'app').realpath
100
112
  end
101
113
 
114
+ # @api private
102
115
  def upcase_app_name
103
116
  app_name.to_env_s
104
117
  end
105
118
 
119
+ # @api private
106
120
  def classified_app_name
107
121
  Utils::String.new(app_name).classify.tr('::', '')
108
122
  end
109
123
 
124
+ # @api private
110
125
  alias app_name project_name
111
126
  end
112
127
  end
@@ -2,12 +2,17 @@ require 'hanami/commands/generate/app'
2
2
  require 'hanami/commands/new/abstract'
3
3
 
4
4
  module Hanami
5
+ # @api private
5
6
  module Commands
7
+ # @api private
6
8
  class New
9
+ # @api private
7
10
  class Container < Abstract
8
11
 
12
+ # @api private
9
13
  DEFAULT_APPLICATION_NAME = 'web'.freeze
10
14
 
15
+ # @api private
11
16
  def map_templates
12
17
  add_application_templates
13
18
  add_empty_directories
@@ -16,6 +21,7 @@ module Hanami
16
21
  add_git_templates
17
22
  end
18
23
 
24
+ # @api private
19
25
  def template_options
20
26
  {
21
27
  project_name: project_name,
@@ -30,6 +36,7 @@ module Hanami
30
36
  }
31
37
  end
32
38
 
39
+ # @api private
33
40
  def post_process_templates
34
41
  init_git
35
42
  generate_app
@@ -37,6 +44,7 @@ module Hanami
37
44
 
38
45
  private
39
46
 
47
+ # @api private
40
48
  def add_application_templates
41
49
  add_mapping('hanamirc.tt', '.hanamirc')
42
50
  add_mapping('.env.development.tt', '.env.development')
@@ -48,6 +56,7 @@ module Hanami
48
56
  add_mapping('lib/project.rb.tt', "lib/#{ project_name }.rb")
49
57
  end
50
58
 
59
+ # @api private
51
60
  def add_test_templates
52
61
  if test_framework.rspec?
53
62
  add_mapping('Rakefile.rspec.tt', 'Rakefile')
@@ -62,6 +71,7 @@ module Hanami
62
71
  end
63
72
  end
64
73
 
74
+ # @api private
65
75
  def add_empty_directories
66
76
  add_mapping('.gitkeep', 'public/.gitkeep')
67
77
  add_mapping('.gitkeep', 'config/initializers/.gitkeep')
@@ -81,20 +91,24 @@ module Hanami
81
91
  end
82
92
  end
83
93
 
94
+ # @api private
84
95
  def generate_app
85
96
  Hanami::Commands::Generate::App.new(app_options, app_slice_name).start
86
97
  end
87
98
 
99
+ # @api private
88
100
  def app_options
89
101
  {
90
102
  application_base_url: application_base_url
91
103
  }
92
104
  end
93
105
 
106
+ # @api private
94
107
  def app_slice_name
95
108
  options.fetch(:application_name, DEFAULT_APPLICATION_NAME)
96
109
  end
97
110
 
111
+ # @api private
98
112
  def template_source_path
99
113
  Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'container').realpath
100
114
  end
@@ -1,6 +1,7 @@
1
1
  require 'hanami/commands/command'
2
2
 
3
3
  module Hanami
4
+ # @api private
4
5
  module Commands
5
6
  # Display application/container routes.
6
7
  #
@@ -16,6 +17,7 @@ module Hanami
16
17
  # Display to STDOUT application routes
17
18
  #
18
19
  # @since 0.1.0
20
+ # @api private
19
21
  def start
20
22
  puts requirements['routes.inspector'].inspect
21
23
  end
@@ -1,6 +1,7 @@
1
1
  require 'hanami/commands/command'
2
2
 
3
3
  module Hanami
4
+ # @api private
4
5
  module Commands
5
6
  # Server command (`hanami server`)
6
7
  #
@@ -9,6 +10,7 @@ module Hanami
9
10
  class Server < Command
10
11
  requires 'code_reloading'
11
12
 
13
+ # @api private
12
14
  def initialize(options)
13
15
  super(options)
14
16
 
@@ -16,12 +18,14 @@ module Hanami
16
18
  @server = Hanami::Server.new
17
19
  end
18
20
 
21
+ # @api private
19
22
  def start
20
23
  server.start
21
24
  end
22
25
 
23
26
  protected
24
27
 
28
+ # @api private
25
29
  attr_reader :server
26
30
  end
27
31
  end
@@ -1,5 +1,9 @@
1
1
  module Hanami
2
+ # @since 0.9.0
3
+ # @api private
2
4
  module Components
5
+ # @since 0.9.0
6
+ # @api private
3
7
  module App
4
8
  # hanami-assets configuration for a sigle Hanami application in the project.
5
9
  #
@@ -2,7 +2,11 @@ require 'hanami/action/session'
2
2
  require 'hanami/action/routing_helpers'
3
3
 
4
4
  module Hanami
5
+ # @since 0.9.0
6
+ # @api private
5
7
  module Components
8
+ # @since 0.9.0
9
+ # @api private
6
10
  module App
7
11
  # hanami-controller configuration for a sigle Hanami application in the project.
8
12
  #
@@ -2,7 +2,11 @@ require 'hanami/routes'
2
2
  require 'hanami/routing/default'
3
3
 
4
4
  module Hanami
5
+ # @since 0.9.0
6
+ # @api private
5
7
  module Components
8
+ # @since 0.9.0
9
+ # @api private
6
10
  module App
7
11
  # hanami-router configuration for a sigle Hanami application in the project.
8
12
  #
@@ -26,6 +30,8 @@ module Hanami
26
30
  Components.resolved("#{app.app_name}.routes", routes)
27
31
  end
28
32
 
33
+ # @since 0.9.0
34
+ # @api private
29
35
  def self.application_routes(app) # rubocop:disable Metrics/MethodLength
30
36
  config = app.configuration
31
37
  namespace = app.namespace
@@ -1,5 +1,9 @@
1
1
  module Hanami
2
+ # @since 0.9.0
3
+ # @api private
2
4
  module Components
5
+ # @since 0.9.0
6
+ # @api private
3
7
  module App
4
8
  # hanami-view configuration for a sigle Hanami application in the project.
5
9
  #
@@ -1,4 +1,6 @@
1
1
  module Hanami
2
+ # @since 0.9.0
3
+ # @api private
2
4
  module Components
3
5
  # Base component
4
6
  #
@@ -13,7 +13,7 @@ module Hanami
13
13
  # @since 0.9.0
14
14
  # @api private
15
15
  register 'all' do
16
- requires 'logger', 'mailer', 'code', 'model', 'apps', 'finalizers'
16
+ requires 'logger', 'code', 'mailer', 'model', 'apps', 'finalizers'
17
17
 
18
18
  resolve { true }
19
19
  end
@@ -50,11 +50,12 @@ module Hanami
50
50
  end
51
51
  end
52
52
 
53
+ # @api private
53
54
  register 'code' do
54
55
  run do
55
56
  directory = Hanami.root.join('lib')
56
57
 
57
- if Hanami.code_reloading?
58
+ if Components['environment'].code_reloading?
58
59
  Utils.reload!(directory)
59
60
  else
60
61
  Utils.require!(directory)
@@ -77,6 +78,10 @@ module Hanami
77
78
  register 'model' do
78
79
  requires 'logger', 'model.configuration', 'model.sql'
79
80
 
81
+ prepare do
82
+ Hanami::Model.disconnect if Components['model.configuration']
83
+ end
84
+
80
85
  resolve do
81
86
  if Components['model.configuration']
82
87
  Hanami::Model.load!
@@ -177,9 +182,11 @@ module Hanami
177
182
  end
178
183
 
179
184
  resolve do |configuration|
180
- Hanami::Mailer.configuration = Hanami::Mailer::Configuration.new if Hanami.code_reloading?
181
- Hanami::Mailer.configure(&configuration.mailer)
182
- Hanami::Mailer.configuration
185
+ unless configuration.mailer.nil?
186
+ Hanami::Mailer.configuration = Hanami::Mailer::Configuration.new if Hanami.code_reloading?
187
+ Hanami::Mailer.configure(&configuration.mailer)
188
+ Hanami::Mailer.configuration
189
+ end
183
190
  end
184
191
  end
185
192
 
@@ -2,6 +2,8 @@ require 'hanami/routing/default'
2
2
  require_relative './app/routes'
3
3
 
4
4
  module Hanami
5
+ # @since 0.9.0
6
+ # @api private
5
7
  module Components
6
8
  # Project's routes inspector
7
9
  #
@@ -1,4 +1,5 @@
1
1
  module Hanami
2
+ # @api private
2
3
  module Config
3
4
  # Cookies configuration
4
5
  #
@@ -1,4 +1,5 @@
1
1
  module Hanami
2
+ # @api private
2
3
  module Config
3
4
  # Collects all the settings for a given framework configuration and then
4
5
  # forwards them when the application is loaded.
@@ -1,17 +1,20 @@
1
1
  require 'hanami/utils'
2
2
 
3
3
  module Hanami
4
+ # @api private
4
5
  module Config
5
6
  # Define the load paths where the application should load
6
7
  #
7
8
  # @since 0.1.0
8
9
  # @api private
9
10
  class LoadPaths < Utils::LoadPaths
11
+ # @api private
10
12
  def initialize(root)
11
13
  super()
12
14
  @root = root
13
15
  end
14
16
 
17
+ # @api private
15
18
  def load!
16
19
  each do |path|
17
20
  Utils.require!(path)
@@ -20,6 +23,7 @@ module Hanami
20
23
 
21
24
  protected
22
25
 
26
+ # @api private
23
27
  def realpath(path)
24
28
  @root.join(path).realpath
25
29
  end
@@ -1,19 +1,26 @@
1
1
  require 'hanami/utils/kernel'
2
2
 
3
3
  module Hanami
4
+ # @since 0.1.0
5
+ # @api private
4
6
  module Config
5
7
  # Block or file mapper
6
8
  #
7
9
  # @since 0.1.0
8
10
  # @api private
9
11
  class Mapper
12
+ # @api private
10
13
  EXTNAME = '.rb'
11
14
 
15
+ # @since 0.1.0
16
+ # @api private
12
17
  def initialize(root, path, &blk)
13
18
  @path, @blk = path, blk
14
19
  @path = root.join(path) if root && path
15
20
  end
16
21
 
22
+ # @since 0.1.0
23
+ # @api private
17
24
  def to_proc
18
25
  return @blk if @blk
19
26
 
@@ -22,12 +29,16 @@ module Hanami
22
29
  end
23
30
 
24
31
  private
32
+ # @since 0.1.0
33
+ # @api private
25
34
  def realpath
26
35
  Utils::Kernel.Pathname("#{ @path }#{ EXTNAME }").realpath
27
36
  rescue Errno::ENOENT
28
37
  raise ArgumentError, error_message
29
38
  end
30
39
 
40
+ # @since 0.1.0
41
+ # @api private
31
42
  def error_message
32
43
  'You must specify a block or a file.'
33
44
  end
@@ -1,6 +1,8 @@
1
1
  require 'hanami/config/mapper'
2
2
 
3
3
  module Hanami
4
+ # @since 0.1.0
5
+ # @api private
4
6
  module Config
5
7
  # Defines a route set
6
8
  #
@@ -8,6 +10,8 @@ module Hanami
8
10
  # @api private
9
11
  class Routes < Mapper
10
12
  private
13
+ # @since 0.1.0
14
+ # @api private
11
15
  def error_message
12
16
  'You must specify a block or a file for routes definitions.'
13
17
  end
@@ -1,4 +1,6 @@
1
1
  module Hanami
2
+ # @since 0.3.0
3
+ # @api private
2
4
  module Config
3
5
  # Security policies are stored here.
4
6
  #