Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Creating a Gem
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Jeff Felchner
March 22, 2013
Technology
140
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Creating a Gem
Jeff Felchner
March 22, 2013
More Decks by Jeff Felchner
See All by Jeff Felchner
Rails Engines as an SOA Middle Ground
jfelchner
1
530
Advanced and Intermediate Git
jfelchner
1
91
Rails Templates
jfelchner
1
87
Other Decks in Technology
See All in Technology
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
320
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
110
Railsのように考える: See through the Master
snoozer05
PRO
3
890
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
22
14k
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.8k
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
2
1.6k
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
150
CLIライブラリ開発を支える技術
htnabe
0
120
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
1
530
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
160
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
270
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
1.6k
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Ethics towards AI in product and experience design
skipperchong
2
370
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
650
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Balancing Empowerment & Direction
lara
6
1.3k
Test your architecture with Archunit
thirion
2
2.4k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Transcript
Creating Your First Gem
What?
Does One Thing Well
Why?
Programming is hard.
Programming well is really hard.
The Problem
Naming
The First Rule
Name It Something Clever
The Second Rule
Don’t Take One Of My Names
None
615.555.1234
None
The Third Rule
Don’t Be Inappropriate
Don't name it something sexual.
Don't name it something misogynistic
Don't name it after crude words for your anatomy
F&%#
None
Why Listen To Me?
rspectacular null_and_void bangers_and_hash envision dolla_dolla_bill stipend use_the_forcible referehencible molten_core dynamo
johnny_five i_am_valid oscillator chronological greenwich get_together enwrap pinpoint chicken_soup apple_cart ruby-progressbar
Our Example
None
“Translating pig latin is fun”.to_pig_latin # => “anslating-tray ig-pay atin-lay
is-ay un-fay”
None
Creating Your Gem
Jewler
Hoe
Bundler
</disclaimer>
gem install bundler bundle gem pope_francis
create pope_francis/Gemfile create pope_francis/Rakefile create pope_francis/LICENSE.txt create pope_francis/README.md create pope_francis/.gitignore
create pope_francis/pope_francis.gemspec create pope_francis/lib/pope_francis.rb create pope_francis/lib/pope_francis/version.rb
create pope_francis/Gemfile create pope_francis/Rakefile create pope_francis/LICENSE.txt create pope_francis/README.md create pope_francis/.gitignore
create pope_francis/pope_francis.gemspec create pope_francis/lib/pope_francis.rb create pope_francis/lib/pope_francis/version.rb
Gem::Specification.new do |gem| gem.name = "pope_francis" gem.version = PopeFrancis::VERSION gem.authors
= ["Jeff Felchner"] gem.email = ["
[email protected]
"] gem.description = %q{TODO: Write a gem description} gem.summary = %q{TODO: Write a gem summary} gem.homepage = "" end
Gem::Specification.new do |gem| gem.name = "pope_francis" gem.version = PopeFrancis::VERSION gem.authors
= ["Jeff Felchner"] gem.email = ["
[email protected]
"] gem.description = %q{ig-pay atin-lay anslator-tray} gem.summary = %q{The one-stop shop for your Pig Latin needs} gem.homepage = "http://github.com/jfelchner/pope_francis" end
Releasing Your Gem
Sign Up on rubygems.org
None
Add Your Gem to Github (optional)
None
rake release
pope_francis 0.0.1 built to pkg/ pope_francis-0.0.1.gem Tagged v0.0.1 Pushed git
commits and tags Pushed pope_francis 0.0.1 to rubygems.org
None
Versioning
Use Semantic Versioning (http://semver.org)
x.y.z Major . Minor . Patch (eg 1.8.4)
Your Gem’s Version
pope_francis/lib/pope_francis/version.rb
module PopeFrancis VERSION = "0.0.1" end
arning-way! Pushing The Same Version Twice Will Fail
> gem push pkg/pope_francis-0.0.1.gem Pushing gem to https://rubygems.org... Repushing of
gem versions is not allowed. Please use `gem yank` to remove bad gem releases.
Yanking Releases
> gem install gemcutter > gem yank pope_francis -v 0.0.1
Yanking gem from RubyGems.org... Pushing gem to https://rubygems.org... Successfully yanked gem: pope_francis (0.0.1)
None
> gem install pope_francis ERROR: Could not find a valid
gem 'pope_francis' (>= 0) in any repository ERROR: Possible alternatives: francis, tolerances
README Driven Development
Waaaaaaiiiiiiiiiiiiitttttttttt a second.....
Your Public API = Your Version
Your Public API is the most important thing when developing
a gem.
None
Write the Code
Fast Forward
pope_francis/lib/pope_francis.rb
require ‘pope_francis’
require ‘pope_francis’ while english_phrase = gets do puts english_phrase.to_pig_latin end
Hacking On It
Fork the Gem
https://github.com/jfelchner/pope_francis
Rename the Gem in Your Fork
pope_francis-nash-rails
pope_francis-nash-rails-jfelchner
Using It In Another Project
gem install pope_francis-nash-rails-jfelchner
require ‘pope_francis’
require ‘pope_francis-nash-rails-jfelchner’
Exercises
Additional Options
“Translating pig latin is fun” .to_pig_latin(:hyphenate => false) # =>
“anslatingtray igpay atinlay isway unfay”
Preserve Capitalization
“Translating Pig Latin is fun”.to_pig_latin # => “Anslating-tray Ig-pay Atin-lay
is-way un-fay”
Rails App
None
Thanks! Jeff Felchner @jfelchner