let's make a gem
DESCRIPTION
Starting from a blank slate let's build, test, and publish a Ruby Gem.TRANSCRIPT
![Page 1: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/1.jpg)
LET'S MAKE A GEM
![Page 2: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/2.jpg)
WHAT IS A GEM?
![Page 3: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/3.jpg)
LET'S MAKE A GEM
1. Creating a Gem with Bundler
![Page 4: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/4.jpg)
LET'S MAKE A GEM
1. Creating a Gem with Bundler2. Testing it with rspec
![Page 5: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/5.jpg)
LET'S MAKE A GEM
1. Creating a Gem with Bundler2. Testing it with rspec
3. Setting up continuous integration
![Page 6: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/6.jpg)
LET'S MAKE A GEM
1. Creating a Gem with Bundler2. Testing it with rspec
3. Setting up continuous integration4. Publishing to Rubygems
![Page 7: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/7.jpg)
LET'S MAKE A GEM
1. Creating a Gem with Bundler2. Testing it with rspec
3. Setting up continuous integration4. Publishing to Rubygems
5. Publishing to a private gem server
![Page 8: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/8.jpg)
1. Creating a Gem
![Page 9: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/9.jpg)
RVMBUNDLER
RUBYGEMS
![Page 10: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/10.jpg)
INITIALIZING OUR GEM$ rvm use 2.1.0$ gem install bundler$ bundle gem eleventh$ cd eleventh$ rvm --rvmrc --create 2.1.0@eleventh$ cd ..; cd -
![Page 11: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/11.jpg)
GENERATED STRUCTURE$ lseleventh|--- README.md|--- eleventh.gemspec|--- Rakefile|--- Gemfile|--- lib |--- eleventh.rb |--- eleventh |--- version.rb
![Page 12: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/12.jpg)
EXPLORING THE GENERATED STRUCTURE$ vim eleventh.gemspec$ vim Gemfile$ vim lib/eleventh.rb$ vim lib/eleventh/version.rb$ rake -T
![Page 13: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/13.jpg)
MAKE IT DO SOMETHING$ vim lib/eleventh/array_access.rb$ vim lib/eleventh.rb$ git add .$ git commit -m "Version 1"
![Page 14: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/14.jpg)
MAKE IT DO SOMETHING# ./lib/eleventh/array_access.rbclass Array def eleventh self[10] endend
# ./lib/eleventh.rbrequire "eleventh/version"require "eleventh/array_access"
module Eleventhend
![Page 15: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/15.jpg)
2. Testing our gem with rspec
![Page 16: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/16.jpg)
TESTING OUR GEM
$ mkdir spec$ vim spec/spec_helper.rb$ vim spec/array_access_spec.rb$ rspec spec/array_access.rb
![Page 17: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/17.jpg)
TESTING OUR GEM
# ./spec/spec_helper.rbrequire 'rubygems'require 'bundler/setup'
Bundler.setup
require 'eleventh'
RSpec.configure do |config|end
![Page 18: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/18.jpg)
TESTING OUR GEM
# ./spec/array_access.rbrequire 'spec_helper'
describe Array do describe '#eleventh' do it 'should return the eleventh element' do arr = (1..15).to_a
arr.eleventh.should eq(11) end
it 'should return nil if the eleventh element not not exist' do arr = (1..9).to_a
arr.eleventh.should eq(nil) end endend
![Page 19: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/19.jpg)
TESTING OUR GEM
$ rspec spec/array_access.rb..Finished in 0.00135 seconds2 examples, 0 failures
![Page 20: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/20.jpg)
TESTING OUR GEM
$ vim Rakefile
# ./Rakefilerequire "bundler/gem_tasks"require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new('spec')
task :default => :spec
![Page 21: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/21.jpg)
TESTING OUR GEM
$ rake/Users/bmorris/.rvm/rubies/ruby-2.1.0-p247/bin/ruby -S rspec ./spec/array_access_spec.rb..
Finished in 0.00066 seconds2 examples, 0 failures
![Page 22: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/22.jpg)
3. Setting up continuous integration
![Page 23: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/23.jpg)
JENKINS
![Page 24: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/24.jpg)
CIRCLE CI
![Page 25: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/25.jpg)
TRAVIS CI
![Page 26: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/26.jpg)
SETTING UP CONTINUOUS INTEGRATION
$ vim travis.yml$ vim eleventh.gemspec$ vim README.md$ vim git commit -m "Setting up Travis CI"$ git push
![Page 27: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/27.jpg)
SETTING UP CONTINUOUS INTEGRATION
# ./travis.yml
language: rubyrvm: - 2.1.0
![Page 28: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/28.jpg)
4. Publishing to Rubygems
![Page 29: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/29.jpg)
PUBLISHING TO RUBYGEMS$ rake -T$ rake release
$ gem build eleventh.gemspec$ gem push eleventh-0.0.1.gem
$ open rubygems.org
![Page 30: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/30.jpg)
TA-DA!
![Page 31: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/31.jpg)
REMOVING THE GEM$ gem yank eleventh -v 0.0.1
![Page 32: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/32.jpg)
5. Publishing to a private gem server
![Page 33: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/33.jpg)
WHY PRIVATE?
![Page 34: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/34.jpg)
GITHUB
![Page 35: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/35.jpg)
GEMINABOX
![Page 36: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/36.jpg)
GEMFURY
![Page 37: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/37.jpg)
PUBLISHING TO GEMFURY
$ gem install gemfury$ gem build eleventh.gemspec$ fury push eleventh-0.0.1.gem
$ git remote add fury https://[email protected]/bnmrrs/eleventh.git$ git push fury master
![Page 38: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/38.jpg)
PUBLISHING TO GEMFURY
$ cd ../other-project$ vim Gemfile
# ../other-project/Gemfilesource 'https://[email protected]/bnmrrs/'
$ bundle install
![Page 39: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/39.jpg)
PUBLISHING A NEW VERSION
$ vim lib/eleventh/version.rb$ gem build eleventh.gemspec$ git add .$ git commit -m "Version 2"$ fury push eleventh-0.0.2.gem$ fury list
![Page 40: Let's Make a Gem](https://reader031.vdocuments.site/reader031/viewer/2022020105/54b707434a79597f4d8b458d/html5/thumbnails/40.jpg)
QUESTIONS?@bnmrrs
www.boltmade.comhttps://github.com/bnmrrs/talks