No tienes acceso a esta clase

Para ver esta clase necesitas una suscripción a Platzi

Hello world (health endpoint)6/33

**Buenas practicas en Ruby **

Me preguntaba, si en algunos videos nos instan a implementar buenas practicas o las convenciones utilizadas por la comunidad de Ruby y Ruby on Rails, ademas de algunas gemas como rubocop, en las cuales nos indican que se debería utilizar ‘single quotes’ para situaciones donde no debamos interpolar o Ruby no deba hacer una inspeccion del codigo.

Mi pregunta es: porque en el código que estamos escribiendo utilizamos comillas dobles para información que no debemos interpolar o Ruby no debería inspeccionar. Hay alguna convención específica para cuando escribimos tests?

require "rails_helper"

RSpec.describe "Health endpoint", type: :request do

  describe "GET /health" do
    before { get '/health' }

    it "should return OK" do
      payload = JSON.parse(response.body)
      expect(payload).not_to be_empty
      expect(payload['api']).to eq('OK')
    end

    it "should return status code 200" do
      expect(response).to have_http_status(200)
    end
  end
end```

Puede que para algunos no sea claro por qué usa el comando:
RAILS_ENV=test rails c
En vez de usar simplemente
rails c
Y la razón está en el gemfile, en esa consola va a usar la gema FactoryBot, que si recordamos, solo fue definida para el ambiente de test, al correr el rails c solito, abriría una consola del ambente development

group :test do
  gem 'factory_bot_rails', '~> 4.0'
  ...
end

no me funcion el:

have_http_200

tuve que usar:

have_http_status(:ok)

Esto en rails 6

Si a alguien tiene Ruby 3.0.0 con Rails 6, y se le presenta el error:

Error: example.run name is not available from within an example (e.g. an it block) or from constructs that run in the scope of an example (e.g. before, let, etc).

La solución que funcionó para mi fue ir al Gemfile y cambiar la versión de la gema “rspec-rails” de 3.5 a 4.0. Saludos!

Tambien hay una gema muy util para esto health_check

leyendo sobre buenas practicas que sugieren al momento de desarrollar APIs que cumplan el concepto de REST.

Mi duda seria si ya tengo un HealthController y sugiriendo la convención de REST el metodo que de respuesta no quedaria mejor en un metodo index?

health_controller.rb

class HealthController < ApplicationController
  def index
    render json: { api: 'OK' }, status: :ok
  end
end

routes.rb

Rails.application.routes.draw do
  get '/health', to 'health#index'
end

¿Qué opiniones o sugerencias han tenido siguiendo estas convenciones de REST?

Aqui cabe anotar dos cosas:

  1. Que aunque los modelos se definen en singular, las tablas deben ser creadas en plural (users y posts)
  2. Un blog podría tener más tablas, como comentarios o etiquetas.

Genial rspect. cumple con ser auto-documentado 👏

si obtienen un error de tipo

Failure/Error: example.run
name is not available from within an example (e.g. an it block)

actualicen sus gemas de test a la ultima version en mi caso fallaba por que Rspec con versiones <4 en rails 6 tiene problemas

**Buenas practicas en Ruby **

Me preguntaba, si en algunos videos nos instan a implementar buenas practicas o las convenciones utilizadas por la comunidad de Ruby y Ruby on Rails, ademas de algunas gemas como rubocop, en las cuales nos indican que se debería utilizar ‘single quotes’ para situaciones donde no debamos interpolar o Ruby no deba hacer una inspeccion del codigo.

Mi pregunta es: porque en el código que estamos escribiendo utilizamos comillas dobles para información que no debemos interpolar o Ruby no debería inspeccionar. Hay alguna convención específica para cuando escribimos tests?

require "rails_helper"

RSpec.describe "Health endpoint", type: :request do

  describe "GET /health" do
    before { get '/health' }

    it "should return OK" do
      payload = JSON.parse(response.body)
      expect(payload).not_to be_empty
      expect(payload['api']).to eq('OK')
    end

    it "should return status code 200" do
      expect(response).to have_http_status(200)
    end
  end
end```

Puede que para algunos no sea claro por qué usa el comando:
RAILS_ENV=test rails c
En vez de usar simplemente
rails c
Y la razón está en el gemfile, en esa consola va a usar la gema FactoryBot, que si recordamos, solo fue definida para el ambiente de test, al correr el rails c solito, abriría una consola del ambente development

group :test do
  gem 'factory_bot_rails', '~> 4.0'
  ...
end

no me funcion el:

have_http_200

tuve que usar:

have_http_status(:ok)

Esto en rails 6

Si a alguien tiene Ruby 3.0.0 con Rails 6, y se le presenta el error:

Error: example.run name is not available from within an example (e.g. an it block) or from constructs that run in the scope of an example (e.g. before, let, etc).

La solución que funcionó para mi fue ir al Gemfile y cambiar la versión de la gema “rspec-rails” de 3.5 a 4.0. Saludos!

Tambien hay una gema muy util para esto health_check

leyendo sobre buenas practicas que sugieren al momento de desarrollar APIs que cumplan el concepto de REST.

Mi duda seria si ya tengo un HealthController y sugiriendo la convención de REST el metodo que de respuesta no quedaria mejor en un metodo index?

health_controller.rb

class HealthController < ApplicationController
  def index
    render json: { api: 'OK' }, status: :ok
  end
end

routes.rb

Rails.application.routes.draw do
  get '/health', to 'health#index'
end

¿Qué opiniones o sugerencias han tenido siguiendo estas convenciones de REST?

Aqui cabe anotar dos cosas:

  1. Que aunque los modelos se definen en singular, las tablas deben ser creadas en plural (users y posts)
  2. Un blog podría tener más tablas, como comentarios o etiquetas.

Genial rspect. cumple con ser auto-documentado 👏

si obtienen un error de tipo

Failure/Error: example.run
name is not available from within an example (e.g. an it block)

actualicen sus gemas de test a la ultima version en mi caso fallaba por que Rspec con versiones <4 en rails 6 tiene problemas