bento_search 1.5.0 → 2.0.0.rc1
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.
- checksums.yaml +5 -5
- data/README.md +27 -24
- data/Rakefile +30 -11
- data/app/assets/javascripts/bento_search/ajax_load.js +54 -22
- data/app/controllers/bento_search/search_controller.rb +31 -30
- data/app/helpers/bento_search_helper.rb +72 -74
- data/app/models/bento_search/concurrent_searcher.rb +136 -0
- data/app/models/bento_search/result_item.rb +15 -12
- data/app/models/bento_search/results/serialization.rb +22 -13
- data/app/models/bento_search/search_engine.rb +170 -140
- data/app/search_engines/bento_search/doaj_articles_engine.rb +20 -20
- data/app/search_engines/bento_search/ebsco_host_engine.rb +3 -3
- data/app/search_engines/bento_search/eds_engine.rb +326 -206
- data/app/search_engines/bento_search/google_books_engine.rb +2 -2
- data/app/search_engines/bento_search/scopus_engine.rb +87 -87
- data/app/search_engines/bento_search/summon_engine.rb +1 -1
- data/app/views/bento_search/_ajax_loading.html.erb +17 -0
- data/app/views/bento_search/_item_title.html.erb +2 -4
- data/app/views/bento_search/_link.html.erb +3 -3
- data/lib/bento_search.rb +24 -9
- data/lib/bento_search/engine.rb +2 -0
- data/lib/bento_search/version.rb +1 -1
- data/lib/generators/bento_search/install/ajax_load_js_generator.rb +15 -0
- data/test/decorator/standard_decorator_test.rb +30 -30
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/config/application.rb +7 -0
- data/test/dummy/config/boot.rb +4 -9
- data/test/dummy/config/environments/development.rb +2 -0
- data/test/dummy/config/environments/production.rb +7 -1
- data/test/dummy/config/environments/test.rb +10 -3
- data/test/functional/bento_search/search_controller_test.rb +68 -58
- data/test/helper/bento_search_helper_test.rb +103 -103
- data/test/search_engines/doaj_articles_engine_test.rb +9 -9
- data/test/search_engines/eds_engine_test.rb +91 -59
- data/test/search_engines/google_site_search_test.rb +48 -48
- data/test/search_engines/scopus_engine_test.rb +51 -51
- data/test/search_engines/search_engine_base_test.rb +108 -86
- data/test/search_engines/search_engine_test.rb +68 -56
- data/test/support/atom.xsd.xml +3 -3
- data/test/support/xml.xsd +117 -0
- data/test/test_helper.rb +23 -12
- data/test/unit/concurrent_searcher_test.rb +75 -0
- data/test/unit/pagination_test.rb +12 -12
- data/test/vcr_cassettes/eds/FullText_CustomLink.yml +198 -0
- data/test/vcr_cassettes/eds/basic_search_smoke_test.yml +1036 -1729
- data/test/vcr_cassettes/eds/catalog_ebook_query.yml +218 -0
- data/test/vcr_cassettes/eds/catalog_query.yml +255 -0
- data/test/vcr_cassettes/eds/get_auth_token.yml +11 -44
- data/test/vcr_cassettes/eds/get_auth_token_failure.yml +10 -7
- data/test/vcr_cassettes/eds/get_with_auth.yml +144 -153
- data/test/vcr_cassettes/eds/get_with_auth_recovers_from_bad_auth.yml +167 -223
- data/test/view/atom_results_test.rb +94 -94
- metadata +36 -46
- data/app/assets/javascripts/bento_search.js +0 -3
- data/app/item_decorators/bento_search/ebscohost/conditional_openurl_main_link.rb +0 -36
- data/app/item_decorators/bento_search/only_premade_openurl.rb +0 -20
- data/app/item_decorators/bento_search/openurl_add_other_link.rb +0 -39
- data/app/item_decorators/bento_search/openurl_main_link.rb +0 -34
- data/app/models/bento_search/multi_searcher.rb +0 -131
- data/test/dummy/config/initializers/secret_token.rb +0 -8
- data/test/unit/multi_searcher_test.rb +0 -49
@@ -4,50 +4,50 @@ require 'test_helper'
|
|
4
4
|
|
5
5
|
class SearchEngineTest < ActiveSupport::TestCase
|
6
6
|
MockEngine = BentoSearch::MockEngine
|
7
|
-
|
7
|
+
|
8
8
|
test "takes configuration" do
|
9
9
|
conf = Confstruct::Configuration.new( :foo => "foo", :bar => "bar", :top => {:next => "required key"} )
|
10
10
|
engine = MockEngine.new(conf)
|
11
|
-
|
11
|
+
|
12
12
|
assert_not_nil engine.configuration
|
13
13
|
assert_equal "foo", engine.configuration.foo
|
14
14
|
assert_equal "bar", engine.configuration.bar
|
15
15
|
assert_equal "required key", engine.configuration.top.next
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
test "nested configuration with hash" do
|
19
19
|
# possible bug in Confstruct make sure we're working around
|
20
|
-
# if needed.
|
20
|
+
# if needed.
|
21
21
|
# https://github.com/mbklein/confstruct/issues/14
|
22
22
|
engine = MockEngine.new("top" => {"one" => "two"})
|
23
|
-
|
24
|
-
assert_equal "two", engine.configuration.top.one
|
23
|
+
|
24
|
+
assert_equal "two", engine.configuration.top.one
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
test "nested required config key" do
|
28
28
|
requires_class = Class.new(MockEngine) do
|
29
29
|
def self.required_configuration
|
30
30
|
["required.mykey"]
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
assert_raise ArgumentError do
|
35
35
|
requires_class.new
|
36
|
-
end
|
37
|
-
|
36
|
+
end
|
37
|
+
|
38
38
|
assert_raise ArgumentError do
|
39
39
|
requires_class.new(:requires => {})
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
assert_raise ArgumentError do
|
43
43
|
requires_class.new(:required => {:mykey => nil})
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
assert_nothing_raised do
|
47
47
|
requires_class.new(:required => {:mykey => "foo"})
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
test "merges default configuration" do
|
52
52
|
@dummy_class = Class.new do
|
53
53
|
include BentoSearch::SearchEngine
|
@@ -59,120 +59,132 @@ class SearchEngineTest < ActiveSupport::TestCase
|
|
59
59
|
}
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
engine = @dummy_class.new( :two => "new", :array => ["one", "two"], :nested => {:two => "new"}, :required => {:mykey => "required key"} )
|
64
|
-
|
64
|
+
|
65
65
|
assert_kind_of Confstruct::Configuration, engine.configuration
|
66
66
|
assert_equal "default" , engine.configuration.one
|
67
67
|
assert_equal "new" , engine.configuration.two
|
68
68
|
assert_equal "default" , engine.configuration.nested.one
|
69
69
|
assert_equal "new" , engine.configuration.nested.two
|
70
|
-
assert_equal ["one", "two"] , engine.configuration.array
|
70
|
+
assert_equal ["one", "two"] , engine.configuration.array
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
test "no default configuration" do
|
74
74
|
@dummy_class = Class.new do
|
75
75
|
include BentoSearch::SearchEngine
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
engine = @dummy_class.new( :one => "one" )
|
79
|
-
|
79
|
+
|
80
80
|
assert_kind_of Confstruct::Configuration, engine.configuration
|
81
81
|
assert_equal "one", engine.configuration.one
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
test "sets metadata on results" do
|
85
85
|
engine = MockEngine.new(:id => "foo")
|
86
|
-
|
86
|
+
|
87
87
|
results = engine.search(:query => "cancer", :per_page => 20)
|
88
|
-
|
88
|
+
|
89
89
|
assert_present results.search_args
|
90
90
|
assert_equal "foo", results.engine_id
|
91
|
-
|
91
|
+
|
92
92
|
pagination = results.pagination
|
93
93
|
assert_present pagination
|
94
|
-
|
94
|
+
|
95
95
|
assert_equal 20, pagination.per_page
|
96
96
|
assert_equal 1, pagination.current_page
|
97
97
|
assert_equal 1, pagination.start_record
|
98
98
|
assert_equal 20, pagination.end_record
|
99
99
|
assert pagination.first_page?
|
100
|
-
|
100
|
+
|
101
101
|
assert_present pagination.total_pages
|
102
102
|
assert_present pagination.count_records
|
103
|
-
|
103
|
+
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
test "sets metadata on items" do
|
107
|
-
engine = MockEngine.new(:id => "foo", :for_display => {:mykey => "value", :decorator => "Foo"})
|
107
|
+
engine = MockEngine.new(:id => "foo", :for_display => {:mykey => "value", :decorator => "Foo"})
|
108
108
|
results = engine.search(:query => "cancer")
|
109
109
|
record = results.first
|
110
|
-
|
110
|
+
|
111
111
|
assert_present record.engine_id
|
112
112
|
assert_present record.display_configuration
|
113
|
-
assert_present record.decorator
|
113
|
+
assert_present record.decorator
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
test "failed sets metadata on results" do
|
117
117
|
engine = MockEngine.new(:id => "fail_engine", :error => {:message => "failed"}, :for_display => {:foo => "foo"})
|
118
|
-
|
118
|
+
|
119
119
|
results = engine.search(:query => "cancer", :per_page => 20)
|
120
|
-
|
120
|
+
|
121
121
|
assert results.failed?
|
122
122
|
assert_present results.error
|
123
123
|
assert_equal "fail_engine", results.engine_id
|
124
124
|
assert_present results.search_args
|
125
|
-
assert_equal( {:foo => "foo"}, results.display_configuration )
|
125
|
+
assert_equal( {:foo => "foo"}, results.display_configuration )
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
test "auto rescued exception, with proper metadata" do
|
129
|
-
engine = MockEngine.new(:id => "raises", :raise_exception_class =>
|
130
|
-
|
129
|
+
engine = MockEngine.new(:id => "raises", :raise_exception_class => BentoSearch::RubyTimeoutClass.name, :for_display => {:foo => "foo"})
|
130
|
+
|
131
131
|
results = engine.search("foo", :per_page => 20)
|
132
|
-
|
132
|
+
|
133
133
|
assert results.failed?, "marked failed"
|
134
|
-
assert_present results.error
|
134
|
+
assert_present results.error
|
135
|
+
assert_present results.error[:exception]
|
135
136
|
assert_equal "raises", results.engine_id
|
136
137
|
assert_present results.search_args
|
137
138
|
assert_equal "foo", results.search_args[:query]
|
138
|
-
|
139
|
+
|
139
140
|
assert_equal( {:foo => "foo"}, results.display_configuration )
|
140
141
|
end
|
141
|
-
|
142
|
-
|
142
|
+
|
143
|
+
test "can set auto rescued exceptions on instance" do
|
144
|
+
engine = MockEngine.new(:id => "raises", :raise_exception_class => "StandardError", :for_display => {:foo => "foo"})
|
145
|
+
engine.auto_rescued_exceptions = [StandardError]
|
146
|
+
|
147
|
+
results = engine.search("foo", :per_page => 20)
|
148
|
+
|
149
|
+
assert results.failed?, "marked failed"
|
150
|
+
assert_present results.error
|
151
|
+
assert_present results.error[:exception]
|
152
|
+
end
|
153
|
+
|
154
|
+
|
143
155
|
test "has empty :for_display config" do
|
144
156
|
engine = MockEngine.new
|
145
|
-
|
157
|
+
|
146
158
|
assert_not_nil engine.configuration.for_display
|
147
159
|
end
|
148
|
-
|
160
|
+
|
149
161
|
test "error results still filled out okay" do
|
150
162
|
engine = MockEngine.new(:error => {:msg => "forced error"}, :id => "test")
|
151
|
-
|
163
|
+
|
152
164
|
results = engine.search("foo")
|
153
|
-
|
165
|
+
|
154
166
|
assert_present results.search_args
|
155
167
|
assert_equal "test", results.engine_id
|
156
|
-
|
168
|
+
|
157
169
|
pagination = nil
|
158
170
|
assert_nothing_raised { pagination = results.pagination }
|
159
|
-
|
171
|
+
|
160
172
|
assert_present pagination
|
161
173
|
assert_equal 0, pagination.count_records
|
162
|
-
|
174
|
+
|
163
175
|
end
|
164
|
-
|
165
|
-
|
176
|
+
|
177
|
+
|
166
178
|
test "carries display configuration over to results" do
|
167
|
-
engine = MockEngine.new(:id => "foo",
|
179
|
+
engine = MockEngine.new(:id => "foo",
|
168
180
|
:for_display => {:foo => "bar", :nested => {"one" => "two"}}
|
169
181
|
)
|
170
|
-
|
182
|
+
|
171
183
|
results = engine.search("foo")
|
172
184
|
|
173
185
|
assert_present results.display_configuration
|
174
|
-
assert_present results.display_configuration.foo
|
175
|
-
assert_present results.display_configuration.nested.one
|
186
|
+
assert_present results.display_configuration.foo
|
187
|
+
assert_present results.display_configuration.nested.one
|
176
188
|
end
|
177
|
-
|
189
|
+
|
178
190
|
end
|
data/test/support/atom.xsd.xml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
-
<xs:schema targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified"
|
2
|
+
<xs:schema targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified"
|
3
3
|
attributeFormDefault="unqualified"
|
4
4
|
xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
5
5
|
<xs:annotation>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
found here http://www.atomenabled.org/developers/syndication/atom-format-spec.php.
|
9
9
|
</xs:documentation>
|
10
10
|
</xs:annotation>
|
11
|
-
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="
|
11
|
+
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="./xml.xsd" />
|
12
12
|
<xs:annotation>
|
13
13
|
<xs:documentation>
|
14
14
|
An Atom document may have two root elements, feed and entry, as defined in section 2.
|
@@ -237,4 +237,4 @@
|
|
237
237
|
<xs:attribute ref="xml:lang" />
|
238
238
|
<xs:anyAttribute namespace="##other"/>
|
239
239
|
</xs:attributeGroup>
|
240
|
-
</xs:schema>
|
240
|
+
</xs:schema>
|
@@ -0,0 +1,117 @@
|
|
1
|
+
<?xml version='1.0'?>
|
2
|
+
<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >
|
3
|
+
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
|
4
|
+
|
5
|
+
<xs:annotation>
|
6
|
+
<xs:documentation>
|
7
|
+
See http://www.w3.org/XML/1998/namespace.html and
|
8
|
+
http://www.w3.org/TR/REC-xml for information about this namespace.
|
9
|
+
|
10
|
+
This schema document describes the XML namespace, in a form
|
11
|
+
suitable for import by other schema documents.
|
12
|
+
|
13
|
+
Note that local names in this namespace are intended to be defined
|
14
|
+
only by the World Wide Web Consortium or its subgroups. The
|
15
|
+
following names are currently defined in this namespace and should
|
16
|
+
not be used with conflicting semantics by any Working Group,
|
17
|
+
specification, or document instance:
|
18
|
+
|
19
|
+
base (as an attribute name): denotes an attribute whose value
|
20
|
+
provides a URI to be used as the base for interpreting any
|
21
|
+
relative URIs in the scope of the element on which it
|
22
|
+
appears; its value is inherited. This name is reserved
|
23
|
+
by virtue of its definition in the XML Base specification.
|
24
|
+
|
25
|
+
lang (as an attribute name): denotes an attribute whose value
|
26
|
+
is a language code for the natural language of the content of
|
27
|
+
any element; its value is inherited. This name is reserved
|
28
|
+
by virtue of its definition in the XML specification.
|
29
|
+
|
30
|
+
space (as an attribute name): denotes an attribute whose
|
31
|
+
value is a keyword indicating what whitespace processing
|
32
|
+
discipline is intended for the content of the element; its
|
33
|
+
value is inherited. This name is reserved by virtue of its
|
34
|
+
definition in the XML specification.
|
35
|
+
|
36
|
+
Father (in any context at all): denotes Jon Bosak, the chair of
|
37
|
+
the original XML Working Group. This name is reserved by
|
38
|
+
the following decision of the W3C XML Plenary and
|
39
|
+
XML Coordination groups:
|
40
|
+
|
41
|
+
In appreciation for his vision, leadership and dedication
|
42
|
+
the W3C XML Plenary on this 10th day of February, 2000
|
43
|
+
reserves for Jon Bosak in perpetuity the XML name
|
44
|
+
xml:Father
|
45
|
+
</xs:documentation>
|
46
|
+
</xs:annotation>
|
47
|
+
|
48
|
+
<xs:annotation>
|
49
|
+
<xs:documentation>This schema defines attributes and an attribute group
|
50
|
+
suitable for use by
|
51
|
+
schemas wishing to allow xml:base, xml:lang or xml:space attributes
|
52
|
+
on elements they define.
|
53
|
+
|
54
|
+
To enable this, such a schema must import this schema
|
55
|
+
for the XML namespace, e.g. as follows:
|
56
|
+
<schema . . .>
|
57
|
+
. . .
|
58
|
+
<import namespace="http://www.w3.org/XML/1998/namespace"
|
59
|
+
schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
|
60
|
+
|
61
|
+
Subsequently, qualified reference to any of the attributes
|
62
|
+
or the group defined below will have the desired effect, e.g.
|
63
|
+
|
64
|
+
<type . . .>
|
65
|
+
. . .
|
66
|
+
<attributeGroup ref="xml:specialAttrs"/>
|
67
|
+
|
68
|
+
will define a type which will schema-validate an instance
|
69
|
+
element with any of those attributes</xs:documentation>
|
70
|
+
</xs:annotation>
|
71
|
+
|
72
|
+
<xs:annotation>
|
73
|
+
<xs:documentation>In keeping with the XML Schema WG's standard versioning
|
74
|
+
policy, this schema document will persist at
|
75
|
+
http://www.w3.org/2001/03/xml.xsd.
|
76
|
+
At the date of issue it can also be found at
|
77
|
+
http://www.w3.org/2001/xml.xsd.
|
78
|
+
The schema document at that URI may however change in the future,
|
79
|
+
in order to remain compatible with the latest version of XML Schema
|
80
|
+
itself. In other words, if the XML Schema namespace changes, the version
|
81
|
+
of this document at
|
82
|
+
http://www.w3.org/2001/xml.xsd will change
|
83
|
+
accordingly; the version at
|
84
|
+
http://www.w3.org/2001/03/xml.xsd will not change.
|
85
|
+
</xs:documentation>
|
86
|
+
</xs:annotation>
|
87
|
+
|
88
|
+
<xs:attribute name="lang" type="xs:language">
|
89
|
+
<xs:annotation>
|
90
|
+
<xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
|
91
|
+
codes as the enumerated possible values . . .</xs:documentation>
|
92
|
+
</xs:annotation>
|
93
|
+
</xs:attribute>
|
94
|
+
|
95
|
+
<xs:attribute name="space" default="preserve">
|
96
|
+
<xs:simpleType>
|
97
|
+
<xs:restriction base="xs:NCName">
|
98
|
+
<xs:enumeration value="default"/>
|
99
|
+
<xs:enumeration value="preserve"/>
|
100
|
+
</xs:restriction>
|
101
|
+
</xs:simpleType>
|
102
|
+
</xs:attribute>
|
103
|
+
|
104
|
+
<xs:attribute name="base" type="xs:anyURI">
|
105
|
+
<xs:annotation>
|
106
|
+
<xs:documentation>See http://www.w3.org/TR/xmlbase/ for
|
107
|
+
information about this attribute.</xs:documentation>
|
108
|
+
</xs:annotation>
|
109
|
+
</xs:attribute>
|
110
|
+
|
111
|
+
<xs:attributeGroup name="specialAttrs">
|
112
|
+
<xs:attribute ref="xml:base"/>
|
113
|
+
<xs:attribute ref="xml:lang"/>
|
114
|
+
<xs:attribute ref="xml:space"/>
|
115
|
+
</xs:attributeGroup>
|
116
|
+
|
117
|
+
</xs:schema>
|
data/test/test_helper.rb
CHANGED
@@ -2,14 +2,25 @@
|
|
2
2
|
ENV["RAILS_ENV"] = "test"
|
3
3
|
|
4
4
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
|
5
6
|
|
6
|
-
# we insist on minitest, when only the best will do.
|
7
|
-
# Rails will build on top of it if it's there.
|
8
|
-
require 'minitest/
|
9
|
-
require 'minitest/unit'
|
10
|
-
|
7
|
+
# we insist on minitest, when only the best will do.
|
8
|
+
# Rails will build on top of it if it's there.
|
9
|
+
require 'minitest/spec'
|
11
10
|
require "rails/test_help"
|
12
11
|
|
12
|
+
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
13
|
+
# to be shown.
|
14
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
15
|
+
|
16
|
+
# We're not supposed to have to manually install rails-controller-testing, not
|
17
|
+
# sure why we do.
|
18
|
+
begin
|
19
|
+
require 'rails-controller-testing'
|
20
|
+
Rails::Controller::Testing.install
|
21
|
+
rescue LoadError
|
22
|
+
end
|
23
|
+
|
13
24
|
Rails.backtrace_cleaner.remove_silencers!
|
14
25
|
|
15
26
|
# Load support files
|
@@ -25,23 +36,23 @@ end
|
|
25
36
|
# back. Useful for efficiency, also useful for
|
26
37
|
# testing code against API's that not everyone
|
27
38
|
# has access to -- the responses can be cached
|
28
|
-
# and re-used.
|
39
|
+
# and re-used.
|
29
40
|
require 'vcr'
|
30
41
|
require 'webmock'
|
31
42
|
|
32
43
|
# To allow us to do real HTTP requests in a VCR.turned_off, we
|
33
|
-
# have to tell webmock to let us.
|
44
|
+
# have to tell webmock to let us.
|
34
45
|
WebMock.allow_net_connect!
|
35
46
|
|
36
47
|
VCR.configure do |c|
|
37
48
|
c.cassette_library_dir = 'test/vcr_cassettes'
|
38
49
|
# webmock needed for HTTPClient testing
|
39
|
-
c.hook_into :webmock
|
50
|
+
c.hook_into :webmock
|
40
51
|
end
|
41
52
|
|
42
53
|
# Silly way to not have to rewrite all our tests if we
|
43
54
|
# temporarily disable VCR, make VCR.use_cassette a no-op
|
44
|
-
# instead of no-such-method.
|
55
|
+
# instead of no-such-method.
|
45
56
|
if ! defined? VCR
|
46
57
|
module VCR
|
47
58
|
def self.use_cassette(*args)
|
@@ -50,9 +61,9 @@ if ! defined? VCR
|
|
50
61
|
end
|
51
62
|
end
|
52
63
|
|
53
|
-
# re-open to add
|
64
|
+
# re-open to add
|
54
65
|
# some custom assertions, that used to be in mini-test, or that
|
55
|
-
# we wanted to add.
|
66
|
+
# we wanted to add.
|
56
67
|
class ActiveSupport::TestCase
|
57
68
|
|
58
69
|
def assert_present(object, msg = nil)
|
@@ -65,4 +76,4 @@ class ActiveSupport::TestCase
|
|
65
76
|
assert object.blank?, msg
|
66
77
|
end
|
67
78
|
|
68
|
-
end
|
79
|
+
end
|