Module: InertiaRails::Generators::Helper
- Included in:
- Inertia::Generators::ControllerGenerator, Inertia::Generators::ScaffoldControllerGenerator, ControllerTemplateBase
- Defined in:
- lib/inertia_rails/generators/helper.rb
Constant Summary collapse
- DEFAULT_PACKAGE_PATH =
Rails.root.join('package.json')
Class Method Summary collapse
- .guess_inertia_template(package_json_path = DEFAULT_PACKAGE_PATH) ⇒ Object
- .guess_the_default_framework(package_json_path = DEFAULT_PACKAGE_PATH) ⇒ Object
- .uses_typescript? ⇒ Boolean
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(package_json_path = DEFAULT_PACKAGE_PATH) ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/inertia_rails/generators/helper.rb', line 30 def guess_inertia_template(package_json_path = DEFAULT_PACKAGE_PATH) if package_json_path.read.include?('"tailwindcss"') 'inertia_tw_templates' else 'inertia_templates' end end |
.guess_the_default_framework(package_json_path = DEFAULT_PACKAGE_PATH) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/inertia_rails/generators/helper.rb', line 9 def guess_the_default_framework(package_json_path = DEFAULT_PACKAGE_PATH) 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 |
.uses_typescript? ⇒ Boolean
26 27 28 |
# File 'lib/inertia_rails/generators/helper.rb', line 26 def uses_typescript? Rails.root.join('tsconfig.json').exist? end |
Instance Method Details
#attributes_to_serialize ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/inertia_rails/generators/helper.rb', line 55 def attributes_to_serialize [:id] + attributes.reject do |attribute| attribute.password_digest? || attribute. || attribute. end.map(&:column_name) end |
#custom_form_attributes ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/inertia_rails/generators/helper.rb', line 63 def custom_form_attributes attributes.select do |attribute| attribute.password_digest? || attribute. || attribute. end end |
#default_value(attribute) ⇒ Object
133 134 135 136 137 138 139 140 |
# File 'lib/inertia_rails/generators/helper.rb', line 133 def default_value(attribute) case attribute.type when :boolean 'false' else "''" end end |
#inertia_base_path ⇒ Object
39 40 41 |
# File 'lib/inertia_rails/generators/helper.rb', line 39 def inertia_base_path (class_path + [file_name]).map(&:camelize).join('/') end |
#inertia_component_name ⇒ Object
43 44 45 |
# File 'lib/inertia_rails/generators/helper.rb', line 43 def inertia_component_name singular_name.camelize end |
#inertia_js_version ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/inertia_rails/generators/helper.rb', line 91 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
51 52 53 |
# File 'lib/inertia_rails/generators/helper.rb', line 51 def inertia_model_form_type "#{inertia_component_name}FormType" end |
#inertia_model_type ⇒ Object
47 48 49 |
# File 'lib/inertia_rails/generators/helper.rb', line 47 def inertia_model_type "#{inertia_component_name}Type" end |
#input_type(attribute) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/inertia_rails/generators/helper.rb', line 114 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
79 80 81 |
# File 'lib/inertia_rails/generators/helper.rb', line 79 def js_edit_resource_path "#{route_url}/${#{singular_table_name}.id}/edit" end |
#js_new_resource_path ⇒ Object
83 84 85 |
# File 'lib/inertia_rails/generators/helper.rb', line 83 def js_new_resource_path "#{route_url}/new" end |
#js_resource_path ⇒ Object
75 76 77 |
# File 'lib/inertia_rails/generators/helper.rb', line 75 def js_resource_path "#{route_url}/${#{singular_table_name}.id}" end |
#js_resources_path ⇒ Object
87 88 89 |
# File 'lib/inertia_rails/generators/helper.rb', line 87 def js_resources_path route_url end |
#omit_input_attributes ⇒ Object
71 72 73 |
# File 'lib/inertia_rails/generators/helper.rb', line 71 def omit_input_attributes ['id'] + attributes.select { |attribute| attribute. || attribute. }.map(&:column_name) end |
#ts_type(attribute) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/inertia_rails/generators/helper.rb', line 99 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 |