Skip to content

Instantly share code, notes, and snippets.

@groony
groony / build_stubbed_ex.rb
Created July 3, 2018 07:49
build_stubbed
# Bad
describe User, type: :model do
it do
expect(create(:user)).to be_valid
end
end
# Good
@groony
groony / let_it_be_ex.rb
Last active July 3, 2018 07:46
let_it_be
require 'rails_helper'
RSpec.describe User, type: :model do
context 'let!' do
let!(:paul) { create(:user, first_name: 'Paul') }
let!(:ringo) { create(:user, first_name: 'Ringo') }
let!(:george) { create(:user, first_name: 'George') }
let!(:john) { create(:user, first_name: 'John') }
it { expect(paul.first_name).to eq('Paul') }
@groony
groony / shared_contexts.rb
Created July 3, 2018 06:27
shared context user
RSpec.shared_context 'user', user: true do
using TestProf::AnyFixture::DSL
before(:all) do
@user = fixture(:user) { create(:user) }
end
let(:user) { @user }
end
@groony
groony / type_validation.rb
Created July 2, 2018 12:11
type validation
schema = Dry::Validation.Schema(Dry::Validation::Schema::Params) do
required(:email).filled(:str?)
end
schema.(email: true).success? # => false
schema.(email: true).messages # => {:email=>["must be a string"]}
@groony
groony / high_level_rules_ex3.rb
Created July 2, 2018 11:48
high level rules ex3
schema = Dry::Validation.Schema(Dry::Validation::Schema::Params) do
configure do
option :user
def email_confirmed?(value)
# your code
end
def authenticated?(value)
# your code
@groony
groony / high_level_rule_ex2.rb
Last active July 2, 2018 11:47
high level rules order
schema = Dry::Validation.Schema(Dry::Validation::Schema::Params) do
configure do
option :user
def exists?(value)
# your code
end
def free?(uid, value)
# your code
@groony
groony / sso_controller.rb
Created July 2, 2018 10:15
controller example
module Api
module V1
class SsoController < ApiController
before_action :authenticate
def show
service = ::Sso::Show.new(params_h.merge(current_user: current_user))
service.execute!
if service.success?
render json: ::V1::SsoSerializer.new(current_user)
@groony
groony / sso_show.rb
Created July 2, 2018 10:13
service object example
module Sso
class Show < ApplicationService
schema do
required(:sso).filled(:str?)
required(:sig).filled(:str?)
end
def execute!
current_user.build_sso_url(query_string)
success!
@groony
groony / error_messages_namespace_per_schema.rb
Created July 2, 2018 09:19
example error messages namespace per schema
schema = Dry::Validation.Schema(Dry::Validation::Schema::Params) do
configure { config.namespace = :user }
end
@groony
groony / high_level_rules.rb
Created July 2, 2018 09:14
high level rules example
schema = Dry::Validation.Schema(Dry::Validation::Schema::Params) do
optional(:password).maybe(:str?, min_size?: 6)
optional(:identity_id).maybe(:int?)
rule(password_or_identity_id_filled: %i[password identity_id]) do |password, identity_id|
password.filled? | identity_id.filled?
end
end