Rakeカスタムtask、kowabana:hibi:tag:populateを作った

タグ画面一覧デザインのための、ダミーデータ作りをやっています。

Rakeタスク、kowabana:hibi:tag:populateの作成


kowabanaのタグ一覧画面のためのデータを作成するtaskを作りました:

% rake -T
rake kowabana:hibi:tag:create          # Create User, Story, Tag, Tagging data
rake kowabana:hibi:tag:delete          # Erase User, Story, Tag, Tagging data
rake kowabana:hibi:tag:populate        # Erase and Create User, Story, Tag, Tagging data

Rakeタスクで詰まったところは下記でした:

  • namespaceはいくつも入れ子に出来る
  • task内から別のtaskを呼ぶ事もできる
  • Railsの環境を使いたいとき、データのinsertなどは=> :environment doを使う
  • データ作成時、without_protection: trueオプションを使うと便利
  • Fakerを使うと、ユーザ名や文章、単語を自動生成してくれるので便利
  • putsでタスクの進行状況を表示しておくと便利

rakeファイルの作成場所:

% ls -al lib/tasks/
kowabana.rake
kowabana_hibi_tag_test_data.rake

kowabana:hibi:tag:populateタスク:

(namespaceの入れ子)

(taskの中から別のタスクを呼ぶ)

namespace :kowabana do 
    namespace :hibi do
        namespace :tag do
            desc "Erase and Create User, Story, Tag, Tagging data"
            task "populate" => [:delete, :create]

            #省略

kowabana:hibi:tag:createタスク:

(Fakerを使用)

    desc "Create User, Story, Tag, Tagging data"
    task :create => :environment do
        require 'faker'

        #省略

        puts "Create Story"
        (100..112).each do |i|
            Story.create!({id: i, 
                user_id:5,
                created_at: Time.now,
                created_at: Time.now,
                title: Faker::Lorem.sentence,
                body: Faker::Lorem.sentences(5).join(' ')
                }, without_protection: true)
        end

Fakerの使い方


Gemfileにgemの行を追加:

group :development, :test do
    #省略

    gem 'faker'
end

インストール:

bundle install

Rakeファイル内でrequireして使えばOK:

require 'faker'

puts Faker::Lorem.word
puts Faker::Lorem.sentences(5).join(' ')
puts Faker::Name.name
puts Faker::Internet.email

Faker::Lorem.sentences(5)のままだとArrayが帰ってくるのでjoin(‘ ‘)しています。

データが出来たっ!と思ったら、どんなデザインにしようとしていたか忘れていた…。

怖い話 タグ一覧デザイン:検討編 その3にある下記です:

「Bかなぁ」と思ったので、viewを見てみることにしたら、kowabana/app/views/tags/index.html.hamlだった。Haml。

Haml


トップページのhamlをのぞいてみると、%nav.keywordsというのがあるのですが:

%nav.keywords
  %h1= t('keyword')
  %ul
    - random_keywords.each do |keyword|
      %li= link_to keyword, tag_path(tag: keyword)

こんな感じで出力されます:

<nav class="keywords">
        <h1>キーワード</h1>
        <ul>
          <li><a href="/tags/%E5%96%A7%E5%98%A9">喧嘩</a></li>
          <li><a href="/tags/%E5%AE%87%E5%AE%99">宇宙</a></li>

難しい。代入していたりしてなかったり、インデントも意味があるみたい。

Haml、また今度やります…

資料:References


2008の記事ですが、Rakeカスタムtaskの書き方で、seed、fixturesが出てきてよかったです:

How (and whether) to populate rails application with initial data

http://stackoverflow.com/questions/62201/how-and-whether-to-populate-rails-application-with-initial-data

Fakerのドキュメント:

Faker

http://rubydoc.info/gems/faker/1.1.2/frames

簡潔な説明:

Railscasts: #66 Custom Rake Tasks

http://railscasts.com/episodes/66-custom-rake-tasks

Haml+Sinatraの例。わかりやすい:

An Introduction to Haml and Sinatra

http://net.tutsplus.com/tutorials/ruby/an-introduction-to-haml-and-sinatra/

HamlのReference:

Haml (HTML Abstraction Markup Language)

http://haml.info/docs/yardoc/file.REFERENCE.html

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s