Class: Nextgen::RailsOptions

Inherits:
Object
  • Object
show all
Defined in:
lib/nextgen/rails_options.rb

Constant Summary collapse

DATABASES =
%w[
  postgresql
  mysql
  trilogy
  sqlite3
  oracle
  sqlserver
  jdbcmysql
  jdbcsqlite3
  jdbcpostgresql
  jdbc
].freeze
TEST_FRAMEWORKS =
%w[minitest rspec].freeze
ASSET_PIPELINES =
%w[sprockets propshaft].freeze
OPTIONAL_FRAMEWORKS =
%w[
  action_mailer
  action_mailbox
  action_text
  active_job
  active_storage
  action_cable
  hotwire
  jbuilder
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRailsOptions

Returns a new instance of RailsOptions.



33
34
35
36
37
38
39
# File 'lib/nextgen/rails_options.rb', line 33

def initialize
  @api = false
  @edge = false
  @skip_frameworks = []
  @skip_system_test = false
  @test_framework = "minitest"
end

Instance Attribute Details

#asset_pipelineObject

Returns the value of attribute asset_pipeline.



31
32
33
# File 'lib/nextgen/rails_options.rb', line 31

def asset_pipeline
  @asset_pipeline
end

#cssObject

Returns the value of attribute css.



31
32
33
# File 'lib/nextgen/rails_options.rb', line 31

def css
  @css
end

#databaseObject

Returns the value of attribute database.



31
32
33
# File 'lib/nextgen/rails_options.rb', line 31

def database
  @database
end

#javascriptObject

Returns the value of attribute javascript.



31
32
33
# File 'lib/nextgen/rails_options.rb', line 31

def javascript
  @javascript
end

#test_frameworkObject

Returns the value of attribute test_framework.



31
32
33
# File 'lib/nextgen/rails_options.rb', line 31

def test_framework
  @test_framework
end

Instance Method Details

#action_mailer?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/nextgen/rails_options.rb', line 151

def action_mailer?
  !skip_optional_framework?("action_mailer")
end

#active_job?Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/nextgen/rails_options.rb', line 155

def active_job?
  !skip_optional_framework?("active_job")
end

#active_record?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'lib/nextgen/rails_options.rb', line 123

def active_record?
  !skip_active_record?
end

#api!Object

Raises:

  • (ArgumentError)


100
101
102
103
104
105
# File 'lib/nextgen/rails_options.rb', line 100

def api!
  raise ArgumentError, "Can't specify API mode if css is already specified" if css
  raise ArgumentError, "Can't specify API mode if javascript is already specified" if javascript

  @api = true
end

#api?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/nextgen/rails_options.rb', line 107

def api?
  @api
end

#edge!Object



92
93
94
# File 'lib/nextgen/rails_options.rb', line 92

def edge!
  @edge = true
end

#edge?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/nextgen/rails_options.rb', line 96

def edge?
  @edge
end

#frontend?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/nextgen/rails_options.rb', line 111

def frontend?
  !api?
end

#postgresql?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/nextgen/rails_options.rb', line 78

def postgresql?
  database == "postgresql"
end

#requires_node?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/nextgen/rails_options.rb', line 115

def requires_node?
  %w[bootstrap bulma postcss sass].include?(css) || %w[webpack esbuild rollup vite].include?(javascript)
end

#rspec?Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/nextgen/rails_options.rb', line 119

def rspec?
  @test_framework == "rspec"
end

#skip_active_record?Boolean

Returns:

  • (Boolean)


127
128
129
# File 'lib/nextgen/rails_options.rb', line 127

def skip_active_record?
  defined?(@database) && @database.nil?
end

#skip_asset_pipeline?Boolean

Returns:

  • (Boolean)


131
132
133
# File 'lib/nextgen/rails_options.rb', line 131

def skip_asset_pipeline?
  defined?(@asset_pipeline) && @asset_pipeline.nil?
end

#skip_javascript?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/nextgen/rails_options.rb', line 68

def skip_javascript?
  defined?(@javascript) && @javascript.nil?
end

#skip_optional_framework!(framework) ⇒ Object

Raises:

  • (ArgumentError)


159
160
161
162
163
# File 'lib/nextgen/rails_options.rb', line 159

def skip_optional_framework!(framework)
  raise ArgumentError, "Unknown framework: #{framework}" unless OPTIONAL_FRAMEWORKS.include?(framework)

  skip_frameworks << framework
end

#skip_optional_framework?(framework) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


165
166
167
168
169
# File 'lib/nextgen/rails_options.rb', line 165

def skip_optional_framework?(framework)
  raise ArgumentError, "Unknown framework: #{framework}" unless OPTIONAL_FRAMEWORKS.include?(framework)

  skip_frameworks.include?(framework)
end

#skip_system_test!Object



135
136
137
# File 'lib/nextgen/rails_options.rb', line 135

def skip_system_test!
  @skip_system_test = true
end

#skip_system_test?Boolean

Returns:

  • (Boolean)


139
140
141
# File 'lib/nextgen/rails_options.rb', line 139

def skip_system_test?
  @skip_system_test
end

#skip_test?Boolean

Returns:

  • (Boolean)


143
144
145
# File 'lib/nextgen/rails_options.rb', line 143

def skip_test?
  defined?(@test_framework) && [nil, "rspec"].include?(@test_framework)
end

#system_testing?Boolean

Returns:

  • (Boolean)


147
148
149
# File 'lib/nextgen/rails_options.rb', line 147

def system_testing?
  !(api? || test_framework.nil? || skip_system_test?)
end

#test_framework?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/nextgen/rails_options.rb', line 88

def test_framework?
  !!@test_framework
end

#to_argsObject

rubocop:disable Metrics/PerceivedComplexity



171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/nextgen/rails_options.rb', line 171

def to_args # rubocop:disable Metrics/PerceivedComplexity
  [].tap do |args|
    args << "--edge" if edge?
    args << "--api" if api?
    args << "--skip-active-record" if skip_active_record?
    args << "--skip-asset-pipeline" if skip_asset_pipeline?
    args << "--skip-javascript" if skip_javascript?
    args << "--skip-test" if skip_test?
    args << "--skip-system-test" if skip_system_test?
    args << "--asset-pipeline=#{asset_pipeline}" if asset_pipeline
    args << "--database=#{database}" if database
    args << "--css=#{css}" if css
    args << "--javascript=#{javascript}" if javascript
    args.push(*skip_frameworks.map { "--skip-#{_1.tr("_", "-")}" })
  end
end

#vite?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/nextgen/rails_options.rb', line 64

def vite?
  @javascript == "vite"
end