Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Cut and Polish A Guide to Crafting Gems
Slide 2
Slide 2 text
Pat Allan @pat freelancing-gods.com
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
Say Hello!
Slide 6
Slide 6 text
“Use rubygems to publish your gem to rubygems”
Slide 7
Slide 7 text
“Use rubygems to publish your gem to rubygems”
Slide 8
Slide 8 text
“Use gem to publish your gem to rubygems”
Slide 9
Slide 9 text
“Use gem to publish your gem to rubygems”
Slide 10
Slide 10 text
“Use the gem command to publish your gem to rubygems.org”
Slide 11
Slide 11 text
noun a precious or semiprecious stone, esp. when cut and polished or engraved. |jem| gem
Slide 12
Slide 12 text
noun a packaged code library written in the Ruby programming language. |jem| gem
Slide 13
Slide 13 text
noun a command line executable distributed with the RubyGems package manager. |jem| gem
Slide 14
Slide 14 text
noun a package manager for Ruby libraries. |ˈro͞obējemz| rubygems
Slide 15
Slide 15 text
noun a website that stores published versions of Ruby gems. |ˈro͞obējemz| rubygems
Slide 16
Slide 16 text
Why?
Slide 17
Slide 17 text
Why? re-use code
Slide 18
Slide 18 text
Why? easy to install
Slide 19
Slide 19 text
Why? easy to share
Slide 20
Slide 20 text
History
Slide 21
Slide 21 text
History 2003 rubyforge.org
Slide 22
Slide 22 text
History 2004 rubygems
Slide 23
Slide 23 text
“If you have libraries you would like to include, please send the gem les to either myself or Rich Kilmer” Chad Fowler, 15 March 2004
Slide 24
Slide 24 text
History gems were magical
Slide 25
Slide 25 text
History permission was required
Slide 26
Slide 26 text
History 2009 gemcutter.org
Slide 27
Slide 27 text
History anyone can publish
Slide 28
Slide 28 text
History rubygems.org
Slide 29
Slide 29 text
Gemspecs
Slide 30
Slide 30 text
Gemspecs pdx.gemspec
Slide 31
Slide 31 text
# pdx.gemspec Gem::Specification.new do |s| s.name = ‘pdx’ s.version = ‘0.0.1’ s.authors = [‘Pat Allan’] s.email = [‘
[email protected]
’] s.homepage = ‘’ s.summary = ‘RailsConf Gem’ s.description = ‘’ s.files = [...] s.test_files = [...] s.executables = [...] end
Slide 32
Slide 32 text
s.name = ‘pdx’ Naming
Slide 33
Slide 33 text
Naming # name ‘will_paginate’ # requiring require ‘will_paginate’ # Class/Module WillPaginate
Slide 34
Slide 34 text
Naming # name ‘cucumber-rails’ # requiring require ‘cucumber/rails’ # Class/Module Cucumber::Rails
Slide 35
Slide 35 text
Versions s.version = ‘0.0.1’
Slide 36
Slide 36 text
Versions s.version = ‘Major.Minor.Release’
Slide 37
Slide 37 text
Versions Major Versions
Slide 38
Slide 38 text
Versions Minor Versions
Slide 39
Slide 39 text
Versions Release Versions
Slide 40
Slide 40 text
Versions Reference
Slide 41
Slide 41 text
Versions # lib/pdx/version.rb module PDX VERSION = ‘0.0.1’ end
Slide 42
Slide 42 text
Versions # pdx.gemspec require ‘pdx/version’ # ... s.version = PDX::VERSION
Slide 43
Slide 43 text
Versions VERSION = ‘1.0.0.beta1’
Slide 44
Slide 44 text
Authors, Emails & Homepage s.authors = [‘Pat Allan’] s.email = [‘
[email protected]
’] s.homepage = ‘https:// github.com/pat/pdx’
Slide 45
Slide 45 text
Summary & Description s.summary = ‘RailsConf Gem’ s.description = ‘All the Ruby code’
Slide 46
Slide 46 text
Files s.files = [ ‘lib/pdx.rb’, ‘lib/pdx/version.rb’, ‘README.textile’, ‘LICENCE’ ]
Slide 47
Slide 47 text
Files lib/pdx.rb
Slide 48
Slide 48 text
Files PDX::RailsConf lib/pdx/rails_conf.rb PDX::Hipster lib/pdx/hipster.rb
Slide 49
Slide 49 text
Files # Don’t do this lib/pdx.rb lib/rails_conf.rb lib/hipster.rb
Slide 50
Slide 50 text
Information Files README
Slide 51
Slide 51 text
Information Files LICENCE
Slide 52
Slide 52 text
Information Files HISTORY
Slide 53
Slide 53 text
Test Files s.test_files = [ ‘spec/pdx_spec.rb’, ‘spec/spec_helper.rb’ ]
Slide 54
Slide 54 text
Test Files Beware Large Test Suites
Slide 55
Slide 55 text
Test Files Travis CI
Slide 56
Slide 56 text
Executables s.executables = [ ‘bin/pdx’ ]
Slide 57
Slide 57 text
Executables #!/usr/bin/env ruby require ‘pdx’ PDX::CLI.run
Slide 58
Slide 58 text
# pdx.gemspec Gem::Specification.new do |s| s.name = ‘pdx’ s.version = ‘0.0.1’ s.authors = [‘Pat Allan’] s.email = [‘
[email protected]
’] s.homepage = ‘’ s.summary = ‘RailsConf Gem’ s.description = ‘’ s.files = [...] s.test_files = [...] s.executables = [...] end
Slide 59
Slide 59 text
Dependencies s.add_runtime_dependency ‘rails’, ‘>= 3.0.0’
Slide 60
Slide 60 text
Dependencies s.add_development_dependency ‘rspec’, ‘>= 2.6.0’
Slide 61
Slide 61 text
Dependencies Dependency Versions
Slide 62
Slide 62 text
Dependencies s.add_runtime_dependency ‘rails’, ‘~> 3.1’
Slide 63
Slide 63 text
Dependencies ~>
Slide 64
Slide 64 text
Dependencies ~> 3.1 == [>= 3.1 && < 4.0] ~> 3.0.3 == [>= 3.0.3 && < 3.1]
Slide 65
Slide 65 text
Dependencies s.add_development_dependency ‘rspec’, ‘= 2.6.0’
Slide 66
Slide 66 text
Rake Tasks
Slide 67
Slide 67 text
# run tests rake spec # generate documentation rake yard # default task should run tests rake
Slide 68
Slide 68 text
Railties
Slide 69
Slide 69 text
Rails Railties class PDX::Railtie < Rails::Railtie rake_tasks do load File.expand_path( '../tasks.rb', __FILE__ ) end end
Slide 70
Slide 70 text
Engines
Slide 71
Slide 71 text
Rails Engines class PDX::Engine < Rails::Engine engine_name :pdx paths['app/controllers'] << 'lib/pdx/controllers' end
Slide 72
Slide 72 text
Publishing
Slide 73
Slide 73 text
Publishing gem build pdx.gemspec #=> pdx-0.0.1.gem
Slide 74
Slide 74 text
Gem Files .gem == .tar
Slide 75
Slide 75 text
Publishing gem push pdx-0.0.1.gem
Slide 76
Slide 76 text
Publishing Permanent
Slide 77
Slide 77 text
Publishing (Don’t) Yank
Slide 78
Slide 78 text
Publishing MRI 1.9 Caution
Slide 79
Slide 79 text
Community
Slide 80
Slide 80 text
Community Support
Slide 81
Slide 81 text
Community GitHub
Slide 82
Slide 82 text
Community Releases
Slide 83
Slide 83 text
Bundler
Slide 84
Slide 84 text
Bundler Recommended
Slide 85
Slide 85 text
Bundler Not Required
Slide 86
Slide 86 text
Bundler # Gemfile source ‘https://rubygems.org’ gemspec
Slide 87
Slide 87 text
Bundler # Gemfile gemspec gem ‘mysql2’, :platform => :ruby gem ‘jdbc-mysql’, :platform => :jruby
Slide 88
Slide 88 text
Bundler rake release
Slide 89
Slide 89 text
Bundler # Rakefile Bundler::GemHelper. install_tasks
Slide 90
Slide 90 text
Tools
Slide 91
Slide 91 text
Tools Hoe
Slide 92
Slide 92 text
Tools Jeweler
Slide 93
Slide 93 text
Examples
Slide 94
Slide 94 text
Examples bundle open pdx
Slide 95
Slide 95 text
Thank You Questions?
Slide 96
Slide 96 text
http://railsconftutorials.com http://bit.ly/pat-gems Tutorial Instructions here: Gems available here: