active-fedora 6.4.3 → 6.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9395c7f327612946bfc5d90b4f8cdcf93af0a49
4
- data.tar.gz: 13f08cd89e3b35e3b3b437cc13d5db8df934b022
3
+ metadata.gz: 9682552f64d1274de9b4de8f26e12dc1ab04cab5
4
+ data.tar.gz: 0267bbbfcd15b12ab6593620aebab8e2e6322274
5
5
  SHA512:
6
- metadata.gz: 036af5cc43ab70dcca4ca55da21f1961bb6e1047a96f48256019102adac6b43e35dacc6ed5b0776a44ff949c15c4c1144d1c54e6d8979dcbb6b51482cd0b66e7
7
- data.tar.gz: 025ae1503457b5427a05d9bd408e84594d137fbb94bd2e7b8d98f433f505ee3988ccab442de9a5e67b421c30981a137024e18b3b513d2a30d0da54825b31982d
6
+ metadata.gz: 8fdd12fb3660f58afca86fa8f488d3da34db1e36ceb55b76d3cda5f33f6a87a2b668bbcc6841d07a7d62f14d32fb77e61811fad3a29cd1a268175b30dd536587
7
+ data.tar.gz: 96459b1261137d65d9f64e2dab39587aac41466f958b943da81a19799ec7d7f6a343b353332984d43de296d161172861fdea152854811056f04d2d1a64b60e85
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,111 @@
1
+ # How to Contribute
2
+
3
+ We want your help to make Project Hydra great.
4
+ There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
5
+
6
+ ## Hydra Project Intellectual Property Licensing and Ownership
7
+
8
+ All code contributors must have an Individual Contributor License Agreement (iCLA) on file with the Hydra Project Steering Group.
9
+ If the contributor works for an institution, the institution must have a Corporate Contributor License Agreement (cCLA) on file.
10
+
11
+ https://wiki.duraspace.org/display/hydra/Hydra+Project+Intellectual+Property+Licensing+and+Ownership
12
+
13
+ You should also add yourself to the `CONTRIBUTORS.md` file in the root of the project.
14
+
15
+ ## Contribution Tasks
16
+
17
+ * Reporting Issues
18
+ * Making Changes
19
+ * Submitting Changes
20
+ * Merging Changes
21
+
22
+ ### Reporting Issues
23
+
24
+ * Make sure you have a [GitHub account](https://github.com/signup/free)
25
+ * Submit a [Github issue](./issues) by:
26
+ * Clearly describing the issue
27
+ * Provide a descriptive summary
28
+ * Explain the expected behavior
29
+ * Explain the actual behavior
30
+ * Provide steps to reproduce the actual behavior
31
+
32
+ ### Making Changes
33
+
34
+ * Fork the repository on GitHub
35
+ * Create a topic branch from where you want to base your work.
36
+ * This is usually the master branch.
37
+ * To quickly create a topic branch based on master; `git branch fix/master/my_contribution master`
38
+ * Then checkout the new branch with `git checkout fix/master/my_contribution`.
39
+ * Please avoid working directly on the `master` branch.
40
+ * You may find the [hub suite of commands](https://github.com/defunkt/hub) helpful
41
+ * Make commits of logical units.
42
+ * Your commit should include a high level description of your work in HISTORY.textile
43
+ * Check for unnecessary whitespace with `git diff --check` before committing.
44
+ * Make sure your commit messages are [well formed](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
45
+ * If you created an issue, you can close it by including "Closes #issue" in your commit message. See [Github's blog post for more details](https://github.com/blog/1386-closing-issues-via-commit-messages)
46
+
47
+ ```
48
+ Present tense short summary (50 characters or less)
49
+
50
+ More detailed description, if necessary. It should be wrapped to 72
51
+ characters. Try to be as descriptive as you can, even if you think that
52
+ the commit content is obvious, it may not be obvious to others. You
53
+ should add such description also if it's already present in bug tracker,
54
+ it should not be necessary to visit a webpage to check the history.
55
+
56
+ Include Closes #<issue-number> when relavent.
57
+
58
+ Description can have multiple paragraphs and you can use code examples
59
+ inside, just indent it with 4 spaces:
60
+
61
+ class PostsController
62
+ def index
63
+ respond_with Post.limit(10)
64
+ end
65
+ end
66
+
67
+ You can also add bullet points:
68
+
69
+ - you can use dashes or asterisks
70
+
71
+ - also, try to indent next line of a point for readability, if it's too
72
+ long to fit in 72 characters
73
+ ```
74
+
75
+ * Make sure you have added the necessary tests for your changes.
76
+ * Run _all_ the tests to assure nothing else was accidentally broken.
77
+ * When you are ready to submit a pull request
78
+
79
+ ### Submitting Changes
80
+
81
+ * Read the article ["Using Pull Requests"](https://help.github.com/articles/using-pull-requests) on GitHub.
82
+ * Make sure your branch is up to date with its parent branch (i.e. master)
83
+ * `git checkout master`
84
+ * `git pull --rebase`
85
+ * `git checkout <your-branch>`
86
+ * `git rebase master`
87
+ * It is likely a good idea to run your tests again.
88
+ * Squash the commits for your branch into one commit
89
+ * `git rebase --interactive HEAD~<number-of-commits>` ([See Github help](https://help.github.com/articles/interactive-rebase))
90
+ * To determine the number of commits on your branch: `git log master..<your-branch> --oneline | wc -l`
91
+ * Squashing your branch's changes into one commit is "good form" and helps the person merging your request to see everything that is going on.
92
+ * Push your changes to a topic branch in your fork of the repository.
93
+ * Submit a pull request from your fork to the project.
94
+
95
+ ### Merging Changes
96
+
97
+ * It is considered "poor from" to merge your own request.
98
+ * Please take the time to review the changes and get a sense of what is being changed. Things to consider:
99
+ * Does the commit message explain what is going on?
100
+ * Does the code changes have tests? _Not all changes need new tests, some changes are refactorings_
101
+ * Does the commit contain more than it should? Are two separate concerns being addressed in one commit?
102
+ * Did the Travis tests complete successfully?
103
+ * If you are uncertain, bring other contributors into the conversation by creating a comment that includes their @username.
104
+ * If you like the pull request, but want others to chime in, create a +1 comment and tag a user.
105
+
106
+ # Additional Resources
107
+
108
+ * [General GitHub documentation](http://help.github.com/)
109
+ * [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
110
+ * [Pro Git](http://git-scm.com/book) is both a free and excellent book about Git.
111
+ * [A Git Config for Contributing](http://ndlib.github.io/practices/my-typical-per-project-git-config/)
@@ -12,11 +12,11 @@ module ActiveFedora
12
12
 
13
13
  def replace(record)
14
14
  if record.nil?
15
- @owner.clear_relationship(@reflection.options[:property])
15
+ remove_matching_property_relationship
16
16
  else
17
17
  raise_on_type_mismatch(record)
18
18
 
19
- @owner.clear_relationship(@reflection.options[:property])
19
+ remove_matching_property_relationship
20
20
 
21
21
  @target = (AssociationProxy === record ? record.target : record)
22
22
  @owner.add_relationship(@reflection.options[:property], record) unless record.new_record?
@@ -29,13 +29,38 @@ module ActiveFedora
29
29
 
30
30
  private
31
31
  def find_target
32
- pid = @owner.ids_for_outbound(@reflection.options[:property]).first
33
- return if pid.nil?
34
- query = ActiveFedora::SolrService.construct_query_for_pids([pid])
32
+ pid = @owner.ids_for_outbound(@reflection.options[:property])
33
+ return if pid.empty?
34
+ class_name = @reflection.options[:class_name] ? @reflection.options[:class_name] : @reflection.class_name
35
+ query = construct_query(pid, class_name)
35
36
  solr_result = SolrService.query(query)
36
37
  return ActiveFedora::SolrService.reify_solr_results(solr_result).first
37
38
  end
38
39
 
40
+ def construct_query pid, class_name
41
+ if class_name && class_name != "ActiveFedora::Base"
42
+ clauses = {}
43
+ clauses[:has_model] = class_name.constantize.to_class_uri
44
+ query = ActiveFedora::SolrService.construct_query_for_rel(clauses) + " AND (" + ActiveFedora::SolrService.construct_query_for_pids(pid) + ")"
45
+ else
46
+ query = ActiveFedora::SolrService.construct_query_for_pids(pid)
47
+ end
48
+ end
49
+
50
+ def remove_matching_property_relationship
51
+ class_name = @reflection.options[:class_name] ? @reflection.options[:class_name] : @reflection.class_name
52
+ ids = @owner.ids_for_outbound(@reflection.options[:property])
53
+ return if ids.empty?
54
+ ids.each do |id|
55
+ result = SolrService.query(ActiveFedora::SolrService.construct_query_for_pids([id]))
56
+ hit = ActiveFedora::SolrService.reify_solr_results(result).first
57
+ # We remove_relationship on subjects that match the same class, or if the subject is nil
58
+ if hit.class.to_s == class_name || hit.nil?
59
+ @owner.remove_relationship(@reflection.options[:property], hit)
60
+ end
61
+ end
62
+ end
63
+
39
64
  def foreign_key_present
40
65
  !@owner.send(@reflection.primary_key_name).nil?
41
66
  end
@@ -10,7 +10,7 @@ module ActiveFedora
10
10
  pids = @owner.ids_for_outbound(@reflection.options[:property])
11
11
  return [] if pids.empty?
12
12
  query = ActiveFedora::SolrService.construct_query_for_pids(pids)
13
- solr_result = SolrService.query(query)
13
+ solr_result = SolrService.query(query, rows: 1000)
14
14
  return ActiveFedora::SolrService.reify_solr_results(solr_result)
15
15
  end
16
16
 
@@ -48,7 +48,7 @@ module ActiveFedora
48
48
  #
49
49
 
50
50
  attr_accessor :config_env
51
- attr_reader :config_options, :fedora_config_path, :solr_config_path
51
+ attr_reader :config_options, :fedora_config_path, :solr_config_path, :predicate_mappings_config_path
52
52
 
53
53
  # The configuration hash that gets used by RSolr.connect
54
54
  def initialize
@@ -208,22 +208,18 @@ module ActiveFedora
208
208
  end
209
209
 
210
210
  def predicate_config
211
- @predicate_config_path ||= build_predicate_config_path(File.dirname(self.path))
211
+ @predicate_config_path ||= build_predicate_config_path
212
212
  YAMLAdaptor.load(File.open(@predicate_config_path)) if File.exist?(@predicate_config_path)
213
213
  end
214
214
 
215
215
  protected
216
216
 
217
- def build_predicate_config_path(config_path=nil)
218
- pred_config_paths = [File.join(ActiveFedora.root,"config")]
219
- pred_config_paths.unshift config_path if config_path
220
- pred_config_paths.each do |path|
221
- testfile = File.expand_path(File.join(path,"predicate_mappings.yml"))
222
- if File.exist?(testfile) && valid_predicate_mapping?(testfile)
223
- return testfile
224
- end
217
+ def build_predicate_config_path
218
+ testfile = File.expand_path(get_config_path(:predicate_mappings))
219
+ if File.exist?(testfile) && valid_predicate_mapping?(testfile)
220
+ return testfile
225
221
  end
226
- raise PredicateMappingsNotFoundError #"Could not find predicate_mappings.yml in these locations: #{pred_config_paths.join("; ")}." unless @predicate_config_path
222
+ raise PredicateMappingsNotFoundError
227
223
  end
228
224
 
229
225
  def valid_predicate_mapping?(testfile)
@@ -87,9 +87,12 @@ module ActiveFedora
87
87
  end
88
88
 
89
89
  # Using the fedora search (not solr), get every object and reindex it.
90
- def reindex_everything
90
+ # @param [String] a query string that conforms to the query param format
91
+ # of the underlying search's API
92
+ def reindex_everything(query = nil)
91
93
  connections.each do |conn|
92
- conn.search(nil) do |object|
94
+ conn.search(query) do |object|
95
+ next if object.pid.start_with?('fedora-system:')
93
96
  ActiveFedora::Base.find(object.pid, :cast=>true).update_index
94
97
  end
95
98
  end
@@ -1,3 +1,4 @@
1
+ require File.expand_path('../../../spec/support/an_active_model', __FILE__)
1
2
  module ActiveFedora
2
3
  module TestSupport
3
4
 
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "6.4.3"
2
+ VERSION = "6.4.4"
3
3
  end
@@ -4,16 +4,16 @@ require 'spec_helper'
4
4
  require 'active_fedora/test_support'
5
5
 
6
6
  describe <%= class_name %> do
7
+ it_behaves_like 'An ActiveModel'
7
8
  include ActiveFedora::TestSupport
8
9
  subject { <%= class_name %>.new }
9
10
 
10
- it 'should persist to Fedora' do
11
- subject.save!
12
- expect {
13
- subject.reload
14
- }.to_not raise_error(ActiveFedora::ObjectNotFoundError)
15
-
16
- subject.destroy
11
+ describe "when persisted to fedora" do
12
+ before { subject.save! }
13
+ after { subject.destroy }
14
+ it 'should exist' do
15
+ <%= class_name %>.exists?(subject.pid).should be_true
16
+ end
17
17
  end
18
18
 
19
19
  it 'should have a descMetadata datastream' do
@@ -10,6 +10,7 @@ describe ActiveFedora::Base do
10
10
  class Book < ActiveFedora::Base
11
11
  belongs_to :library, :property=>:has_constituent
12
12
  belongs_to :author, :property=>:has_member, :class_name=>'Person'
13
+ belongs_to :publisher, :property=>:has_member
13
14
  has_and_belongs_to_many :topics, :property=>:has_topic, :inverse_of=>:is_topic_of
14
15
  has_and_belongs_to_many :collections, :property=>:is_member_of_collection
15
16
  end
@@ -17,6 +18,9 @@ describe ActiveFedora::Base do
17
18
  class Person < ActiveFedora::Base
18
19
  end
19
20
 
21
+ class Publisher < ActiveFedora::Base
22
+ end
23
+
20
24
  class Collection < ActiveFedora::Base
21
25
  end
22
26
 
@@ -186,6 +190,17 @@ describe ActiveFedora::Base do
186
190
  @book.topics.should == []
187
191
  @topic1.books.should == []
188
192
  end
193
+ it "Should allow for more than 10 items" do
194
+
195
+ (0..11).each do
196
+ @book.topics << Topic.create
197
+ end
198
+ @book.save
199
+ @book.topics.count.should == 12
200
+ book2 = Book.find(@book.pid)
201
+ book2.topics.count.should == 12
202
+ end
203
+
189
204
  after do
190
205
  @topic1.delete
191
206
  @topic2.delete
@@ -205,6 +220,8 @@ describe ActiveFedora::Base do
205
220
  @book.save
206
221
  @person = Person.new
207
222
  @person.save
223
+ @publisher = Publisher.new
224
+ @publisher.save
208
225
  end
209
226
  it "should have many books once it has been saved" do
210
227
  @library.books << @book
@@ -236,6 +253,18 @@ describe ActiveFedora::Base do
236
253
  Book.find(@book.id).author.send(:find_target).should be_kind_of Person
237
254
  end
238
255
 
256
+ it "should respect multiple associations that share the same :property and respect associated class" do
257
+ @book.author = @person
258
+ @book.publisher = @publisher
259
+ @book.save
260
+
261
+ Book.find(@book.id).publisher_id.should == @publisher.pid
262
+ Book.find(@book.id).publisher.send(:find_target).should be_kind_of Publisher
263
+
264
+ Book.find(@book.id).author_id.should == @person.pid
265
+ Book.find(@book.id).author.send(:find_target).should be_kind_of Person
266
+ end
267
+
239
268
  describe "when changing the belonger" do
240
269
  before do
241
270
  @book.library = @library
@@ -256,6 +285,8 @@ describe ActiveFedora::Base do
256
285
  after do
257
286
  @library.delete
258
287
  @book.delete
288
+ @person.delete
289
+ @publisher.delete
259
290
  end
260
291
  end
261
292
  describe "of has_many_and_belongs_to" do
@@ -321,6 +352,10 @@ describe ActiveFedora::Base do
321
352
  @library = Library.new()
322
353
  @library.save()
323
354
  @book = Book.new
355
+ @author = Person.new
356
+ @author.save
357
+ @publisher = Publisher.new
358
+ @publisher.save
324
359
  end
325
360
  it "should set the association" do
326
361
  @book.library = @library
@@ -351,6 +386,33 @@ describe ActiveFedora::Base do
351
386
 
352
387
  end
353
388
 
389
+ it "should only replace the matching class association" do
390
+ @publisher2 = Publisher.new
391
+ @publisher2.save
392
+
393
+ @book.publisher = @publisher
394
+ @book.author = @author
395
+ @book.save
396
+
397
+ @book.publisher = @publisher2
398
+ @book.save
399
+
400
+ Book.find(@book.pid).publisher.pid.should == @publisher2.pid
401
+ Book.find(@book.pid).author.pid.should == @author.pid
402
+ end
403
+
404
+ it "should only clear the matching class association" do
405
+ @book.publisher = @publisher
406
+ @book.author = @author
407
+ @book.save
408
+
409
+ @book.author = nil
410
+ @book.save
411
+
412
+ Book.find(@book.pid).author.should be_nil
413
+ Book.find(@book.pid).publisher.pid.should == @publisher.pid
414
+ end
415
+
354
416
  it "should be able to be set by id" do
355
417
  @book.library_id = @library.pid
356
418
  @book.library_id.should == @library.pid
@@ -362,7 +424,10 @@ describe ActiveFedora::Base do
362
424
  after do
363
425
  @library.delete
364
426
  @book.delete
427
+ @author.delete
428
+ @publisher.delete
365
429
  @library2.delete if @library2
430
+ @publisher2.delete if @publisher2
366
431
  end
367
432
  end
368
433
  end
@@ -605,4 +670,61 @@ describe ActiveFedora::Base do
605
670
  end
606
671
  end
607
672
  end
608
- end
673
+
674
+ describe "casting when the class name is ActiveFedora::Base" do
675
+ describe "for habtm" do
676
+ before :all do
677
+ class Novel < ActiveFedora::Base
678
+ has_and_belongs_to_many :contents, property: :is_part_of, class_name: 'ActiveFedora::Base'
679
+ end
680
+ class TextBook < ActiveFedora::Base
681
+ has_and_belongs_to_many :contents, property: :is_part_of, class_name: 'ActiveFedora::Base'
682
+ end
683
+ class Text < ActiveFedora::Base
684
+ has_many :books, property: :is_part_of, class_name: 'ActiveFedora::Base'
685
+ end
686
+ class Image < ActiveFedora::Base
687
+ has_many :books, property: :is_part_of, class_name: 'ActiveFedora::Base'
688
+ end
689
+
690
+ end
691
+ after :all do
692
+ Object.send(:remove_const, :Novel)
693
+ Object.send(:remove_const, :TextBook)
694
+ Object.send(:remove_const, :Text)
695
+ Object.send(:remove_const, :Image)
696
+ end
697
+
698
+ describe "saving between the before and after hooks" do
699
+ let(:text1) { Text.create}
700
+ let(:image1) { Image.create}
701
+ let(:text2) { Text.create}
702
+ let(:image2) { Image.create}
703
+ let(:book1) { TextBook.create}
704
+ let(:book2) { Novel.create}
705
+
706
+ it "should work when added via the has_and_belongs_to_many" do
707
+ book1.contents = [text1, image1]
708
+ book1.save!
709
+ book2.contents = [text2, image2]
710
+ book2.save!
711
+
712
+ book1.reload.contents.should include(text1, image1)
713
+ text1.reload.books.should == [book1]
714
+ image1.reload.books.should == [book1]
715
+
716
+ book2.reload.contents.should include(text2, image2)
717
+ text2.reload.books.should == [book2]
718
+ image2.reload.books.should == [book2]
719
+ end
720
+
721
+ it "should work when added via the has_many" do
722
+ text2.books << book2
723
+ book2.save
724
+ book2.reload.contents.should == [text2]
725
+ text2.reload.books.should == [book2]
726
+ end
727
+ end
728
+ end
729
+ end
730
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,7 +17,7 @@ require 'active-fedora'
17
17
  require 'rspec'
18
18
  require 'equivalent-xml/rspec_matchers'
19
19
 
20
- require 'support/mock_fedora'
20
+ Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f }
21
21
  require 'samples/samples'
22
22
 
23
23
 
@@ -0,0 +1,28 @@
1
+ shared_examples_for "An ActiveModel" do
2
+ begin
3
+ require 'minitest/unit'
4
+ include Minitest::Assertions
5
+ rescue NameError
6
+ puts "Unable to load minitest, here's hoping these methods are adequate"
7
+
8
+ def assert(test, *args)
9
+ expect(test).to eq(true)
10
+ end
11
+
12
+ def assert_kind_of(klass, inspected_object)
13
+ expect(inspected_object).to be_kind_of(klass)
14
+ end
15
+ end
16
+ include ActiveModel::Lint::Tests
17
+
18
+ ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
19
+ example m.gsub('_',' ') do
20
+ send m
21
+ end
22
+ end
23
+
24
+ def model
25
+ subject
26
+ end
27
+
28
+ end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActiveFedora::Base do
4
-
5
4
  describe "active model methods" do
6
5
  class BarStream < ActiveFedora::OmDatastream
7
6
  set_terminology do |t|
@@ -2,6 +2,8 @@ require 'spec_helper'
2
2
  @@last_pid = 0
3
3
 
4
4
  describe ActiveFedora::Base do
5
+ it_behaves_like "An ActiveModel"
6
+
5
7
  describe 'descendants' do
6
8
  it "should record the decendants" do
7
9
  ActiveFedora::Base.descendants.should include(ModsArticle, SpecialThing)
@@ -82,9 +84,13 @@ describe ActiveFedora::Base do
82
84
  end
83
85
 
84
86
  describe "reindex_everything" do
85
- it "should call update_index on every object" do
87
+ it "should call update_index on every object except for the fedora-system objects" do
86
88
  Rubydora::Repository.any_instance.should_receive(:search).
87
- and_yield(double(pid:'XXX')).and_yield(double(pid:'YYY')).and_yield(double(pid:'ZZZ'))
89
+ and_yield(double(pid:'XXX')).and_yield(double(pid:'YYY')).and_yield(double(pid:'ZZZ')).
90
+ and_yield(double(pid:'fedora-system:ServiceDeployment-3.0')).
91
+ and_yield(double(pid:'fedora-system:ServiceDefinition-3.0')).
92
+ and_yield(double(pid:'fedora-system:FedoraObject-3.0'))
93
+
88
94
  mock_update = double(:mock_obj)
89
95
  mock_update.should_receive(:update_index).exactly(3).times
90
96
  ActiveFedora::Base.should_receive(:find).with('XXX', :cast=>true).and_return(mock_update)
@@ -92,6 +98,18 @@ describe ActiveFedora::Base do
92
98
  ActiveFedora::Base.should_receive(:find).with('ZZZ', :cast=>true).and_return(mock_update)
93
99
  ActiveFedora::Base.reindex_everything
94
100
  end
101
+
102
+ it "should accept a query param for the search" do
103
+ query_string = "pid~*"
104
+ Rubydora::Repository.any_instance.should_receive(:search).with(query_string).
105
+ and_yield(double(pid:'XXX')).and_yield(double(pid:'YYY')).and_yield(double(pid:'ZZZ'))
106
+ mock_update = double(:mock_obj)
107
+ mock_update.should_receive(:update_index).exactly(3).times
108
+ ActiveFedora::Base.should_receive(:find).with('XXX', :cast=>true).and_return(mock_update)
109
+ ActiveFedora::Base.should_receive(:find).with('YYY', :cast=>true).and_return(mock_update)
110
+ ActiveFedora::Base.should_receive(:find).with('ZZZ', :cast=>true).and_return(mock_update)
111
+ ActiveFedora::Base.reindex_everything(query_string)
112
+ end
95
113
  end
96
114
 
97
115
  describe "With a test class" do
@@ -93,6 +93,38 @@ describe ActiveFedora::FileConfigurator do
93
93
  end
94
94
  end
95
95
 
96
+ describe "get_config_path(:predicate_mappings)" do
97
+ it "should use the config_options[:config_path] if it exists" do
98
+ subject.should_receive(:config_options).and_return({:predicate_mappings_config_path => "/path/to/predicate_mappings.yml"})
99
+ File.should_receive(:file?).with("/path/to/predicate_mappings.yml").and_return(true)
100
+ subject.get_config_path(:predicate_mappings).should eql("/path/to/predicate_mappings.yml")
101
+ end
102
+
103
+ it "should look in Rails.root/config/predicate_mappings.yml if it exists and no predicate_mappings_config_path passed in" do
104
+ subject.should_receive(:config_options).and_return({})
105
+ stub_rails(:root => "/rails/root")
106
+ File.should_receive(:file?).with("/rails/root/config/predicate_mappings.yml").and_return(true)
107
+ subject.get_config_path(:predicate_mappings).should eql("/rails/root/config/predicate_mappings.yml")
108
+ unstub_rails
109
+ end
110
+
111
+ it "should look in ./config/predicate_mappings.yml if neither rails.root nor :predicate_mappings_config_path are set" do
112
+ subject.should_receive(:config_options).and_return({})
113
+ Dir.stub(:getwd => "/current/working/directory")
114
+ File.should_receive(:file?).with("/current/working/directory/config/predicate_mappings.yml").and_return(true)
115
+ subject.get_config_path(:predicate_mappings).should eql("/current/working/directory/config/predicate_mappings.yml")
116
+ end
117
+
118
+ it "should return default predicate_mappings.yml that ships with active-fedora if none of the above" do
119
+ subject.should_receive(:config_options).and_return({})
120
+ Dir.should_receive(:getwd).and_return("/current/working/directory")
121
+ File.should_receive(:file?).with("/current/working/directory/config/predicate_mappings.yml").and_return(false)
122
+ File.should_receive(:file?).with(File.expand_path(File.join(File.dirname("__FILE__"),'config','predicate_mappings.yml'))).and_return(true)
123
+ logger.should_receive(:warn).with("Using the default predicate_mappings.yml that comes with active-fedora. If you want to override this, pass the path to predicate_mappings.yml to ActiveFedora - ie. ActiveFedora.init(:predicate_mappings_config_path => '/path/to/predicate_mappings.yml') - or set Rails.root and put predicate_mappings.yml into \#{Rails.root}/config.")
124
+ subject.get_config_path(:predicate_mappings).should eql(File.expand_path(File.join(File.dirname("__FILE__"),'config','predicate_mappings.yml')))
125
+ end
126
+ end
127
+
96
128
  describe "get_config_path(:solr)" do
97
129
  it "should return the solr_config_path if set in config_options hash" do
98
130
  subject.stub(:config_options => {:solr_config_path => "/path/to/solr.yml"})
@@ -302,20 +334,8 @@ describe ActiveFedora::FileConfigurator do
302
334
 
303
335
  describe ".build_predicate_config_path" do
304
336
  it "should return the path to the default config/predicate_mappings.yml if no valid path is given" do
305
- subject.send(:build_predicate_config_path, nil).should == default_predicate_mapping_file
337
+ subject.send(:build_predicate_config_path).should == default_predicate_mapping_file
306
338
  end
307
-
308
- it "should return the path to the default config/predicate_mappings.yml if specified config file not found" do
309
- File.should_receive(:exist?).with("/path/to/predicate_mappings.yml").and_return(false)
310
- File.should_receive(:exist?).with(default_predicate_mapping_file).and_return(true)
311
- subject.send(:build_predicate_config_path,"/path/to").should == default_predicate_mapping_file
312
- end
313
-
314
- it "should return the path to the specified config_path if it exists" do
315
- File.should_receive(:exist?).with("/path/to/predicate_mappings.yml").and_return(true)
316
- subject.should_receive(:valid_predicate_mapping?).and_return(true)
317
- subject.send(:build_predicate_config_path,"/path/to").should == "/path/to/predicate_mappings.yml"
318
- end
319
339
  end
320
340
 
321
341
  describe ".predicate_config" do
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: 6.4.3
4
+ version: 6.4.4
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: 2013-07-16 00:00:00.000000000 Z
13
+ date: 2013-07-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rsolr
@@ -285,6 +285,7 @@ files:
285
285
  - .mailmap
286
286
  - .travis.yml
287
287
  - CONSOLE_GETTING_STARTED.textile
288
+ - CONTRIBUTING.md
288
289
  - CONTRIBUTORS.md
289
290
  - Gemfile
290
291
  - History.txt
@@ -477,6 +478,7 @@ files:
477
478
  - spec/samples/special_thing.rb
478
479
  - spec/spec.opts
479
480
  - spec/spec_helper.rb
481
+ - spec/support/an_active_model.rb
480
482
  - spec/support/mock_fedora.rb
481
483
  - spec/unit/active_fedora_spec.rb
482
484
  - spec/unit/association_proxy_spec.rb
@@ -637,6 +639,7 @@ test_files:
637
639
  - spec/samples/special_thing.rb
638
640
  - spec/spec.opts
639
641
  - spec/spec_helper.rb
642
+ - spec/support/an_active_model.rb
640
643
  - spec/support/mock_fedora.rb
641
644
  - spec/unit/active_fedora_spec.rb
642
645
  - spec/unit/association_proxy_spec.rb