Skip to content

Instantly share code, notes, and snippets.

require 'active_support/all'
module UnderwritingService
extend self
PolicyMeta = Struct.new(:product_type, :public_id, :status)
def policies_metas(user_id:)
UserPoliciesRegistry.all.flat_map do |provider|
provider.of_user(user_id:user_id).map { |policy|
PolicyMeta.new(provider.product_type, provider.public_id(policy), provider.status(policy))
@kinnrot
kinnrot / mock_spec.rb
Created May 11, 2020 18:24
Sample of mock leak between specs
require 'spec_helper'
require "rspec/mocks/standalone" #spec/helpers.rb spec/helpers.rb:1 - without this line rspec prevents us from using mocks in context
class Box
attr_reader :color
def initialize
@color = Color.new
end
end
@kinnrot
kinnrot / coroutines_scale_out.rb
Created September 5, 2017 16:58
Implement distributed workflow over delayed job mongoid
class JobListItem
include Mongoid::Document
include Mongoid::Timestamps::Created
belongs_to :next_job, :class_name => "JobListItem", :inverse_of => :prev_job, optional: true
has_one :prev_job, :class_name => "JobListItem", :inverse_of => :next_job
NONE=0
RUNNING = 1
FINISHED = 2
@kinnrot
kinnrot / await_execute.rb
Created August 27, 2017 06:57
asynchronous awaited execution in event machine
def execute_awaited
fiber = Fiber.current
execute # run some non blocking code (return immidiatly)
self.callback do |response|
EventMachine.schedule do
fiber.resume response
end
end
self.errback do |err|
EventMachine.schedule do
@kinnrot
kinnrot / in_process_job.rb
Created May 12, 2017 11:35
encapsulate sucker punch queueing to act same as delayed job or any other async task runner
class InProcessJob
unless Rails.env.test?
include SuckerPunch::Job
workers 1
end
include Job::Deserializers
include Job::Serializers
def self.queue_as(_)
end