railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

ruby

rubyでGoogle Sheets APIとGoogle Drive APIを使ってみた。

みんな大好きExcelファイルをシステムで自動生成してメールで送付してほしいという案件にあたりました。 そこで、みんな大好きGoogle様のAPIを使ってExcelファイルを生成しました。(※ なぜRubyXLという便利なgemを利用しなかったのかはこの記事の最後をご参…

Rubyの正規表現を複数行に分けて名前付きキャプチャをする

目的 整頓されていないテキストデータをrubyで取り扱いたい コンテンツデータを作る人は、プログラマーではないことが多いので、スペースや改行、フォーマットなどを気にしない 解決策 正規表現でキャプチャする 名前キャプチャを出来ると便利(可読性UP) …

railsでgoogleのclient idを拾う

Google Analyticsではgoogleのclient idを一意にしてユーザの特定を行っているようです。 こんなやつです。 gyazo.com cookieに_gaというキーで登録されており、サーバーに送信していることについ最近きがつきました。 たとえば、ホットペッパーさんのサイト…

RankedModelをSTIで使う時にハマった

Rails 4で作るドラッグアンドドロップで表示順を変更できるサンプルアプリ(スクリーンキャスト付き)などで有名なRankedModel。 RankedModelを知ってから、順序を指定するようなモデルではRankedModelを利用しています。 本日はRankedModelをSTIを利用したと…

ruby scan 文字列を字数で分割

scanで文字列を分割できるんですね。 すごーい。 [8] pry(main)> "aaaabbbcc".scan(/.{1,5}/) => ["aaaab", "bbcc"] [9] pry(main)> "aaaabbbcc".scan(/.{1,3}/) => ["aaa", "abb", "bcc"]

秒数を時分秒に変換します

Time.at(100).utc.strftime('%X') 探してました素晴らしいこれありがとうございます。 Rubyで秒から「時:分:秒」を出力する方法 - 惰眠と論理と指揮棒とlogictkt.hatenablog.com

多次元配列を作成する permutation

a = [1, 2, 3] a.permutation.to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] a.permutation(1).to_a #=> [[1],[2],[3]] a.permutation(2).to_a #=> [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]

Geocoderで半径XXm以内の何かを探す。

setupなどは参考サイトで。 僕が使ったのは、near機能です。 ActiveRecordモデル#nearメソッドを使うと、1km以内のレコードとかを探してきてくれます。 かっこいいです。 実行 A.near('35.659, 139.703', 0.6, :units => :km).collect(&:id) #=> 0.6とすると…

Google APIを使ってファイルの親ディレクトリを調べる

仕事しているとGoogleスプレッドシートのURLやらDocのURLやらを教えていただくのですが、親ディレクトリが知りたいときとかあると思います。 コピーして使うときとか、そもそも何が入ってるんだっけ?みたいな。 Webで使い方を調べても良かったのですが、訓…

日付と日付を比較して、何ヶ月先なのかを計算したい

日付と日付を比較して、何ヶ月先なのかを計算したい。 def month_diff(a, b) return 0 if a == b greater_day = (a > b)? a: b less_day = (a > b)? b: a (1..12).each do |num| return num-1 if less_day+num.month >= greater_day end end puts '---- 0 --…

ハッシュの時は、両端に余分なスペースを入れない

ハッシュの時は、両端に余分なスペースを入れない {hoge: 1} 逆に、ブロックの時は入れる hoge.each{ |item| do_something }

find_eachとfind_in_batchesの違い

忘れないようにメモ find_each: 取ってきたデータは1件ずつ処理 (yield) される find_in_batches: 取ってきたデータは配列でまとめて処理 (yield) される 参考にさせていただいたページ Railsで大量のデータをまとめて更新するならfind_each使うよね - (゚∀゚)…

数字配列の合計を取る

(0..9).to_a.inject(0.0,:+) #=> 45.0 (0..9).to_a.inject(:+) #=> 45

配列をeachするときに、ブロックにかっこ良く渡す

[['2014/12/24', 'eve'], ['2014/12/25', 'dooooon!!']].each{|date, label| p "#{date} -> #{label}"} # "2014/12/24 -> eve" # "2014/12/25 -> dooooon!!" さらに、each_with_object等を使うとき... [['2014/12/24', 'eve'], ['2014/12/25', 'dooooon!!']]…

IntelliJ IDEA14でrailsスクリプトを使う

bundle exec rails runnerをIDEAでデバッグしたかったのだが、やり方が分からなくって苦戦しました。 rails console経由でスクリプトを渡して実行することで実現できたので、まぁ、それでもいいかと思ってます。 Run/Debug Configurations IRB consoleとして…

hashに対してtryする(hash#fetch、nil#try)

hashから要素を取り出すとき、nilだとエラーとなります。 [1] pry(main)> {}[:nanika] => nil [2] pry(main)> nil[:nanika] NoMethodError: undefined method `[]' for nil:NilClass そこでtryの登場ですが、hash#fetchは登録キーがないとエラーがはみ出てき…

ruby リファクタリングするときとか、まず見る

[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita [初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita

rubyからGoogleDriveのスプレッドシートに書き込む

準備1 Drive API アクセスを有効にする ドライブ SDK を有効にする クライアントID、クライアントシークレット、リダイレクトURIを控える ドライブ アプリを登録する - Google デベロッパー アカデミー — Google Developers Gyazo - c274baa73bafb81335bccf…

クラスに定義した関数の実行前後をhookする「method_hooker」

Ruby - メソッドの実行をフックする方法 - Qiita Ruby - メソッドの実行をフックする方法 - Qiita Gemfile gem 'method_hooker' class Hoge def self.hoge1 .. end def pre_hoge p 'pre hoge has executed' end pre_execute_method :pre_hoge Hoge.hoge1 #=>…

moduleでprivate methodを定義する

classだと下記のようにprivate methodを定義できると思います。 class Hoge def public_method1 .... end private def private_method1 ... end しかし、moduleでは方法が少し違います。 module Hoge def public_method1 .... end def private_method1 ... e…

rubyでhashを構造体にしてアクセサっぽくアクセスできるようにする

rubyでhashを構造体にしてアクセサっぽくアクセスできるようにする RubyでHashを構造体にしてアクセサのように取得する 僕はこんな関数にしてみた。 def conversion_of_hash_to_struct(hash) Struct.new(*hash.keys).new(*hash.values.map { |s| Hash === s …

ruby moduleとクラスの違い

moduleはインスタンス(状態)をモテない。 newできない。 メソッドだけを格納できる。 サービスは状態をもたないでイミュータブルにすべきなので、moduleを使う方がよい。

ruby 30分刻みの時刻リストを作る

10.times.map.each_with_index {|i| Time.parse("18:00")+30.minutes*i}

rubyのuniqにブロックを渡す

rubyのuniqメソッドでは、ブロックを渡すことで 下記のように特定の要素同士が同じであればuniqしてくれるみたい!! b = [["student","sam"], ["student","george"], ["teacher","matz"]] b.uniq { |s| s.first } # => [["student", "sam"], ["teacher", "m…

gem のありか

gem env gempath

ruby 引数にくっついてる&ってなんだろう?

処理ブロックを引数として渡す時に&を付与するようです。 # 1引数の手続き(その働きは引数をpで印字すること)を生成し、変数pobjに格納 pobj = proc {|v| p v } [1,2,3].each(&pobj) # 手続きオブジェクトをブロックの代わりに渡している => 1 2 3 参考にさ…