Module: InertiaRails::Generators::Helper

Constant Summary collapse

DEFAULT_PACKAGE_PATH =
Rails.root.join('package.json')

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.guess_inertia_template(package_json_path = DEFAULT_PACKAGE_PATH) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/inertia_rails/generators/helper.rb', line 29

def guess_inertia_template(package_json_path = DEFAULT_PACKAGE_PATH)
  return 'inertia_templates' unless package_json_path.exist?

  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
# 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']
    'svelte'
  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

Returns:

  • (Boolean)


25
26
27
# File 'lib/inertia_rails/generators/helper.rb', line 25

def uses_typescript?
  Rails.root.join('tsconfig.json').exist?
end

Instance Method Details

#attributes_to_serializeObject



57
58
59
60
61
62
63
# File 'lib/inertia_rails/generators/helper.rb', line 57

def attributes_to_serialize
  [:id] + attributes.reject do |attribute|
    attribute.password_digest? ||
      attribute.attachment? ||
      attribute.attachments?
  end.map(&:column_name)
end

#custom_form_attributesObject



65
66
67
68
69
70
71
# File 'lib/inertia_rails/generators/helper.rb', line 65

def custom_form_attributes
  attributes.select do |attribute|
    attribute.password_digest? ||
      attribute.attachment? ||
      attribute.attachments?
  end
end

#default_value(attribute) ⇒ Object



127
128
129
130
131
132
133
134
# File 'lib/inertia_rails/generators/helper.rb', line 127

def default_value(attribute)
  case attribute.type
  when :boolean
    'false'
  else
    "''"
  end
end

#inertia_base_pathObject

Matches controller_path, which the default component path resolver expects.



41
42
43
# File 'lib/inertia_rails/generators/helper.rb', line 41

def inertia_base_path
  (class_path + [file_name]).join('/')
end

#inertia_component_nameObject



45
46
47
# File 'lib/inertia_rails/generators/helper.rb', line 45

def inertia_component_name
  singular_name.camelize
end

#inertia_model_form_typeObject



53
54
55
# File 'lib/inertia_rails/generators/helper.rb', line 53

def inertia_model_form_type
  "#{inertia_component_name}FormType"
end

#inertia_model_typeObject



49
50
51
# File 'lib/inertia_rails/generators/helper.rb', line 49

def inertia_model_type
  "#{inertia_component_name}Type"
end

#input_type(attribute) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/inertia_rails/generators/helper.rb', line 108

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_pathObject



81
82
83
# File 'lib/inertia_rails/generators/helper.rb', line 81

def js_edit_resource_path
  "#{route_url}/${#{singular_table_name}.id}/edit"
end

#js_new_resource_pathObject



85
86
87
# File 'lib/inertia_rails/generators/helper.rb', line 85

def js_new_resource_path
  "#{route_url}/new"
end

#js_resource_pathObject



77
78
79
# File 'lib/inertia_rails/generators/helper.rb', line 77

def js_resource_path
  "#{route_url}/${#{singular_table_name}.id}"
end

#js_resources_pathObject



89
90
91
# File 'lib/inertia_rails/generators/helper.rb', line 89

def js_resources_path
  route_url
end

#omit_input_attributesObject



73
74
75
# File 'lib/inertia_rails/generators/helper.rb', line 73

def omit_input_attributes
  ['id'] + attributes.select { |attribute| attribute.attachment? || attribute.attachments? }.map(&:column_name)
end

#ts_type(attribute) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/inertia_rails/generators/helper.rb', line 93

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