extracting ruby gem

15
Yura Tolstik Ruby/Rails developer at Altoros Development twitter: @yltsrc email: [email protected]

Upload: yura-tolstik

Post on 15-May-2015

2.091 views

Category:

Self Improvement


0 download

DESCRIPTION

Create ruby gem step by step with bundler

TRANSCRIPT

Page 1: Extracting ruby gem

Yura TolstikRuby/Rails developer at Altoros Development

twitter: @yltsrcemail: [email protected]

Page 2: Extracting ruby gem

Extracting ruby gem

Why?

Reusable codeEasy to installEasy to share

Page 3: Extracting ruby gem

Lets start

Find code duplicationsWrite tests if not exists

Ready?

Page 4: Extracting ruby gem

How to create

creating a gem specification file (mygem.gemspec)and do all things

by hand...

bundle gem mygem

Page 5: Extracting ruby gem

By hand?

Page 6: Extracting ruby gem

mygem.gemspecGem::Specification.new do |s| s.name = "mygem" s.version = Mygem::VERSION s.authors = ["Yura Tolstik"] s.email = ["[email protected]"] s.homepage = "http://github.com/yltsrc/mygem" s.summary = %q{My first gem} s.description = %q{Create ruby gem step by step with bundler} s.license = "MIT"

s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- spec/*`.split("\n") s.require_paths = ["lib"] s.add_development_dependency "rake" s.add_development_dependency "rspec"end

Page 7: Extracting ruby gem

spec_helper.rb

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))$LOAD_PATH.unshift(File.dirname(__FILE__))require 'rspec'require 'newgem'

RSpec.configure do |config| # if neededend

Page 8: Extracting ruby gem

Extract tests

describe "Mygem" do describe "#hello" do it "should return 'Hello world!'" do @base = "" @base.extend(Mygem::Base) @base.hello.should eql("Hello world!") end endend

Page 9: Extracting ruby gem

Extract methods

module Mygem module Base def hello "Hello #{self.empty? ? 'world' : self}!" end endend

Page 10: Extracting ruby gem

Rakefile

require "bundler/gem_tasks"

require 'rspec/core'require 'rspec/core/rake_task'RSpec::Core::RakeTask.new(:spec) do |spec| spec.pattern = FileList['spec/**/*_spec.rb']endtask :default => :spec

Page 11: Extracting ruby gem

Test

rake spec

Page 12: Extracting ruby gem

Build

rake build

or

gem build mygem.gemspec

Page 13: Extracting ruby gem

Publish

rake release

or

gem push mygem-0.0.1.gem

Page 14: Extracting ruby gem

My own gem server

gem help generate_index

gem help server