2020年10月15日木曜日

Sinatra の time_for ヘルパーメソッドを使ってみる

概要

Sinatra の time_for は Time オブジェクトを生成するためのヘルパーメソッドです
今回はどんな感じで使えるのか試してみました

環境

  • macOS 10.15.7
  • Ruby 2.7.1p83
    • sinatra 2.0.7

とりあえず使ってみる

引数には Time オブジェクトを生成する文字列を指定することができます
Time.parse で指定可能な形式ならなんでも OK です

  • vim app.rb
require 'sinatra/base'

class MyApp < Sinatra::Base
  get '/' do
    t = time_for('Oct, 15 2020')
    # t = time_for('2020/10/15 10:09:55')
    # puts t.class # -> Time
    t.to_s
  end
end

last_modified や expires ヘルパーメソッドに影響する

last_modifiedexpires はヘッダを自動的に付与するヘルパーメソッドです
これらのヘッダは基本的に時刻を返却するようになっています
Sinatra では last_modifiedexpires は内部的に time_for を呼び出しているので time_for をオーバライドすることでそれらを使いやすくすることができます

require 'sinatra/base'

class MyApp < Sinatra::Base
  helpers do
    def time_for(value)
      case value
      when :yesterday then Time.now - 24*60*60
      else super
      end
    end
  end

  get '/' do
    last_modified :yesterday
    'ok'
  end
end

デフォルトの time_for に関してはこのあたりのソースを読むとわかりやすいと思います

最後に

Sinatra の time_for ヘルパーメソッドを試してみました
他のヘルパーメソッドメソッドからも参照されているのでデフォルトの time_for をオーバライドすることでいろいろと使えそうなヘルパーメソッドにすることができそうです

0 件のコメント:

コメントを投稿