Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
rom 4.0 is coming
Search
Piotr Solnica
July 09, 2017
Programming
940
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
rom 4.0 is coming
Piotr Solnica
July 09, 2017
More Decks by Piotr Solnica
See All by Piotr Solnica
[KRUG] Architecture. The reclaimed years.
solnic
2
550
rom-rb 4.0 - Moscow, RailsClub 2017
solnic
3
1.3k
Blending Functional and OO programming in Ruby
solnic
22
2.5k
Deep Dive Into ROM
solnic
7
1.3k
Clean Code Cowboy
solnic
4
1.1k
Convenience vs Simplicity
solnic
4
2k
Micro Libraries FTW
solnic
2
690
DataMapper 2 - an object mapping toolkit
solnic
6
1.1k
Beyond the ORM - RuLu Conf 2012
solnic
1
1.6k
Other Decks in Programming
See All in Programming
源内ハンズオン概要編
hideg
0
220
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
310
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
1
2k
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
160
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.8k
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
160
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
My Marp Sample
sinoue0108
0
130
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
Cloudflare is Agents
chimame
0
180
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.3k
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
240
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
450
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Designing Experiences People Love
moore
143
24k
KATA
mclloyd
PRO
35
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
310
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
500
Abbi's Birthday
coloredviolet
3
9.6k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Transcript
ROM-RB 4.0 IS COMING PIOTR SOLNICA >> BRIGHTON RUBY 2017
1
PIOTR SOLNICA > ! Cracow, Poland > github.com/solnic > @_solnic_
> solnic.eu 2
TECH LEAD AT ICELAB 3
WHAT'S ROM-RB? 4
an open-source persistence and mapping toolkit for Ruby built for
speed and simplicity 5
DATABASE-AGNOSTIC, FLEXIBLE, EXTENDIBLE, FAST, SIMPLE 6
FOR REAL ! 7
SOUNDS LIKE SOME CRAZY OBJECT RELATIONAL MAPPER, EH? 8
ROM IS NOT AN ORM 9
WHY DOES IT EVEN EXIST? 10
A TRUE ALTERNATIVE TO ACTIVE RECORD 11
ROM-RB PROVIDES A WAY TO SEPARATE PERSISTENCE CONCERNS FROM APPLICATION
DOMAIN 12
WHAT'S THE DEAL WITH 4.0? 13
RUBYISTS LOVE MAGIC ˾(✿˙ᗜ˙)੭ʓ̤ꚍ.*ꙓꙏꚍ 14
MAGIC AKA: IMPLICIT CODE AKA: EASY TO USE ABSTRACTIONS 15
ACTIVERECORD POSSIBLY THE MOST MAGICAL GEM IN THE UNIVERSE 16
NO BOILERPLATE class User < ActiveRecord::Base end 17
PERSISTENCE, SO SIMPLE user = User.create(name: "Jane") 18
QUERIES, SO SIMPLE User.where(name: "Jane").first 19
MAKING CHANGES, SO SIMPLE User.where(name: "Jane").update_all(name: "Jane Doe") 20
EASE OF USE > Little code to write to get
started > A lot of functionality OOTB > No boilerplate 21
THIS IS A REAL CHALLENGE FOR ROM-RB! 22
> Dynamic query interface > Explicit representation of data structures
> Mapping to struct objects decoupled from the database > No concept of lazy-loadable associations 23
THIS IS FINE 24
WE MADE IT (⊃ꙏ•́‿•̀ꙏ)⊃━☆ꚍ.*ꙓꙏꚍ 25
RELATIONS AND STRUCTS 26
class Users < ROM::Relation[:sql] schema(infer: true) end 27
✅ NO BOILERPLATE 28
users.changeset(:create, name: "Jane").commit # => #<ROM::Struct::User id=1 name="Jane"> 29
✅ PERSISTENCE, SO SIMPLE 30
users.where(name: "Jane").first # => #<ROM::Struct::User id=1 name="Jane"> 31
✅ QUERIES, SO SIMPLE 32
users.where(name: "Jane").changeset(:update, name: "Jane Doe").commit # => #<ROM::Struct::User id=1 name="Jane
Doe"> 33
✅ MAKING CHANGES, SO SIMPLE 34
BUT... 35
users.first # => #<ROM::Struct::User id=1 name="Jane"> users.select(:name).first # => #<ROM::Struct::User
name="Jane"> 36
PEOPLE WANT THEIR OWN METHODS, OBVIOUSLY 37
class User < ActiveRecord::Base def first_name name.split(' ').first end def
last_name name.split(' ').last end end 38
ROM-RB: CUSTOM STRUCT NAMESPACE 39
class Users < ROM::Relation[:sql] struct_namespace Entities schema(infer: true) end 40
class Users < ROM::Relation[:sql] struct_namespace Entities schema(infer: true) end 41
module Entities class User < ROM::Struct def first_name name.split(' ').first
end def last_name name.split(' ').last end end end 42
module Entities class User < ROM::Struct def first_name name.split(' ').first
end def last_name name.split(' ').last end end end 43
user = users.first => #<Entities::User id=1 name="Jane Doe"> user.first_name #
"Jane" user.last_name # "Doe" 44
user = users.select(:name).first => #<Entities::User name="Jane Doe"> user.first_name # "Jane"
user.last_name # "Doe" 45
WHAT DOES THIS MEAN, REALLY? ! 46
THE TRUTH ABOUT MAGIC 47
EXCITEMENT ABOUT MAGIC (AKA HAPPINESS) 48
ROM-RB DOESN'T ENFORCE MAGIC! 49
AT ANY POINT IN TIME YOU CAN DEFINE STRUCTS WITH
EXPLICIT ATTRIBUTES AND ASK ROM-RB TO LOAD THEM 50
require "entities/address" module Entities class UserProfile < ROM::Struct attribute :email,
Types::Strict::String attribute :name, Types::Strict::String attribute :age, Types::Strict::Integer attribute :address, Address end end 51
users.combine(:address).as(:user_profile).first 52
HOWEVER...THIS REQUIRES TIME, AND GOOD UNDERSTANDING OF THE APPLICATION DOMAIN!
53
IT'S A PROCESS, AND ROM-RB FULLY SUPPORTS IT 54
4.0.0.BETA WAS RELEASED A COUPLE WEEKS AGO ! (JUST SAYING!)
55
THANK YOU ! ! GITHUB.COM/ROM-RB/ROM 56