Rails本体の、testを実行する(5) 番外編

http://d.hatena.ne.jp/kouji0625/20130615/p1 の続きで「Travis CIを設定してみましょう!」と行きたかったのです、まったく設定できませんでした。他人のプロジェクトをTravis CIで設定するのはムズいね。いつかはできるけど、いまではありません(キリッ
ということで、少し変化球として、Railsのパッケージングをしてみます。それでは、今日もはりきっていってみよ〜♪

パッケージング

といっても、rake packageを実行するだけですwww
しばらくすると、以下のgemファイルが生成されます。

内容の確認

せっかくですので、これらが RubyGems.org で配布されている公式のパッケージと変わりがないことを確認してみましょう。
事前に以下のコマンドでオリジナルの gem を取得しておきます。

$ gem install -r rails -v 3.0.3
(以下、想定する実行結果)
Successfully installed activesupport-3.0.3
Successfully installed activemodel-3.0.3
Successfully installed actionpack-3.0.3
Successfully installed activerecord-3.0.3
Successfully installed activeresource-3.0.3
Successfully installed actionmailer-3.0.3
Successfully installed railties-3.0.3
Successfully installed rails-3.0.3
8 gems installed

少し長いけど、確認は以下のコマンドで行った。

$ for f in `find . -name \*.gem`; do echo $f; mkdir -p tmp/orig tmp/mine; (tar xf $f -C tmp/mine 2> /dev/null; cd tmp/mine; tar xzf data.tar.gz 2> /dev/null; rm data.tar.gz; gzip -d metadata.gz; sed -i -e 's/date:.*$/date: 2010-11-16 00:00:00 -06:00/' metadata); (cd tmp/orig; tar xf `rvm gemdir`/cache/`basename $f` 2> /dev/null; tar xzf data.tar.gz 2> /dev/null; rm data.tar.gz; gzip -d metadata.gz) && (cd tmp; diff -rNu orig mine); rm -rf tmp; done
(以下、想定する実行結果)
./actionmailer/pkg/actionmailer-3.0.3.gem
./actionpack/pkg/actionpack-3.0.3.gem
diff -rNu orig/lib/action_view/testing/resolvers.rb mine/lib/action_view/testing/resolvers.rb
--- orig/lib/action_view/testing/resolvers.rb	1970-01-01 09:00:00.000000000 +0900
+++ mine/lib/action_view/testing/resolvers.rb	1970-01-01 09:00:00.000000000 +0900
@@ -22,10 +22,11 @@
       end
 
       templates = []
-      @hash.select { |k,v| k =~ /^#{query}$/ }.each do |path, source|
-        handler, format = extract_handler_and_format(path, formats)
-        templates << Template.new(source, path, handler,
-          :virtual_path => path, :format => format)
+      @hash.each do |_path, source|
+        next unless _path =~ /^#{query}$/
+        handler, format = extract_handler_and_format(_path, formats)
+        templates << Template.new(source, _path, handler,
+          :virtual_path => _path, :format => format)
       end
 
       templates.sort_by {|t| -t.identifier.match(/^#{query}$/).captures.reject(&:blank?).size }
./activemodel/pkg/activemodel-3.0.3.gem
./activerecord/pkg/activerecord-3.0.3.gem
diff -rNu orig/lib/active_record/relation/calculations.rb mine/lib/active_record/relation/calculations.rb
--- orig/lib/active_record/relation/calculations.rb	1970-01-01 09:00:00.000000000 +0900
+++ mine/lib/active_record/relation/calculations.rb	1970-01-01 09:00:00.000000000 +0900
@@ -166,7 +166,7 @@
       if operation == "count"
         column_name ||= (select_for_count || :all)
 
-        if arel.joins(arel) =~ /LEFT OUTER/i
+        if arel.join_sql =~ /LEFT OUTER/i
           distinct = true
           column_name = @klass.primary_key if column_name == :all
         end
diff -rNu orig/lib/active_record/relation/finder_methods.rb mine/lib/active_record/relation/finder_methods.rb
--- orig/lib/active_record/relation/finder_methods.rb	1970-01-01 09:00:00.000000000 +0900
+++ mine/lib/active_record/relation/finder_methods.rb	1970-01-01 09:00:00.000000000 +0900
@@ -194,7 +194,7 @@
 
     def construct_relation_for_association_calculations
       including = (@eager_load_values + @includes_values).uniq
-      join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(@klass, including, arel.joins(arel))
+      join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(@klass, including, arel.join_sql)
       relation = except(:includes, :eager_load, :preload)
       apply_join_dependency(relation, join_dependency)
     end
diff -rNu orig/lib/active_record/relation/query_methods.rb mine/lib/active_record/relation/query_methods.rb
--- orig/lib/active_record/relation/query_methods.rb	1970-01-01 09:00:00.000000000 +0900
+++ mine/lib/active_record/relation/query_methods.rb	1970-01-01 09:00:00.000000000 +0900
@@ -168,7 +168,7 @@
         arel.join(join)
       end
 
-      arel.joins(arel)
+      arel.join_sql
     end
 
     def build_arel
diff -rNu orig/lib/active_record/relation.rb mine/lib/active_record/relation.rb
--- orig/lib/active_record/relation.rb	1970-01-01 09:00:00.000000000 +0900
+++ mine/lib/active_record/relation.rb	1970-01-01 09:00:00.000000000 +0900
@@ -376,7 +376,7 @@
 
     def references_eager_loaded_tables?
       # always convert table names to downcase as in Oracle quoted table names are in uppercase
-      joined_tables = (tables_in_string(arel.joins(arel)) + [table.name, table.table_alias]).compact.map{ |t| t.downcase }.uniq
+      joined_tables = (tables_in_string(arel.join_sql) + [table.name, table.table_alias]).compact.map{ |t| t.downcase }.uniq
       (tables_in_string(to_sql) - joined_tables).any?
     end
 
./activeresource/pkg/activeresource-3.0.3.gem
./activesupport/pkg/activesupport-3.0.3.gem
./pkg/rails-3.0.3.gem
./railties/pkg/railties-3.0.3.gem

想定通りの結果になった。これでオレオレRailsができました。
あとは Travis CI の設定ができればいいんだけど...しばらくかかりそうですorz

--- 参考URL

--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。