active-fedora 11.0.0.rc7 → 11.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +2 -7
- data/.rubocop_todo.yml +40 -9
- data/active-fedora.gemspec +2 -2
- data/lib/active_fedora/associations/collection_association.rb +1 -1
- data/lib/active_fedora/associations/contained_finder.rb +2 -2
- data/lib/active_fedora/change_set.rb +6 -2
- data/lib/active_fedora/core.rb +18 -7
- data/lib/active_fedora/fedora_attributes.rb +1 -1
- data/lib/active_fedora/indexing_service.rb +0 -4
- data/lib/active_fedora/orders/ordered_list.rb +2 -2
- data/lib/active_fedora/relation/delegation.rb +4 -0
- data/lib/active_fedora/solr_hit.rb +0 -4
- data/lib/active_fedora/solr_query_builder.rb +16 -12
- data/lib/active_fedora/version.rb +1 -1
- data/spec/config_helper.rb +1 -1
- data/spec/integration/autosave_association_spec.rb +1 -1
- data/spec/integration/base_spec.rb +1 -1
- data/spec/integration/file_spec.rb +1 -1
- data/spec/integration/indexing_spec.rb +1 -1
- data/spec/integration/query_result_builder_spec.rb +1 -1
- data/spec/integration/relation_delegation_spec.rb +1 -3
- data/spec/integration/versionable_spec.rb +4 -4
- data/spec/spec_helper.rb +52 -3
- data/spec/unit/active_fedora_spec.rb +1 -1
- data/spec/unit/association_hash_spec.rb +8 -22
- data/spec/unit/attached_files_spec.rb +6 -6
- data/spec/unit/base_cma_spec.rb +1 -1
- data/spec/unit/base_extra_spec.rb +2 -18
- data/spec/unit/base_spec.rb +1 -1
- data/spec/unit/callback_spec.rb +2 -2
- data/spec/unit/checksum_spec.rb +2 -2
- data/spec/unit/code_configurator_spec.rb +1 -1
- data/spec/unit/core_spec.rb +36 -0
- data/spec/unit/default_model_mapper_spec.rb +3 -3
- data/spec/unit/file_configurator_spec.rb +4 -4
- data/spec/unit/file_path_builder_spec.rb +1 -1
- data/spec/unit/file_spec.rb +1 -1
- data/spec/unit/files_hash_spec.rb +2 -2
- data/spec/unit/finder_methods_spec.rb +3 -3
- data/spec/unit/has_and_belongs_to_many_association_spec.rb +0 -2
- data/spec/unit/has_many_association_spec.rb +2 -2
- data/spec/unit/indexing_spec.rb +2 -2
- data/spec/unit/logger_spec.rb +1 -1
- data/spec/unit/orders/reflection_spec.rb +1 -1
- data/spec/unit/property_spec.rb +2 -2
- data/spec/unit/query_spec.rb +1 -1
- data/spec/unit/reflection_spec.rb +3 -3
- data/spec/unit/solr_config_options_spec.rb +1 -1
- data/spec/unit/solr_service_spec.rb +4 -10
- data/spec/unit/with_metadata/default_metadata_class_factory_spec.rb +1 -1
- data/spec/unit/with_metadata/metadata_node_spec.rb +1 -1
- metadata +10 -17
- data/spec/fixtures/damsObjectModel.xml +0 -38
- data/spec/fixtures/dublin_core_rdf_descMetadata.nt +0 -13
- data/spec/fixtures/mixed_rdf_descMetadata.nt +0 -7
- data/spec/fixtures/mods_articles/mods_article1.xml +0 -98
- data/spec/fixtures/solr_rdf_descMetadata.nt +0 -7
- data/spec/samples/oral_history_sample.xml +0 -38
- data/spec/samples/oral_history_xml.xml +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a3e4470dd33d72dc20a0794fd42e8a08d96363f
|
4
|
+
data.tar.gz: 9e7b438a6b8a23515de79c50b3f44dc2df2a6d3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f86db04efd279c3412c1e57fa8449f7fbef3ac6cb83143314b573edaf559dfca3bc0bab762ada09c87c0f86759aea537f812bd194c3361f8adbea78385abbfe3
|
7
|
+
data.tar.gz: fd864a26944cc8e5ca33b313a1a2544dcfa965e46005a16c6a4833755f85e82ab349e36470347c02eef601b979213c3877c2691153a41c81429595337dc68ead
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
1
3
|
inherit_from:
|
2
4
|
- .rubocop_todo.yml
|
3
5
|
|
@@ -45,7 +47,6 @@ Metrics/CyclomaticComplexity:
|
|
45
47
|
- 'lib/active_fedora/associations/builder/directly_contains_one.rb'
|
46
48
|
- 'lib/active_fedora/file_configurator.rb'
|
47
49
|
- 'lib/active_fedora/file.rb'
|
48
|
-
- 'lib/active_fedora/datastreams/nokogiri_datastreams.rb'
|
49
50
|
- 'lib/active_fedora/attribute_methods.rb'
|
50
51
|
- 'lib/active_fedora/scoping/named.rb'
|
51
52
|
- 'lib/active_fedora/inheritance.rb'
|
@@ -56,7 +57,6 @@ Metrics/PerceivedComplexity:
|
|
56
57
|
- 'lib/active_fedora/relation/finder_methods.rb'
|
57
58
|
- 'lib/active_fedora/nested_attributes.rb'
|
58
59
|
- 'lib/active_fedora/file_configurator.rb'
|
59
|
-
- 'lib/active_fedora/datastreams/nokogiri_datastreams.rb'
|
60
60
|
- 'lib/active_fedora/autosave_association.rb'
|
61
61
|
- 'lib/active_fedora/associations/has_many_association.rb'
|
62
62
|
- 'lib/active_fedora/associations/has_and_belongs_to_many_association.rb'
|
@@ -79,10 +79,7 @@ Metrics/ModuleLength:
|
|
79
79
|
|
80
80
|
Metrics/ClassLength:
|
81
81
|
Exclude:
|
82
|
-
- 'spec/samples/hydra-mods_article_datastream.rb'
|
83
|
-
- 'lib/active_fedora/rdf/rdf_datastream.rb'
|
84
82
|
- 'lib/active_fedora/rdf/fcrepo.rb'
|
85
|
-
- 'lib/active_fedora/qualified_dublin_core_datastream.rb'
|
86
83
|
- 'lib/active_fedora/file_configurator.rb'
|
87
84
|
- 'lib/active_fedora/file.rb'
|
88
85
|
- 'lib/active_fedora/associations/association.rb'
|
@@ -121,7 +118,6 @@ Style/PredicateName:
|
|
121
118
|
- 'lib/active_fedora/versionable.rb'
|
122
119
|
- 'lib/active_fedora/reflection.rb'
|
123
120
|
- 'lib/active_fedora/pathing.rb'
|
124
|
-
- 'lib/active_fedora/om_datastream.rb'
|
125
121
|
- 'lib/active_fedora/nested_attributes.rb'
|
126
122
|
- 'lib/active_fedora/clean_connection.rb'
|
127
123
|
- 'lib/active_fedora/attributes.rb'
|
@@ -219,7 +215,6 @@ Style/SignalException:
|
|
219
215
|
Style/FileName:
|
220
216
|
Exclude:
|
221
217
|
- 'lib/active-fedora.rb'
|
222
|
-
- 'spec/samples/hydra-mods_article_datastream.rb'
|
223
218
|
|
224
219
|
Style/ZeroLengthPredicate:
|
225
220
|
Exclude:
|
data/.rubocop_todo.yml
CHANGED
@@ -1,24 +1,55 @@
|
|
1
1
|
require: rubocop-rspec
|
2
|
+
|
2
3
|
# This configuration was generated by
|
3
4
|
# `rubocop --auto-gen-config`
|
4
|
-
# on 2016-
|
5
|
+
# on 2016-08-25 16:34:38 -0700 using RuboCop version 0.42.0.
|
5
6
|
# The point is for the user to remove these configuration records
|
6
7
|
# one by one as the offenses are removed from the code base.
|
7
8
|
# Note that changes in the inspected code, or installation of new
|
8
9
|
# versions of RuboCop, may require this file to be generated again.
|
9
10
|
|
10
|
-
# Offense count:
|
11
|
+
# Offense count: 116
|
11
12
|
# Configuration parameters: Max.
|
12
13
|
RSpec/ExampleLength:
|
13
14
|
Enabled: false
|
14
15
|
|
15
|
-
# Offense count:
|
16
|
-
|
17
|
-
RSpec/VerifiedDoubles:
|
16
|
+
# Offense count: 40
|
17
|
+
RSpec/LeadingSubject:
|
18
18
|
Enabled: false
|
19
19
|
|
20
|
-
# Offense count:
|
21
|
-
|
20
|
+
# Offense count: 15
|
21
|
+
RSpec/LetSetup:
|
22
|
+
Exclude:
|
23
|
+
- 'spec/integration/collection_association_spec.rb'
|
24
|
+
- 'spec/integration/delete_all_spec.rb'
|
25
|
+
- 'spec/integration/has_many_associations_spec.rb'
|
26
|
+
- 'spec/integration/nested_attribute_spec.rb'
|
27
|
+
- 'spec/integration/persistence_spec.rb'
|
28
|
+
- 'spec/unit/has_and_belongs_to_many_association_spec.rb'
|
29
|
+
|
30
|
+
# Offense count: 1
|
31
|
+
RSpec/MessageChain:
|
22
32
|
Exclude:
|
23
|
-
- '
|
24
|
-
|
33
|
+
- 'spec/unit/file_spec.rb'
|
34
|
+
|
35
|
+
# Offense count: 218
|
36
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
37
|
+
# SupportedStyles: allow, expect
|
38
|
+
RSpec/MessageExpectation:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
# Offense count: 238
|
42
|
+
RSpec/MultipleExpectations:
|
43
|
+
Max: 8
|
44
|
+
|
45
|
+
# Offense count: 394
|
46
|
+
# Configuration parameters: MaxNesting.
|
47
|
+
RSpec/NestedGroups:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
# Offense count: 94
|
51
|
+
RSpec/SubjectStub:
|
52
|
+
Enabled: false
|
53
|
+
|
54
|
+
RSpec/VerifiedDoubles:
|
55
|
+
Enabled: false
|
data/active-fedora.gemspec
CHANGED
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.license = "APACHE2"
|
15
15
|
s.required_ruby_version = '~> 2.0'
|
16
16
|
|
17
|
-
s.add_dependency 'rsolr', '~> 1.
|
17
|
+
s.add_dependency 'rsolr', '~> 1.1', '>= 1.1.2'
|
18
18
|
s.add_dependency 'solrizer', '~> 3.4'
|
19
19
|
s.add_dependency "activesupport", '>= 4.2.4', '< 6'
|
20
20
|
s.add_dependency "activemodel", '>= 4.2', '< 6'
|
21
|
-
s.add_dependency "active-triples", '~> 0.
|
21
|
+
s.add_dependency "active-triples", '~> 0.11.0'
|
22
22
|
s.add_dependency "deprecation"
|
23
23
|
s.add_dependency "ldp", '~> 0.6.0'
|
24
24
|
|
@@ -291,7 +291,7 @@ module ActiveFedora
|
|
291
291
|
def construct_query
|
292
292
|
@solr_query ||= begin
|
293
293
|
clauses = { find_reflection => @owner.id }
|
294
|
-
clauses[:has_model] = @reflection.
|
294
|
+
clauses[:has_model] = @reflection.klass.to_rdf_representation if @reflection.klass != ActiveFedora::Base
|
295
295
|
ActiveFedora::SolrQueryBuilder.construct_query_for_rel(clauses)
|
296
296
|
end
|
297
297
|
end
|
@@ -29,7 +29,7 @@ module ActiveFedora::Associations
|
|
29
29
|
private
|
30
30
|
|
31
31
|
def matching_ids(record)
|
32
|
-
IDComposite.new(proxy_ids(record) & contained_ids, repository.translate_uri_to_id)
|
32
|
+
IDComposite.new(proxy_ids(record) & contained_ids.to_a, repository.translate_uri_to_id)
|
33
33
|
end
|
34
34
|
|
35
35
|
def proxy_ids(record)
|
@@ -40,7 +40,7 @@ module ActiveFedora::Associations
|
|
40
40
|
# a slow fedora call
|
41
41
|
def relation_subjects(record)
|
42
42
|
query = ActiveFedora::SolrQueryBuilder.construct_query_for_rel(
|
43
|
-
[[:has_model, proxy_class.
|
43
|
+
[[:has_model, proxy_class.to_rdf_representation], [:proxyFor, record.id]]
|
44
44
|
)
|
45
45
|
ActiveFedora::SolrService.query(query, fl: 'id').map(&:rdf_uri)
|
46
46
|
end
|
@@ -23,8 +23,12 @@ module ActiveFedora
|
|
23
23
|
result[predicate] = graph.query(subject: object.rdf_subject, predicate: predicate)
|
24
24
|
elsif object.class.properties.keys.include?(key)
|
25
25
|
predicate = graph.reflections.reflect_on_property(key).predicate
|
26
|
-
|
27
|
-
|
26
|
+
results = graph.query(subject: object.rdf_subject, predicate: predicate)
|
27
|
+
new_graph = child_graphs(results.map(&:object))
|
28
|
+
results.each do |res|
|
29
|
+
new_graph << res
|
30
|
+
end
|
31
|
+
result[predicate] = new_graph
|
28
32
|
elsif key == 'type'.freeze
|
29
33
|
# working around https://github.com/ActiveTriples/ActiveTriples/issues/122
|
30
34
|
predicate = ::RDF.type
|
data/lib/active_fedora/core.rb
CHANGED
@@ -96,13 +96,14 @@ module ActiveFedora
|
|
96
96
|
|
97
97
|
protected
|
98
98
|
|
99
|
-
# This
|
100
|
-
# It's normally called once in the lifecycle, by #create#
|
99
|
+
# This method is normally called once in the lifecycle, by #create#
|
101
100
|
def assert_content_model
|
102
|
-
self.has_model = self.class.
|
101
|
+
self.has_model = self.class.to_rdf_representation
|
103
102
|
end
|
104
103
|
|
105
104
|
module ClassMethods
|
105
|
+
extend Deprecation
|
106
|
+
|
106
107
|
def generated_association_methods
|
107
108
|
@generated_association_methods ||= begin
|
108
109
|
mod = const_set(:GeneratedAssociationMethods, Module.new)
|
@@ -111,13 +112,23 @@ module ActiveFedora
|
|
111
112
|
end
|
112
113
|
end
|
113
114
|
|
114
|
-
# Returns a suitable
|
115
|
-
#
|
116
|
-
#
|
117
|
-
def
|
115
|
+
# Returns a suitable string representation for :has_model
|
116
|
+
# Override this method if you want to change how this class
|
117
|
+
# is represented in RDF.
|
118
|
+
def to_rdf_representation
|
118
119
|
name
|
119
120
|
end
|
120
121
|
|
122
|
+
# Returns a suitable string representation for :has_model
|
123
|
+
# @deprecated use to_rdf_representation instead
|
124
|
+
def to_class_uri(attrs = nil)
|
125
|
+
if attrs
|
126
|
+
Deprecation.warn ActiveFedora::Core, "to_class_uri no longer acceps an argument"
|
127
|
+
end
|
128
|
+
to_rdf_representation
|
129
|
+
end
|
130
|
+
deprecation_deprecate to_class_uri: "use 'to_rdf_representation()' instead"
|
131
|
+
|
121
132
|
private
|
122
133
|
|
123
134
|
def relation
|
@@ -43,7 +43,7 @@ module ActiveFedora
|
|
43
43
|
# Appending the graph at the end is necessary because adding it as the
|
44
44
|
# parent leaves behind triples not related to the ldp_source's rdf
|
45
45
|
# subject.
|
46
|
-
@resource ||= self.class.resource_class.new(@ldp_source.graph.rdf_subject, data: @ldp_source.graph.
|
46
|
+
@resource ||= self.class.resource_class.new(@ldp_source.graph.rdf_subject, data: @ldp_source.graph.graph.data)
|
47
47
|
end
|
48
48
|
|
49
49
|
# You can set the URI to use for the rdf_label on ClassMethods.rdf_label, then on
|
@@ -15,10 +15,6 @@ module ActiveFedora
|
|
15
15
|
@object = obj
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.profile_solr_name
|
19
|
-
@profile_solr_name ||= ActiveFedora.index_field_mapper.solr_name("object_profile", :displayable)
|
20
|
-
end
|
21
|
-
|
22
18
|
def self.create_time_solr_name
|
23
19
|
@create_time_solr_name ||= ActiveFedora.index_field_mapper.solr_name('system_create', :stored_sortable, type: :date)
|
24
20
|
end
|
@@ -13,8 +13,8 @@ module ActiveFedora
|
|
13
13
|
# @param [::RDF::URI] head_subject URI of head node in list.
|
14
14
|
# @param [::RDF::URI] tail_subject URI of tail node in list.
|
15
15
|
def initialize(graph, head_subject, tail_subject)
|
16
|
-
@graph = if graph.respond_to?(:graph
|
17
|
-
graph.
|
16
|
+
@graph = if graph.respond_to?(:graph)
|
17
|
+
graph.graph.data
|
18
18
|
else
|
19
19
|
graph
|
20
20
|
end
|
@@ -11,28 +11,29 @@ module ActiveFedora
|
|
11
11
|
"{!terms f=#{ActiveFedora.id_field}}#{ids.join(',')}"
|
12
12
|
end
|
13
13
|
|
14
|
-
# Create a query with a clause for each key, value
|
14
|
+
# Create a raw query with a clause for each key, value
|
15
15
|
# @param [Hash, Array<Array<String>>] field_pairs key is the predicate, value is the target_uri
|
16
16
|
# @param [String] join_with ('AND') the value we're joining the clauses with
|
17
17
|
# @example
|
18
|
-
# construct_query_for_rel [[:has_model, "
|
19
|
-
# # => _query_:"{!
|
18
|
+
# construct_query_for_rel [[:has_model, "ComplexCollection"], [:has_model, "ActiveFedora_Base"]], 'OR'
|
19
|
+
# # => _query_:"{!raw f=has_model_ssim}ComplexCollection" OR _query_:"{!raw f=has_model_ssim}ActiveFedora_Base"
|
20
20
|
#
|
21
21
|
# construct_query_for_rel [[Book._reflect_on_association(:library), "foo/bar/baz"]]
|
22
22
|
def construct_query_for_rel(field_pairs, join_with = default_join_with)
|
23
23
|
field_pairs = field_pairs.to_a if field_pairs.is_a? Hash
|
24
|
-
construct_query(property_values_to_solr(field_pairs), join_with)
|
24
|
+
construct_query(property_values_to_solr(field_pairs), join_with, 'raw'.freeze)
|
25
25
|
end
|
26
26
|
|
27
27
|
# Construct a solr query from a list of pairs (e.g. [field name, values])
|
28
28
|
# @param [Array<Array>] field_pairs a list of pairs of property name and values
|
29
29
|
# @param [String] join_with ('AND') the value we're joining the clauses with
|
30
|
+
# @param [String] type ('field') The type of query to run. Either 'raw' or 'field'
|
30
31
|
# @return [String] a solr query
|
31
32
|
# @example
|
32
33
|
# construct_query([['library_id_ssim', '123'], ['owner_ssim', 'Fred']])
|
33
34
|
# # => "_query_:\"{!field f=library_id_ssim}123\" AND _query_:\"{!field f=owner_ssim}Fred\""
|
34
|
-
def construct_query(field_pairs, join_with = default_join_with)
|
35
|
-
clauses = pairs_to_clauses(field_pairs)
|
35
|
+
def construct_query(field_pairs, join_with = default_join_with, type = 'field'.freeze)
|
36
|
+
clauses = pairs_to_clauses(field_pairs, type)
|
36
37
|
return "" if clauses.count.zero?
|
37
38
|
return clauses.first if clauses.count == 1
|
38
39
|
"(#{clauses.join(join_with)})"
|
@@ -45,22 +46,24 @@ module ActiveFedora
|
|
45
46
|
private
|
46
47
|
|
47
48
|
# @param [Array<Array>] pairs a list of (key, value) pairs. The value itself may
|
49
|
+
# @param [String] type The type of query to run. Either 'raw' or 'field'
|
48
50
|
# @return [Array] a list of solr clauses
|
49
|
-
def pairs_to_clauses(pairs)
|
51
|
+
def pairs_to_clauses(pairs, type)
|
50
52
|
pairs.flat_map do |field, value|
|
51
|
-
condition_to_clauses(field, value)
|
53
|
+
condition_to_clauses(field, value, type)
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
57
|
# @param [String] field
|
56
58
|
# @param [String, Array<String>] values
|
59
|
+
# @param [String] type The type of query to run. Either 'raw' or 'field'
|
57
60
|
# @return [Array<String>]
|
58
|
-
def condition_to_clauses(field, values)
|
61
|
+
def condition_to_clauses(field, values, type)
|
59
62
|
values = Array(values)
|
60
63
|
values << nil if values.empty?
|
61
64
|
values.map do |value|
|
62
65
|
if value.present?
|
63
|
-
|
66
|
+
query_clause(type, field, value)
|
64
67
|
else
|
65
68
|
# Check that the field is not present. In SQL: "WHERE field IS NULL"
|
66
69
|
"-#{field}:[* TO *]"
|
@@ -93,10 +96,11 @@ module ActiveFedora
|
|
93
96
|
end
|
94
97
|
|
95
98
|
# Create a raw query clause suitable for sending to solr as an fq element
|
99
|
+
# @param [String] type The type of query to run. Either 'raw' or 'field'
|
96
100
|
# @param [String] key
|
97
101
|
# @param [String] value
|
98
|
-
def
|
99
|
-
"_query_:\"{
|
102
|
+
def query_clause(type, key, value)
|
103
|
+
"_query_:\"{!#{type} f=#{key}}#{value.gsub('"', '\"')}\""
|
100
104
|
end
|
101
105
|
end
|
102
106
|
end
|
data/spec/config_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
def mock_yaml(hash, path)
|
2
|
-
mock_file =
|
2
|
+
mock_file = instance_double(File, path.split("/")[-1])
|
3
3
|
allow(File).to receive(:exist?).with(path).and_return(true)
|
4
4
|
allow(File).to receive(:open).with(path).and_return(mock_file)
|
5
5
|
allow(Psych).to receive(:load).and_return(hash)
|
@@ -12,7 +12,7 @@ describe ActiveFedora::Base do
|
|
12
12
|
subject(:relationship) { MockAFBaseRelationship.new }
|
13
13
|
|
14
14
|
context '#changed_for_autosave?' do
|
15
|
-
before
|
15
|
+
before do
|
16
16
|
expect(relationship).to receive(:new_record?).and_return(false)
|
17
17
|
expect(relationship).to receive(:changed?).and_return(false)
|
18
18
|
expect(relationship).to receive(:marked_for_destruction?).and_return(false)
|
@@ -145,7 +145,7 @@ describe ActiveFedora::Base do
|
|
145
145
|
let(:conditions) { { foo: "bar" } }
|
146
146
|
context "and at least one object matches the conditions" do
|
147
147
|
it "returns true" do
|
148
|
-
allow(ActiveFedora::SolrService).to receive(:query) { [
|
148
|
+
allow(ActiveFedora::SolrService).to receive(:query) { [instance_double(RSolr::HashWithResponse)] }
|
149
149
|
expect(described_class.exists?(conditions)).to be true
|
150
150
|
end
|
151
151
|
end
|
@@ -131,7 +131,7 @@ describe ActiveFedora::File do
|
|
131
131
|
end
|
132
132
|
|
133
133
|
describe "streaming the response" do
|
134
|
-
let(:stream_reader) {
|
134
|
+
let(:stream_reader) { instance_double(IO) }
|
135
135
|
it "streams the response" do
|
136
136
|
expect(stream_reader).to receive(:read).at_least(:once)
|
137
137
|
test_object.attached_files[path].stream.each { |buff| stream_reader.read(buff) }
|