Skip to content

Instantly share code, notes, and snippets.

View solnic's full-sized avatar

Peter Solnica solnic

View GitHub Profile
@solnic
solnic / command_composition_in_rom.rb
Last active February 4, 2017 10:17
Upcoming command composition in ROM
require 'rom'
ROM.setup(:memory)
class Users < ROM::Relation[:memory]
end
class Tasks < ROM::Relation[:memory]
end
@solnic
solnic / require_measure.rb
Last active August 29, 2015 14:14
A hack to measure how long it takes to require bundled gems in a rails app
REQUIRE_DATA = {}
BUNDLED_GEMS = `bundle show | grep "*" | awk '{print $2}'`.split("\n").sort
require 'bigdecimal'
def require(name)
start = Time.now
ret = super
stop = Time.now
total = BigDecimal(stop-start, 6)
REQUIRE_DATA[name] = total if BUNDLED_GEMS.include?(name)
@solnic
solnic / gist:9b9deedd7891e2c7ac83
Last active August 19, 2016 08:46
Virtus pg array type for Sequel
module Virtus
class PGArray < Attribute
primitive Sequel::Postgres::PGArray
def primitive
options[:primitive]
end
def coerce(value)
Sequel.pg_array(value)
@solnic
solnic / active-rom.rb
Created January 29, 2015 21:06
ActiveROM ;)
require 'rom-sql'
require 'virtus'
module ActiveRecord
class Base
def self.inherited(klass)
rel_class = Class.new(ROM::Relation[:sql]) {
base_name Inflecto.tableize(klass.name).to_sym
}
dataset = repository.dataset(rel_class.base_name)
require 'rom-sql'
setup = ROM.setup('postgres://localhost/rom')
setup.default.adapter.connection.drop_table?(:users)
setup.default.adapter.connection.drop_table?(:groups)
setup.default.adapter.connection.create_table :groups do
Integer :id
String :name, null: false
gem "rom", github: 'rom-rb/rom', branch: 'master'
gem "rom-sql", github: 'rom-rb/rom-sql', branch: 'master'
gem "rom-rails", github: 'rom-rb/rom-rails', branch: 'master'
gem_group(:test) do
gem "rspec"
gem "rspec-rails"
gem "capybara"
gem "spring-commands-rspec"
end
@solnic
solnic / gist:40edefb0c238f2ef0a1f
Created December 18, 2014 22:30
ROM running with sequel_pg ext VS AR 4.2.0.rc3
Calculating -------------------------------------
[ROM] Loading 1k user objects
29 i/100ms
[AR] Loading 1k user objects
9 i/100ms
-------------------------------------------------
[ROM] Loading 1k user objects
277.2 (±6.5%) i/s - 1392 in 5.040249s
[AR] Loading 1k user objects
111.0 (±9.0%) i/s - 558 in 5.071423s
-- create_table(:users)
-> 0.0039s
LOADED 1000 users via ROM/Sequel
LOADED 1000 users via ActiveRecord
Calculating -------------------------------------
rom.read(:user_json).all.to_a
16 i/100ms
ARUser.all.map(&:as_json)
3 i/100ms
-------------------------------------------------
@solnic
solnic / rom-array-adapter.rb
Created December 13, 2014 00:23
Completely useless Array adapter for ROM because why not
class ArrayAdapter < ROM::Adapter
def self.schemes
[:array]
end
def initialize(uri)
super
@connection = {}
end
@solnic
solnic / virtus_money_ev.rb
Last active August 29, 2015 14:11
Virtus Money EV Example
require 'virtus'
class Money
include Virtus.value_object
values do
attribute :amount, Integer
attribute :currency, String
end
end