class Ditty::Generators::CrudGenerator

Attributes

controller_name[R]
folder[R]
model_name[R]
namespace[R]
policy_name[R]
views_folder[R]

Public Class Methods

source_root() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 18
def self.source_root
  File.dirname(__FILE__)
end

Public Instance Methods

create_controller() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 38
def create_controller
  filename = File.join("lib/#{folder}/controllers", "#{controller_name.underscore}.rb")
  template '../templates/controller.rb.erb', filename
  # TODO: Insert the route into the component file
  # insert_into_file 'config.ru', "use #{class_name}\n", after: 'run ApplicationController\n'
rescue StandardError => e
  puts "Could not generate controller for #{model_name}: #{e.message}"
end
create_model() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 31
def create_model
  filename = File.join("lib/#{folder}/models", "#{model_name.underscore}.rb")
  template '../templates/model.rb.erb', filename
rescue StandardError => e
  puts "Could not generate model for #{model_name}: #{e.message}"
end
create_policy() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 47
def create_policy
  filename = File.join("lib/#{folder}/policies", "#{policy_name.underscore}.rb")
  template '../templates/policy.rb.erb', filename
rescue StandardError => e
  puts "Could not generate policy for #{model_name}: #{e.message}"
end
create_type() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 54
def create_type
  filename = File.join("lib/#{folder}/types", "#{model_name.underscore}_type.rb")
  template '../templates/type.rb.erb', filename
rescue StandardError => e
  puts "Could not generate type for #{model_name}: #{e.message}"
end
create_views() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 61
def create_views
  return unless options[:views]

  directory '../templates/views', views_folder
end
setup() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 22
def setup
  @namespace       = name.deconstantize
  @folder          = namespace.underscore
  @model_name      = name.demodulize
  @views_folder    = File.join('views', model_name.pluralize.underscore)
  @controller_name = "#{model_name.pluralize}Controller"
  @policy_name     = "#{model_name}Policy"
end

Private Instance Methods

columns() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 73
def columns
  require "#{folder}/models/#{model_name.underscore}"
  name.constantize.columns
rescue StandardError
  []
end
graphql_types() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 98
def graphql_types
  @graphql_types ||= Hash.new('String').merge(
    integer: 'Integer',
    boolean: 'Boolean',
    datetime: 'GraphQL::Types::ISO8601DateTime'
  )
end
input_types() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 106
def input_types
  @input_types ||= Hash.new('text').merge(
    integer: 'number',
    datetime: 'date'
  )
end
many_to_ones() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 87
def many_to_ones
  DB.foreign_key_list(model_name.underscore.pluralize)
end
meta_columns() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 69
def meta_columns
  %i[id guid slug created_at updated_at]
end
name_column(table) click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 91
def name_column(table)
  candidates = DB.schema(table.to_sym).to_h.keys - DB.foreign_key_list(table.to_sym).map do |e|
                                                     e[:columns]
                                                   end.flatten
  (candidates - meta_columns).first
end
schema() click to toggle source
# File lib/ditty/generators/crud_generator.rb, line 80
def schema
  require "#{folder}/models/#{model_name.underscore}"
  name.constantize.db_schema
rescue StandardError
  []
end