2014年5月20日火曜日

Rubyで動的メソッド define_method編ヘ(^o^)ノ

Rubyでdefine_methodで動的にメソッドを作る

こんな感じ


共通部分をまとめるのに便利

( ̄(エ) ̄)彡☆

2014年5月16日金曜日

Rails generate model オプションのparentを使ってみたヘ(^o^)ノ

rails generate modeのparentオプションを調べてみたヘ(^o^)ノ

オブジェクト指向か?と言われると微妙なとこです(;^ω^)

前にこんなモデル設計しました

















userには共通項目があって、customer、employeeそれぞれの項目をもっています。

このプロジェクトでは、それぞれのテーブルをリレーションして実装しました

ふりかえって、parentオプションを使ってみます

userモデル typeカラムを追加
$ rails g model User first_name:string last_name:string \
       email:string company:string unit:string type:string

customerモデル
$ rails g model customer --parent user

employeeモデル
$ rails g model employee --parent user

userモデルはこんなの
class User < ActiveRecord::Base
end

customerモデルはこんなの
class Customer < User
end

employeeモデルはこんなの
class Employee < User
end

それぞれuserモデルを継承しています

では、employeeモデルにバリデーションを設定しましょう
class Employee < User
 validates :working_arrangements,
   presence: true
end

バリデーションの確認してみましょう






コールバックされましたヘ(^o^)ノ

customerモデルはどうでしょう?








saveできましたねー

userテーブル一つで、各モデルで振る舞いを変更できました

( ̄(エ) ̄)彡☆

Rubyのネームスペースヘ(^o^)ノ

Rubyはオープンクラスのメソッドをオーバライドできます。

いわゆるモンキーパッチ〜


便利だけど、すべての振る舞いを変更してしまうので危険(;^ω^)

では、自分で定義したクラスをネームスペースで囲ってみましょう

オーバライドされなくなりましたー

ネームスペースで囲ったときは、10行目のように使用することができますー

( ̄(エ) ̄)彡☆

2014年5月14日水曜日

Rubyのincludeとextendヘ(^o^)ノ

Rubyのincludeとextendの違いについて


つまりはこういうことです





















ポイントは32行目と38行目

ancestorsメソッドでご先祖さんを取得しています。

includeしたbarクラスは、barとfooが取得できていますが、
extendしたbuzクラスは、fooが取得できていません。

extendはクラスに定義されるのではなく、
selfの特異メソッドとして定義されるのですねー


間違えてたら教えてw

( ̄(エ) ̄)彡☆

参考
instance method Module#ancestors
instance method Object#singleton_methods
instance method Enumerable#grep
instance method Module#instance_methods


2014年5月10日土曜日

RubiniusでRubyを学ぶヘ(^o^)ノ

@merborneさんのProcを制する者がRubyを制す(嘘)rubiniusを知ったw

こいつはRubyの学習にはもってこいと思い、コードリーディングしてみたヘ(^o^)ノ

Arrayクラスのeachがどんな処理をしているのか調べてみる。

コードリーディングにunite-grepを使ってみる。

パターン検索にはagを使います(早いらしい???)

agのインストール
$ brew install ag

Vimプラグインのunite.vimvimproc.vimをインストール

unite-grepでagを使いたいので
.vimrc
" unite grep
let g:unite_enable_start_insert = 1
let g:unite_enable_ignore_case = 1
let g:unite_enable_smart_case = 1
nnoremap  ,g  :Unite grep:. -buffer-name=search-buffer
nnoremap  ,cg :Unite grep:. -buffer-name=search-buffer
nnoremap  ,r  :UniteResume search-buffer
if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  let g:unite_source_grep_recursive_opt = ''
endif

vimを開いて,gとたたくとこんな感じで検索パターンを入力できる






結果がuniteで表示される












kernel/bootstrap/array.rb:1:class Array ← Enterでファイルを開く

eachメソッドを見てみる













要素の数だけループして、ブロックに要素の値を渡してる

引数にブロックがないときはなんか返してる

to_enumとは

そんな時はctagsヘ(^o^)ノ

rubiniusのルートディレクトリで
$ ctags -R

さっきのto_enumで<C-]>定義先へ

定義先から戻る場合は<C-o>

( ̄(エ) ̄)彡☆


参考ページ
unite.vimの使い方まとめ
ackを捨てて、より高速なag(The Silver Searcher)に切り替えた

2014年4月28日月曜日

Shinosaka.rb #4を開催しましたヘ(^o^)ノ #shinosakarb

Shinosaka.rb #4を開催しましたーヘ(^o^)ノ


今回はペアプロ!

僕のWiMAXが圏外なので、あきらめていたら...

iceさんがここならつながる!


無事つながりましたw


なのでペア決めスクリプト作った⇒make_pair

意外とペアプロ経験者が少なかったなー

ペアプロは「精神と時の部屋」と冒頭に断言しましたw

どうだったかな?

【お題】
1問目 FizzBuzz
2問目 ボーリングのスコア計算

ボーリングのスコア計算がわからない人がいるのは意外だった...

準備不足でした...(;・∀・)

皆さんのコードはこちら

2次会で数名を朝帰りさせてしまいました。

反省...( TДT)ゴメンヨー

来月も懲りずに開催するので、みなさん参加してくださいねー

でわ( ̄(エ) ̄)彡☆



2014年2月23日日曜日

Shinosaka.rb #2を開催したよーヘ(^o^)ノ

Shinosaka.rb #2を開催したヘ(^o^)ノ


参加費1,500円(゚д゚)!にも関わらず?意識高い皆さんが参加していただきましたー

次回は参加費見直しますw ごめんねー

内容はTDDハンズオン!

スライド

デモでプロ生ちゃんTDDを実践 ⇒ [GitHub]pronama_tdd

RSpecでみなさんと一緒にTDDを実践しました。

ライブコーディングはとっても緊張…(;・∀・)

でも、とても勉強になった。

こういう風に書いた方が良いとか、スペルミスのご指摘などなど

コードレビューの大切さを実感したよ

金井さんのLT
= 準備中 =

@kytiken_codeさんのテストコードをレビュー

Pryこみったーのyui-knkさんのお話。

普段ちょー便利に利用させていただいているPryの便利な使い方を教えていただきましたー

みなさんのこんな便利gemあるよー情報良かった!

知らないものばかり…まだまだですわw

rbenv-gemsetのお話

railsActiveRecordの便利な機能のお話

Autodocテスト結果をドキュメント化してくれるgem

その中でも…

コレ! git-svn

現場はsvn…

でもgitが使いたい!!!って人はこれ

ヤバいw

知らんかったーΣ(゚д゚lll)

Windowsでも使えるようですね ⇒ http://shinodogg.com/?p=4964

即採用決定ーヘ(^o^)ノ

やっぱり勉強会はいいよー

立ち上げてほんとによかった

次回は3月22日(土)予定です。「初めてのgem(仮)」

是非、参加してくださいねー

参加していただいたみなさん。お疲れ様でしたー( ̄(エ) ̄)彡☆