Module: InertiaRails::Generators::Helper

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.guess_inertia_templateObject



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_typescriptObject



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_serializeObject



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.attachment? ||
      attribute.attachments?
  end.map(&:column_name)
end

#custom_form_attributesObject



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.attachment? ||
      attribute.attachments?
  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_pathObject



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_nameObject



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

def inertia_component_name
  singular_name.camelize
end

#inertia_js_versionObject



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_typeObject



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

def inertia_model_form_type
  "#{inertia_component_name}FormType"
end

#inertia_model_typeObject



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_pathObject



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_pathObject



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

def js_new_resource_path
  "#{route_url}/new"
end

#js_resource_pathObject



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_pathObject



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

def js_resources_path
  route_url
end

#omit_input_attributesObject



69
70
71
# File 'lib/inertia_rails/generators/helper.rb', line 69

def omit_input_attributes
  ['id'] + attributes.select { |attribute| attribute.attachment? || attribute.attachments? }.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