blackchestnut / blackchestnut.github.io

Developer notes about Ruby on Rails, React Native, PostgreSQL, etc.
https://kalinichev.net
4 stars 0 forks source link

Rails new app API only with PostgreSQL & rspec #47

Open blackchestnut opened 11 months ago

blackchestnut commented 11 months ago
rails new YOUR_APP_NAME --api --database=postgresql --skip-test --skip-action-cable --skip-action-mailer --skip-javascript

rails db:create

Update Gemfile


# ...

group :development do

...

gem 'rubocop-rails', require: false gem 'guard' gem 'guard-bundler', require: false gem 'guard-pow', require: false gem 'guard-rspec', require: false gem 'guard-rubocop', require: false gem 'guard-spring', require: false

gem 'better_errors' gem 'binding_of_caller' gem 'listen' gem 'spring' end

group :test do gem 'rspec-collection_matchers' gem 'rspec-its' gem 'rspec-rails' gem 'rspec_junit_formatter' gem 'shoulda' gem 'shoulda-matchers' gem 'timecop' gem 'vcr' gem 'webmock', require: false end

...


> Install rspec
```sh
rails generate rspec:install
blackchestnut commented 11 months ago

Guardfile example

Guardfile


ignore %r{
bin | public | node_modules | tmp | .git
}x

guard :bundler do watch('Gemfile') watch('Gemfile.lock') end

group :specs, halt_on_fail: true do guard :rspec, cmd: 'bundle exec rspec --color --format documentation', all_after_pass: false, all_on_start: false, failed_mode: :keep do require "guard/rspec/dsl" dsl = Guard::RSpec::Dsl.new(self)

# Feel free to open issues for suggestions and improvements

# RSpec files
rspec = dsl.rspec
# watch(rspec.spec_helper) { rspec.spec_dir }
# watch(rspec.spec_support) { rspec.spec_dir }
watch(rspec.spec_files)

# Ruby files
ruby = dsl.ruby
dsl.watch_spec_files_for(ruby.lib_files)

# Rails files
rails = dsl.rails(view_extensions: %w(erb haml slim))
dsl.watch_spec_files_for(rails.app_files)
dsl.watch_spec_files_for(rails.views)

watch(rails.controllers) do |m|
  [
    rspec.spec.call("routing/#{m[1]}_routing"),
    rspec.spec.call("controllers/#{m[1]}_controller"),
    rspec.spec.call("acceptance/#{m[1]}")
  ]
end

# Rails config changes
# watch(rails.spec_helper)     { rspec.spec_dir }
watch(rails.routes)          { "#{rspec.spec_dir}/routing" }
watch(rails.app_controller)  { "#{rspec.spec_dir}/controllers" }

# Capybara features specs
watch(rails.view_dirs)     { |m| rspec.spec.call("features/#{m[1]}") }
watch(rails.layouts)       { |m| rspec.spec.call("features/#{m[1]}") }

# Turnip features and steps
watch(%r{^spec/acceptance/(.+)\.feature$})
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
  Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
end

end

guard :rubocop, all_on_start: false, keep_failed: false do watch(%r{.+.rb$}) watch(%r{(?:.+/)?.rubocop.yml$}) { |m| File.dirname(m[0]) } end end

guard :pow do watch '.powrc' watch '.powenv' watch '.rvmrc' watch 'Gemfile' watch 'Gemfile.lock' watch 'config/application.rb' watch 'config/environment.rb' watch %r{^config/environments/..rb$} watch %r{^config/initializers/..rb$} watch %r{^config/middleware/.*.rb$} end