active-fedora 12.0.3 → 12.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -7
  3. data/.rubocop_todo.yml +10 -100
  4. data/.travis.yml +21 -0
  5. data/CODE_OF_CONDUCT.md +36 -0
  6. data/CONTRIBUTING.md +23 -21
  7. data/Gemfile +1 -2
  8. data/History.txt +29 -29
  9. data/LICENSE +16 -14
  10. data/README.md +40 -29
  11. data/SUPPORT.md +5 -0
  12. data/active-fedora.gemspec +7 -7
  13. data/lib/active_fedora.rb +1 -1
  14. data/lib/active_fedora/aggregation/list_source.rb +3 -2
  15. data/lib/active_fedora/associations/builder/collection_association.rb +1 -0
  16. data/lib/active_fedora/associations/collection_association.rb +3 -0
  17. data/lib/active_fedora/associations/collection_proxy.rb +2 -0
  18. data/lib/active_fedora/associations/directly_contains_one_association.rb +1 -0
  19. data/lib/active_fedora/associations/indirectly_contains_association.rb +2 -0
  20. data/lib/active_fedora/associations/singular_association.rb +1 -0
  21. data/lib/active_fedora/attribute_methods.rb +1 -1
  22. data/lib/active_fedora/attribute_methods/read.rb +1 -1
  23. data/lib/active_fedora/attribute_methods/write.rb +1 -1
  24. data/lib/active_fedora/attributes.rb +1 -1
  25. data/lib/active_fedora/attributes/property_builder.rb +1 -0
  26. data/lib/active_fedora/callbacks.rb +7 -2
  27. data/lib/active_fedora/fedora.rb +8 -0
  28. data/lib/active_fedora/file.rb +7 -5
  29. data/lib/active_fedora/indexing/descendant_fetcher.rb +1 -1
  30. data/lib/active_fedora/indexing/field_mapper.rb +2 -0
  31. data/lib/active_fedora/indexing/suffix.rb +3 -1
  32. data/lib/active_fedora/inheritable_accessors.rb +1 -0
  33. data/lib/active_fedora/loadable_from_json.rb +1 -0
  34. data/lib/active_fedora/nested_attributes.rb +1 -0
  35. data/lib/active_fedora/persistence.rb +14 -1
  36. data/lib/active_fedora/persistence/null_identifier_service.rb +11 -0
  37. data/lib/active_fedora/reflection.rb +1 -1
  38. data/lib/active_fedora/relation.rb +14 -0
  39. data/lib/active_fedora/relation/delegation.rb +2 -1
  40. data/lib/active_fedora/relation/finder_methods.rb +1 -0
  41. data/lib/active_fedora/relation/merger.rb +1 -0
  42. data/lib/active_fedora/validations.rb +7 -0
  43. data/lib/active_fedora/version.rb +1 -1
  44. data/lib/active_fedora/with_metadata.rb +1 -0
  45. data/lib/active_fedora/with_metadata/metadata_node.rb +2 -1
  46. data/lib/generators/active_fedora/config/solr/templates/solr/config/schema.xml +64 -51
  47. data/lib/generators/active_fedora/config/solr/templates/solr/config/solrconfig.xml +4 -1
  48. data/lib/generators/active_fedora/model/templates/datastream.rb.erb +1 -1
  49. data/spec/integration/file_spec.rb +1 -1
  50. data/spec/integration/relation_spec.rb +43 -0
  51. data/spec/spec_helper.rb +11 -9
  52. data/spec/support/an_active_model.rb +4 -0
  53. data/spec/unit/callback_spec.rb +8 -1
  54. data/spec/unit/file_spec.rb +0 -17
  55. data/spec/unit/validations_spec.rb +18 -0
  56. metadata +28 -25
  57. data/.circleci/config.yml +0 -47
@@ -284,6 +284,8 @@
284
284
  -->
285
285
  </searchComponent>
286
286
 
287
+ <!-- suggest searchComponent and requestHandler disabled by default due to performance penalties -->
288
+ <!--
287
289
  <searchComponent name="suggest" class="solr.SuggestComponent">
288
290
  <lst name="suggester">
289
291
  <str name="name">mySuggester</str>
@@ -304,7 +306,8 @@
304
306
  <str>suggest</str>
305
307
  </arr>
306
308
  </requestHandler>
307
-
309
+ -->
310
+
308
311
  <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
309
312
  <lst name="defaults">
310
313
  <str name="fmap.Last-Modified">last_modified</str>
@@ -3,7 +3,7 @@
3
3
  class <%= class_name %>Metadata < ActiveFedora::OmDatastream
4
4
 
5
5
  # Define a terminology for parsing this XML document
6
- # See: https://github.com/projecthydra/om/wiki/Tame-your-XML-with-OM
6
+ # See: https://github.com/samvera/om/wiki/Tame-your-XML-with-OM
7
7
  #
8
8
  # set_terminology do |t|
9
9
  # t.root(path: "fields")
@@ -74,7 +74,7 @@ describe ActiveFedora::File do
74
74
 
75
75
  describe "changed attributes are set" do
76
76
  it "marks profile as changed" do
77
- expect_any_instance_of(SampleResource).to receive(:attribute_will_change!).with(:profile)
77
+ expect_any_instance_of(SampleResource).to receive(:attribute_will_change!).with(:ldp_source)
78
78
  test_object
79
79
  end
80
80
  end
@@ -22,6 +22,10 @@ describe ActiveFedora::Base do
22
22
  end
23
23
 
24
24
  it { is_expected.to respond_to(:each_with_index) }
25
+ it { expect(libraries.any?).to eq false }
26
+ it { is_expected.to be_blank }
27
+ it { is_expected.to be_empty }
28
+ it { is_expected.not_to be_present }
25
29
 
26
30
  context "when some records exist" do
27
31
  before do
@@ -41,6 +45,45 @@ describe ActiveFedora::Base do
41
45
  expect_any_instance_of(ActiveFedora::Relation).to_not receive :find_each
42
46
  libraries[0]
43
47
  end
48
+
49
+ it "does not reload" do
50
+ expect_any_instance_of(ActiveFedora::Relation).to_not receive :find_each
51
+ libraries.each { |l| l.id }
52
+ end
53
+ end
54
+
55
+ it { expect(libraries.any?).to eq true }
56
+ it { is_expected.not_to be_blank }
57
+ it { is_expected.not_to be_empty }
58
+ it { is_expected.to be_present }
59
+
60
+ describe '#each' do
61
+ before { Book.create }
62
+
63
+ it 'returns an enumerator' do
64
+ expect(libraries.each).to be_a Enumerator
65
+ end
66
+
67
+ it 'yields the items' do
68
+ expect { |b| libraries.each(&b) }
69
+ .to yield_successive_args(*Library.all.to_a)
70
+ end
71
+
72
+ it 'when called from Base yields all items' do
73
+ expect { |b| ActiveFedora::Base.all.each(&b) }
74
+ .to yield_successive_args(*(Library.all.to_a + Book.all.to_a))
75
+ end
76
+
77
+ context 'when cached' do
78
+ it 'returns an enumerator' do
79
+ expect(libraries.each).to be_a Enumerator
80
+ end
81
+
82
+ it 'yields the items' do
83
+ expect { |b| libraries.each(&b) }
84
+ .to yield_successive_args(*Library.all.to_a)
85
+ end
86
+ end
44
87
  end
45
88
 
46
89
  describe "#find" do
@@ -1,10 +1,17 @@
1
- ENV["environment"] ||= 'test'
2
- require "bundler/setup"
1
+ ENV["environment"] ||= "test"
3
2
 
3
+ require "bundler/setup"
4
4
  require 'simplecov'
5
5
  require 'coveralls'
6
6
 
7
- SimpleCov.start do
7
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
8
+ [
9
+ SimpleCov::Formatter::HTMLFormatter,
10
+ Coveralls::SimpleCov::Formatter
11
+ ]
12
+ )
13
+
14
+ SimpleCov.start "rails" do
8
15
  add_filter "/spec/"
9
16
  end
10
17
 
@@ -13,15 +20,10 @@ require 'rspec'
13
20
  require 'rspec/its'
14
21
  require 'equivalent-xml/rspec_matchers'
15
22
  require 'logger'
16
- require 'pry' unless ENV['CI']
23
+ require 'pry' unless ENV['TRAVIS']
17
24
 
18
25
  ActiveFedora::Base.logger = Logger.new(STDERR)
19
26
  ActiveFedora::Base.logger.level = Logger::WARN
20
- # require 'http_logger'
21
- # HttpLogger.logger = Logger.new(STDOUT)
22
- # HttpLogger.ignore = [/localhost:8983\/solr/]
23
- # HttpLogger.colorize = false
24
- # HttpLogger.log_headers = true
25
27
 
26
28
  Dir[File.expand_path("../support/**/*.rb", __FILE__)].each { |f| require f }
27
29
 
@@ -11,6 +11,10 @@ shared_examples_for "An ActiveModel" do
11
11
  expect(one).to eq the_other
12
12
  end
13
13
 
14
+ def assert_respond_to(obj, meth, _msg = nil)
15
+ expect(obj).to respond_to meth
16
+ end
17
+
14
18
  include ActiveModel::Lint::Tests
15
19
 
16
20
  ActiveModel::Lint::Tests.public_instance_methods.map(&:to_s).grep(/^test/).each do |m|
@@ -12,6 +12,9 @@ describe ActiveFedora::Base do
12
12
  after_update :a_update
13
13
  after_find :a_find
14
14
 
15
+ after_update_index :a_update_index
16
+ before_update_index :b_update_index
17
+
15
18
  before_destroy :do_stuff
16
19
 
17
20
  def do_stuff
@@ -24,12 +27,14 @@ describe ActiveFedora::Base do
24
27
  Object.send(:remove_const, :CallbackStub)
25
28
  end
26
29
 
27
- it "has after_initialize, before_save, after_save, before_create, after_create" do
30
+ it "has after_initialize, before_save, after_save, before_create, after_create, after_update_index, before_update_index" do
28
31
  allow_any_instance_of(CallbackStub).to receive(:a_init)
29
32
  allow_any_instance_of(CallbackStub).to receive :b_create
30
33
  allow_any_instance_of(CallbackStub).to receive :a_create
31
34
  allow_any_instance_of(CallbackStub).to receive(:b_save)
32
35
  allow_any_instance_of(CallbackStub).to receive(:a_save)
36
+ allow_any_instance_of(CallbackStub).to receive(:a_update_index)
37
+ allow_any_instance_of(CallbackStub).to receive(:b_update_index)
33
38
  @cb = CallbackStub.new
34
39
  @cb.save
35
40
  end
@@ -40,6 +45,8 @@ describe ActiveFedora::Base do
40
45
  allow_any_instance_of(CallbackStub).to receive(:a_create)
41
46
  allow_any_instance_of(CallbackStub).to receive(:b_save)
42
47
  allow_any_instance_of(CallbackStub).to receive(:a_save)
48
+ allow_any_instance_of(CallbackStub).to receive(:a_update_index)
49
+ allow_any_instance_of(CallbackStub).to receive(:b_update_index)
43
50
  @cb = CallbackStub.new
44
51
  @cb.save
45
52
  allow_any_instance_of(CallbackStub).to receive(:a_init)
@@ -192,23 +192,6 @@ describe ActiveFedora::File do
192
192
  end
193
193
  end
194
194
 
195
- context 'when file is new and content behaves like io' do
196
- let(:file_content) { "hello world" }
197
-
198
- before do
199
- af_file.uri = "http://localhost:8983/fedora/rest/test/1234/abcd"
200
- af_file.content = StringIO.new(file_content)
201
- allow(af_file).to receive(:new_record?).and_return(true)
202
- end
203
-
204
- describe "#content" do
205
- it 'can be re-read' do
206
- expect(af_file.content.read).to eq file_content
207
- expect(af_file.content.read).to eq file_content
208
- end
209
- end
210
- end
211
-
212
195
  describe "#mime_type" do
213
196
  let(:parent) { ActiveFedora::Base.create }
214
197
  before do
@@ -8,6 +8,16 @@ describe ActiveFedora::Base do
8
8
 
9
9
  validates_presence_of :fubar
10
10
  validates_length_of :swank, minimum: 5
11
+
12
+ before_validation :before_validation_callback
13
+ after_validation :after_validation_callback
14
+
15
+ def before_validation_callback
16
+ # no-op
17
+ end
18
+ def after_validation_callback
19
+ # no-op
20
+ end
11
21
  end
12
22
  end
13
23
 
@@ -71,4 +81,12 @@ describe ActiveFedora::Base do
71
81
  end
72
82
  end
73
83
  end
84
+
85
+ describe 'validation callbacks' do
86
+ it 'calls callbacks' do
87
+ expect(validation_stub).to receive(:before_validation_callback)
88
+ expect(validation_stub).to receive(:after_validation_callback)
89
+ validation_stub.validate
90
+ end
91
+ end
74
92
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-fedora
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.0.3
4
+ version: 12.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Zumwalt
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-01-24 00:00:00.000000000 Z
13
+ date: 2019-02-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rsolr
@@ -61,7 +61,7 @@ dependencies:
61
61
  version: 4.2.4
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: '5.2'
64
+ version: '5.3'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,27 +71,27 @@ dependencies:
71
71
  version: 4.2.4
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: '5.2'
74
+ version: '5.3'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: activemodel
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '4.2'
81
+ version: 4.2.10
82
82
  - - "<"
83
83
  - !ruby/object:Gem::Version
84
- version: '5.2'
84
+ version: '5.3'
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: '4.2'
91
+ version: 4.2.10
92
92
  - - "<"
93
93
  - !ruby/object:Gem::Version
94
- version: '5.2'
94
+ version: '5.3'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: active-triples
97
97
  requirement: !ruby/object:Gem::Requirement
@@ -130,16 +130,22 @@ dependencies:
130
130
  name: ldp
131
131
  requirement: !ruby/object:Gem::Requirement
132
132
  requirements:
133
- - - "~>"
133
+ - - ">="
134
134
  - !ruby/object:Gem::Version
135
135
  version: 0.7.0
136
+ - - "<"
137
+ - !ruby/object:Gem::Version
138
+ version: '2'
136
139
  type: :runtime
137
140
  prerelease: false
138
141
  version_requirements: !ruby/object:Gem::Requirement
139
142
  requirements:
140
- - - "~>"
143
+ - - ">="
141
144
  - !ruby/object:Gem::Version
142
145
  version: 0.7.0
146
+ - - "<"
147
+ - !ruby/object:Gem::Version
148
+ version: '2'
143
149
  - !ruby/object:Gem::Dependency
144
150
  name: ruby-progressbar
145
151
  requirement: !ruby/object:Gem::Requirement
@@ -160,14 +166,14 @@ dependencies:
160
166
  requirements:
161
167
  - - "~>"
162
168
  - !ruby/object:Gem::Version
163
- version: 0.12.1
169
+ version: '0.12'
164
170
  type: :runtime
165
171
  prerelease: false
166
172
  version_requirements: !ruby/object:Gem::Requirement
167
173
  requirements:
168
174
  - - "~>"
169
175
  - !ruby/object:Gem::Version
170
- version: 0.12.1
176
+ version: '0.12'
171
177
  - !ruby/object:Gem::Dependency
172
178
  name: faraday-encoding
173
179
  requirement: !ruby/object:Gem::Requirement
@@ -188,20 +194,14 @@ dependencies:
188
194
  requirements:
189
195
  - - ">="
190
196
  - !ruby/object:Gem::Version
191
- version: '4.2'
192
- - - "<"
193
- - !ruby/object:Gem::Version
194
- version: '5.2'
197
+ version: '0'
195
198
  type: :development
196
199
  prerelease: false
197
200
  version_requirements: !ruby/object:Gem::Requirement
198
201
  requirements:
199
202
  - - ">="
200
203
  - !ruby/object:Gem::Version
201
- version: '4.2'
202
- - - "<"
203
- - !ruby/object:Gem::Version
204
- version: '5.2'
204
+ version: '0'
205
205
  - !ruby/object:Gem::Dependency
206
206
  name: rdoc
207
207
  requirement: !ruby/object:Gem::Requirement
@@ -334,14 +334,14 @@ dependencies:
334
334
  requirements:
335
335
  - - "~>"
336
336
  - !ruby/object:Gem::Version
337
- version: 0.47.1
337
+ version: 0.56.0
338
338
  type: :development
339
339
  prerelease: false
340
340
  version_requirements: !ruby/object:Gem::Requirement
341
341
  requirements:
342
342
  - - "~>"
343
343
  - !ruby/object:Gem::Version
344
- version: 0.47.1
344
+ version: 0.56.0
345
345
  - !ruby/object:Gem::Dependency
346
346
  name: rubocop-rspec
347
347
  requirement: !ruby/object:Gem::Requirement
@@ -366,7 +366,6 @@ extra_rdoc_files:
366
366
  - LICENSE
367
367
  - README.md
368
368
  files:
369
- - ".circleci/config.yml"
370
369
  - ".gitignore"
371
370
  - ".gitmodules"
372
371
  - ".mailmap"
@@ -374,6 +373,8 @@ files:
374
373
  - ".rubocop.yml"
375
374
  - ".rubocop_todo.yml"
376
375
  - ".solr_wrapper"
376
+ - ".travis.yml"
377
+ - CODE_OF_CONDUCT.md
377
378
  - CONTRIBUTING.md
378
379
  - CONTRIBUTORS.md
379
380
  - Gemfile
@@ -381,6 +382,7 @@ files:
381
382
  - LICENSE
382
383
  - README.md
383
384
  - Rakefile
385
+ - SUPPORT.md
384
386
  - active-fedora.gemspec
385
387
  - config/fedora.yml
386
388
  - config/service_mappings.yml
@@ -512,6 +514,7 @@ files:
512
514
  - lib/active_fedora/orders/target_proxy.rb
513
515
  - lib/active_fedora/pathing.rb
514
516
  - lib/active_fedora/persistence.rb
517
+ - lib/active_fedora/persistence/null_identifier_service.rb
515
518
  - lib/active_fedora/property.rb
516
519
  - lib/active_fedora/query_result_builder.rb
517
520
  - lib/active_fedora/querying.rb
@@ -730,7 +733,7 @@ files:
730
733
  - spec/unit/validations_spec.rb
731
734
  - spec/unit/with_metadata/default_metadata_class_factory_spec.rb
732
735
  - spec/unit/with_metadata/metadata_node_spec.rb
733
- homepage: https://github.com/projecthydra/active_fedora
736
+ homepage: https://github.com/samvera/active_fedora
734
737
  licenses:
735
738
  - Apache-2.0
736
739
  metadata: {}
@@ -749,7 +752,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
749
752
  - !ruby/object:Gem::Version
750
753
  version: '0'
751
754
  requirements: []
752
- rubygems_version: 3.0.3
755
+ rubygems_version: 3.0.1
753
756
  signing_key:
754
757
  specification_version: 4
755
758
  summary: A convenience libary for manipulating documents in the Fedora Repository.
@@ -1,47 +0,0 @@
1
- version: 2.1
2
- orbs:
3
- samvera: samvera/circleci-orb@0
4
- jobs:
5
- bundle_lint_test:
6
- parameters:
7
- ruby_version:
8
- type: string
9
- bundler_version:
10
- type: string
11
- default: 1.17.3
12
- rails_version:
13
- type: string
14
- solr_config_path:
15
- type: string
16
- default: lib/generators/active_fedora/config/solr/templates/solr/config
17
- executor:
18
- name: 'samvera/ruby_fcrepo_solr'
19
- ruby_version: << parameters.ruby_version >>
20
- environment:
21
- RAILS_VERSION: << parameters.rails_version >>
22
- steps:
23
- - samvera/cached_checkout
24
-
25
- - samvera/bundle_for_gem:
26
- ruby_version: << parameters.ruby_version >>
27
- bundler_version: << parameters.bundler_version >>
28
- project: 'active-fedora'
29
-
30
- - samvera/install_solr_core:
31
- solr_config_path: << parameters.solr_config_path >>
32
-
33
- - samvera/rubocop
34
-
35
- - samvera/parallel_rspec
36
-
37
- workflows:
38
- ci:
39
- jobs:
40
- - bundle_lint_test:
41
- name: ruby2-5_rails5-1
42
- ruby_version: 2.5.7
43
- rails_version: 5.1.7
44
- - bundle_lint_test:
45
- name: ruby2-5_rails4-2
46
- ruby_version: 2.5.7
47
- rails_version: 4.2.8