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

PadrinoDecorator

Takeshi Yabe
September 18, 2013
42

 PadrinoDecorator

渋谷.rb[:20130918] での発表資料です

Takeshi Yabe

September 18, 2013
Tweet

Transcript

  1. σίϨʔλͷ
    ͸ͳ͠
    ौ୩SC<>
    5BLFTIJ:BCF!UZBCF

    View Slide

  2. View Slide

  3. app/views/posts/show.slim
    - if @post.image.present?
    = image_tag @post.image.url
    - else
    = image_tag ‘default.png’
    ͜Μͳͷ͕ͲΜͲΜͲΜͲΜ૿͑ͯ͘Δ
    WJFX

    View Slide

  4. models/post.rb
    class Post < ActiveRecord::Base
    def image_url
    if self.image.present?
    self.image.url
    else
    ‘default.png’
    end
    end
    end
    app/views/posts/show.slim
    = image_tag @post.image_url
    NPEFM

    View Slide

  5. models/post.rb
    class Post < ActiveRecord::Base
    def image_url
    if self.image.present?
    self.image.url
    else
    ‘default.png’
    end
    end
    end
    app/views/posts/show.slim
    = image_tag @post.image_url
    7JFX༻ͷϝιου͕
    .PEFMʹೖ͍ͬͯΔ
    ΩϞ͍
    NPEFM

    View Slide

  6. )FMQFS
    app/helpers/posts_helper.rb
    StitchStitch::App.helpers do
    # ...
    end
    ɾϝιου໊ͷিಥΛؾʹ͢Δඞཁ͕͋Δ
    ɾ001ͬΆ͘ͳ͍

    View Slide

  7. models/post.rb
    class Post < ActiveRecord::Base
    end
    app/controllers/posts_controller.rb
    SampleProject::App.controllers :posts do
    get :show, with: :id do
    post = Post.find(params[:id])
    @post_decorator = PostDecorator.new(post)
    render ‘posts/show’
    end
    end
    app/views/posts/show.slim
    - if @post_decorator.is_new_page?
    = image_tag @post_decorator.image
    app/decorators/posts_decorator.rb
    class PostDecorator
    attr_reader :post
    def initialize(post)
    @post = post
    end
    def image_url
    if self.image.present?
    self.image.url
    else
    ‘default.png’
    end
    end
    end
    දࣔ༻ͷϩδοΫΛ%FDPSBUPSʹҠ͢

    View Slide

  8. spec/app/decorators/post_decorator_spec.rb
    require 'spec_helper'
    describe "PostDecorator" do
    it 'can construct a new instance' do
    post = create(:post)
    @post_decorator = PostDecorator.new(post, self)
    expect(@post_decorator.image_url).to eq ‘default.png’
    end
    end
    ςετ΋ॻ͖΍͘͢ͳΔ

    View Slide

  9. ؾܰʹ࢖͍͍ͨͷͰ
    (FOFSBUPSΛ࡞ͬͨ

    View Slide

  10. View Slide

  11. $ padrino g decorator
    Usage:
    padrino-gen decorator [name]
    Options:
    -r, [--root=ROOT] # The root destination
    # Default: .
    -a, [--app=APP] # The application destination path
    # Default: /app
    -d, [--destroy]
    -n, [--namespace=NAMESPACE] # The name space of your padrino project
    Description:
    padrino-gen decorator generates a new Padrino decorator
    ͔͍͔ͭͨ

    View Slide

  12. $ tree
    .
    ᵓᴷᴷ app
    ᴹ ᵓᴷᴷ app.rb
    ᴹ ᵓᴷᴷ controllers
    ᴹ ᵓᴷᴷ decorators
    ᴹ ᴹ ᵋᴷᴷ post_decorator.rb
    ᴹ ᵓᴷᴷ helpers
    ᴹ ᵋᴷᴷ views
    ᵋᴷᴷ spec
    ᵋᴷᴷ app
    ᵋᴷᴷ decorators
    ᵋᴷᴷ post_decorator_spec.rb
    %FDPSBUPS༻ͷϑΝΠϧΛͭ͘Γ·͢

    View Slide

  13. Rails

    View Slide

  14. View Slide

  15. View Slide

  16. %SBQFS΋࣮ݱ͢Δ͜ͱ͸جຊతʹ͸ಉ͡Ͱ͢
    ͕ɺํࣜʹҧ͍͕͋Γ·͢ɻ"DUJWF%FDPSBUPS͸
    ϞσϧΦϒδΣΫτʹϞδϡʔϧΛFYUFOE͢Δ
    ͷʹର͠ɺ%SBQFS͸ϞσϧΦϒδΣΫτΛϥοϓ
    ͢ΔΦϒδΣΫτΛ࡞ͬͯϝιουΛҠৡ͠·
    ͢ɻ
    %SBQFSͷํࣜͰ͸ϝιουΛ௥Ճ͢Δલͱͨ͠
    ޙͰΦϒδΣΫτͷJEFOUJUZ͕มԽͯ͠͠·͏ͨ
    ΊɺΑ͘Α͘஫ҙ͠ͳ͍ͱϋϚΓ·͢ɻ
    Ҿ༻ɿ3VCZJTU.BHB[JOF3VCZPO3BJMT5IF#BE1BSUT
    IUUQNBHB[JOFSVCZJTUOFU 3BJMT5IF#BE1BSUT

    View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. -FUTUBMLBCPVUJU

    View Slide