class Shogun::Command::New

Constants

BLANK_AUTHOR

Public Class Methods

new(namespace, *parameters) click to toggle source
# File lib/shogun/command/new.rb, line 8
def initialize(namespace, *parameters)
  @namespace = namespace
  @parameters = parameters
end

Public Instance Methods

execute() click to toggle source
# File lib/shogun/command/new.rb, line 13
def execute
  architecture(source: scaffold_directory, destination: current_directory) do |architect|
    architect.create(directory: architect.destination(namespace))
    architect.within(source: "project", destination: namespace) do |scope|
      scope.copy(file: "gitignore", as: ".gitignore", context: context)
      scope.copy(file: "rspec", as: ".rspec", context: context)
      scope.copy(file: "env", as: ".env", context: context)
      scope.copy(file: "ruby-gemset", as: ".ruby-gemset", context: context)
      scope.copy(file: "ruby-version", as: ".ruby-version", context: context)
      scope.copy(file: "slugignore", as: ".slugignore", context: context)
      scope.copy(file: "travis.yml", as: ".travis.yml", context: context)
      scope.copy(file: "config.ru", context: context)
      scope.copy(file: "Envfile", context: context)
      scope.copy(file: "Gemfile", context: context)
      scope.copy(file: "LICENSE", context: context)
      scope.copy(file: "Procfile", context: context)
      scope.copy(file: "Rakefile", context: context)
      scope.copy(file: "README.md", context: context)
      scope.create(directory: scope.destination("config"))
      scope.within(source: "config", destination: "config") do |scope|
        scope.copy(file: "puma.rb", context: context)
      end
      scope.create(directory: scope.destination("lib"))
      scope.within(source: "lib", destination: "lib") do |scope|
        scope.copy(file: "namespace.rb", as: "#{namespace}.rb", context: context)
        scope.create(directory: scope.destination(namespace))
        scope.within(source: "namespace", destination: namespace) do |scope|
          scope.copy(file: "server.rb", context: context)
          scope.copy(file: "accounts.rb", context: context)
          scope.create(directory: scope.destination("accounts"))
          scope.within(source: "accounts", destination: "accounts") do |scope|
            scope.copy(file: "create.rb", context: context)
            scope.create(directory: scope.destination("create"))
            scope.within(source: "create", destination: "create") do |scope|
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "destroy.rb", context: context)
            scope.create(directory: scope.destination("destroy"))
            scope.within(source: "destroy", destination: "destroy") do |scope|
              scope.copy(file: "authorizer.rb", context: context)
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "list.rb", context: context)
            scope.create(directory: scope.destination("list"))
            scope.within(source: "list", destination: "list") do |scope|
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "show.rb", context: context)
            scope.create(directory: scope.destination("show"))
            scope.within(source: "show", destination: "show") do |scope|
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "update.rb", context: context)
            scope.create(directory: scope.destination("update"))
            scope.within(source: "update", destination: "update") do |scope|
              scope.copy(file: "authorizer.rb", context: context)
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "endpoint.rb", context: context)
            scope.copy(file: "null.rb", context: context)
            scope.copy(file: "presenter.rb", context: context)
            scope.copy(file: "model.rb", context: context)
          end
          scope.copy(file: "sessions.rb", context: context)
          scope.create(directory: scope.destination("sessions"))
          scope.within(source: "sessions", destination: "sessions") do |scope|
            scope.copy(file: "create.rb", context: context)
            scope.create(directory: scope.destination("create"))
            scope.within(source: "create", destination: "create") do |scope|
              scope.copy(file: "authorizer.rb", context: context)
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "destroy.rb", context: context)
            scope.create(directory: scope.destination("destroy"))
            scope.within(source: "destroy", destination: "destroy") do |scope|
              scope.copy(file: "control.rb", context: context)
              scope.copy(file: "denormalizer.rb", context: context)
              scope.copy(file: "normalizer.rb", context: context)
              scope.copy(file: "validator.rb", context: context)
            end
            scope.copy(file: "endpoint.rb", context: context)
            scope.copy(file: "presenter.rb", context: context)
            scope.copy(file: "model.rb", context: context)
          end
          scope.copy(file: "errors.rb", context: context)
          scope.create(directory: scope.destination("errors"))
          scope.within(source: "errors", destination: "errors") do |scope|
            scope.copy(file: "denormalizer.rb", context: context)
            scope.copy(file: "presenter.rb", context: context)
          end
        end
      end
      scope.create(directory: scope.destination("spec"))
      scope.within(source: "spec", destination: "spec") do |scope|
        scope.copy(file: "spec_helper.rb", context: context)
        scope.create(directory: scope.destination("lib"))

      end
    end
  end
end

Private Instance Methods

author() click to toggle source
# File lib/shogun/command/new.rb, line 165
        def author
  ENV["SHOGUN_AUTHOR"] || BLANK_AUTHOR
end
context() click to toggle source
# File lib/shogun/command/new.rb, line 149
        def context
  {
    namespace_module: namespace_module,
    namespace: namespace,
    author: author
  }
end
current_directory() click to toggle source
# File lib/shogun/command/new.rb, line 145
        def current_directory
  Dir.pwd
end
gem_directory() click to toggle source
# File lib/shogun/command/new.rb, line 141
        def gem_directory
  Gem::Specification.find_by_name("shogun").gem_dir
end
namespace() click to toggle source
# File lib/shogun/command/new.rb, line 161
        def namespace
  @namespace.downcase
end
namespace_module() click to toggle source
# File lib/shogun/command/new.rb, line 157
        def namespace_module
  @namespace.camelcase
end
resource_directory() click to toggle source
# File lib/shogun/command/new.rb, line 137
        def resource_directory
  destination(@parameters.first)
end
scaffold_directory() click to toggle source
# File lib/shogun/command/new.rb, line 133
        def scaffold_directory
  File.join(gem_directory, "scaffold", "new")
end