2019-01-01から1年間の記事一覧

【Ruby on Rails Advent Calendar 2019】ActiveRecord で後から where クエリを上書きする【2日目】

Ruby on Rails Advent Calendar 2019 2日目の記事になります。 今回は最近ハマっているクエリメソッド付けたり外したりしていることを簡単に書いてみようかと思います。 サンプルモデル 今回は以下のような scope を定義したモデルを例として説明していきた…

【一人 C++20 Advent Calendar 2019】C++20 のコンパイラのサポート状況【1日目】

一人 C++20 Advent Calendar 2019 1日目の記事になります。 一人 C++20 Advent Calendar 2019 とは 最近の C++ 事情を全く把握していないのでリハビリがてらダラダラを C++20 関連の事を書いていこうかなーと思い Advent Calendar をつくりました。 主に C++…

【Ruby Advent Calendar 2019】ピュア Ruby で Ruby 2.7 の Numbered parameter を実装してみよう!【1日目】

Ruby Advent Calendar 2019 1日目の記事になります。 本記事では Ruby 2.7 で実装される Numbered parameter っぽい機能をピュアRuby で実装してみたいと思います。 またこの記事の実装は以下の記事を参考にして書いています。 Rubyのブロックつらい問題を解…

Ebisu.rb #26 で LT してきた

LT いいながらめっちゃ長々と話してしまってすみませんすみません…。 Ebisu.rb に参加してきました。 Ebisu.rb は先月始めて参加して今回で2回目の参加になります。 表参道.rb みたいに雰囲気がよかよかな地域.rb の勉強会です(別に他の勉強会の雰囲気が悪…

表参道.rb #52 で LT してきた

思い出したかのように記事を書きます。 相変わらず懇親会でぼっち力を発揮しているので無限につらい。 Ruby 2.7.0-preview2 のリリースノートを読もう 元々はこの間リリースされた Ruby 2.7.0-preview2 のリリースノートをリアルタイムに読みながらわいわい…

Ruby で文字列の中に含まれている文字列の数を調べたかった

Ruby で文字列の中に含まれている文字列の数を調べたかったんですが、パッと思いつかなかったのでメモ。 現状ではそういうメソッドがないので #scan を使って代用しました。 p "hoge hogehoge h hoge foohoge".scan("hoge").count # => 5 これぐらいなら専用…

Tama.rb に行ってモブプロをやって feature spec をリファクタリングした話

と、いうことで最近噂の Tama.rb が前々から気になったので初めて参加してモブプロをやってきました! Tama.rb #17 Everyday Rails - RSpecによるRailsテスト入門 - connpass 今回の Tama.rb の内容は Everyday Rails - RSpecによるRailsテスト入門 を読みな…

Ruby 2.7 で Enumerable#filter_map が追加される

Ruby 2.7 で Enumerable#filter_map が追加される予定です。 filter_map という名前の通り filter + map を行います。 pp (1..10).filter_map { |i| i + i if i.even? } # => [4, 8, 12, 16, 20] ブロックの戻り値が nil もしくは false である要素を取り除…

Ruby 2.7 で in 演算子が使えるようになる

Ruby 2.7 で in 演算子が使えるようになります。 そもそも in 演算子ってなんやねんって話なんですが、同じく Ruby 2.7 で入る予定のパターンマッチ構文の in になります。 例えばパターンマッチを使用することで次のような判定を行うことが出来ます。 def c…

Ruby 2.7 で private メソッドが self. 付きで呼び出せるようになる

Ruby 2.7 で private メソッドが self. 付きで呼び出せるようになる予定です。 Feature #16123: Allow calling a private method with self. - Ruby master - Ruby Issue Tracking System Feature #11297: Allow private method of self to be called - Ruby…

Ruby のブロック構文の中身を文字列として取得する

using Module.new { refine RubyVM::InstructionSequence do def to_h %i( magic major_version minor_version format_type misc label path absolute_path first_lineno type locals args catch_table bytecode ).zip(to_a).to_h end end using self refine…

【速報】Ruby 2.7 の Numbered parameters が @1 から _1 に変更され、pipeline 演算子が見送りになった

Numbered parameters の記号が @1 から _1 へ変更へ 表題通りなんですが Ruby 2.7 で導入予定であった Numbered parameters の記号が @1 から _1 へと変更になりました。 Misc #15723: Reconsider numbered parameters - Ruby master - Ruby Issue Tracking …

Ruby 2.7 でスターリンソートを書いてみた

元ネタ 計算量O(n)の画期的なソートアルゴリズムであるスターリンソートをHaskell で実装してみた #Haskell - Qiita と、いうことで Ruby でも書いてみました。 ただ書くだけじゃつまらないので Ruby 2.7 で追加予定のパターンマッチを使ってみるなど。 コー…

表参道.rb #48 で LT してきた

そういえば、書くのを忘れてたので忘れないうちに。 5分ぐらいでわかる Ruby 2.7 Ruby 2.7 で追加される(予定)機能やメソッドの話とかしてきました。 どっちかって言うと機能追加に対する議論とかをもうちょい聞きたかったところ(ナンパラとか。

Ruby の lambda に proc オブジェクトを渡した場合、lambda オブジェクトは返ってこない

某所で話題になっているやつです。 Ruby では Kernel.#lambda で proc オブジェクトを生成した場合 lambda として生成されます。 # Kernel.#proc だと lambda でないオブジェクトを生成する proc_obj = lambda { |a, b| "#{a}:#{b}" } pp proc_obj.lambda? #…

【速報】Ruby の trunk に pipeline operator がはいった

追記 pipeline operator の議論は RubyKaigi 2019 の Ruby Committers vs the World で話が出ていたみたいですね。 www.youtube.com 取り急ぎまとめ。 今日、Ruby の開発者会議に参加させて頂いて、さっき返ってきて ML みてたんですがいつの間にか pipeline…

Ripper でパースエラーを検知しようとしてハマった

Ruby でパースエラーになっている箇所を調べたくて Ripper を使ったらハマったので覚書。 Ripper を使う Ripper とは Ruby に標準で付属している Ruby のコードをパースするためのライブラリです。 Ripper では Ripper というクラスがあり、これを継承してパ…

Ruby のパターンマッチを利用して任意のメソッドが定義されているかどうかを判定する

と、いうのが bugs.ruby に来ていたので。 Feature #15824: respond_to pattern for pattern match - Ruby trunk - Ruby Issue Tracking System class Runner def run end def stop end end runner = Runner.new case runner in .run & .stop :reachable in …

Ruby の trunk に(実験的に)パターンマッチ構文が入った!

Ruby の trunk にパータンマッチ構文が実験的に導入されました。 Introduce pattern matching [EXPERIMENTAL] · ruby/ruby@9738f96 · GitHub Feature #14912: Introduce pattern matching syntax - Ruby trunk - Ruby Issue Tracking System NOTE: 実験的に…

最近気づいた継承と mixin の違い

最近気づいたんですが、 継承したスーパークラスのクラスメソッドをサブクラスから呼べる mixin したモジュールのクラスメソッドは呼べない っていう違いがあるんですね。 class Super def self.super_class_method "Super#super_class_method" end def supe…

Ruby の private セッターメソッドは self. をつけても呼び出すことが出来る

さて、 Ruby の private メソッドは通常レシーバを付けて呼び出す事が出来ません。 class User private def age 42 end end user = User.new # NG : private method `age' called for #<User:0x0000562111c42218> (NoMethodError) p user.age これは self. を付けても同じです。 class</user:0x0000562111c42218>…

Ruby 2.7 で `Enumerable#tally` というメソッドが追加される

Ruby 2.7 で Enumerable#tally というメソッドが追加されます。 Feature #11076: Enumerable method count_by - Ruby trunk - Ruby Issue Tracking System あまり聞き慣れない単語のメソッドですが、これは『同じ要素の数を Hash で返す』というメソッドにな…

Ruby のトップレベルメソッドって結局なんなの

以下のような質問があったのでちょっと解説。 @pink_bangbi 僕はselfの概念がつかめておらず、バンビさんが以前書かれた記事で4つ目と5つ目(■)の項目の意味が理解できませんでした。 暇な時で構いませんので解説をいただきたいです。 pic.twitter.com/ZgX…

Rails の touch 時に処理をフックする

任意のレコードの updated_at のみを更新する際に ActiveRecord の #touch を使うことはあると思います。 class User < ActiveRecord::Base end user = User.create(name: "Homu") pp user.updated_at.iso8601(10) # => "2019-02-18T12:36:37.2315494900Z" #…

Rails で default_scope を複数定義すると…

Rails で default_scope を複数定義した場合、『両方の default_scope 』が適用されます。 class Article < ActiveRecord::Base default_scope { where(published: true) } default_scope { where(rating: 'G') } end Article.all # => SELECT * FROM articl…

Ruby でメソッド呼び出しの末尾に空の , があってもエラーにならない

来年はいっぱいアウトプットするぞ〜〜〜といいながら全然やってませんがわたしは元気です。 ところで Ruby って以下のコードみたいに meth(1, 2, ) っていう呼び出しはエラーにならないんですね。 普通に動いてて驚きました。 def meth a, b a + b end p me…