hanami-cli 2.0.0.beta3 → 2.0.0.beta4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2652fcd9f660db53b10864142c4a96a0acf3991330b5a5d1b3f0270b5dcbc8ff
4
- data.tar.gz: 983957c43ad1d96d7e77db6924346a6021928229eca699d0aafc28c7fcc41cd8
3
+ metadata.gz: 9e5786ce0557b00c863e145560473293d2d172f96c4bcdd10e7dcc32484a32a3
4
+ data.tar.gz: 036fb11ad8f805173889beb755daa50d8de1da678d74e853f9f8ddf65fa3dde1
5
5
  SHA512:
6
- metadata.gz: 9ad2064d1634dfae55848d8e318a7e6b4a0022c56e50b7ed83634e0bc29b5bcd18ba8a8adad14d764125e219827955cbbeef2dc8cc7b788da5543e7f263f5c56
7
- data.tar.gz: e911ef639b84a76e24a7b30ed7d778a0f4deb43fee8bd406cc52d44188f1ddc0de16622db87f406f42f6551c8fccc67e8fbe9ae4c6b7b8947610df06dfd21d32
6
+ metadata.gz: 3bde684529fa1ae28f86bee5aa8b9fb42297a7e112ff272751c0a234f5cb22cb13ea6a3bf46d580a56d9804225fd2d0834e131eb53fd60184cb0d6096f8f2a08
7
+ data.tar.gz: de2d099cfe069f4fd6c85aa23c5ce60f0133e9a6c1858c9f237f9c104ee5f2e56ab11965a7b979de754d6cdcefc8cbb9b5abfc9b0acc58cda2e2402cb570c546
data/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  Hanami Command Line Interface
4
4
 
5
+ ## v2.0.0.beta4 - 2022-10-24
6
+
7
+ ### Changed
8
+
9
+ - [Sean Collins] Show output when generating files (e.g. in `hanami new`) (#49)
10
+ - [Luca Guidi] Advertise Bundler and Hanami install steps when running `hanami new` (#54)
11
+
5
12
  ## v2.0.0.beta3 - 2022-09-21
6
13
 
7
14
  ### Added
@@ -7,9 +7,10 @@ require "dry/inflector"
7
7
  module Hanami
8
8
  module CLI
9
9
  class Command < Dry::CLI::Command
10
- def initialize(out: $stdout, fs: Dry::Files.new, inflector: Dry::Inflector.new)
10
+ def initialize(out: $stdout, err: $stderr, fs: Dry::Files.new, inflector: Dry::Inflector.new)
11
11
  super()
12
12
  @out = out
13
+ @err = err
13
14
  @fs = fs
14
15
  @inflector = inflector
15
16
  end
@@ -18,6 +19,8 @@ module Hanami
18
19
 
19
20
  attr_reader :out
20
21
 
22
+ attr_reader :err
23
+
21
24
  attr_reader :fs
22
25
 
23
26
  attr_reader :inflector
@@ -10,37 +10,47 @@ module Hanami
10
10
  module App
11
11
  # @api public
12
12
  class Console < App::Command
13
- REPLS = {
13
+ ENGINES = {
14
14
  "pry" => -> (*args) {
15
15
  begin
16
16
  require "hanami/cli/repl/pry"
17
17
  Repl::Pry.new(*args)
18
- rescue LoadError; end # rubocop:disable Lint/SuppressedException
18
+ rescue LoadError # rubocop:disable Lint/SuppressedException
19
+ end
19
20
  },
20
21
  "irb" => -> (*args) {
21
22
  require "hanami/cli/repl/irb"
22
23
  Repl::Irb.new(*args)
23
24
  },
24
25
  }.freeze
26
+ private_constant :ENGINES
25
27
 
26
- desc "App REPL"
28
+ DEFAULT_ENGINE = "irb"
29
+ private_constant :DEFAULT_ENGINE
27
30
 
28
- option :env, required: false, desc: "Application environment"
29
- option :repl, required: false, desc: "REPL gem that should be used ('pry' or 'irb')"
31
+ desc "Start app console (REPL)"
32
+
33
+ option :engine, required: false, desc: "Console engine", values: ENGINES.keys
30
34
 
31
35
  # @api private
32
- def call(repl: nil, **opts)
33
- engine = resolve_engine(repl, opts)
34
- engine.start
36
+ def call(engine: nil, **opts)
37
+ console_engine = resolve_engine(engine, opts)
38
+
39
+ if console_engine.nil?
40
+ err.puts "`#{engine}' is not bundled. Please run `bundle add #{engine}' and retry."
41
+ exit(1)
42
+ end
43
+
44
+ console_engine.start
35
45
  end
36
46
 
37
47
  private
38
48
 
39
- def resolve_engine(repl, opts)
40
- if repl
41
- REPLS.fetch(repl).(app, opts)
49
+ def resolve_engine(engine, opts)
50
+ if engine
51
+ ENGINES.fetch(engine).(app, opts)
42
52
  else
43
- REPLS.map { |(_, loader)| loader.(app, opts) }.compact.first
53
+ ENGINES.map { |(_, loader)| loader.(app, opts) }.compact.first
44
54
  end
45
55
  end
46
56
  end
@@ -28,7 +28,23 @@ module Hanami
28
28
  # desc: "Skip view and template generation"
29
29
  option :slice, required: false, desc: "Slice name"
30
30
 
31
- def initialize(fs: Dry::Files.new, inflector: Dry::Inflector.new,
31
+ # rubocop:disable Layout/LineLength
32
+ example [
33
+ %(books.index # GET /books to: "books.index" (MyApp::Actions::Books::Index)),
34
+ %(books.new # GET /books/new to: "books.new" (MyApp::Actions::Books::New)),
35
+ %(books.create # POST /books to: "books.create" (MyApp::Actions::Books::Create)),
36
+ %(books.edit # GET /books/:id/edit to: "books.edit" (MyApp::Actions::Books::Edit)),
37
+ %(books.update # PATCH /books/:id to: "books.update" (MyApp::Actions::Books::Update)),
38
+ %(books.show # GET /books/:id to: "books.show" (MyApp::Actions::Books::Show)),
39
+ %(books.destroy # DELETE /books/:id to: "books.destroy" (MyApp::Actions::Books::Destroy)),
40
+ %(books.sale # GET /books/sale to: "books.sale" (MyApp::Actions::Books::Sale)),
41
+ %(sessions.new --url=/login # GET /login to: "sessions.new" (MyApp::Actions::Sessions::New)),
42
+ %(authors.update --http=put # PUT /authors/:id to: "authors.update" (MyApp::Actions::Authors::Update)),
43
+ %(users.index --slice=admin # GET /admin/users to: "users.index" (Admin::Actions::Users::Update))
44
+ ]
45
+ # rubocop:enable Layout/LineLength
46
+
47
+ def initialize(fs: Hanami::CLI::Files.new, inflector: Dry::Inflector.new,
32
48
  generator: Generators::App::Action.new(fs: fs, inflector: inflector), **)
33
49
  @generator = generator
34
50
  super(fs: fs)
@@ -5,6 +5,7 @@ require "hanami/cli/generators/app/slice"
5
5
  require "dry/inflector"
6
6
  require "dry/files"
7
7
  require "shellwords"
8
+ require "hanami/cli/files"
8
9
  require "hanami/cli/url"
9
10
 
10
11
  module Hanami
@@ -14,22 +15,27 @@ module Hanami
14
15
  module Generate
15
16
  class Slice < Command
16
17
  argument :name, required: true, desc: "The slice name"
17
- option :url_prefix, required: false, type: :string, desc: "The slice URL prefix"
18
+ option :url, required: false, type: :string, desc: "The slice URL prefix"
18
19
 
19
- def initialize(fs: Dry::Files.new, inflector: Dry::Inflector.new,
20
+ example [
21
+ "admin # Admin slice (/admin URL prefix)",
22
+ "users --url=/u # Users slice (/u URL prefix)",
23
+ ]
24
+
25
+ def initialize(fs: Hanami::CLI::Files.new, inflector: Dry::Inflector.new,
20
26
  generator: Generators::App::Slice.new(fs: fs, inflector: inflector), **)
21
27
  @generator = generator
22
28
  super(fs: fs)
23
29
  end
24
30
 
25
- def call(name:, url_prefix: nil, **)
31
+ def call(name:, url: nil, **)
26
32
  require "hanami/setup"
27
33
 
28
34
  app = inflector.underscore(Hanami.app.namespace)
29
35
  name = inflector.underscore(Shellwords.shellescape(name))
30
- url_prefix = sanitize_url_prefix(name, url_prefix)
36
+ url = sanitize_url_prefix(name, url)
31
37
 
32
- generator.call(app, name, url_prefix)
38
+ generator.call(app, name, url)
33
39
  end
34
40
 
35
41
  private
@@ -39,14 +45,14 @@ module Hanami
39
45
 
40
46
  attr_reader :generator
41
47
 
42
- def sanitize_url_prefix(name, url_prefix)
43
- result = url_prefix
48
+ def sanitize_url_prefix(name, url)
49
+ result = url
44
50
  result = inflector.underscore(Shellwords.shellescape(result)) unless result.nil?
45
51
 
46
52
  result ||= DEFAULT_URL_PREFIX + name
47
53
  CLI::URL.call(result)
48
54
  rescue ArgumentError
49
- raise ArgumentError.new("invalid URL prefix: `#{url_prefix}'")
55
+ raise ArgumentError.new("invalid URL prefix: `#{url}'")
50
56
  end
51
57
 
52
58
  def valid_url?(url)
@@ -7,6 +7,8 @@ module Hanami
7
7
  module Commands
8
8
  module App
9
9
  class Install < Command
10
+ desc "Install Hanami third-party plugins"
11
+
10
12
  def call(*)
11
13
  end
12
14
  end
@@ -7,30 +7,35 @@ module Hanami
7
7
  module CLI
8
8
  module Commands
9
9
  module App
10
- # List registered middlewares in the app router
10
+ # List registered middleware in the app router
11
11
  #
12
- # It outputs middlewares registered along with the paths where they
12
+ # It outputs middleware registered along with the paths where they
13
13
  # apply:
14
14
  #
15
15
  # ```
16
- # $ hanami middlewares
16
+ # $ bundle exec hanami middleware
17
17
  # / Rack::Session::Cookie
18
18
  # ```
19
19
  #
20
20
  # Given arguments can be inspected:
21
21
  #
22
22
  # ```
23
- # $ hanami middlewares --with-arguments
23
+ # $ bundle exec hanami middleware --with-arguments
24
24
  # / Rack::Session::Cookie args: [{:secret=>"foo"}]
25
25
  # ```
26
- class Middlewares < Hanami::CLI::Command
27
- desc "List all the registered middlewares"
26
+ class Middleware < Hanami::CLI::Command
27
+ desc "Print app Rack middleware stack"
28
28
 
29
29
  DEFAULT_WITH_ARGUMENTS = false
30
30
 
31
31
  option :with_arguments, default: DEFAULT_WITH_ARGUMENTS, required: false,
32
32
  desc: "Include inspected arguments", type: :boolean
33
33
 
34
+ example [
35
+ "middleware # Print app Rack middleware stack",
36
+ "middleware --with-arguments # Print app Rack middleware stack, including initialize arguments",
37
+ ]
38
+
34
39
  # @api private
35
40
  def call(with_arguments: DEFAULT_WITH_ARGUMENTS)
36
41
  require "hanami/prepare"
@@ -11,14 +11,14 @@ module Hanami
11
11
  # All the formatters available from `hanami-router` are available:
12
12
  #
13
13
  # ```
14
- # $ hanami routes --format=csv
14
+ # $ bundle exec hanami routes --format=csv
15
15
  # ```
16
16
  #
17
17
  # Experimental: You can also use a custom formatter registered in the
18
18
  # application container. You can identify it by its key:
19
19
  #
20
20
  # ```
21
- # $ hanami routes --format=custom_routes_formatter
21
+ # $ bundle exec hanami routes --format=custom_routes_formatter
22
22
  # ```
23
23
  class Routes < Hanami::CLI::Command
24
24
  DEFAULT_FORMAT = "human_friendly"
@@ -30,13 +30,18 @@ module Hanami
30
30
  ].freeze
31
31
  private_constant :VALID_FORMATS
32
32
 
33
- desc "Inspect application"
33
+ desc "Print app routes"
34
34
 
35
35
  option :format,
36
36
  default: DEFAULT_FORMAT,
37
37
  required: false,
38
38
  desc: "Output format"
39
39
 
40
+ example [
41
+ "routes # Print app routes",
42
+ "routes --format=csv # Print app routes, using CSV format",
43
+ ]
44
+
40
45
  # @api private
41
46
  def call(format: DEFAULT_FORMAT, **)
42
47
  require "hanami/router/inspector"
@@ -28,13 +28,16 @@ module Hanami
28
28
  DEFAULT_PORT = 2300
29
29
  private_constant :DEFAULT_PORT
30
30
 
31
- desc "Start Hanami server"
31
+ DEFAULT_CONFIG_PATH = "config.ru"
32
+ private_constant :DEFAULT_CONFIG_PATH
33
+
34
+ desc "Start Hanami app server"
32
35
 
33
36
  option :host, default: nil, required: false,
34
37
  desc: "The host address to bind to (falls back to the rack handler)"
35
38
  option :port, default: DEFAULT_PORT, required: false,
36
39
  desc: "The port to run the server on (falls back to the rack handler)"
37
- option :config, default: "config.ru", required: false, desc: "Rack configuration file"
40
+ option :config, default: DEFAULT_CONFIG_PATH, required: false, desc: "Rack configuration file"
38
41
  option :debug, default: false, required: false, desc: "Turn on/off debug output", type: :boolean
39
42
  option :warn, default: false, required: false, desc: "Turn on/off warnings", type: :boolean
40
43
 
@@ -7,6 +7,8 @@ module Hanami
7
7
  module Commands
8
8
  module App
9
9
  class Version < Command
10
+ desc "Print Hanami app version"
11
+
10
12
  def call(*)
11
13
  require "hanami/version"
12
14
  out.puts "v#{Hanami::VERSION}"
@@ -10,7 +10,7 @@ module Hanami
10
10
  require_relative "app/server"
11
11
  require_relative "app/routes"
12
12
  require_relative "app/generate"
13
- require_relative "app/middlewares"
13
+ require_relative "app/middleware"
14
14
  # require_relative "app/db/create"
15
15
  # require_relative "app/db/create_migration"
16
16
  # require_relative "app/db/drop"
@@ -30,7 +30,7 @@ module Hanami
30
30
  register "console", Commands::App::Console, aliases: ["c"]
31
31
  register "server", Commands::App::Server, aliases: ["s"]
32
32
  register "routes", Commands::App::Routes
33
- register "middlewares", Commands::App::Middlewares
33
+ register "middleware", Commands::App::Middleware
34
34
 
35
35
  register "generate", aliases: ["g"] do |prefix|
36
36
  prefix.register "slice", Generate::Slice
@@ -4,7 +4,7 @@ require "hanami/cli/command"
4
4
  require "hanami/cli/bundler"
5
5
  require "hanami/cli/command_line"
6
6
  require "hanami/cli/generators/gem/app"
7
- require "dry/files"
7
+ require "hanami/cli/files"
8
8
  require "dry/inflector"
9
9
 
10
10
  module Hanami
@@ -12,17 +12,25 @@ module Hanami
12
12
  module Commands
13
13
  module Gem
14
14
  class New < Command
15
- SKIP_BUNDLE_DEFAULT = false
16
- private_constant :SKIP_BUNDLE_DEFAULT
15
+ SKIP_INSTALL_DEFAULT = false
16
+ private_constant :SKIP_INSTALL_DEFAULT
17
+
18
+ desc "Generate a new Hanami app"
17
19
 
18
20
  argument :app, required: true, desc: "App name"
19
21
 
20
- option :skip_bundle, type: :boolean, required: false,
21
- default: SKIP_BUNDLE_DEFAULT, desc: "Skip bundle install"
22
+ option :skip_install, type: :boolean, required: false,
23
+ default: SKIP_INSTALL_DEFAULT,
24
+ desc: "Skip app installation (Bundler, third-party Hanami plugins)"
25
+
26
+ example [
27
+ "bookshelf # Generate a new Hanami app in `bookshelf/' directory, using `Bookshelf' namespace", # rubocop:disable Layout/LineLength
28
+ "bookshelf --skip-install # Generate a new Hanami app, but it skips Hanami installation"
29
+ ]
22
30
 
23
31
  # rubocop:disable Metrics/ParameterLists
24
32
  def initialize(
25
- fs: Dry::Files.new,
33
+ fs: Hanami::CLI::Files.new,
26
34
  inflector: Dry::Inflector.new,
27
35
  bundler: CLI::Bundler.new(fs: fs),
28
36
  command_line: CLI::CommandLine.new(bundler: bundler),
@@ -36,14 +44,18 @@ module Hanami
36
44
  end
37
45
  # rubocop:enable Metrics/ParameterLists
38
46
 
39
- def call(app:, skip_bundle: SKIP_BUNDLE_DEFAULT, **)
47
+ def call(app:, skip_install: SKIP_INSTALL_DEFAULT, **)
40
48
  app = inflector.underscore(app)
41
49
 
42
50
  fs.mkdir(app)
43
51
  fs.chdir(app) do
44
52
  generator.call(app) do
45
- unless skip_bundle
53
+ if skip_install
54
+ out.puts "Skipping installation, please enter `#{app}' directory and run `bundle exec hanami install'"
55
+ else
56
+ out.puts "Running Bundler install..."
46
57
  bundler.install!
58
+ out.puts "Running Hanami install..."
47
59
  run_install_commmand!
48
60
  end
49
61
  end
@@ -7,6 +7,8 @@ module Hanami
7
7
  module Commands
8
8
  module Gem
9
9
  class Version < Command
10
+ desc "Hanami version"
11
+
10
12
  def call(*)
11
13
  version = detect_version
12
14
  out.puts "v#{version}"
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hanami
4
+ module CLI
5
+ class Files < Dry::Files
6
+ def initialize(out: $stdout, **args)
7
+ super(**args)
8
+ @out = out
9
+ end
10
+
11
+ def write(path, *content)
12
+ already_exists = exist?(path)
13
+ super
14
+ if already_exists
15
+ updated(path)
16
+ else
17
+ created(path)
18
+ end
19
+ end
20
+
21
+ def mkdir(path)
22
+ unless exist?(path)
23
+ super
24
+ created("#{path}/")
25
+ end
26
+ end
27
+
28
+ def chdir(path, &blk)
29
+ within_folder(path)
30
+ super
31
+ end
32
+
33
+ private
34
+
35
+ attr_reader :out
36
+
37
+ def updated(path)
38
+ out.puts "Updated #{path}"
39
+ end
40
+
41
+ def created(path)
42
+ out.puts "Created #{path}"
43
+ end
44
+
45
+ def within_folder(path)
46
+ out.puts "-> Within #{path}/"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "erb"
4
4
  require "dry/files"
5
+ require "hanami/cli/files"
5
6
  require "hanami/cli/generators/app/action_context"
6
7
  require "hanami/cli/url"
7
8
 
@@ -69,18 +70,16 @@ module Hanami
69
70
  route(controller, action, url, http)
70
71
  )
71
72
 
72
- fs.chdir(slice_directory) do
73
- fs.mkdir(directory = fs.join("actions", controller))
74
- fs.write(fs.join(directory, "#{action}.rb"), t("slice_action.erb", context))
75
-
76
- # unless skip_view
77
- # fs.mkdir(directory = fs.join("views", controller))
78
- # fs.write(fs.join(directory, "#{action}.rb"), t("view.erb", context))
79
- #
80
- # fs.mkdir(directory = fs.join("templates", controller))
81
- # fs.write(fs.join(directory, "#{action}.#{format}.erb"), t(template_format(format), context))
82
- # end
83
- end
73
+ fs.mkdir(directory = fs.join(slice_directory, "actions", controller))
74
+ fs.write(fs.join(directory, "#{action}.rb"), t("slice_action.erb", context))
75
+
76
+ # unless skip_view
77
+ # fs.mkdir(directory = fs.join(slice_directory, "views", controller))
78
+ # fs.write(fs.join(directory, "#{action}.rb"), t("view.erb", context))
79
+ #
80
+ # fs.mkdir(directory = fs.join(slice_directory, "templates", controller))
81
+ # fs.write(fs.join(directory, "#{action}.#{format}.erb"), t(template_format(format), context))
82
+ # end
84
83
  end
85
84
 
86
85
  def generate_for_app(controller, action, url, http, _format, _skip_view, context)
@@ -1,3 +1,3 @@
1
1
 
2
- slice :<%= underscored_slice_name %>, at: "<%= slice_url_prefix %>" do
2
+ slice :<%= underscored_slice_name %>, at: "<%= url %>" do
3
3
  end
@@ -14,27 +14,25 @@ module Hanami
14
14
  @inflector = inflector
15
15
  end
16
16
 
17
- def call(app, slice, slice_url_prefix, context: SliceContext.new(inflector, app, slice, slice_url_prefix))
17
+ def call(app, slice, url, context: SliceContext.new(inflector, app, slice, url))
18
18
  fs.inject_line_at_class_bottom(
19
19
  fs.join("config", "routes.rb"), "class Routes", t("routes.erb", context).chomp
20
20
  )
21
21
 
22
22
  fs.mkdir(directory = "slices/#{slice}")
23
23
 
24
- fs.chdir(directory) do
25
- # fs.write("config/slice.rb", t("slice.erb", context))
26
- fs.write("action.rb", t("action.erb", context))
27
- # fs.write("view.rb", t("view.erb", context))
28
- # fs.write("entities.rb", t("entities.erb", context))
29
- # fs.write("repository.rb", t("repository.erb", context))
30
-
31
- fs.write("actions/.keep", t("keep.erb", context))
32
- # fs.write("views/.keep", t("keep.erb", context))
33
- # fs.write("templates/.keep", t("keep.erb", context))
34
- # fs.write("templates/layouts/.keep", t("keep.erb", context))
35
- # fs.write("entities/.keep", t("keep.erb", context))
36
- # fs.write("repositories/.keep", t("keep.erb", context))
37
- end
24
+ # fs.write("#{directory}/config/slice.rb", t("slice.erb", context))
25
+ fs.write(fs.join(directory, "action.rb"), t("action.erb", context))
26
+ # fs.write(fs.join(directory, "/view.rb"), t("view.erb", context))
27
+ # fs.write(fs.join(directory, "/entities.rb"), t("entities.erb", context))
28
+ # fs.write(fs.join(directory, "/repository.rb"), t("repository.erb", context))
29
+
30
+ fs.write(fs.join(directory, "actions/.keep"), t("keep.erb", context))
31
+ # fs.write(fs.join(directory, views/.keep"), t("keep.erb", context))
32
+ # fs.write(fs.join(directory, templates/.keep"), t("keep.erb", context))
33
+ # fs.write(fs.join(directory, templates/layouts/.keep"), t("keep.erb", context))
34
+ # fs.write(fs.join(directory, entities/.keep"), t("keep.erb", context))
35
+ # fs.write(fs.join(directory, repositories/.keep"), t("keep.erb", context))
38
36
  end
39
37
 
40
38
  private
@@ -7,9 +7,9 @@ module Hanami
7
7
  module Generators
8
8
  module App
9
9
  class SliceContext < Generators::Context
10
- def initialize(inflector, app, slice, slice_url_prefix)
10
+ def initialize(inflector, app, slice, url)
11
11
  @slice = slice
12
- @slice_url_prefix = slice_url_prefix
12
+ @url = url
13
13
  super(inflector, app)
14
14
  end
15
15
 
@@ -25,7 +25,7 @@ module Hanami
25
25
 
26
26
  attr_reader :slice
27
27
 
28
- attr_reader :slice_url_prefix
28
+ attr_reader :url
29
29
  end
30
30
  end
31
31
  end
@@ -7,7 +7,7 @@ gem "hanami-router", "<%= hanami_version %>"
7
7
  gem "hanami-controller", "<%= hanami_version %>"
8
8
  gem "hanami-validations", "<%= hanami_version %>"
9
9
 
10
- gem "dry-types"
10
+ gem "dry-types", "~> 1.0", ">= 1.6.1"
11
11
  gem "puma"
12
12
  gem "rake"
13
13
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "<%= underscored_app_name %>/types"
4
-
5
3
  module <%= camelized_app_name %>
6
4
  class Settings < Hanami::Settings
7
5
  # Define your app settings here, for example:
@@ -11,9 +11,9 @@ module Hanami
11
11
  def inspect(include_arguments: false)
12
12
  max_path_length = @stack.map { |(path)| path.length }.max
13
13
 
14
- @stack.map { |path, middlewares|
15
- middlewares.map { |(middleware, arguments)|
16
- "#{path.ljust(max_path_length + 3)} #{format_middleware(middleware)}".tap { |line|
14
+ @stack.map { |path, middleware|
15
+ middleware.map { |(mware, arguments)|
16
+ "#{path.ljust(max_path_length + 3)} #{format_middleware(mware)}".tap { |line|
17
17
  line << " #{format_arguments(arguments)}" if include_arguments
18
18
  }
19
19
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Hanami
4
4
  module CLI
5
- VERSION = "2.0.0.beta3"
5
+ VERSION = "2.0.0.beta4"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta3
4
+ version: 2.0.0.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-21 00:00:00.000000000 Z
11
+ date: 2022-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -175,7 +175,7 @@ files:
175
175
  - lib/hanami/cli/commands/app/generate/action.rb
176
176
  - lib/hanami/cli/commands/app/generate/slice.rb
177
177
  - lib/hanami/cli/commands/app/install.rb
178
- - lib/hanami/cli/commands/app/middlewares.rb
178
+ - lib/hanami/cli/commands/app/middleware.rb
179
179
  - lib/hanami/cli/commands/app/routes.rb
180
180
  - lib/hanami/cli/commands/app/server.rb
181
181
  - lib/hanami/cli/commands/app/version.rb
@@ -188,6 +188,7 @@ files:
188
188
  - lib/hanami/cli/commands/gem/new.rb
189
189
  - lib/hanami/cli/commands/gem/version.rb
190
190
  - lib/hanami/cli/error.rb
191
+ - lib/hanami/cli/files.rb
191
192
  - lib/hanami/cli/generators/app/action.rb
192
193
  - lib/hanami/cli/generators/app/action/action.erb
193
194
  - lib/hanami/cli/generators/app/action/slice_action.erb
@@ -256,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
256
257
  - !ruby/object:Gem::Version
257
258
  version: 1.3.1
258
259
  requirements: []
259
- rubygems_version: 3.3.3
260
+ rubygems_version: 3.3.7
260
261
  signing_key:
261
262
  specification_version: 4
262
263
  summary: Hanami CLI