activegroonga 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. data/AUTHORS +1 -0
  2. data/NEWS.ja.rdoc +5 -0
  3. data/NEWS.rdoc +5 -0
  4. data/README.ja.rdoc +49 -0
  5. data/README.rdoc +49 -0
  6. data/Rakefile +175 -0
  7. data/lib/active_groonga.rb +75 -0
  8. data/lib/active_groonga/aggregations.rb +30 -0
  9. data/lib/active_groonga/associations.rb +93 -0
  10. data/lib/active_groonga/associations/belongs_to_association.rb +25 -0
  11. data/lib/active_groonga/attribute_methods.rb +36 -0
  12. data/lib/active_groonga/base.rb +1579 -0
  13. data/lib/active_groonga/column.rb +107 -0
  14. data/lib/active_groonga/dirty.rb +30 -0
  15. data/lib/active_groonga/fixtures.rb +92 -0
  16. data/lib/active_groonga/migration.rb +150 -0
  17. data/lib/active_groonga/rails_support.rb +31 -0
  18. data/lib/active_groonga/reflection.rb +30 -0
  19. data/lib/active_groonga/schema.rb +314 -0
  20. data/lib/active_groonga/schema_dumper.rb +147 -0
  21. data/lib/active_groonga/tasks.rb +16 -0
  22. data/lib/active_groonga/tasks/groonga.rake +162 -0
  23. data/lib/active_groonga/test_case.rb +21 -0
  24. data/lib/active_groonga/test_help.rb +21 -0
  25. data/lib/active_groonga/timestamp.rb +30 -0
  26. data/lib/active_groonga/validations.rb +26 -0
  27. data/lib/active_groonga/version.rb +24 -0
  28. data/license/LGPL +504 -0
  29. data/rails/README +28 -0
  30. data/rails/init.rb +70 -0
  31. data/rails_generators/model_groonga/USAGE +28 -0
  32. data/rails_generators/model_groonga/model_groonga_generator.rb +45 -0
  33. data/rails_generators/model_groonga/templates/fixtures.yml +17 -0
  34. data/rails_generators/model_groonga/templates/migration.rb +16 -0
  35. data/rails_generators/model_groonga/templates/model.rb +2 -0
  36. data/rails_generators/model_groonga/templates/unit_test.rb +8 -0
  37. data/test-unit/Rakefile +35 -0
  38. data/test-unit/TODO +5 -0
  39. data/test-unit/bin/testrb +5 -0
  40. data/test-unit/html/classic.html +15 -0
  41. data/test-unit/html/index.html +25 -0
  42. data/test-unit/html/index.html.ja +27 -0
  43. data/test-unit/lib/test/unit.rb +342 -0
  44. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  45. data/test-unit/lib/test/unit/assertions.rb +1149 -0
  46. data/test-unit/lib/test/unit/attribute.rb +125 -0
  47. data/test-unit/lib/test/unit/autorunner.rb +306 -0
  48. data/test-unit/lib/test/unit/collector.rb +43 -0
  49. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  50. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  51. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  52. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  53. data/test-unit/lib/test/unit/color-scheme.rb +86 -0
  54. data/test-unit/lib/test/unit/color.rb +96 -0
  55. data/test-unit/lib/test/unit/diff.rb +538 -0
  56. data/test-unit/lib/test/unit/error.rb +124 -0
  57. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  58. data/test-unit/lib/test/unit/failure.rb +110 -0
  59. data/test-unit/lib/test/unit/fixture.rb +176 -0
  60. data/test-unit/lib/test/unit/notification.rb +125 -0
  61. data/test-unit/lib/test/unit/omission.rb +143 -0
  62. data/test-unit/lib/test/unit/pending.rb +146 -0
  63. data/test-unit/lib/test/unit/priority.rb +161 -0
  64. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  65. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  66. data/test-unit/lib/test/unit/testcase.rb +360 -0
  67. data/test-unit/lib/test/unit/testresult.rb +89 -0
  68. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  69. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  70. data/test-unit/lib/test/unit/ui/console/testrunner.rb +220 -0
  71. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  72. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  73. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  74. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  75. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  76. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  77. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  78. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  79. data/test-unit/lib/test/unit/version.rb +7 -0
  80. data/test-unit/sample/adder.rb +13 -0
  81. data/test-unit/sample/subtracter.rb +12 -0
  82. data/test-unit/sample/tc_adder.rb +18 -0
  83. data/test-unit/sample/tc_subtracter.rb +18 -0
  84. data/test-unit/sample/test_user.rb +22 -0
  85. data/test-unit/sample/ts_examples.rb +7 -0
  86. data/test-unit/test/collector/test-descendant.rb +135 -0
  87. data/test-unit/test/collector/test-load.rb +333 -0
  88. data/test-unit/test/collector/test_dir.rb +406 -0
  89. data/test-unit/test/collector/test_objectspace.rb +98 -0
  90. data/test-unit/test/run-test.rb +13 -0
  91. data/test-unit/test/test-attribute.rb +86 -0
  92. data/test-unit/test/test-color-scheme.rb +56 -0
  93. data/test-unit/test/test-color.rb +47 -0
  94. data/test-unit/test/test-diff.rb +477 -0
  95. data/test-unit/test/test-emacs-runner.rb +60 -0
  96. data/test-unit/test/test-fixture.rb +287 -0
  97. data/test-unit/test/test-notification.rb +33 -0
  98. data/test-unit/test/test-omission.rb +81 -0
  99. data/test-unit/test/test-pending.rb +70 -0
  100. data/test-unit/test/test-priority.rb +119 -0
  101. data/test-unit/test/test_assertions.rb +1082 -0
  102. data/test-unit/test/test_error.rb +26 -0
  103. data/test-unit/test/test_failure.rb +33 -0
  104. data/test-unit/test/test_testcase.rb +478 -0
  105. data/test-unit/test/test_testresult.rb +113 -0
  106. data/test-unit/test/test_testsuite.rb +129 -0
  107. data/test-unit/test/testunit-test-util.rb +14 -0
  108. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  109. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  110. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  111. data/test-unit/test/util/test_observable.rb +102 -0
  112. data/test-unit/test/util/test_procwrapper.rb +36 -0
  113. data/test/active-groonga-test-utils.rb +234 -0
  114. data/test/fixtures/bookmark.rb +2 -0
  115. data/test/fixtures/task.rb +2 -0
  116. data/test/fixtures/user.rb +2 -0
  117. data/test/run-test.rb +51 -0
  118. data/test/test-associations.rb +24 -0
  119. data/test/test-base.rb +194 -0
  120. data/test/test-schema.rb +49 -0
  121. metadata +192 -0
@@ -0,0 +1,41 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ module Test
8
+ module Unit
9
+ module UI
10
+
11
+ # Provides some utilities common to most, if not all,
12
+ # TestRunners.
13
+ #
14
+ #--
15
+ #
16
+ # Perhaps there ought to be a TestRunner superclass? There
17
+ # seems to be a decent amount of shared code between test
18
+ # runners.
19
+
20
+ module TestRunnerUtilities
21
+
22
+ # Creates a new TestRunner and runs the suite.
23
+ def run(suite, options={})
24
+ return new(suite, options).start
25
+ end
26
+
27
+ # Takes care of the ARGV parsing and suite
28
+ # determination necessary for running one of the
29
+ # TestRunners from the command line.
30
+ def start_command_line_test
31
+ if ARGV.empty?
32
+ puts "You should supply the name of a test suite file to the runner"
33
+ exit
34
+ end
35
+ require ARGV[0].gsub(/.+::/, '')
36
+ new(eval(ARGV[0])).start
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,41 @@
1
+ module Test
2
+ module Unit
3
+ module Util
4
+ module BacktraceFilter
5
+ TESTUNIT_FILE_SEPARATORS = %r{[\\/:]}
6
+ TESTUNIT_PREFIX = __FILE__.split(TESTUNIT_FILE_SEPARATORS)[0..-3]
7
+ TESTUNIT_RB_FILE = /\.rb\Z/
8
+
9
+ module_function
10
+ def filter_backtrace(backtrace, prefix=nil)
11
+ return ["No backtrace"] unless(backtrace)
12
+ split_p = if(prefix)
13
+ prefix.split(TESTUNIT_FILE_SEPARATORS)
14
+ else
15
+ TESTUNIT_PREFIX
16
+ end
17
+ match = proc do |e|
18
+ split_e = e.split(TESTUNIT_FILE_SEPARATORS)[0, split_p.size]
19
+ next false unless(split_e[0..-2] == split_p[0..-2])
20
+ split_e[-1].sub(TESTUNIT_RB_FILE, '') == split_p[-1]
21
+ end
22
+ return backtrace unless(backtrace.detect(&match))
23
+ found_prefix = false
24
+ new_backtrace = backtrace.reverse.reject do |e|
25
+ if(match[e])
26
+ found_prefix = true
27
+ true
28
+ elsif(found_prefix)
29
+ false
30
+ else
31
+ true
32
+ end
33
+ end.reverse
34
+ new_backtrace = (new_backtrace.empty? ? backtrace : new_backtrace)
35
+ new_backtrace = new_backtrace.reject(&match)
36
+ new_backtrace.empty? ? backtrace : new_backtrace
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,28 @@
1
+ module Test
2
+ module Unit
3
+ module Util
4
+ module MethodOwnerFinder
5
+ module_function
6
+ def find(object, method_name)
7
+ method = object.method(method_name)
8
+ return method.owner if method.respond_to?(:owner)
9
+
10
+ if /\((.+?)\)\#/ =~ method.to_s
11
+ owner_name = $1
12
+ if /\A#</ =~ owner_name
13
+ ObjectSpace.each_object(Module) do |mod|
14
+ return mod if mod.to_s == owner_name
15
+ end
16
+ else
17
+ owner_name.split(/::/).inject(Object) do |parent, name|
18
+ parent.const_get(name)
19
+ end
20
+ end
21
+ else
22
+ object.class
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,90 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ require 'test/unit/util/procwrapper'
8
+
9
+ module Test
10
+ module Unit
11
+ module Util
12
+
13
+ # This is a utility class that allows anything mixing
14
+ # it in to notify a set of listeners about interesting
15
+ # events.
16
+ module Observable
17
+ # We use this for defaults since nil might mean something
18
+ NOTHING = "NOTHING/#{__id__}"
19
+
20
+ # Adds the passed proc as a listener on the
21
+ # channel indicated by channel_name. listener_key
22
+ # is used to remove the listener later; if none is
23
+ # specified, the proc itself is used.
24
+ #
25
+ # Whatever is used as the listener_key is
26
+ # returned, making it very easy to use the proc
27
+ # itself as the listener_key:
28
+ #
29
+ # listener = add_listener("Channel") { ... }
30
+ # remove_listener("Channel", listener)
31
+ def add_listener(channel_name, listener_key=NOTHING, &listener) # :yields: value
32
+ unless(block_given?)
33
+ raise ArgumentError.new("No callback was passed as a listener")
34
+ end
35
+
36
+ key = listener_key
37
+ if (listener_key == NOTHING)
38
+ listener_key = listener
39
+ key = ProcWrapper.new(listener)
40
+ end
41
+
42
+ channels[channel_name] ||= {}
43
+ channels[channel_name][key] = listener
44
+ return listener_key
45
+ end
46
+
47
+ # Removes the listener indicated by listener_key
48
+ # from the channel indicated by
49
+ # channel_name. Returns the registered proc, or
50
+ # nil if none was found.
51
+ def remove_listener(channel_name, listener_key)
52
+ channel = channels[channel_name]
53
+ return nil unless (channel)
54
+ key = listener_key
55
+ if (listener_key.instance_of?(Proc))
56
+ key = ProcWrapper.new(listener_key)
57
+ end
58
+ if (channel.has_key?(key))
59
+ return channel.delete(key)
60
+ end
61
+ return nil
62
+ end
63
+
64
+ # Calls all the procs registered on the channel
65
+ # indicated by channel_name. If value is
66
+ # specified, it is passed in to the procs,
67
+ # otherwise they are called with no arguments.
68
+ #
69
+ #--
70
+ #
71
+ # Perhaps this should be private? Would it ever
72
+ # make sense for an external class to call this
73
+ # method directly?
74
+ def notify_listeners(channel_name, *arguments)
75
+ channel = channels[channel_name]
76
+ return 0 unless (channel)
77
+ listeners = channel.values
78
+ listeners.each { |listener| listener.call(*arguments) }
79
+ return listeners.size
80
+ end
81
+
82
+ private
83
+ def channels
84
+ @channels ||= {}
85
+ return @channels
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,48 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ module Test
8
+ module Unit
9
+ module Util
10
+
11
+ # Allows the storage of a Proc passed through '&' in a
12
+ # hash.
13
+ #
14
+ # Note: this may be inefficient, since the hash being
15
+ # used is not necessarily very good. In Observable,
16
+ # efficiency is not too important, since the hash is
17
+ # only accessed when adding and removing listeners,
18
+ # not when notifying.
19
+
20
+ class ProcWrapper
21
+
22
+ # Creates a new wrapper for a_proc.
23
+ def initialize(a_proc)
24
+ @a_proc = a_proc
25
+ @hash = a_proc.inspect.sub(/^(#<#{a_proc.class}:)/){''}.sub(/(>)$/){''}.hex
26
+ end
27
+
28
+ def hash
29
+ return @hash
30
+ end
31
+
32
+ def ==(other)
33
+ case(other)
34
+ when ProcWrapper
35
+ return @a_proc == other.to_proc
36
+ else
37
+ return super
38
+ end
39
+ end
40
+ alias :eql? :==
41
+
42
+ def to_proc
43
+ return @a_proc
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,7 @@
1
+
2
+ # HACK: quick and dirty to get integrated into the new project - ryan
3
+ module Test
4
+ module Unit
5
+ VERSION = '2.0.3'
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ class Adder
6
+ def initialize(number)
7
+ @number = number
8
+ end
9
+ def add(number)
10
+ return @number + number
11
+ end
12
+ end
13
+
@@ -0,0 +1,12 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ class Subtracter
6
+ def initialize(number)
7
+ @number = number
8
+ end
9
+ def subtract(number)
10
+ return @number - number
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+ require 'adder'
7
+
8
+ class TC_Adder < Test::Unit::TestCase
9
+ def setup
10
+ @adder = Adder.new(5)
11
+ end
12
+ def test_add
13
+ assert_equal(7, @adder.add(2), "Should have added correctly")
14
+ end
15
+ def teardown
16
+ @adder = nil
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+ require 'subtracter'
7
+
8
+ class TC_Subtracter < Test::Unit::TestCase
9
+ def setup
10
+ @subtracter = Subtracter.new(5)
11
+ end
12
+ def test_subtract
13
+ assert_equal(3, @subtracter.subtract(2), "Should have subtracted correctly")
14
+ end
15
+ def teardown
16
+ @subtracter = nil
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ # nested test case example.
2
+
3
+ class UserTest < Test::Unit::TestCase
4
+ def setup
5
+ @user = "me"
6
+ end
7
+
8
+ def test_full_name
9
+ assert_equal("me", @user)
10
+ end
11
+
12
+ class ProfileTest < UserTest
13
+ setup
14
+ def setup_profile
15
+ @user += ": profile"
16
+ end
17
+
18
+ def test_has_profile
19
+ assert_match(/: profile/, @user)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+ require 'tc_adder'
7
+ require 'tc_subtracter'
@@ -0,0 +1,135 @@
1
+ require 'test/unit'
2
+ require 'test/unit/collector/descendant'
3
+
4
+ class TestUnitCollectorDescendant < Test::Unit::TestCase
5
+ def setup
6
+ @previous_descendants = Test::Unit::TestCase::DESCENDANTS.dup
7
+ Test::Unit::TestCase::DESCENDANTS.clear
8
+
9
+ @test_case1 = Class.new(Test::Unit::TestCase) do
10
+ def self.name
11
+ "test-case1"
12
+ end
13
+
14
+ def test_1
15
+ end
16
+
17
+ def test_2
18
+ end
19
+ end
20
+
21
+ @test_case2 = Class.new(Test::Unit::TestCase) do
22
+ def self.name
23
+ "test-case2"
24
+ end
25
+
26
+ def test_0
27
+ end
28
+ end
29
+
30
+ @no_test_case = Class.new do
31
+ def self.name
32
+ "no-test-case"
33
+ end
34
+
35
+ def test_4
36
+ end
37
+ end
38
+ end
39
+
40
+ def teardown
41
+ Test::Unit::TestCase::DESCENDANTS.replace(@previous_descendants)
42
+ end
43
+
44
+ def test_basic_collection
45
+ assert_collect(full_suite("name"), "name")
46
+
47
+ assert_collect(full_suite("name"), "name") do |collector|
48
+ collector.filter = []
49
+ end
50
+ end
51
+
52
+ def test_filtered_collection
53
+ assert_collect(empty_suite) do |collector|
54
+ collector.filter = Proc.new {false}
55
+ end
56
+
57
+ assert_collect(full_suite) do |collector|
58
+ collector.filter = Proc.new {true}
59
+ end
60
+
61
+ assert_collect(full_suite) do |collector|
62
+ collector.filter = Proc.new {nil}
63
+ end
64
+
65
+ assert_collect(empty_suite) do |collector|
66
+ collector.filter = [Proc.new {false}, Proc.new {true}]
67
+ end
68
+
69
+ assert_collect(full_suite) do |collector|
70
+ collector.filter = [Proc.new {true}, Proc.new {false}]
71
+ end
72
+
73
+ assert_collect(empty_suite) do |collector|
74
+ collector.filter = [Proc.new {nil}, Proc.new {false}]
75
+ end
76
+
77
+ assert_collect(full_suite) do |collector|
78
+ collector.filter = [Proc.new {nil}, Proc.new {true}]
79
+ end
80
+
81
+ expected = empty_suite
82
+ suite1 = Test::Unit::TestSuite.new(@test_case1.name)
83
+ suite1 << @test_case1.new("test_1")
84
+ suite2 = Test::Unit::TestSuite.new(@test_case2.name)
85
+ suite2 << @test_case2.new("test_0")
86
+ expected << suite1 << suite2
87
+ assert_collect(expected) do |collector|
88
+ collector.filter = Proc.new do |test|
89
+ ['test_1', 'test_0'].include?(test.method_name)
90
+ end
91
+ end
92
+
93
+ expected = empty_suite
94
+ suite1 = Test::Unit::TestSuite.new(@test_case1.name)
95
+ suite1 << @test_case1.new("test_1")
96
+ suite2 = Test::Unit::TestSuite.new(@test_case2.name)
97
+ suite2 << @test_case2.new("test_0")
98
+ expected << suite1 << suite2
99
+ assert_collect(expected) do |collector|
100
+ filters = [Proc.new {|test| test.method_name == 'test_1' ? true : nil},
101
+ Proc.new {|test| test.method_name == 'test_0' ? true : nil},
102
+ Proc.new {false}]
103
+ collector.filter = filters
104
+ end
105
+ end
106
+
107
+ private
108
+ def assert_collect(expected, *collect_args)
109
+ collector = Test::Unit::Collector::Descendant.new
110
+ yield(collector) if block_given?
111
+ assert_equal(expected, collector.send(:collect, *collect_args))
112
+ end
113
+
114
+ def default_name
115
+ Test::Unit::Collector::Descendant::NAME
116
+ end
117
+
118
+ def empty_suite(name=nil)
119
+ Test::Unit::TestSuite.new(name || default_name)
120
+ end
121
+
122
+ def full_suite(name=nil)
123
+ sub_suite1 = Test::Unit::TestSuite.new(@test_case1.name)
124
+ sub_suite1 << @test_case1.new('test_1')
125
+ sub_suite1 << @test_case1.new('test_2')
126
+
127
+ sub_suite2 = Test::Unit::TestSuite.new(@test_case2.name)
128
+ sub_suite2 << @test_case2.new('test_0')
129
+
130
+ suite = empty_suite(name)
131
+ suite << sub_suite1
132
+ suite << sub_suite2
133
+ suite
134
+ end
135
+ end