Skip to content

Instantly share code, notes, and snippets.

@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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / factory_cascade_ex.rb
Created July 3, 2018 07:57
factory_cascade_ex
factory :account do
end
factory :user do
account
end
factory :project do
account
user
let(:account) { create(:account) }
let(:project) { create(:project, account: account) }
let(:task) { create(:task, project: project, account: account) }