Class: TypedEAV::Generators::ScaffoldGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/typed_eav/scaffold/scaffold_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_routesObject



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 35

def add_routes
  route "    resources :typed_eav_fields, controller: \"typed_eav\" do\n      resources :field_options, controller: \"typed_eav\", only: [] do\n        collection do\n          post :add_option\n          delete :remove_option\n        end\n      end\n    end\n  ROUTES\nend\n"

#copy_controllerObject



13
14
15
16
17
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 13

def copy_controller
  copy_file "controllers/typed_eav_controller.rb", "app/controllers/typed_eav_controller.rb"
  copy_file "controllers/concerns/typed_eav_controller_concern.rb",
            "app/controllers/concerns/typed_eav_controller_concern.rb"
end

#copy_helperObject



23
24
25
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 23

def copy_helper
  copy_file "helpers/typed_eav_helper.rb", "app/helpers/typed_eav_helper.rb"
end

#copy_initializerObject



19
20
21
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 19

def copy_initializer
  copy_file "config/initializers/typed_eav.rb", "config/initializers/typed_eav.rb"
end

#copy_javascriptObject



31
32
33
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 31

def copy_javascript
  directory "javascript/controllers", "app/javascript/controllers"
end

#copy_viewsObject



27
28
29
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 27

def copy_views
  directory "views", "app/views"
end

#show_post_installObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
# File 'lib/generators/typed_eav/scaffold/scaffold_generator.rb', line 48

def show_post_install
  say ""
  say "Scaffold generated. You can now manage fields at /typed_eav_fields", :green
  say ""
  say "Next steps:", :yellow
  say ""
  say "  1. WIRE THE ADMIN AUTH HOOK (security-critical):", :red
  say ""
  say "       Edit app/controllers/typed_eav_controller.rb and replace"
  say "       `authorize_typed_eav_admin!` with your auth check. The"
  say "       default returns `head :not_found` (fail-closed). Defining"
  say "       this method in ApplicationController does NOT override it."
  say ""
  say "         def authorize_typed_eav_admin!"
  say "           return if current_user&.admin?"
  say "           head :not_found"
  say "         end"
  say ""
  say "  2. Configure ambient scope resolution for multi-tenancy:", :yellow
  say ""
  say "       Edit config/initializers/typed_eav.rb and uncomment the"
  say "       scope_resolver pattern that matches your app (acts_as_tenant"
  say "       is auto-detected; no config needed if you use it)."
  say ""
  say "  3. Include the concern in controllers that use typed-eav",
      :yellow
  say "     search params (your host model's controller, usually):",
      :yellow
  say ""
  say "       class ProductsController < ApplicationController"
  say "         include TypedEAVControllerConcern"
  say "         helper TypedEAVHelper"
  say "         ..."
  say "       end"
  say ""
  say "  4. Render typed field inputs in your entity forms:", :yellow
  say ""
  say "       <%= render_typed_value_inputs(form: f, record: @record) %>"
  say ""
  say "     Permit nested attributes in your host controller", :yellow
  say "     (the `value: []` form is required for array/multi-select):",
      :yellow
  say ""
  say "       params.require(:contact).permit("
  say "         :name,"
  say "         typed_values_attributes: ["
  say "           :id, :field_id, :_destroy, :value, { value: [] }"
  say "         ]"
  say "       )"
  say ""
  say "  5. Add a search form to filter entities by typed fields:",
      :yellow
  say ""
  say "       <%= render_typed_eav_search(fields: Model.typed_eav_definitions, url: search_path) %>"
  say ""
end