class Shogun::Command::Generate

Public Class Methods

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

Public Instance Methods

execute() click to toggle source
# File lib/shogun/command/generate.rb, line 12
def execute
  architecture(source: scaffold_directory, destination: namespace_directory) do |architect|
    architect.copy(file: "resource.rb", as: "#{resource}.rb", context: context)
    architect.create(directory: architect.destination(resource))
    architect.within(source: "resource", destination: resource) do |scope|
      scope.copy(file: "endpoint.rb", context: context)
      scope.copy(file: "model.rb", context: context)
      scope.copy(file: "null.rb", context: context)
      scope.copy(file: "presenter.rb", context: context)
      subresource(scope, "show")
      subresource(scope, "list")
      subresource(scope, "create")
      subresource(scope, "update")
      subresource(scope, "destroy")
    end
  end
end

Private Instance Methods

context() click to toggle source
# File lib/shogun/command/generate.rb, line 62
        def context
  {
    namespace_module: namespace_module,
    resource_module: resource_module,
    namespace: namespace,
    resource: resource
  }
end
current_directory() click to toggle source
# File lib/shogun/command/generate.rb, line 58
        def current_directory
  Dir.pwd
end
gem_directory() click to toggle source
# File lib/shogun/command/generate.rb, line 54
        def gem_directory
  Gem::Specification.find_by_name("shogun").gem_dir
end
namespace() click to toggle source
# File lib/shogun/command/generate.rb, line 79
        def namespace
  @namespace.downcase
end
namespace_directory() click to toggle source
# File lib/shogun/command/generate.rb, line 46
        def namespace_directory
  File.join(current_directory, "lib", @namespace)
end
namespace_module() click to toggle source
# File lib/shogun/command/generate.rb, line 71
        def namespace_module
  @namespace.camelcase
end
resource() click to toggle source
# File lib/shogun/command/generate.rb, line 83
        def resource
  @resource.downcase
end
resource_directory() click to toggle source
# File lib/shogun/command/generate.rb, line 50
        def resource_directory
  destination(@parameters.first)
end
resource_module() click to toggle source
# File lib/shogun/command/generate.rb, line 75
        def resource_module
  @resource.camelcase
end
resource_signular() click to toggle source
# File lib/shogun/command/generate.rb, line 87
        def resource_signular
  resource.singular
end
scaffold_directory() click to toggle source
# File lib/shogun/command/generate.rb, line 42
        def scaffold_directory
  File.join(gem_directory, "scaffold", "generate")
end
subresource(architect, name) click to toggle source
# File lib/shogun/command/generate.rb, line 30
        def subresource(architect, name)
  architect.copy(file: "#{name}.rb", context: context)
  architect.create(directory: architect.destination(name))
  architect.within(source: name, destination: name) 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
end