active-fedora 1.2.7 → 1.2.8

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.7
1
+ 1.2.8
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{active-fedora}
8
- s.version = "1.2.7"
8
+ s.version = "1.2.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Zumwalt", "McClain Looney"]
12
- s.date = %q{2010-11-14}
12
+ s.date = %q{2010-12-15}
13
13
  s.description = %q{ActiveFedora provides for creating and managing objects in the Fedora Repository Architecture.}
14
14
  s.email = %q{matt.zumwalt@yourmediashelf.com}
15
15
  s.extra_rdoc_files = [
@@ -56,12 +56,19 @@ module ActiveFedora
56
56
 
57
57
  # Constructor. If +attrs+ does not comtain +:pid+, we assume we're making a new one,
58
58
  # and call off to the Fedora Rest API for the next available Fedora pid, and mark as new object.
59
+ # Also, if +attrs+ does not contain +:pid+ but does contain +:namespace+ it will pass the
60
+ # +:namespace+ value to Fedora::Repository.nextid to generate the next pid available within
61
+ # the given namespace.
59
62
  #
60
63
  # If there is a pid, we're re-hydrating an existing object, and new object is false. Once the @inner_object is stored,
61
64
  # we configure any defined datastreams.
62
65
  def initialize(attrs = {})
63
66
  unless attrs[:pid]
64
- attrs = attrs.merge!({:pid=>Fedora::Repository.instance.nextid})
67
+ if attrs[:namespace]
68
+ attrs = attrs.merge!({:pid=>Fedora::Repository.instance.nextid({:namespace=>attrs[:namespace]})})
69
+ else
70
+ attrs = attrs.merge!({:pid=>Fedora::Repository.instance.nextid})
71
+ end
65
72
  @new_object=true
66
73
  else
67
74
  @new_object = attrs[:new_object] == false ? false : true
@@ -13,8 +13,16 @@ module ActiveFedora
13
13
 
14
14
  def self.pid_from_ruby_class(klass,attrs={})
15
15
  sanitized_class_name = klass.name.gsub(/(::)/, '_')
16
- pid_suffix = attrs.has_key?(:pid_suffix) ? attrs[:pid_suffix] : CMODEL_PID_SUFFIX
17
- namespace = attrs.has_key?(:namespace) ? attrs[:namespace] : CMODEL_NAMESPACE
16
+ unless klass.respond_to? :pid_suffix
17
+ pid_suffix = attrs.has_key?(:pid_suffix) ? attrs[:pid_suffix] : CMODEL_PID_SUFFIX
18
+ else
19
+ pid_suffix = klass.pid_suffix
20
+ end
21
+ unless klass.respond_to? :pid_namespace
22
+ namespace = attrs.has_key?(:namespace) ? attrs[:namespace] : CMODEL_NAMESPACE
23
+ else
24
+ namespace = klass.pid_namespace
25
+ end
18
26
  return "#{namespace}:#{sanitized_class_name}#{pid_suffix}"
19
27
  end
20
28
 
@@ -71,4 +79,4 @@ module ActiveFedora
71
79
  end
72
80
 
73
81
  end
74
- end
82
+ end
@@ -53,21 +53,32 @@ module ActiveFedora
53
53
  # Takes :all or a pid as arguments
54
54
  # Returns an Array of objects of the Class that +find+ is being
55
55
  # called on
56
- def find(args)
56
+ def find(args, opts={})
57
+ opts = {:rows=>25}.merge(opts)
58
+ return_multiple = false
57
59
  if args == :all
60
+ return_multiple = true
58
61
  escaped_class_name = self.name.gsub(/(:)/, '\\:')
59
62
  q = "#{ActiveFedora::SolrService.solr_name(:active_fedora_model, :symbol)}:#{escaped_class_name}"
60
63
  elsif args.class == String
61
64
  escaped_id = args.gsub(/(:)/, '\\:')
62
65
  q = "#{SOLR_DOCUMENT_ID}:#{escaped_id}"
63
66
  end
64
- hits = SolrService.instance.conn.query(q).hits
67
+ if return_multiple == true
68
+ hits = SolrService.instance.conn.query(q, :rows=>opts[:rows]).hits
69
+ else
70
+ hits = SolrService.instance.conn.query(q).hits
71
+ end
65
72
  results = hits.map do |hit|
66
73
  obj = Fedora::Repository.instance.find_model(hit[SOLR_DOCUMENT_ID], self)
67
74
  #obj.inner_object.new_object = false
68
75
  #return obj
69
76
  end
70
- results.first
77
+ if return_multiple == true
78
+ return results
79
+ else
80
+ return results.first
81
+ end
71
82
  end
72
83
 
73
84
  #Sends a query directly to SolrService
@@ -606,8 +606,9 @@ module ActiveFedora
606
606
  def create_inbound_relationship_finders(name, predicate, opts = {})
607
607
  class_eval <<-END
608
608
  def #{name}(opts={})
609
+ opts = {:rows=>25}.merge(opts)
609
610
  escaped_uri = self.internal_uri.gsub(/(:)/, '\\:')
610
- solr_result = SolrService.instance.conn.query("#{predicate}_s:\#{escaped_uri}")
611
+ solr_result = SolrService.instance.conn.query("#{predicate}_s:\#{escaped_uri}", :rows=>opts[:rows])
611
612
  if opts[:response_format] == :solr
612
613
  return solr_result
613
614
  else
@@ -684,6 +685,7 @@ module ActiveFedora
684
685
 
685
686
  class_eval <<-END
686
687
  def #{name}(opts={})
688
+ opts = {:rows=>25}.merge(opts)
687
689
  if opts[:response_format] == :solr || opts[:response_format] == :load_from_solr
688
690
  escaped_uri = self.internal_uri.gsub(/(:)/, '\\:')
689
691
  query = "#{inbound_predicate}_s:\#{escaped_uri}"
@@ -691,7 +693,7 @@ module ActiveFedora
691
693
  outbound_id_array = #{outbound_method_name}(:response_format=>:id_array)
692
694
  query = query + " OR " + ActiveFedora::SolrService.construct_query_for_pids(outbound_id_array)
693
695
 
694
- solr_result = SolrService.instance.conn.query(query)
696
+ solr_result = SolrService.instance.conn.query(query, :rows=>opts[:rows])
695
697
 
696
698
  if opts[:response_format] == :solr
697
699
  return solr_result
@@ -116,8 +116,10 @@ module Fedora
116
116
  object.new_object? ? create(object) : update(object)
117
117
  end
118
118
 
119
- def nextid
120
- d = REXML::Document.new(connection.post(fedora_url.path+"/management/getNextPID?xml=true").body)
119
+ def nextid(attrs={})
120
+ request_url = fedora_url.path+"/management/getNextPID?xml=true"
121
+ request_url += "&namespace=#{attrs[:namespace]}" if attrs[:namespace]
122
+ d = REXML::Document.new(connection.post(request_url).body)
121
123
  d.elements['//pid'].text
122
124
  end
123
125
 
data/script/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # File: script/console
3
3
  irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
-
4
+ ENV["RUBYLIB"] = "lib"
5
5
  libs = " -r irb/completion"
6
6
  libs << " -r #{File.dirname(__FILE__) + '/../spec/spec_helper'}"
7
7
  #libs << " -r rubygems"
@@ -70,10 +70,18 @@ describe ActiveFedora::Base do
70
70
  end
71
71
  end
72
72
 
73
-
74
- it "calling constructor should create a new Fedora Object" do
75
- @test_object.should have(0).errors
76
- @test_object.pid.should_not be_nil
73
+ describe ".initialize" do
74
+ it "calling constructor should create a new Fedora Object" do
75
+ @test_object.should have(0).errors
76
+ @test_object.pid.should_not be_nil
77
+ end
78
+
79
+ it "passing namespace to constructor with no pid should generate a pid with the supplied namespace" do
80
+ @test_object2 = ActiveFedora::Base.new({:namespace=>"randomNamespace"})
81
+ #@test_object2.pid.match('changeme:\d+').to_a.first.should == @test_object2.pid
82
+ # will be nil if match failed, otherwise will equal pid
83
+ @test_object2.pid.match('randomNamespace:\d+').to_a.first.should == @test_object2.pid
84
+ end
77
85
  end
78
86
 
79
87
  describe ".save" do
@@ -35,6 +35,7 @@ describe ActiveFedora::Base do
35
35
 
36
36
  after(:each) do
37
37
  begin
38
+ ActiveFedora::SolrService.stubs(:instance)
38
39
  @test_object.delete
39
40
  rescue
40
41
  end
@@ -50,6 +50,14 @@ describe ActiveFedora::ContentModel do
50
50
  ActiveFedora::ContentModel.pid_from_ruby_class(@test_cmodel.class).should == "afmodel:ActiveFedora_ContentModel"
51
51
  ActiveFedora::ContentModel.pid_from_ruby_class(@test_cmodel.class, :namespace => "foo", :pid_suffix => "BarBar").should == "foo:ActiveFedora_ContentModelBarBar"
52
52
  end
53
+ it "should construct pids with the namespace declared in the model" do
54
+ ActiveFedora::ContentModel.stubs(:pid_namespace).returns("test-cModel")
55
+ ActiveFedora::ContentModel.pid_from_ruby_class(@test_cmodel.class).should == "test-cModel:ActiveFedora_ContentModel"
56
+ end
57
+ it "should construct pids with the suffix declared in the model" do
58
+ ActiveFedora::ContentModel.stubs(:pid_suffix).returns("-TEST-SUFFIX")
59
+ ActiveFedora::ContentModel.pid_from_ruby_class(@test_cmodel.class).should == 'afmodel:ActiveFedora_ContentModel-TEST-SUFFIX'
60
+ end
53
61
  end
54
62
 
55
63
  describe "models_asserted_by" do
@@ -103,11 +103,11 @@ describe ActiveFedora::Model do
103
103
  mock_solr = mock("SolrConnection")
104
104
  mock_result = mock("MockResult")
105
105
  mock_result.expects(:hits).returns([{"id" => "changeme:30"}, {"id" => "changeme:22"}])
106
- mock_solr.expects(:query).with('active_fedora_model_s:SpecModel\:\:Basic').returns(mock_result)
106
+ mock_solr.expects(:query).with('active_fedora_model_s:SpecModel\:\:Basic', :rows=>1001).returns(mock_result)
107
107
  ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
108
- Fedora::Repository.instance.expects(:find_model).with("changeme:30", SpecModel::Basic).returns("Fake Object")
109
- Fedora::Repository.instance.expects(:find_model).with("changeme:22", SpecModel::Basic).returns("Fake Object")
110
- SpecModel::Basic.find(:all)
108
+ Fedora::Repository.instance.expects(:find_model).with("changeme:30", SpecModel::Basic).returns("Fake Object1")
109
+ Fedora::Repository.instance.expects(:find_model).with("changeme:22", SpecModel::Basic).returns("Fake Object2")
110
+ SpecModel::Basic.find(:all, :rows=>1001).should == ["Fake Object1", "Fake Object2"]
111
111
  end
112
112
 
113
113
  it "(String) should query solr for an object with the given id and return that object" do
@@ -244,7 +244,7 @@ describe ActiveFedora::SemanticNode do
244
244
  SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
245
245
  local_node = SpecNode.new()
246
246
  local_node.expects(:internal_uri).returns("info:fedora/test:sample_pid")
247
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid").returns(solr_result)
247
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid", :rows=>25).returns(solr_result)
248
248
  Fedora::Repository.expects(:instance).returns(mock_repo).times(3)
249
249
  Kernel.expects(:const_get).with("AudioRecord").returns("AudioRecord").times(3)
250
250
  local_node.parts.should == ["AR1", "AR2", "AR3"]
@@ -257,8 +257,8 @@ describe ActiveFedora::SemanticNode do
257
257
  mock_repo = mock("repo")
258
258
  mock_repo.expects(:find_model).never
259
259
  local_node.expects(:internal_uri).returns("info:fedora/test:sample_pid")
260
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_constituent_of_s:info\\:fedora/test\\:sample_pid").returns(solr_result)
261
- local_node.constituents(:response_format => :solr).should equal(solr_result)
260
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_constituent_of_s:info\\:fedora/test\\:sample_pid", :rows=>101).returns(solr_result)
261
+ local_node.constituents(:response_format => :solr, :rows=>101).should equal(solr_result)
262
262
  end
263
263
 
264
264
 
@@ -266,7 +266,7 @@ describe ActiveFedora::SemanticNode do
266
266
  SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
267
267
  local_node = SpecNode.new
268
268
  local_node.expects(:internal_uri).returns("info:fedora/test:sample_pid")
269
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid").returns(mock("solr result", :hits => [Hash["id"=>"pid1"], Hash["id"=>"pid2"]]))
269
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid", :rows=>25).returns(mock("solr result", :hits => [Hash["id"=>"pid1"], Hash["id"=>"pid2"]]))
270
270
  local_node.parts(:response_format => :id_array).should == ["pid1", "pid2"]
271
271
  end
272
272
 
@@ -366,21 +366,21 @@ describe ActiveFedora::SemanticNode do
366
366
  @local_node.should respond_to(:all_parts_outbound)
367
367
  end
368
368
  it "should rely on inbound & outbound finders" do
369
- @local_node.expects(:all_parts_inbound).returns(["foo1"])
370
- @local_node.expects(:all_parts_outbound).returns(["foo2"])
369
+ @local_node.expects(:all_parts_inbound).with(:rows => 25).returns(["foo1"])
370
+ @local_node.expects(:all_parts_outbound).with(:rows => 25).returns(["foo2"])
371
371
  @local_node.all_parts.should == ["foo1", "foo2"]
372
372
  end
373
373
  it "(:response_format => :id_array) should rely on inbound & outbound finders" do
374
- @local_node.expects(:all_parts_inbound).with(:response_format=>:id_array).returns(["fooA"])
375
- @local_node.expects(:all_parts_outbound).with(:response_format=>:id_array).returns(["fooB"])
376
- @local_node.all_parts(:response_format=>:id_array).should == ["fooA", "fooB"]
374
+ @local_node.expects(:all_parts_inbound).with(:response_format=>:id_array, :rows => 34).returns(["fooA"])
375
+ @local_node.expects(:all_parts_outbound).with(:response_format=>:id_array, :rows => 34).returns(["fooB"])
376
+ @local_node.all_parts(:response_format=>:id_array, :rows => 34).should == ["fooA", "fooB"]
377
377
  end
378
378
  it "(:response_format => :solr) should construct a solr query that combines inbound and outbound searches" do
379
379
  # get the id array for outbound relationships then construct solr query by combining id array with inbound relationship search
380
380
  @local_node.expects(:all_parts_outbound).with(:response_format=>:id_array).returns(["mypid:1"])
381
381
  id_array_query = ActiveFedora::SolrService.construct_query_for_pids(["mypid:1"])
382
382
  solr_result = mock("solr result")
383
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid OR #{id_array_query}").returns(solr_result)
383
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid OR #{id_array_query}", :rows=>25).returns(solr_result)
384
384
  @local_node.all_parts(:response_format=>:solr)
385
385
  end
386
386
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-fedora
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 7
10
- version: 1.2.7
9
+ - 8
10
+ version: 1.2.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Zumwalt
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-11-14 00:00:00 -05:00
19
+ date: 2010-12-15 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency