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
140
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
100
Coercion in Ruby
arnvald
1
180
Writing config files in Ruby
arnvald
0
170
Speaking at RDRC
arnvald
0
170
Read more
arnvald
2
130
Your API is too slow!
arnvald
0
750
International to global
arnvald
0
140
Patterns, patterns everywhere
arnvald
0
160
Nomadic programmer - Baruco 2014 edition
arnvald
0
150
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Accessibility Awareness
sabderemane
1
160
Test your architecture with Archunit
thirion
1
2.3k
Design in an AI World
tapps
1
260
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
370
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
RailsConf 2023
tenderlove
30
1.5k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
57k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
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