Skip to content

Instantly share code, notes, and snippets.

View solnic's full-sized avatar

Peter Solnica solnic

View GitHub Profile
@solnic
solnic / constrained.rb
Last active December 10, 2015 13:30
Type-safe struct with constraints vs ActiveRecord instantiation
require 'dry-data'
require 'dry/data/type/constrained'
require 'active_record'
require 'benchmark/ips'
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
ActiveRecord::Schema.define do
create_table :users do |table|
@solnic
solnic / active-model-validations-vs-dry-validation.txt
Last active December 7, 2015 20:12
ActiveModel/ActionController::Parameters vs Dry::Validation::Schema
Calculating -------------------------------------
ActiveModel::Validations
134.000 i/100ms
dry-validation 2.145k i/100ms
-------------------------------------------------
ActiveModel::Validations
1.499k (±11.5%) i/s - 7.504k
dry-validation 22.300k (±10.5%) i/s - 111.540k
Comparison:
@solnic
solnic / am_dry_validation_1.rb
Last active May 21, 2022 13:42
dry-validation vs activemodel
require 'benchmark/ips'
require 'active_model'
require 'virtus'
require 'dry-validation'
require 'dry/validation/schema/form'
class User
include ActiveModel::Validations
include Virtus.model
@solnic
solnic / output.txt
Last active November 12, 2015 14:52
many-to-many with rom repo
I, [2015-11-11T18:21:57.978652 #52590] INFO -- : (0.000162s) CREATE TABLE `users` (`id` integer NOT NULL PRIMARY KEY AUTOINCREMENT, `name` varchar(255))
I, [2015-11-11T18:21:57.978842 #52590] INFO -- : (0.000069s) CREATE TABLE `groups` (`id` integer NOT NULL PRIMARY KEY AUTOINCREMENT, `name` varchar(255))
I, [2015-11-11T18:21:57.979020 #52590] INFO -- : (0.000062s) CREATE TABLE `users_groups` (`user_id` integer REFERENCES `users`, `group_id` integer REFERENCES `groups`)
I, [2015-11-11T18:21:57.979194 #52590] INFO -- : (0.000039s) INSERT INTO `users` (`id`, `name`) VALUES (1, 'Jane')
I, [2015-11-11T18:21:57.979321 #52590] INFO -- : (0.000027s) INSERT INTO `groups` (`id`, `name`) VALUES (1, 'Admins')
I, [2015-11-11T18:21:57.979398 #52590] INFO -- : (0.000025s) INSERT INTO `groups` (`id`, `name`) VALUES (2, 'Editors')
I, [2015-11-11T18:21:57.979486 #52590] INFO -- : (0.000025s) INSERT INTO `users_groups` (`user_id`, `group_id`) VALUES (1, 1)
I, [2015-11-11T18:21:57.979558 #52590] INFO -- : (0.000026s) IN
@solnic
solnic / bench.rb
Created November 10, 2015 17:31
Rodakase template rendering vs link_to helper from ActionView
class ActionRender
include ActionView::Helpers
def button
link_to('User', '/users/1')
end
end
action_renderer = ActionRender.new
rodakase_renderer = Rodakase::View::Renderer.new(Pathname(__FILE__).dirname.join('templates'), engine: :erb)
# WHAT'S POSSIBLE ALREADY
class User
include Virtus.model
attribute :id
attribute :name
attribute :email
end
class UserMapper
require 'rom'
require 'rom-http'
require 'rom-repository'
require 'json'
require 'uri'
require 'net/http'
class RequestHandler
def call(dataset)
uri = URI(dataset.uri)
irb(main):001:0> A = Module.new
=> A
irb(main):002:0> B = Module.new
=> B
irb(main):003:0> C = Class.new
=> C
irb(main):004:0> D = Class.new(C) { include A, B }
=> D
irb(main):005:0> D < C
=> true
require 'rom'
require 'rom-rails'
`rm -Rf /tmp/romtest.sqlite`
ROM.setup(:sql, 'sqlite:///tmp/romtest.sqlite')
class Events < ROM::Relation[:sql]
end
class Organisers < ROM::Relation[:sql]
@solnic
solnic / anima_vs_virtus.rb
Last active December 11, 2017 23:33
Anima + Transproc vs Virtus
require 'anima'
require 'transproc'
require 'virtus'
require 'benchmark/ips'
USERS = 1000.times.map { |i| { id: "#{i+1}", name: "User #{i+1}", age: "#{(i+1)*2}" } }
module Mappings