ンンンパ

ふとしです

Ruby

Ruby 外から Web アクセスする何か (Capybara とか、cli とか) を RSpec でテストするときのアクセス先をモックする

mmmpa.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmpa.net のテストをこの方法で行いました。 本編 たとえば、Capybara は各種ブラウザを介するアクセスのため、webmock が効かず、別の gem が必要なのは有名です。 https://github.com/o…

siege をラップして多少細かい情報をまとめる gem 書いた。

github.com Usage たとえば Rails 内でこうやる。 re = SiegeSiege.run( time: 20, concurrent: 4, user_agent: false, urls: [ "http://localhost:3002#{students_path}", "http://localhost:3002#{students_path} POST name=abc", SiegeSiege::URL.new("ht…

RSpec とか Capybara の Example 内で使いたいメソッドをクラス単位でまとめて使いやすくする gem を書いた。

これ github.com 先週の gem は 80 行ぐらいだったんですが、今回は 40 行です。 なぜ 入社してからこっち、ずっと Vue.js で SPA 制作という業務に従事していましたが、UI 系の宿命で (一部しか) テストがない。 そんななかで、わりと分岐の多い (難しくは…

Access-Control-Allow-Originが設定されてないWeb APIを叩くために中継サーバー書いた。

大げさなタイトルみがありますがただのRailsです。 github.com うすうす実装なのでさがせばあるんでしょうけど、人が書いたもの使いたくない場合ってあるじゃないですか。 起動 $ TARGET=http://you-want-to-ajax.server.com ALLOW=http://your-local-js.ser…

ActiveAdmin辺りでCircular dependency detected while autoloading constant Fooが出る場合の措置。

Rails 4.2.7、ActiveAdmin 1.0.0.pre4で発生しました。 普通にやってる分には出ないんですけど、下の記事みたいに外からRails.application.require_environment!すると、models関連でCircular dependency detected while autoloading constant Fooが出ます。…

Rails開発でリポジトリには入れたくないんだけどローカルではやっておきたいテストがある場合の取りあつかい

自明だったり、すごく重かったり、細かすぎるテストたちがいます。 重いテストは短期的にも長期的にもコストになり、細かすぎるテストは実装変更時のコストが必要以上に高く、よくありません。 しかし、たまにやっときたいんですよというテストがありますの…

Authlogicに関するメモ

認証機能再発明するべからずは有名な鉄則ですが、まるで知らないままというのもマズイので実装を読むことでお茶を濁していきたい。 saltやSCryptの運用、persistence_tokenの更新などで比較的安全にいけるのでは。 パスワード salt Authlogic::Random.friend…

レールズにプルリクエストがマージされてハッピーだった

ので、思いつく限りのSNSやブログに書いています。 ここにも書きます。 どれ 以下の記事のやつを作ってる時に「バグかしら?」と思ってモンキーパッチで回避してて、せっかくだからとpull requestを飛ばしてみたら忘れた頃にマージされたという話です。 qiit…

rails-erdでRails Engineベースのアプリケーション(Spree、Solidusなど)のER図を得る。

たっぷりとしたコードを含むRails Engineは上から読んでいくにはつらいものです。 いくつかのgemに分割されているSpreeのようなアプリケーションを読むにはインストールして起動しつつ、その上で読んでいくのが楽ですが、手がかりがないのはつらい。というこ…

ActionCableで遊んでたらなんかリロード毎につながったりつながらなくなったりすんですけど?って時。

あたらしいもの好きなのでActionCableをいじっています。WebSocketは別に新しくない?おかたいことを言わないで。 ところでこの解決策は推測でしかないんですが、とりあえず解決したので暫定メモ的なアレですが、困ってる人はどうですか。 Redisががんばった…

一年越しでpaizaコーディングスキルチェックの「うなぎを蒲焼きにしたくない」を倒せたので嬉しくなって日記に書く。

トイレ最高! 去年、6回ぐらい挑戦して駄目だったけど、今日ふと思いついて何度か失格して、トイレで座ってる時に突然わかって書いたらうまくいきました。 トイレ最高! 日記です 結局今回も何度か失格はしてるんですけど、個人的に引っかかってたのをなんと…

CGIとしてつくってSinatraにのせた時に気づいたことメモ。

フレームワークに頼りきりだったので、リクエストとレスポンス、アプリケーションの入力と出力などを個別に意識できず、それぞれの責務をうまく分離できていなかった。 リクエスト ユーザーのアクセスした場所やポストされたパラメーター、自動的に送られる…

Herokuを使う予定のない人もTwelve-Factorは読んでおいて損がない。「プロフェッショナルのための実践Heroku入門」読んだ。

The Twelve-Factor AppはHerokuが提唱する、モダンなアプリケーション開発において守らなければならないドグマみたいなもんです。 なおネットで無料で和訳ページがあります。 12factor.net 見よう見まねでやってた実際的な開発手法がカリッとまとまっている…

今朝のメールフォームをHerokuで動くように変更した。

http://sinatra-liaison.herokuapp.com/ github.com データベースへの保持をしなくなったので、Herokuにかんして特につまずくことはなかった。 CGIとSinatra間でのちょっとした違いでちょっと時間がかかった。 CGIとSinatraでのパラメーターの扱いのちがい …

CGIとしてRubyでメールフォームした。その後、立ちあがりが遅いのでSinatraで動くようにした。

最近バックトゥ基礎ということでC言語の学習やデータ構造、アルゴリズムの勉強をしていたのですが、そういえばCGI時代に生きてきたけどCGIで何かをつくったことがないと思い当たった。 それに、徳丸本やAPIの本、Railsガイドなどを読んでフレームワークが良…

プログラミング問題とその回答に「ん?」と思うところがあったのでメモる

問題はこれ。 【Rubyプログラミング問題】値札分割メソッド(split_price)を作成してください - Qiitaqiita.com 自分の回答はこれ def split_price(price_text) unit = (price = price_text.to_s).slice!(/[^0-90-9]*\z/) price == '' ? [unit, ''] : [pric…

Viewのテンプレート内で下から上に挿入するgem書いた。

Kaizan mmmpa/kaizangithub.com 改ざんです。self.output_buffer.gsub!するとCould not concatenate to the buffer because it is not html safe.って怒られたりHTML素通しだったりするので、そこら辺の対処用。 こんなの何に使うんだっていうと、いま作って…

うまれてはじめて gem をつくって公開しました。

Tanemaki といいます mmmpa/tanemakigithub.com README.md に書いてあるとおり、seed.rb で CSV に使って大量の初期値を楽にぶちこむためのやつです。業務で 10 keys ほどもつ Hash を Hoge.create に投げてるのをみて、これは 3 度ぐらい seed.rb を読むと…

Squeel 導入したら ActiveRecord#select で死んだ

User.select(:first_name, :last_name) みたいなことをしておった状態に squeel をいれたら ArgumentError (wrong number of arguments (2 for 0..1)) と言われました。 コードをみたら引数一個しか取らない感じになってる。他はだいたい*argsなのに、なんで…

Heroku のファイル永続化用に Nginx nginx-upload-module でアップローダーを用意する

おはようございます。 先週末にはじめて Heroku にデプロイして以来その便利さのとりこになってとにかく何でもつくってはあげつくってはあげしています。自前のサーバーにあげるとリソースを食いあって残念なことになりますが、これなら多くても安心で文明を…

Rails で mountable なのを作ってる時、test/dummy 以下の FactoryGirl が二重に呼び出されてしまいアレだった。

ネット上で見つけたコードを馬鹿正直にコピペしていたら死んだし俺が悪かったという話です。 いつもの感じで rails plugin new new_plugin --mountable cd new_plugin rails g rspec:install したままではプラグイン用に生成される factories にパスが通って…

API へのアクセス後にコールバックがいる動作のテスト用にアクセス内容を表示するだけの Rails 用意した。

ギョームおつかれさまです。 mmmpa/any_receiver 素 これで http://192.168.30.130:3000/access こう返る。 {"path":"access","method":"get"} パラメーター パラメーターを渡すと http://192.168.30.130:3000/access?param=param_value こんな感じ。 {"para…

Rails で RESTful な API をつくるときは認証、承認をどうしたらいいの?

認証はまぁともかくとして承認の段で http://example.com/api/sessions/token/resources/show みたいなのが一般的ですみたいなこと言われて「?」となったのが発端で考えてました。許可証からなんか出てくるわけじゃないだろ的なあれで。 こう? Rails では…

clientside-haml-js を試そうとしたら undefined がどうのと言われて困った。

結論だけいうと underscore.string のバージョンが 3.0.x だと 640 行目の contents = (_.str || _).rtrim(line[0]); で死ぬ。 underscore.string を 2.4.0 に換えれば健康な生活に戻れます。 で clientside-haml-js 動かしてみましょう + Haml をとりあえず…

Authlogic の create、save で undefined method `true' と言われて困った

Rails 4.2.0、Authlogic 3.4.2 での話です。 Authlogic の問題ではなく scrypt が 2.0.0 だと死ぬので 1.2.1 にしたら動きます。 gem 'authlogic' gem 'scrypt', '~> 1.2.1' 原因がわからなかったのでひとまず gem 'authlogic', github: 'binarylogic/authlo…

各 Input の下にエラーメッセージ出すだけの FormBuilder を書いていた

Rails Plugin のつくりかたを学ぶ一環として書いていた。 これが こうなる 仕事で Rails を触りだしてからとにかくフォームをつくる機会が多い。サイト訪問者が使う層はともかくとして、サイト管理画面になるとなんか嫌になるほどフォームをつくる羽目になっ…

Rails の FormBuilder をテストしようと思ったら new にわたす template をどうすればいいかわからず困った

view 内の form_for から instantiate_builder を経てこういう形で呼びだされます。 builder.new(object_name, object, self, options) self is 何?かというと view から呼びだされるのでもちろん view ですが、FormBuilder 対象のテストなので view なんて…

SASS 記法でマップの書き方がわからなくて困った。

SCSS ではこうですが、SASS では怒られる。 $black: ( name: 'black', light: #666, dark: #000 ) SASS 記法では 1 行でおねがいしますということでした。 $black: (name: 'black', light: #666, dark: #000) ちまたでは SCSS の記事ばかりですが {} 書きた…

Authlogic の Session.create! を失敗したときに Session のインスタンスを例外オブジェクトに持たせたかった。

要は ActiveRecord::RecordInvalid#record のように使いたいんでモンキーパッチで module Authlogic module Session module Existence class SessionInvalidError < ::StandardError def initialize(session) @record = session super end def record @recor…

途中から attr_encrypted を導入したら配列アクセス演算子でアクセスできなくて困った。

最近はドット演算子で attribute を参照する統一をしているので問題ないのですが、初期に書いたのは配列アクセス演算子 [] を結構使っていて難儀しました。 もともとはworker[:name]つう感じで生で扱われてました。 attr_encrypted :name, key: 'a secret ke…