bin/praxis in praxis-2.0.pre.18 vs bin/praxis in praxis-2.0.pre.19
- old
+ new
@@ -1,129 +1,127 @@
#! /usr/bin/env ruby
+# frozen_string_literal: true
require 'bundler'
begin
Bundler.setup :default, :test
Bundler.require :default, :test
rescue Bundler::GemfileNotFound
# no-op: we might be installed as a system gem
end
-if ARGV[0] == "version"
+if ARGV[0] == 'version'
require 'praxis/version'
puts "Praxis version #{Praxis::VERSION}"
exit 0
end
-if ["routes","docs","console"].include? ARGV[0]
+if %w[routes docs console].include? ARGV[0]
require 'rake'
require 'praxis'
require 'praxis/tasks'
load 'Rakefile' # Ensure that we read the App's Rakefile, to pickup any definitions etc.
case ARGV[0]
- when "routes"
- Rake::Task['praxis:routes'].invoke(ARGV[1])
- when "docs"
- task_name = case ARGV[1]
- when nil,'browser'
- 'praxis:docs:preview'
- when 'generate'
- 'praxis:docs:generate'
- when 'package'
- 'praxis:docs:package'
- end
- Rake::Task[task_name].invoke
- when "console"
- Rake::Task['praxis:console'].invoke
+ when 'routes'
+ Rake::Task['praxis:routes'].invoke(ARGV[1])
+ when 'docs'
+ task_name = case ARGV[1]
+ when nil, 'browser'
+ 'praxis:docs:preview'
+ when 'generate'
+ 'praxis:docs:generate'
+ when 'package'
+ 'praxis:docs:package'
+ end
+ Rake::Task[task_name].invoke
+ when 'console'
+ Rake::Task['praxis:console'].invoke
end
exit 0
end
# Thor tasks
path_to_praxis = File.expand_path(File.dirname(File.dirname(__FILE__)))
-path_to_loader = '%s/tasks/loader.thor' % path_to_praxis
+path_to_loader = format('%<path>s/tasks/loader.thor', path: path_to_praxis)
load path_to_loader
class PraxisGenerator < Thor
-
# Include a few fake thor action descriptions (for the rake tasks above) so they can show up in the same usage messages
- desc "routes [json]", "Prints the route table of the application. Defaults to table format, but can produce json"
- def routes
- end
+ desc 'routes [json]', 'Prints the route table of the application. Defaults to table format, but can produce json'
+ def routes; end
- desc "docs [generate|browser|package]", <<~EOF
- Generates API documentation and a Web App to inspect it
- generate - Generates the JSON docs
- browser - (default) Generates JSON docs, and automatically starts a Web app to browse them.
- package - Generates JSON docs, and neatly packages all the necessary static files ready for exporting the browsing app.
- EOF
- def docs
- end
-
- desc "console", "Open a console to the application, with its environment loaded"
- def console
- end
+ desc 'docs [generate|browser|package]', <<~HELP
+ Generates API documentation and a Web App to inspect it
+ generate - Generates the JSON docs
+ browser - (default) Generates JSON docs, and automatically starts a Web app to browse them.
+ package - Generates JSON docs, and neatly packages all the necessary static files ready for exporting the browsing app.
+ HELP
+ def docs; end
+ desc 'console', 'Open a console to the application, with its environment loaded'
+ def console; end
+
# Simple helper to go get the existing description for the real action
- # Usage must still be provided rather than retrieved (since it is not a
+ # Usage must still be provided rather than retrieved (since it is not a
# straight "usage" from the remote action when arguments are defined )
- def self.desc_for( usage_string, klass, action_name, description_prefix="")
+ def self.desc_for(usage_string, klass, action_name, description_prefix = '')
action_name = action_name.to_s
cmd = klass.commands[action_name]
raise "Error, could not find description for #{klass.name}##{action_name}" if cmd.nil?
+
desc usage_string, "#{description_prefix}#{cmd.description}"
end
- desc_for "new APP_NAME", ::PraxisGen::App, :new
+ desc_for 'new APP_NAME', ::PraxisGen::App, :new
def new(app_name)
gen = ::PraxisGen::App.new([app_name])
gen.destination_root = app_name
gen.invoke_all
end
- desc_for "example APP_NAME", ::PraxisGen::Example, :example
+ desc_for 'example APP_NAME', ::PraxisGen::Example, :example
def example(app_name)
gen = ::PraxisGen::Example.new([app_name])
gen.destination_root = app_name
gen.invoke(:example)
end
- desc_for "g COLLECTION_NAME", ::PraxisGen::Scaffold, :g
+ desc_for 'g COLLECTION_NAME', ::PraxisGen::Scaffold, :g
# Cannot use the argument below or it will apply to all commands (the action in the class has it)
# argument :collection_name, required: false
# The options, however, since they're optional are fine (But need to be duplicated from the class :( )
option :version, required: false, default: '1',
- desc: 'Version string for the API endpoint. This also dictates the directory structure (i.e., v1/endpoints/...))'
+ desc: 'Version string for the API endpoint. This also dictates the directory structure (i.e., v1/endpoints/...))'
option :design, type: :boolean, default: true,
- desc: 'Include the Endpoint and MediaType files for the collection'
+ desc: 'Include the Endpoint and MediaType files for the collection'
option :implementation, type: :boolean, default: true,
- desc: 'Include the Controller and (possibly the) Resource files for the collection (see --no-resource)'
+ desc: 'Include the Controller and (possibly the) Resource files for the collection (see --no-resource)'
option :resource, type: :boolean, default: true,
- desc: 'Disable (or enable) the creation of the Resource files when generating implementation'
- option :model, type: :string, enum: ['activerecord','sequel'],
- desc: 'It also generates a model for the given ORM. An empty --model flag will default to activerecord'
- option :actions, type: :string, default: 'crud', enum: ['cr','cru','crud','u','ud','d'],
- desc: 'Specifies the actions to generate for the API. cr=create, u=update, d=delete. Index and show actions are always generated'
+ desc: 'Disable (or enable) the creation of the Resource files when generating implementation'
+ option :model, type: :string, enum: %w[activerecord sequel],
+ desc: 'It also generates a model for the given ORM. An empty --model flag will default to activerecord'
+ option :actions, type: :string, default: 'crud', enum: %w[cr cru crud u ud d],
+ desc: 'Specifies the actions to generate for the API. cr=create, u=update, d=delete. Index and show actions are always generated'
def g(*args)
# Because we cannot share the :collection_name argument, we need to do this check here, before
# we "parse" it and pass it to the g command
unless args.size == 1
- ::PraxisGen::Scaffold.command_help(shell,:g)
+ ::PraxisGen::Scaffold.command_help(shell, :g)
exit 1
end
- collection_name,_ = args
- ::PraxisGen::Scaffold.new([collection_name],options).invoke(:g)
- if options[:model]
- # Make it easy to be able to both enable or not enable the creation of the model, by passing --model=...
- # but also make it easy so that if there is no value for it, it default to activerecord
- opts = {orm: options[:model] }
- opts[:orm] = 'activerecord' if opts[:orm] == 'model' # value is model param passed by no value
- ::PraxisGen::Model.new([collection_name.singularize],opts).invoke(:g)
- end
+ collection_name, = args
+ ::PraxisGen::Scaffold.new([collection_name], options).invoke(:g)
+ return unless options[:model]
+
+ # Make it easy to be able to both enable or not enable the creation of the model, by passing --model=...
+ # but also make it easy so that if there is no value for it, it default to activerecord
+ opts = { orm: options[:model] }
+ opts[:orm] = 'activerecord' if opts[:orm] == 'model' # value is model param passed by no value
+ ::PraxisGen::Model.new([collection_name.singularize], opts).invoke(:g)
end
# Initially, the idea was to build some quick model generator, but I think it's better to keep it
# simple and just use the scaffold generator with `--no-implementation --no-design --model` instead
# Left here in case we want to rescue it
@@ -142,9 +140,8 @@
# end
# model_name,_ = args
# ::PraxisGen::Model.new([model_name],options).invoke(:g)
# end
-
end
-
+
PraxisGenerator.start(ARGV)