[Groonga-commit] groonga/groonga-test [master] Move option parsing to GroongaTester.run

Back to archive index

null+****@clear***** null+****@clear*****
2012年 3月 6日 (火) 15:57:14 JST


Kouhei Sutou	2012-03-06 15:57:14 +0900 (Tue, 06 Mar 2012)

  New Revision: f67272f1c8328deef093d0c39bbd8bff75ce17fe

  Log:
    Move option parsing to GroongaTester.run

  Modified files:
    bin/groonga-test

  Modified: bin/groonga-test (+55 -41)
===================================================================
--- bin/groonga-test    2012-03-06 15:48:14 +0900 (af336a2)
+++ bin/groonga-test    2012-03-06 15:57:14 +0900 (9de9a50)
@@ -26,6 +26,60 @@ require "shellwords"
 class GroongaTester
   VERSION = "1.0.0"
 
+  class << self
+    def run(argv=nil)
+      argv ||= ARGV.dup
+      tester = new
+      catch do |tag|
+        parser = create_option_parser(tester, tag)
+        targets = parser.parse!(argv)
+        tester.run(*targets)
+      end
+    end
+
+    private
+    def create_option_parser(tester, tag)
+      parser = OptionParser.new
+      parser.banner += " TEST_FILE_OR_DIRECTORY..."
+
+      parser.on("--groonga=GROONGA",
+                "Use GROONGA as groonga command",
+                "(#{tester.groonga})") do |groonga|
+        tester.groonga = groonga
+      end
+
+      parser.on("--base-directory=DIRECTORY",
+                "Use DIRECTORY as a base directory of relative path",
+                "(#{tester.base_directory})") do |directory|
+        tester.base_directory = directory
+      end
+
+      parser.on("--diff=DIFF",
+                "Use DIFF as diff command",
+                "(#{tester.diff})") do |diff|
+        tester.diff = diff
+        tester.diff_options.clear
+      end
+
+      diff_option_is_specified = false
+      parser.on("--diff-option=OPTION",
+                "Use OPTION as diff command",
+                "(#{tester.diff_options.join(' ')})") do |option|
+        tester.diff_options.clear if diff_option_is_specified
+        tester.diff_options << option
+        diff_option_is_specified = true
+      end
+
+      parser.on("--version",
+                "Show version and exit") do
+        puts(GroongaTester::VERSION)
+        throw(tag, true)
+      end
+
+      parser
+    end
+  end
+
   attr_accessor :groonga, :base_directory, :diff, :diff_options
   def initialize
     @groonga = "groonga"
@@ -519,44 +573,4 @@ class GroongaTester
   end
 end
 
-tester = GroongaTester.new
-
-parser = OptionParser.new
-parser.banner += " TEST_FILE_OR_DIRECTORY..."
-
-parser.on("--groonga=GROONGA",
-          "Use GROONGA as groonga command",
-          "(#{tester.groonga})") do |groonga|
-  tester.groonga = groonga
-end
-
-parser.on("--base-directory=DIRECTORY",
-          "Use DIRECTORY as a base directory of relative path",
-          "(#{tester.base_directory})") do |directory|
-  tester.base_directory = directory
-end
-
-parser.on("--diff=DIFF",
-          "Use DIFF as diff command",
-          "(#{tester.diff})") do |diff|
-  tester.diff = diff
-  tester.diff_options.clear
-end
-
-diff_option_is_specified = false
-parser.on("--diff-option=OPTION",
-          "Use OPTION as diff command",
-          "(#{tester.diff_options.join(' ')})") do |option|
-  tester.diff_options.clear if diff_option_is_specified
-  tester.diff_options << option
-  diff_option_is_specified = true
-end
-
-parser.on("--version",
-          "Show version and exit") do
-  puts(GroongaTester::VERSION)
-  exit(true)
-end
-
-targets = parser.parse!
-exit(tester.run(*targets))
+exit(GroongaTester.run)




Groonga-commit メーリングリストの案内
Back to archive index