Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

2013-08-01から1ヶ月間の記事一覧

メタプログラミングRuby | 魔術 | 動的メソッド

概要 動的メソッド 内容 実行時にメソッドを作成します。 サンプル a-zの中から3-6文字を組み合わせて10個のメソッドを動的に作成します。 クラスはロードするたびにことなるメソッドを生成します。 # encoding: utf-8 require "pp" puts 97.chr puts 122.ch…

メタプログラミングRuby | 魔術 | 動的ディスパッチ

概要 動的ディスパッチ 内容 実行時に呼び出すメソッドを決めます。 メソッドを直接呼び出さずsendを利用します。 サンプル ゴーストメソッドと組み合わせてみました。 0-10の乱数を2倍にして返却する methodXをゴーストメソッドとして定義します。 ※Xは0-10…

メタプログラミングRuby | 魔術 | 遅延評価

概要 遅延評価 内容 Procやlambdaにコンテキストを保管して後から評価します。 サンプル # encoding: utf-8 require "date" require "pp" class CodeStore def store(&block) @my_code_capsule ||= [] @my_code_capsule << block end def execute @my_code_c…

メタプログラミングRuby | 番外編 | Ghostableでゴーストメソッドを少しだけ楽に作成

概要 Ghostableでゴーストメソッドを少しだけ楽に作成 内容 ゴーストメソッドの定義を支援するモジュール=Ghostableを作成します。今回想定するのはあるパターンの文字列を持つメソッド名のみゴーストメソッドとして扱います。 通常のゴーストメソッド ソー…

Ruby on Rails | metric_fu | Rails Best Practices | use query attribute

概要 use query attributeへの対応 詳細 Railsでモデルの属性に対して、blank?やpresent?を利用する際は 以下のように記述を省略できる model.column? 修正前 if model.column.blank? if model.column.present? 修正後 unless model.column? if model?

Ruby on Rails | metric_fu | Rails Best Practices | Simplify render in views

概要 Simplify render in viewsへの対応 詳細 partialのrenderを指定する際に、:partialの部分や、 optionの:localsの部分は省略可能、という警告。 修正前 = render :partial => "yes_no_all_radio", :locals => {object_name: "user", property_name: "adm…

Ruby on Rails | metric_fu | Rails Best Practices | simplify render in controllers

概要 simplify render in controllersへの対応 詳細 Controller内でのrender指定時にactionのみ指定する場合は、明示的にハッシュのキーを指定しなくても よいので記述を簡潔にできる、という警告。 修正前 render :action => 'index' 修正後 render 'index'

Ruby on Rails | metric_fu | Rails Best Practices | replace instance variable with local variable

概要 replace instance variable with local variableへの対応 詳細 particalなビューを利用する場合に、インスタンス変数の利用箇所を ローカル変数に置き換えることで再利用性を高めるように、という警告。 render :locals => {key: value, key: value ・…

Sublime Text2 | 80文字の位置にlineを表示する

概要 80文字の位置にlineを表示する 内容 Rubyの一般的な規約では、1行あたりの文字数は80文字以内です。 そこで、80文字の位置に縦線を表示するように設定します。 設定 Setting User "rulers": [80], 画像 右端の80文字の位置に縦線が表示されています。 …

メタプログラミングRuby | 魔術 | コンテキスト探査機

概要 コンテキスト探査機 内容 instance_evalを利用することによって、privateフィールド等、 オブジェクトのコンテキストにある情報にアクセスします。 サンプル # encoding: utf-8 class Hoge def initialize @secret_hoge = "秘密のほげ" end end hoge = …

メタプログラミングRuby | 魔術 | コードプロセッサー

概要 コードプロセッサー 内容 コードプロセッサーとは外部ソースにあるコード文字列を処理する手法です。 サンプル プロセッサー本体 # encoding: utf-8 class StreetFighter class << self alias zero instance_eval def 波動拳 puts "236P" end def 昇竜…

Ruby on Rails | metric_fuでメトリクス分析

概要 metric_fuでメトリクス分析 詳細 metric_fuでメトリクス分析を行います。 設定 Gemfileに下記を追加 gem "metric_fu", "~> 4.3.1" Bundlerを実行 bundle メトリクス分析の実行 rake metrics:all 結果を確認する %project_root%/tmp/metric_fu/output/in…

Ruby on Rails | Kaminariを利用して一覧にページャーを設定

概要 Kaminariを利用して一覧にページャーを設定 詳細 Kaminariを利用して一覧にページャーを設定します。 設定 Gemfileに下記を追加 gem "kaminari", "~> 0.14.1" Bundlerを実行 bundle デフォルトの設定ファイルを生成 rails g kaminari:config 下記のファ…

Ruby on Rails | 一覧のソート

概要 一覧のソート 詳細 一覧のソート機能を実装します。 サンプル 仕様 テーブル構造の一覧のヘッダーにあるリンクをクリックすると 昇順降順を切り替えてソートする。 アイコンはKickstartを使用。 単一項目によるソートのみ対応。 page.js.coffee Coffee …

Ruby | htmlからpdfファイルを出力

概要 htmlからpdfファイルを出力 内容 htmlからpdfファイルを出力します。 サンプル pdfkitをインストールします。 gem "pdfkit", "~> 0.5.4" gem "wkhtmltopdf-binary", "~> 0.9.9.1" # encoding: utf-8 require 'pdfkit' html = File.open("output.html") …

Ruby on Rails | リンクからGET以外のメソッドをJavaScriptで送信する

概要 リンクからGET以外のメソッドをJavaScriptで送信する 詳細 リンクからGET以外のメソッドをJavaScriptで送信します。 link_toヘルパーを利用した場合は link_to "label", "url", method: :deleteなどのオプションで指定できますが、JavaScript内から制御…

Ruby on Rails | konacha + ejsでCoffeeScriptのテスト内にHTMLのテンプレートを使用

概要 konacha + ejsでCoffeeScriptのテスト内にHTMLのテンプレートを使用 詳細 konacha + ejsでCoffeeScriptのテスト内にHTMLのテンプレートを使用します。 設定 Gemfileに以下を追加 gem "ejs", "~> 1.1.1" サンプル 仕様 入力フォームをクリアする機能のテ…

Ruby on Rails | ルーティング | resourcesのRESTfulインターフェースから一部を除外

概要 resourcesのRESTfulインターフェースから一部を除外 詳細 resourcesのRESTfulインターフェースから一部を除外します。 サンプル routes.rb resources :hoges,:except => :show rouetsの確認 showへのルーティングがなくなっていることを確認 rake route…

Ruby on Rails | ルーティング | RESTfulインターフェースを定義

概要 RESTfulインターフェースを定義 詳細 RESTfulインターフェースを定義します。 RailsでRESTfulインターフェースを定義するにはroutes.rbで以下の記述をします。 routes :controller_name 上記の定義によって生成されるルーティングについてはサンプルを…

Ruby on Rails | konachaによるCoffeeScriptのテスト

概要 konachaによるCoffeeScriptのテスト 詳細 konachaによってCoffeeScriptをRSpecライクな記法でテストします。 設定 ・Gemfilenに下記を追加 gem "konacha", "~> 3.0.0" ・Bundlerの実行 bundle ・spec/javascriptsディレクトリを作成 ・config/initializ…

メタプログラミングRuby | 魔術 | クリーンルーム

概要 クリーンルーム 内容 ブロックを評価する環境としてオブジェクトのinstance_evalを利用します。 主にDSLで利用されます。 サンプル RSpec風のDSLを作成してみます。 instance_evalをそのまま利用するとかっこ悪いので エイリアスで偽装してみます。 # e…

Ruby on Rails | I18nでプレースホルダーを利用する

概要 I18nでプレースホルダーを利用する 詳細 I18nでプレースホルダーを利用します。 サンプル ja.yml hoge: hige: "%{hage}さん" hoge.haml %p = t('hoge.hige', {hage: "はげ"}) 出力 はげさん

Ruby on Rails | テーブルのカラム名変更

概要 テーブルのカラム名変更 詳細 テーブルのカラム名変更をします。 実施 hogeテーブルのhoge列をhige列にリネームします。 rails g migration rename_hoge_hoge class RenameHogeHoge < ActiveRecord::Migration def up rename_column :hoges, :hoge, :hi…

Capybara | キャプチャ保存時など、ブラウザサイズを指定したい場合

概要 キャプチャ保存時など、ブラウザサイズを指定したい場合 内容 キャプチャ保存時など、ブラウザサイズを指定したい場合は 下記のようにします。 設定 spec_helper.rb # 他の処理 # : RSpec.configure do |config| config.before(:each) do Capybara.curr…

メタプログラミングRuby | 魔術 | クラスマクロ

概要 クラスマクロ 内容 クラス定義内でクラスメソッドを利用すること。 動的にメソッドを定義する際などによく利用します。 クラスマクロの代表例がRubyが提供しているattr_accesor。ActiveSupport::Concernを利用したクラス拡張ミックスインと セットで用…

メタプログラミングRuby | 魔術 | クラスインスタンス変数

概要 クラスインスタンス変数 内容 クラスインスタンス変数でクラスの状態を変数に格納します。 サンプル # encoding: utf-8 class Hoge @count = 0 class << self def class_attribute @count += 1 end end def instance_attribute @count = 999 end end pu…

Ruby | ミミックスペースによる偽装メソッド

概要 ミミックスペースによる偽装メソッド 内容 ミミックスペース=勝手に命名しましたが、全角スペースによって メソッドを宣言することで、一見なにも書いてなさそうですが 処理が行われているものをさします。 書籍メタプログラミングRubyの「ミミックメ…

Ruby on Rails | JSON形式のレスポンスを返却する

概要 JSON形式のレスポンスを返却する 詳細 JSON形式のレスポンスを返却します。 render :json => variable サンプル class HogeController < ApplicationController # 他のコード def json_hoge render :json => Book.first end end 出力 /hoge/json_hogeへ…

Ruby on Rails | リクエストヘッダの取得

概要 リクエストヘッダの取得 詳細 リクエストヘッダを取得します request.headers[:key] サンプル class HogeController < ApplicationController # 他のコード def headers_output ret = [] ret << "request.headers[:HTTP_USER_AGENT] = #{request.header…

Ruby on Rails | underscore.jsでJavaScriptの便利なユーティリティを利用

概要 underscore.jsでJavaScriptの便利なユーティリティを利用 詳細 コレクション向けのAPIなど便利なユーティリティを利用できるunderscore.jsを Railsに組み込みます。 underscore.jsの詳細については下記参照。 http://documentcloud.github.io/underscor…