Module: InertiaRails::Generators::Helper
- Included in:
- Inertia::Generators::ControllerGenerator, Inertia::Generators::ScaffoldControllerGenerator, ControllerTemplateBase
- Defined in:
- lib/inertia_rails/generators/helper.rb
Class Method Summary collapse
- .guess_inertia_template ⇒ Object
- .guess_the_default_framework(package_json_path = Rails.root.join('package.json')) ⇒ Object
- .guess_typescript ⇒ Object
Instance Method Summary collapse
- #attributes_to_serialize ⇒ Object
- #custom_form_attributes ⇒ Object
- #default_value(attribute) ⇒ Object
- #inertia_base_path ⇒ Object
- #inertia_component_name ⇒ Object
- #inertia_js_version ⇒ Object
- #inertia_model_form_type ⇒ Object
- #inertia_model_type ⇒ Object
- #input_type(attribute) ⇒ Object
- #js_edit_resource_path ⇒ Object
- #js_new_resource_path ⇒ Object
- #js_resource_path ⇒ Object
- #js_resources_path ⇒ Object
- #omit_input_attributes ⇒ Object
- #ts_type(attribute) ⇒ Object
Class Method Details
.guess_inertia_template ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/inertia_rails/generators/helper.rb', line 28 def guess_inertia_template if Rails.root.join('tailwind.config.js').exist? || Rails.root.join('tailwind.config.ts').exist? 'inertia_tw_templates' else 'inertia_templates' end end |
.guess_the_default_framework(package_json_path = Rails.root.join('package.json')) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/inertia_rails/generators/helper.rb', line 7 def guess_the_default_framework(package_json_path = Rails.root.join('package.json')) package_json = JSON.parse(package_json_path.read) dependencies = package_json['dependencies'] || {} if dependencies['@inertiajs/react'] 'react' elsif dependencies['@inertiajs/svelte'] version = dependencies['svelte'].gsub(/[\^~]/, '') # Remove ^ or ~ from version version.start_with?('5') ? 'svelte' : 'svelte4' elsif dependencies['@inertiajs/vue3'] 'vue' else Thor::Shell::Basic.new.say_error 'Could not determine the Inertia.js framework you are using.' exit 1 end end |
.guess_typescript ⇒ Object
24 25 26 |
# File 'lib/inertia_rails/generators/helper.rb', line 24 def guess_typescript Rails.root.join('tsconfig.json').exist? end |
Instance Method Details
#attributes_to_serialize ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/inertia_rails/generators/helper.rb', line 53 def attributes_to_serialize [:id] + attributes.reject do |attribute| attribute.password_digest? || attribute. || attribute. end.map(&:column_name) end |
#custom_form_attributes ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/inertia_rails/generators/helper.rb', line 61 def custom_form_attributes attributes.select do |attribute| attribute.password_digest? || attribute. || attribute. end end |
#default_value(attribute) ⇒ Object
131 132 133 134 135 136 137 138 |
# File 'lib/inertia_rails/generators/helper.rb', line 131 def default_value(attribute) case attribute.type when :boolean 'false' else "''" end end |
#inertia_base_path ⇒ Object
37 38 39 |
# File 'lib/inertia_rails/generators/helper.rb', line 37 def inertia_base_path (class_path + [file_name]).map(&:camelize).join('/') end |
#inertia_component_name ⇒ Object
41 42 43 |
# File 'lib/inertia_rails/generators/helper.rb', line 41 def inertia_component_name singular_name.camelize end |
#inertia_js_version ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/inertia_rails/generators/helper.rb', line 89 def inertia_js_version @inertia_js_version ||= Gem::Version.new( JSON.parse(`npm ls @inertiajs/core --json`).then do |json| json['dependencies'].values.first['version'] end ) end |
#inertia_model_form_type ⇒ Object
49 50 51 |
# File 'lib/inertia_rails/generators/helper.rb', line 49 def inertia_model_form_type "#{inertia_component_name}FormType" end |
#inertia_model_type ⇒ Object
45 46 47 |
# File 'lib/inertia_rails/generators/helper.rb', line 45 def inertia_model_type "#{inertia_component_name}Type" end |
#input_type(attribute) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/inertia_rails/generators/helper.rb', line 112 def input_type(attribute) case attribute.type when :text, :rich_text 'text_area' when :integer, :float, :decimal 'number' when :datetime, :timestamp, :time 'datetime-local' when :date 'date' when :boolean 'checkbox' when :attachments, :attachment 'file' else 'text' end end |
#js_edit_resource_path ⇒ Object
77 78 79 |
# File 'lib/inertia_rails/generators/helper.rb', line 77 def js_edit_resource_path "#{route_url}/${#{singular_table_name}.id}/edit" end |
#js_new_resource_path ⇒ Object
81 82 83 |
# File 'lib/inertia_rails/generators/helper.rb', line 81 def js_new_resource_path "#{route_url}/new" end |
#js_resource_path ⇒ Object
73 74 75 |
# File 'lib/inertia_rails/generators/helper.rb', line 73 def js_resource_path "#{route_url}/${#{singular_table_name}.id}" end |
#js_resources_path ⇒ Object
85 86 87 |
# File 'lib/inertia_rails/generators/helper.rb', line 85 def js_resources_path route_url end |
#omit_input_attributes ⇒ Object
69 70 71 |
# File 'lib/inertia_rails/generators/helper.rb', line 69 def omit_input_attributes ['id'] + attributes.select { |attribute| attribute. || attribute. }.map(&:column_name) end |
#ts_type(attribute) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/inertia_rails/generators/helper.rb', line 97 def ts_type(attribute) case attribute.type when :float, :decimal, :integer 'number' when :boolean 'boolean' when :attachment '{ filename: string; url: string }' when :attachments '{ filename: string; url: string }[]' else 'string' end end |