Class: Trek::Generators::ScaffoldGenerator
- Inherits:
-
Rails::Generators::NamedBase
- Object
- Rails::Generators::NamedBase
- Trek::Generators::ScaffoldGenerator
- Includes:
- Rails::Generators::ResourceHelpers, Helpers
- Defined in:
- lib/generators/trek/scaffold_generator.rb
Instance Method Summary collapse
- #add_default_locale_files ⇒ Object
- #add_model_message ⇒ Object
-
#add_models_to_menu ⇒ Object
Top-level qualified: once an Admin::Shop namespace exists (scaffolded controller/policy), a bare
Shopundermodule Adminresolves to it. - #add_other_locale_files ⇒ Object
- #add_policy ⇒ Object
- #add_routes ⇒ Object
- #cleanup ⇒ Object
- #create_controller ⇒ Object
- #create_model ⇒ Object
- #create_views ⇒ Object
- #inject_trek_to_model ⇒ Object
- #translate_other_locale_files ⇒ Object
-
#warn_about_shadowed_models ⇒ Object
rails g model Shop::Productwrites app/models/shop.rb as amodule Shopnamespace file; if aShopmodel already lives there, it gets replaced.
Instance Method Details
#add_default_locale_files ⇒ Object
89 90 91 92 |
# File 'lib/generators/trek/scaffold_generator.rb', line 89 def add_default_locale_files template "locales/scaffold/admin.en.yml", admin_locale_file(:en) template "locales/scaffold/model.en.yml", model_locale_file(:en) end |
#add_model_message ⇒ Object
41 42 43 |
# File 'lib/generators/trek/scaffold_generator.rb', line 41 def Rails.logger.debug "Now you can edit the model in #{model_file_path}" end |
#add_models_to_menu ⇒ Object
Top-level qualified: once an Admin::Shop namespace exists (scaffolded
controller/policy), a bare Shop under module Admin resolves to it.
60 61 62 63 64 65 |
# File 'lib/generators/trek/scaffold_generator.rb', line 60 def inject_into_file dashboard_file_path, "\n::#{class_name},", after: "MODELS_IN_MENU = [" run "rubocop --autocorrect #{dashboard_file_path}", abort_on_failure: true end |
#add_other_locale_files ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/generators/trek/scaffold_generator.rb', line 94 def add_other_locale_files other_locales.each do |locale| @locale = locale.to_sym template "locales/scaffold/admin.other.yml", admin_locale_file(locale) template "locales/scaffold/model.other.yml", model_locale_file(locale) end end |
#add_policy ⇒ Object
83 84 85 86 87 |
# File 'lib/generators/trek/scaffold_generator.rb', line 83 def add_policy template "policies/admin/scaffold_policy.rb", policy_file_path reindent policy_file_path end |
#add_routes ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/generators/trek/scaffold_generator.rb', line 67 def add_routes route_code = <<~RUBY.chomp resources :#{plural_name}, except: :show do # Uncomment if reorderable # post :reorder, on: :collection end RUBY if model_namespaces.any? # Wrap resources in nested namespaces for namespaced models model_namespaces.each { |ns| route_code = "namespace :#{ns} do\n #{route_code.gsub("\n", "\n ")}\nend" } end route route_code, namespace: :admin end |
#cleanup ⇒ Object
116 117 118 119 120 121 |
# File 'lib/generators/trek/scaffold_generator.rb', line 116 def cleanup return if I18n.available_locales.include?(:en) FileUtils.rm_f(model_locale_file(:en)) FileUtils.rm_f(admin_locale_file(:en)) end |
#create_controller ⇒ Object
45 46 47 48 49 |
# File 'lib/generators/trek/scaffold_generator.rb', line 45 def create_controller template "controllers/admin/scaffold_controller.rb", controller_file_path reindent controller_file_path end |
#create_model ⇒ Object
30 31 32 |
# File 'lib/generators/trek/scaffold_generator.rb', line 30 def create_model generate :model, class_name, attributes.map { |a| "#{a.name}:#{a.type}" } end |
#create_views ⇒ Object
51 52 53 54 55 56 |
# File 'lib/generators/trek/scaffold_generator.rb', line 51 def create_views %w[index edit new _form show].each do |view| template "views/admin/scaffold/#{view}.html.slim", "app/views/admin/#{namespaced_plural}/#{view}.html.slim" end end |
#inject_trek_to_model ⇒ Object
34 35 36 37 38 39 |
# File 'lib/generators/trek/scaffold_generator.rb', line 34 def inject_trek_to_model inject_into_class model_file_path, class_name, model_injection run "rubocop --autocorrect #{model_file_path}", abort_on_failure: true end |
#translate_other_locale_files ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/generators/trek/scaffold_generator.rb', line 102 def translate_other_locale_files unless ENV["DEEPL_AUTH_KEY"] Rails.logger.debug "DEEPL_AUTH_KEY not found. Skipping translation." return end if other_locales.empty? Rails.logger.debug "No other locales found. Skipping translation." return end system "i18n-tasks translate-missing --backend=deepl --from=en #{other_locales.map(&:to_s).join(" ")}" end |
#warn_about_shadowed_models ⇒ Object
rails g model Shop::Product writes app/models/shop.rb as a module Shop
namespace file; if a Shop model already lives there, it gets replaced.
20 21 22 23 24 25 26 27 28 |
# File 'lib/generators/trek/scaffold_generator.rb', line 20 def warn_about_shadowed_models model_namespaces.each do |ns| path = "app/models/#{ns}.rb" next unless File.exist?(path) && File.read(path).match?(/^class #{ns.camelize}\b/) say_status :warning, "#{path} defines the #{ns.camelize} model, which the #{ns.camelize} namespace " \ "would replace — answer 'n' below to keep it, or move the model first", :red end end |