Slide 1

Slide 1 text

How to build gems for Rails @naoty_k 13೥1݄31೔໦༵೔

Slide 2

Slide 2 text

@naoty_k • Ruby on Rails (2010~) • Android (2012.5~) • iOS (2012.10~) • vimmer!!! • curl http://cui-about.me/naoty 13೥1݄31೔໦༵೔

Slide 3

Slide 3 text

Talk about... w1BSBNT*ORVJSFSʹ͍ͭͯ w3BJMTʹ૊ΈࠐΉ(FNʹඞཁͳ΋ͷ wιʔείʔυΛಡΜͰ্͍͘Ͱඞཁͳ 5JQT 13೥1݄31೔໦༵೔

Slide 4

Slide 4 text

ParamsInquirer $ gem install params_inquirer $ irb 001 > require ‘params_inquirer’ 002 > params = ParamsInquirer::Parameters.new 003 > params[:name] = ‘naoty’ 004 > params[:name].naoty? => true 005 > params[:name].someone? => false 13೥1݄31೔໦༵೔

Slide 5

Slide 5 text

ParamsInquirer on Rails def index if params[:status].accepted? # ... elsif params[:status].rejected? # ... end end 13೥1݄31೔໦༵೔

Slide 6

Slide 6 text

Railtie class Railtie < ::Rails::Railtie initializer ‘Initialize your gem’ do ActiveSupport.on_load(:action_controller) do ::ActionController::Base.send :include, ParamsInquirer::ActionController::Base end end end 13೥1݄31೔໦༵೔

Slide 7

Slide 7 text

action_controller/base.rb module ActionController class Base < Metal # ... ActiveSupport.run_load_hooks(:action_controller, self) end end 13೥1݄31೔໦༵೔

Slide 8

Slide 8 text

lib/params_inquirer.rb if defined?(Rails) require ‘params_inquirer/railtie’ else require ‘params_inquirer/parameters’ end 13೥1݄31೔໦༵೔

Slide 9

Slide 9 text

ActiveSupport::Concern module M def self.included(self) base.extend ClassMethods scope :disabled, where(disabled: true) end module ClassMethods # ... end end 13೥1݄31೔໦༵೔

Slide 10

Slide 10 text

ActiveSupport::Concern module M extend ActiveSupport::Concern included do scope :disabled, where(disabled: true) end module ClassMethods # ... end end 13೥1݄31೔໦༵೔

Slide 11

Slide 11 text

ActiveSupport::Autoload autoload(:Hoge, ‘hoge’) # ‘hoge.rb‘͸͜ͷ࣌఺Ͱ͸require͞Ε͍ͯͳ͍ p Hoge # ͜͜Ͱ‘hoge.rb’͕require͞ΕΔ extend ActiceSupport::Autoload autoload :Fuga p Fuga # ͜͜Ͱ‘fuga.rb’͕require͞ΕΔ 13೥1݄31೔໦༵೔