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
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
110
Coercion in Ruby
arnvald
1
180
Writing config files in Ruby
arnvald
0
170
Speaking at RDRC
arnvald
0
170
Read more
arnvald
2
140
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
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
430
Raft: Consensus for Rubyists
vanstee
141
7.6k
Everyday Curiosity
cassininazir
0
280
Writing Fast Ruby
sferik
630
63k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Chasing Engaging Ingredients in Design
codingconduct
0
270
Code Reviewing Like a Champion
maltzj
528
40k
Docker and Python
trallard
47
4.1k
How to Ace a Technical Interview
jacobian
281
24k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
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