Upgrade to Pro — share decks privately, control downloads, hide ads and more …

make your own gem

mmr
December 19, 2013

make your own gem

Step by step process for building your own gem including two examples

mmr

December 19, 2013
Tweet

More Decks by mmr

Other Decks in Programming

Transcript

  1. gemspec • specifikacija gem-a • osnovne informacije (naziv, opis, autor)

    • verzija • specifikacija datoteka koje ce biti ukljucene u gem • specifikacija izvrsnih skripti
  2. % short-url.gemspec Gem::Specification.new do |s| s.name = 'short-url' s.version =

    '0.0.1' s.date = '2012-11-22' s.summary = "short url generator" s.description = "short url generator using bit shuffle" s.authors = ["Muamer Ribica"] s.email = '[email protected]' s.files = ["lib/short_url.rb"] s.homepage = 'http://www.github.com/mribica/short-url' s.license = 'MIT' end
  3. Buildanje i instalacija • $ gem build short-url.gemspec • $

    gem install ./short-url-0.0.1.gem • $ gem push ./short-url-0.0.1.gem • ... login • gem install short-url (sa rubygems.org)
  4. short-url gem • generisanje nepredvidivih, jedinstvenih kljuceva • class i

    instance metode za generisanje kljuca • konfigurabilan modul (initializer)
  5. # short_url.rb module ShortUrl ... end # test.rb class Test

    include ShortUrl end Test.short_url(2) Test.new.short_url
  6. module ShortUrl def self.included(base) base.extend(ClassMethods) end def short_url # instance

    metoda end module ClassMethods def short_url(id) # class metoda end end end
  7. • konfiguracija modula (alfabet, duzinu kljuca) • gdje cuvati konfiguraciju

    (izolovanje) • cattr_accessor (Rails kroz ActiveSupport) • class varijabla u modulu
  8. • u ruby-u je sve objekat • svaki objekat ima

    klasu • svaki objekat ima i meta klasu • meta klasa moze imati metode, koje su dostupne samo toj instanci
  9. module Test class << self # self je sada meta

    klasa modula attr_accessor :configuration end def self.configure self.configuration |= Configuration.new yield(configuration) end end # bilo gdje u aplikaciji Test::configure {|config| config.attr = ‘foo’} Test::configuration # => configuration obj
  10. • konfiguracija je sada izolovana samo na modul • modul

    se moze konfigurisati iz initializera • klasa koja ukljuci modul dobija samo metode koje ce koristiti
  11. gitshot gem • slika nakon svakog komita • jednostavna instalacija

    i inicijalizacija skripte • % gem install gitshot • gitrepo% gitshot install
  12. require 'fileutils' module Gitshot class Hook HOOK_PATH = '.git/hooks/post-commit' def

    install tmpl = File.expand_path("hook-templ", _FILE_) FileUtils.cp(tmpl, HOOK_PATH) FileUtils.chmod(0755, HOOK_PATH) end end end
  13. gitrepo% gitshot install Gitshot installed .git/hooks/post-commit gitrepo% git commit -am

    “commit” [Cheese!] Capturing image from device "Built-in iSight" b2bc7.jpeg