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
The simplest gem you'll ever use
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Grzegorz Witek
February 25, 2016
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The simplest gem you'll ever use
Grzegorz Witek
February 25, 2016
More Decks by Grzegorz Witek
See All by Grzegorz Witek
One Year with Hanami
arnvald
0
97
Coercion in Ruby
arnvald
1
180
Writing config files in Ruby
arnvald
0
160
Speaking at RDRC
arnvald
0
170
Read more
arnvald
2
130
Your API is too slow!
arnvald
0
740
International to global
arnvald
0
130
Patterns, patterns everywhere
arnvald
0
150
Nomadic programmer - Baruco 2014 edition
arnvald
0
140
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
700
Rails Girls Zürich Keynote
gr2m
96
14k
HDC tutorial
michielstock
2
700
Paper Plane
katiecoart
PRO
1
51k
Documentation Writing (for coders)
carmenintech
77
5.4k
Transcript
The simplest gem you’ll ever use @arnvald, 2016
The simplest (shortest) gems • activesupport-json_encoder (~200 LOC) • rails-patch-json-encode
(~35 LOC) • oj_mimic_json (10 LOC - without comments would fit into a tweet)
So I wrote a gem • gem ‘simple_operation’ • version
0.1.2 - 33 LOC • version 1.0.0 - 42 LOC (2 new features!) • ok, ok, it’s not the simplest gem ever (but close!)
Services / Actions / Operations • operation class is a
class that performs a set of steps • it has input (parameters) and output (result) • it has one public method • its name is a verb • it does not keep any state
Example - validate records class SelectValidRecords < SimpleOperation.new(:records) def call
records.select {|r| valid?(r) } end private def valid?(record); …; end end ValidateRecords.([invalid, invalid2, valid]) # => [valid]
Example - validate records class ValidateRecords < SimpleOperation.new(:records) result :valid_records,
:invalid_records def call split_records = records.group_by {|r| valid?(r)} result split_records[true], split_records[false] end private def valid?(record); …; end end ValidateRecords.([invalid, invalid2, valid]) # => <struct valid_records=[valid], invalid_records=[invalid,invalid2]>
Let’s see the code
Ruby “tricks” used • overriding Class.new • using class_eval •
using class name as a method name (in extension) • assigning class to a constant • using sugar syntax for call method
Resources • http://trailblazer.to/gems/operation/ • https://github.com/arnvald/simple_operation
We’re hiring! http://bit.do/kaligo-dev
Questions?
The simplest gem you’ll ever use @arnvald, 2016