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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Piotr Solnica
July 09, 2017
Programming
930
3
Share
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
540
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
670
DataMapper 2 - an object mapping toolkit
solnic
6
1.1k
Beyond the ORM - RuLu Conf 2012
solnic
1
1.5k
Other Decks in Programming
See All in Programming
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
2
990
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
190
AIエージェントの隔離技術の徹底比較
kawayu
0
440
net-httpのHTTP/2対応について
naruse
0
300
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
130
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
240
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
250
Sans tests, vos agents ne sont pas fiables
nabondance
0
170
色即是空、空即是色、データサイエンス
kamoneggi
1
200
OSもどきOS
arkw
0
270
TSKaigi2026-静的解析への投資がAI時代のコード品質を支える ── カスタムESLintルールの設計と運用
hayatokudou
6
1.3k
Transactional Change Stream Processing With Debezium and Apache Flink
gunnarmorling
1
140
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
290
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
380
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
170
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
520
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
160
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
370
The Curious Case for Waylosing
cassininazir
1
360
The browser strikes back
jonoalderson
0
1.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
580
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