2014年7月4日金曜日

Punditでsessionとかにアクセスしてみるヘ(^o^)ノ

CanCanあかんみたい。なので。。。

Punditを使ってみました。

シンプルで良くできたgemだと思います。

とりあえずインストール
$ rails g pundit:install

するとapp/policies/application_policy.rbが作成されます。

authorizeはアクセス制御

index?とかupdate?とかにロジックを書けばよし

コントローラにコレ書いて
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

プライベートメソッドでどっかにredirectすれはおk
def user_not_authorized
  # errorメッセージ
  flash[:error] = "You are not authorized to perform this action."
  
  # リダイレクト先
  redirect_to(request.referrer || root_path)
end

AppicationPolicyクラス内でセッション情報にアクセスしたい!

application_controller.rb
before_action :_current_session

protected def _current_session
  accessor = instance_variable_get(:@_request)
  ApplicationPolicy.send(:define_method, :session, ->{accessor.session})
end

パラメータもいけまっせー
ApplicationPolicy.send(:define_method, :params, ->{accessor.params})

( ̄(エ) ̄)彡☆


参考
rails 4 対応の認可の gem

2014年6月29日日曜日

Shinosaka.rb & 西脇.rb & 東灘.rb 合同ペアプログラミングを開催したよヘ(^o^)ノ

先日、西脇.rb & 東灘.rbとの合同ペアプログラミングを開催しましたー

会場は弊社リバティフィッシュ株式会社


地域コミュニティ同士の交流を深めたいなーという事で、
西脇.rbの伊藤さんと東灘.rbのAkiさんの協力で実現しました!

Shinosaka.rbと西脇.rb & 東灘.rbメンバーのシャッフルでペアプロ開始!


僕は、みなさんを見守っていましたw (19人だった

あーだこーだとホントに楽しそうだし、真剣だった(当たり前w

終了後は、みんなでコードレビュー(写真とるの忘れた...

変数名やメソッド名の付け方とか、RSpec3のits使えないなぜだ?とか、
Rubyのコーディング規約的なとこや、もっと良い書き方はないかなどなど

勉強になりました(`・ω・´)ゞ

変数やメソッドの名前についてはこちらが参考になるかも
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう
アプリケーションをつくる英語

RSpec
Better Specs { rspec guidelines with ruby }
RSpecの最新の動向・RSpec 3へのアップグレードガイド
RSpec 3の重要な変更
Project: RSpec Core 3.0
Everyday Rails - RSpecによるRailsテスト入門

Ruby
ruby-style-guide (英語)
ruby-style-guide (日本語)

懇親会もみなさん参加していただきましたヘ(^o^)ノ

総勢18名の懇親会!

これだけRubyistがあつまると、なんでもできる気がしますw

ホントに楽しかった!

愚痴もいっぱい聞いてもらえたし... ( ̄▽ ̄;)

また、やりたいなー

参加していただいた皆さん!ホントにお疲れ様でしたヘ(^o^)ノ
そして、ありがとうございました!

このイベントの為に、Skypeミーティングで2ヶ月前から協力してくれた、
伊藤さん、Akiさんに心から感謝です!(これからも宜しくですw


イベント内容
Shinosaka.rb #6 with 東灘.rb & 西脇.rb 合同ペアプログラミング
西脇.rb & 東灘.rb ペアプログラミング In Action with Shinosaka.rb

みんなのコード(ペアごとにブランチ作成してます
pair-programming-in-action

勉強会
Minami.rb 第26回勉強会
東灘.rb Meetup #2
Shinosaka.rb #7


みなさんの参加お待ちしていますよー

( ̄(エ) ̄)彡☆

2014年6月12日木曜日

Rubyのancestorsメソッドヘ(^o^)ノ

ancestorsメソッドはクラスの親クラスを配列にして返します。

インクルードしたモジュールも含まれます。

ところで。。。

RailsでDate.tomorrowとすれば、明日の日付が取得できます。

RubyのDateクラスを拡張していますね−。

モンキーパッチは手軽で簡単に拡張できます。

Railsは。。。

調べてみましょう。

Railsコンソールで実行すると
$ Date.ancestors
=> [Date, DateAndTime::Calculations, Comparable, Object, ActiveSupport::Dependencies::Loadable, PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, Kernel, BasicObject]

注目すべきは
DateAndTime::Calculations

ちなみにRubyのirbで実行すると
$ Date.ancestors
=> [Date, Object, Kernel, BasicObject]

todayやtomorrowはDateAndTime::Calculationsに定義されています。
[参考] DateAndTime::Calculations

これModuleですねー。

なぜ、わざわざモジュールに定義してインクルードしているのか?
class date
  include DateAndTime::Calculations
end

それはオープンクラス拡張の可視化です。

モンキーパッチは手軽ですが、わかりずらいのです。

DateAndTime::Calculationsを見ればどんな拡張しているのか一目瞭然ですよね!

( ̄(エ) ̄)彡☆

2014年6月10日火曜日

プロキシ環境でSeleniumを使うヘ(^o^)ノ

こんなことがありまして。。。


今日も解決せずに、Seleniumを使うことにしました(>_<)

プロキシ環境下なんで、Firefoxは起動するけど、その先に進まない!

Capybara + Selenium + プロキシ環境下で使えるようにしたよ。

設定は簡単で、プロキシサーバーに接続しないようにしただけやけど

spec/spec_helper.rb
 ENV['NO_PROXY'] = ENV['no_proxy'] = '127.0.0.1'
 Capybara.app_host          = 'http://127.0.0.1:3000'
 Capybara.server_port       = 3000
 Capybara.default_driver    = :selenium
 Capybara.default_selector  = :css
 Capybara.default_wait_time = 10

プロキシは越えるためにあるのだー(こえてない

( ̄(エ) ̄)彡☆

2014年6月8日日曜日

Rails Girls Osaka #1 に行ってきたよーヘ(^o^)ノ

昨日はRails Girls Osaka #1にスポンサーとしてお邪魔しましたー。





















コーチのみなさんも、参加されたGirlsのみなさんも楽しそうなのが印象的でした。

楽しそうなみなさんを見ているとムズムズして、僕も途中から裏でコーディングを始めちゃったw

Heroku弁当うまかったー

みなさん無事、Herokuにpushできました。

プライベートでHeroku使ってますが、やっぱりいいですね

インストールも簡単 ⇒ heroku toolbelt

最後のつじたさんの挨拶は感動的でしたねー(>_<)

僕もShinosaka.rbを主催しているので、伝わるものがありました。

最初は不安でいっぱいでしたw

Rails Girls Kyoto #2の告知もありましたねー(楽しみや

ホントにみなさんお疲れ様でしたヘ(^o^)ノ

みなさんとすばらしい時間を共有できたことを幸せに思います。

僕の中で企画中のイベントもありますw

またお会いできることを楽しみにしています。

( ̄(エ) ̄)彡☆


2014年6月1日日曜日

Rubyの特異メソッドヘ(^o^)ノ

例えば。。。

murajunクラスでmurajun?メソッドを定義しているよねー

そのオブジェクトをnameクラス(名前アカンやつ)のhello_murajunメソッドに引数で渡してる。

murajun?メソッドだけなら、Stringクラスにモンキーパッチできるよねー

でも、このときだけmurajunかどうか判定したい場合は???

そんな時の特異メソッドですよ

murajun_name = "murajun"

def murajun_name.murajun?
  self == "murajun"
end

name = Name.new
p name.hello_murajun(murajun_name) # => Hello, murajun.


特定の条件下だけ、ある機能を実装したい場合に便利ですね。

( ̄(エ) ̄)彡☆

2014年5月31日土曜日

Rubyの無名クラスヘ(^o^)ノ


Classクラスの引数にクラスを渡すと継承と同じことができる

これと同じ
class Foo < String; end

11行目でクラス名を取得してるけど、nilなので名無しです

ちゃんと名前を付けてあげましょう
Foo = anonymous_class
p anonymous_class.name # => Foo

親クラスを確認
p anonymous_class.superclass # => String
p Foo.superclass # => String

helloメソッドの有無を確認
p Foo.instance_methods.grep(/hello/) # => [:hello]


( ̄(エ) ̄)彡☆