Class: Domino::ScaffoldRunner
- Inherits:
-
Object
- Object
- Domino::ScaffoldRunner
- Defined in:
- lib/domino/scaffolder.rb
Overview
ScaffoldRunner: handles the actual file generation
Instance Method Summary collapse
- #column_args ⇒ Object
-
#generate_file(type) ⇒ Object
rubocop:disable Metrics/MethodLength.
- #generate_model_file ⇒ Object
-
#initialize(model_name, columns, namespace, generate_model) ⇒ ScaffoldRunner
constructor
A new instance of ScaffoldRunner.
-
#map_sql_type(sql_type) ⇒ Object
rubocop:disable Metrics/MethodLength.
- #register_dependency(key, class_name) ⇒ Object
- #run ⇒ Object
Constructor Details
#initialize(model_name, columns, namespace, generate_model) ⇒ ScaffoldRunner
Returns a new instance of ScaffoldRunner.
26 27 28 29 30 31 32 33 34 |
# File 'lib/domino/scaffolder.rb', line 26 def initialize(model_name, columns, namespace, generate_model) @model_name = model_name @file_name = model_name.underscore @plural_file_name = @file_name.pluralize @columns = columns @namespace = namespace @generate_model = generate_model @fields = columns.map(&:name).reject { |c| c == "id" } end |
Instance Method Details
#column_args ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/domino/scaffolder.rb', line 55 def column_args # @columns.map { |col| "#{col.name}:#{col.sql_type}" unless col.name == "id" }.compact @columns.map do |col| next if col.name == "id" rails_type = map_sql_type(col.sql_type) "#{col.name}:#{rails_type}" if rails_type end.compact end |
#generate_file(type) ⇒ Object
rubocop:disable Metrics/MethodLength
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/domino/scaffolder.rb', line 79 def generate_file(type) # rubocop:disable Metrics/MethodLength require "erb" template_path = File.("../../generators/domino/templates/#{type}.rb.tt", __FILE__) raise "Missing template: #{template_path}" unless File.exist?(template_path) content = ERB.new(File.read(template_path)).result(binding) puts "Generating #{type} for #{@model_name}" folder = case type when "blueprint" then "app/mappers" when "controller" then "app/controllers" when "repository" then "app/repositories" when "service" then "app/services" else "app/#{type}s" end filename = case type when "controller" "#{@plural_file_name}_controller.rb" else "#{@file_name}_#{type}.rb" end FileUtils.mkdir_p(folder) File.write(File.join(folder, filename), content) end |
#generate_model_file ⇒ Object
49 50 51 52 53 |
# File 'lib/domino/scaffolder.rb', line 49 def generate_model_file cmd = ["rails", "generate", "model", @model_name] + column_args system(*cmd) # system("rails generate model #{@model_name} #{column_args.join(" ")}") end |
#map_sql_type(sql_type) ⇒ Object
rubocop:disable Metrics/MethodLength
65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/domino/scaffolder.rb', line 65 def map_sql_type(sql_type) # rubocop:disable Metrics/MethodLength case sql_type when /nvarchar|varchar|text/ then "string" when /int/ then "integer" when /timestamp/ then "datetime" when /bool/ then "boolean" when /decimal|numeric/ then "decimal" when /date/ then "date" else puts "Warning: unknown SQL type #{sql_type}, skipping." nil end end |
#register_dependency(key, class_name) ⇒ Object
107 108 109 110 111 112 113 114 115 |
# File 'lib/domino/scaffolder.rb', line 107 def register_dependency(key, class_name) init_file = Rails.root.join("config/initializers/domino_container.rb") line = "Domino::Container.register(\"#{key}\", -> { #{class_name}.new })" FileUtils.mkdir_p(File.dirname(init_file)) return if File.exist?(init_file) && File.read(init_file).include?(line) File.write(init_file, "#{line}\n", mode: "a") end |
#run ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/domino/scaffolder.rb', line 36 def run generate_model_file if @generate_model generate_file("repository") register_dependency("#{@file_name}_repository", "#{@model_name}Repository") generate_file("service") register_dependency("#{@file_name}_service", "#{@model_name}Service") generate_file("blueprint") generate_file("controller") end |