Let's Make a Gem

40
LET'S MAKE A GEM

description

Starting from a blank slate let's build, test, and publish a Ruby Gem.

Transcript of Let's Make a Gem

Page 1: Let's Make a Gem

LET'S MAKE A GEM

Page 2: Let's Make a Gem

WHAT IS A GEM?

Page 3: Let's Make a Gem

LET'S MAKE A GEM

1. Creating a Gem with Bundler

Page 4: Let's Make a Gem

LET'S MAKE A GEM

1. Creating a Gem with Bundler2. Testing it with rspec

Page 5: Let's Make a Gem

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

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

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

1. Creating a Gem

Page 9: Let's Make a Gem

RVMBUNDLER

RUBYGEMS

Page 10: Let's Make a Gem

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

GENERATED STRUCTURE$ lseleventh|--- README.md|--- eleventh.gemspec|--- Rakefile|--- Gemfile|--- lib |--- eleventh.rb |--- eleventh |--- version.rb

Page 12: Let's Make a Gem

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

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

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

2. Testing our gem with rspec

Page 16: Let's Make a Gem

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

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

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

TESTING OUR GEM

$ rspec spec/array_access.rb..Finished in 0.00135 seconds2 examples, 0 failures

Page 20: Let's Make a Gem

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

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

3. Setting up continuous integration

Page 23: Let's Make a Gem

JENKINS

Page 24: Let's Make a Gem

CIRCLE CI

Page 25: Let's Make a Gem

TRAVIS CI

Page 26: Let's Make a Gem

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

SETTING UP CONTINUOUS INTEGRATION

# ./travis.yml

language: rubyrvm: - 2.1.0

Page 28: Let's Make a Gem

4. Publishing to Rubygems

Page 29: Let's Make a Gem

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

TA-DA!

Page 31: Let's Make a Gem

REMOVING THE GEM$ gem yank eleventh -v 0.0.1

Page 32: Let's Make a Gem

5. Publishing to a private gem server

Page 33: Let's Make a Gem

WHY PRIVATE?

Page 34: Let's Make a Gem

GITHUB

Page 35: Let's Make a Gem

GEMINABOX

Page 36: Let's Make a Gem

GEMFURY

Page 37: Let's Make a Gem

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

PUBLISHING TO GEMFURY

$ cd ../other-project$ vim Gemfile

# ../other-project/Gemfilesource 'https://[email protected]/bnmrrs/'

$ bundle install

Page 39: Let's Make a Gem

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

QUESTIONS?@bnmrrs

www.boltmade.comhttps://github.com/bnmrrs/talks