[SublimeText2]Sublime Package Control

Sublime Text 2の色々メモ


Sublime Package Control (SublimeText2のパッケージ管理ツール)


A full-featured package manager that helps discovering, installing, updating and removing packages for Sublime Text 2. It features an automatic upgrader and supports GitHub, BitBucket and a full channel/repository system.
http://wbond.net/sublime_packages/package_control

インストールの仕方


情報元: http://wbond.net/sublime_packages/package_control/installation


  1. SublimeText2を起動 -> [View] -> [Show Console]

  2. 以下のコマンドを出てきたコンソール画面入力
    import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'

  3. SublimeText2を再起動

  4. [Mac] Command + Shift + P
    [pi]とかいれて[Package Control: Install Package]を選択する

  5. 一覧にインストール可能なパッケージが表示されるので欲しいもの適当に入れる

  6. 無効にする場合は[PackageControl: Disable Package]でインストール済みのパッケージ一覧が表示されるので、無効にしたいものを選択するだけ

基本的にいれたパッケージはCommad + shift + pで探して実行します。
その為、よく使うコマンドはkeymappingにいれておくといいかも


いれてよかったもの。
Twitter bootstrap(bootstrapのsnippetが追加される)とMarkdown preview(mdファイルをブラウザでプレビューできる), その他 RubyTest, haml, SimpleRailsNavigatorとか
よくわからないツールはPreferencesのBrowse PackageでそのPackage内のREADME.mdとかを見る感じ


スペースを表示したい場合


[Mac] Command + ,でUserSettigsを開いて、"draw_white_space"をallで指定する。


{
"draw_white_space": "all",
}
スポンサーサイト

[Rails3]spec_helperのあれこれ

spec_helperのあれこれ


あんま情報がないので、メモがてら
対象: Rspec 2.11.0


config.before, config.after


spec_helper上で全体で利用するbefore(:each)やbefore(:all)などの定義が可能です



config.before(:suite) do
# A
end

config.before(:all) do
# B
end

config.before(:each) do
# C
end

config.after(:each) do
# D
end

config.after(:all) do
# E
end

config.after(:suite) do
# F
end

実行順序はアルファベットの順で、B, Eの間にはspecファイル中で記述したbefore, afterのallが挟み込まれます。
また、C, Dの間にはspecファイル中で記述したbefore(:each), after(:each)が挟み込まれます。

なお、suiteは一回のspecの実行で1回だけ実行されます。
つまり、a_spec.rb, b_spec.rbをテストした場合には両者を通して1回だけ、実行されますが、
config.before(:all)はa_spec.rb,b_spec.rbそれぞれで実行されます。


Rspecのmetadata


https://www.relishapp.com/rspec/rspec-core/docs/metadata/user-defined-metadataをみるとわかりやすい


これとconfig.before等を利用した応用例


Filename: spec_helper.rb


require 'database_cleaner'

RSpec.configure do |config|

config.treat_symbols_as_metadata_keys_with_true_values = true

config.after(:all, :clean_db) do
DatabaseCleaner.clean_with :truncation
end

end

上記のように定義しておき、spec上で以下のようにする


describe :sample, :clean_db do
it { .... }
end

describe :sampleブロック内の全てのテストが終わった後に、
spec_helper.rbに定義したDatabaseCleaner.clean_with :truncationが実行され、
全テーブルがtruncationされる
before(:all)でデータを色々作って、after(:all)で消すのがメンドクセという場合等におすすめ。


これを応用して、特定のクラスをmock化するや、壊れたテストを一括でpendingにするなどの利用が可能


filter_runとrun_all_when_everything_filtered


Guard等を利用したオートテストの場合で困ることといえば、
テストケースが多くて、追加・変更しようとしているところ以外のテストに時間がかかってしまうこと。
そのような場合は、filter_runとrun_all_when_everything_filteredの設定をするのがおすすめ
https://www.relishapp.com/rspec/rspec-core/v/2-11/docs/filtering/run-all-when-everything-filtered


Filename: spec_helper.rb
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end

specファイルが以下のようになっているとする


it "should create", :focus do
...
end
it "should update" do
end

上記のfilter_run focus: trueという指定があるので、it "should create"のテストのみが実行されるようになる。
テストが通ったあとには、focusを取り除くことで全部のテストが走るようになる。

[Rails3]Omniauthで戻り先URL(back_to)を指定する方法

Omniauthで戻り先URLを指定する方法


簡単だったけど、忘れそうなのでメモ


戻り先URLの指定の仕方はoriginパラメータを与えるだけ


/auth/twitter?origin=[戻りたいURL]

ヘルパーとかに適当に以下のように定義して、link_toで呼び出す


if params[:back_to].blank?
'/auth/twitter'
else
'/auth/twitter?origin=' + params[:back_to]
end

なお、originが指定されていない状態において、request.env['omniauth.origin']は
/auth/twitterなどのリンクが設置されているURLが設定されている


Callbackアクションでの処理


request.env['omniauth.origin']に戻り先のURLが指定されているので、そこに対してリダイレクトしてあげればOK
但し、そのままだとどこにでも飛べてしまうので、別ドメインには飛ばさないように処理を加えておく


def callback
# 認証処理

# 認証OK
redirect_to back_to || '/'
end
end

private

# request.env['omniauth.origin']に戻り先が指定されている
# uri.host == requset.hostで自分のホスト名と異なるところへのリダイレクトを阻止している
# ※ originが指定されていないときは、/auth/twitter等のリンクに戻ることになる
def back_to
if request.env['omniauth.origin'].presence && back_to = CGI.unescape(request.env['omniauth.origin'].to_s)
uri = URI.parse(back_to)
return back_to if uri.relative? || uri.host == request.host
end
nil
rescue
nil
end

後は戻りたいURLを指定したリンクを設置すればOK


Rspecは以下のような指定でテスト可能


before {
request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter] = {
'uid' => '12345',
'provider' => 'twitter'
}
request.env['omniauth.origin'] = '/hoge/hoge.html'
get :callback
}
it { response.should redirect_to '/hoge/hoge.html' }

認証が必要なページでの処理


before_filterで呼び出す。
認証済みであればskipし、認証していなければ、ログイン用画面へリダイレクトさせる。
その際にgetリクエストであれば、back_toを付与し、呼び出したい画面へ戻れるようにしておく


def authenticate
# 認証済みだったらreturn

# get requestならback_toを付与してsessions#newに戻す
return redirect_to new_session_path(back_to: url_for(params)) if request.get?
# それ以外は何も付与せずsessions#newに戻す
return redirect_to new_sessions_path
end

コピペで動くはしらない

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。