active-fedora 3.2.0.pre6 → 3.2.0.pre7
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/Gemfile.lock +1 -1
- data/History.txt +10 -5
- data/lib/active_fedora/associations/association_collection.rb +3 -13
- data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +5 -12
- data/lib/active_fedora/associations/has_many_association.rb +9 -5
- data/lib/active_fedora/base.rb +1 -1
- data/lib/active_fedora/model.rb +9 -0
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/associations_spec.rb +22 -10
- data/spec/unit/has_many_collection_spec.rb +3 -4
- data/spec/unit/model_spec.rb +20 -1
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/History.txt
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
3.2.0
|
2
2
|
|
3
|
+
Added a count method
|
4
|
+
HYDRA-731 running count on a has_many relationship returns zero unless the relationship has been loaded
|
3
5
|
Added ActiveModel validations.
|
4
6
|
Added callbacks on initialize, save, update, create, delete and find
|
5
7
|
Added Base.create
|
6
8
|
HYDRA-730 ActiveFedora isn't being initialized unless it is specified in the project Gemfile
|
7
|
-
Don't create pids until save
|
8
|
-
inspect
|
9
|
-
|
9
|
+
Don't create pids until save so that we don't cycle through pids we don't intend to save
|
10
|
+
inspect method gives less information (more readable)
|
11
|
+
Added an equality method
|
12
|
+
Deprecate the automatic inclusion of datastream_collections (you should include this optional module in your models if you intend to use it)
|
13
|
+
Deprecate the automatic inclusion of relationships (you should include this optional module in your models if you intend to use it)
|
14
|
+
Deprecate the automatic inclusion of file_management (you should include this optional module in your models if you intend to use it)
|
10
15
|
Disseminators have been added
|
11
16
|
HYDRA-729 don't update xml datastreams unless they've changed
|
12
|
-
|
13
|
-
ActiveFedora::Relationship is deprecated
|
17
|
+
Added adapt_to method to reduce number of round trips to fedora.
|
18
|
+
ActiveFedora::Relationship is deprecated (was not being used)
|
14
19
|
Rails 3.1 compatibility
|
15
20
|
Ruby 1.9 compatibility
|
16
21
|
|
@@ -3,6 +3,7 @@ module ActiveFedora
|
|
3
3
|
class AssociationCollection < AssociationProxy #:nodoc:
|
4
4
|
def initialize(owner, reflection)
|
5
5
|
super
|
6
|
+
construct_query
|
6
7
|
end
|
7
8
|
|
8
9
|
# Returns the size of the collection
|
@@ -129,23 +130,12 @@ module ActiveFedora
|
|
129
130
|
end
|
130
131
|
|
131
132
|
def find_target
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
def load_inbound_relationship(pid, predicate, opts={})
|
136
|
-
opts = {:rows=>25}.merge(opts)
|
137
|
-
query = inbound_relationship_query(pid, predicate)
|
138
|
-
return [] if query.empty?
|
139
|
-
solr_result = SolrService.instance.conn.query(query, :rows=>opts[:rows])
|
133
|
+
return [] if @finder_query.empty?
|
134
|
+
solr_result = SolrService.instance.conn.query(@finder_query, :rows=>1000)
|
140
135
|
#TODO, don't reify, just store the solr results and lazily reify.
|
141
136
|
return ActiveFedora::SolrService.reify_solr_results(solr_result)
|
142
137
|
end
|
143
138
|
|
144
|
-
def inbound_relationship_query(pid,predicate)
|
145
|
-
internal_uri = "info:fedora/#{pid}"
|
146
|
-
escaped_uri = internal_uri.gsub(/(:)/, '\\:')
|
147
|
-
"#{predicate}_s:#{escaped_uri}"
|
148
|
-
end
|
149
139
|
|
150
140
|
def add_record_to_target_with_callbacks(record)
|
151
141
|
# callback(:before_add, record)
|
@@ -68,18 +68,11 @@ module ActiveFedora
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
# @finder_sql << " AND (#{conditions})" if conditions
|
77
|
-
# end
|
78
|
-
|
79
|
-
# @join_sql = "INNER JOIN #{@owner.connection.quote_table_name @reflection.options[:join_table]} ON #{@reflection.quoted_table_name}.#{@reflection.klass.primary_key} = #{@owner.connection.quote_table_name @reflection.options[:join_table]}.#{@reflection.association_foreign_key}"
|
80
|
-
|
81
|
-
# construct_counter_sql
|
82
|
-
# end
|
71
|
+
def construct_query
|
72
|
+
internal_uri = @owner.internal_uri
|
73
|
+
escaped_uri = internal_uri.gsub(/(:)/, '\\:')
|
74
|
+
@counter_query = @finder_query = "#{@reflection.options[:property]}_s:#{escaped_uri}"
|
75
|
+
end
|
83
76
|
|
84
77
|
def construct_scope
|
85
78
|
{ :find => { :conditions => @finder_sql,
|
@@ -14,10 +14,12 @@ module ActiveFedora
|
|
14
14
|
# If the collection is empty the target is set to an empty array and
|
15
15
|
# the loaded flag is set to true as well.
|
16
16
|
def count_records
|
17
|
-
count = if
|
17
|
+
count = if loaded?
|
18
18
|
@target.size
|
19
19
|
else
|
20
|
-
|
20
|
+
@reflection.klass.count(:conditions => @counter_query)
|
21
|
+
# load_target
|
22
|
+
# @target.size
|
21
23
|
end
|
22
24
|
|
23
25
|
# If there's nothing in the database and @target has no new records
|
@@ -44,9 +46,11 @@ module ActiveFedora
|
|
44
46
|
end
|
45
47
|
|
46
48
|
|
47
|
-
|
49
|
+
def construct_query
|
50
|
+
internal_uri = @owner.internal_uri
|
51
|
+
escaped_uri = internal_uri.gsub(/(:)/, '\\:')
|
52
|
+
@counter_query = @finder_query = "#{@reflection.options[:property]}_s:#{escaped_uri}"
|
53
|
+
end
|
48
54
|
end
|
49
|
-
|
50
55
|
end
|
51
|
-
|
52
56
|
end
|
data/lib/active_fedora/base.rb
CHANGED
@@ -157,7 +157,7 @@ module ActiveFedora
|
|
157
157
|
ds_specs[args[:name]]= {:type => args[:type], :label => args.fetch(:label,""), :control_group => args.fetch(:control_group,"X"), :disseminator => args.fetch(:disseminator,""), :url => args.fetch(:url,""),:block => block}
|
158
158
|
end
|
159
159
|
|
160
|
-
def self.create(args)
|
160
|
+
def self.create(args = {})
|
161
161
|
obj = self.new(args)
|
162
162
|
obj.save
|
163
163
|
obj
|
data/lib/active_fedora/model.rb
CHANGED
@@ -119,6 +119,15 @@ module ActiveFedora
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
+
# Get a count of the number of objects from solr
|
123
|
+
# Takes :conditions as an argument
|
124
|
+
def count(args = {})
|
125
|
+
escaped_class_uri = SolrService.escape_uri_for_query(self.to_class_uri)
|
126
|
+
q = "#{ActiveFedora::SolrService.solr_name(:has_model, :symbol)}:#{escaped_class_uri}"
|
127
|
+
q << " AND #{args[:conditions]}" if args[:conditions]
|
128
|
+
SolrService.instance.conn.query(q, :rows=>0).total_hits
|
129
|
+
end
|
130
|
+
|
122
131
|
#Sends a query directly to SolrService
|
123
132
|
def solr_search(query, args={})
|
124
133
|
SolrService.instance.conn.query(query, args)
|
@@ -34,28 +34,29 @@ describe ActiveFedora::Base do
|
|
34
34
|
@library.books.to_ary.should == []
|
35
35
|
@library.book_ids.should ==[]
|
36
36
|
@library.books << @book
|
37
|
-
@library.books.
|
37
|
+
@library.books.to_a.should == [@book]
|
38
38
|
@library.book_ids.should ==[@book.pid]
|
39
|
+
|
39
40
|
end
|
40
41
|
|
41
42
|
it "should let you set an array of objects" do
|
42
43
|
@library.books = [@book, @book2]
|
43
|
-
@library.books.
|
44
|
+
@library.books.to_a.should == [@book, @book2]
|
44
45
|
@library.save
|
45
46
|
|
46
47
|
@library.books = [@book]
|
47
|
-
@library.books.
|
48
|
+
@library.books.to_a.should == [@book]
|
48
49
|
|
49
50
|
end
|
50
51
|
it "should let you set an array of object ids" do
|
51
52
|
@library.book_ids = [@book.pid, @book2.pid]
|
52
|
-
@library.books.
|
53
|
+
@library.books.to_a.should == [@book, @book2]
|
53
54
|
end
|
54
55
|
|
55
56
|
it "setter should wipe out previously saved relations" do
|
56
57
|
@library.book_ids = [@book.pid, @book2.pid]
|
57
58
|
@library.book_ids = [@book2.pid]
|
58
|
-
@library.books.
|
59
|
+
@library.books.to_a.should == [@book2]
|
59
60
|
|
60
61
|
end
|
61
62
|
|
@@ -97,7 +98,7 @@ describe ActiveFedora::Base do
|
|
97
98
|
@book = Book.new
|
98
99
|
@book.topics << @topic1
|
99
100
|
@book.topics.map(&:pid).should == [@topic1.pid]
|
100
|
-
Topic.find(@topic1.pid).books.
|
101
|
+
Topic.find(@topic1.pid).books.to_a.should == [] #Can't have saved it because @book isn't saved yet.
|
101
102
|
end
|
102
103
|
after do
|
103
104
|
@topic1.delete
|
@@ -124,11 +125,22 @@ describe ActiveFedora::Base do
|
|
124
125
|
|
125
126
|
@book.library.pid.should == @library.pid
|
126
127
|
@library.books.reload
|
127
|
-
@library.books.
|
128
|
+
@library.books.to_a.should == [@book]
|
128
129
|
|
130
|
+
@library2 = Library.find(@library.pid)
|
131
|
+
@library2.books.to_a.should == [@book]
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should have a count once it has been saved" do
|
135
|
+
@library.books << @book << Book.create
|
136
|
+
@library.save
|
137
|
+
|
138
|
+
# @book.library.pid.should == @library.pid
|
139
|
+
# @library.books.reload
|
140
|
+
# @library.books.to_a.should == [@book]
|
129
141
|
|
130
142
|
@library2 = Library.find(@library.pid)
|
131
|
-
@library2.books.
|
143
|
+
@library2.books.size.should == 2
|
132
144
|
end
|
133
145
|
|
134
146
|
it "should respect the :class_name parameter" do
|
@@ -154,8 +166,8 @@ describe ActiveFedora::Base do
|
|
154
166
|
end
|
155
167
|
it "habtm should set relationships bidirectionally" do
|
156
168
|
@book.topics << @topic1
|
157
|
-
@book.topics.
|
158
|
-
Topic.find(@topic1.pid).books.
|
169
|
+
@book.topics.to_a.should == [@topic1]
|
170
|
+
Topic.find(@topic1.pid).books.to_a.should == [@book] #Can't have saved it because @book isn't saved yet.
|
159
171
|
end
|
160
172
|
it "should save new child objects" do
|
161
173
|
@book.topics << Topic.new
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ActiveFedora::Associations::HasManyAssociation do
|
4
4
|
it "should be able to replace the collection" do
|
5
|
-
@owner = stub(:new_record? => false, :to_ary => nil)
|
5
|
+
@owner = stub(:new_record? => false, :to_ary => nil, :internal_uri => 'info:fedora/changeme:99')
|
6
6
|
@reflection = stub(:klass => Mocha::Mock, :options=>{:property=>'predicate'})
|
7
7
|
#ac = ActiveFedora::Associations::AssociationCollection.new(@owner, @reflection)
|
8
8
|
ac = ActiveFedora::Associations::HasManyAssociation.new(@owner, @reflection)
|
@@ -17,11 +17,10 @@ describe ActiveFedora::Associations::HasManyAssociation do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should build" do
|
20
|
-
|
21
|
-
@
|
20
|
+
@owner = stub(:new_record? => false, :internal_uri => 'info:fedora/changeme:99')
|
21
|
+
@reflection = stub(:klass => Mocha::Mock, :options=>{:property=>'predicate'})
|
22
22
|
@assoc = ActiveFedora::Associations::HasManyAssociation.new(@owner, @reflection)
|
23
23
|
@assoc.should respond_to :build
|
24
|
-
Object.send(:remove_const, :Foo)
|
25
24
|
|
26
25
|
end
|
27
26
|
|
data/spec/unit/model_spec.rb
CHANGED
@@ -102,7 +102,6 @@ describe ActiveFedora::Model do
|
|
102
102
|
mock_solr = mock("SolrConnection")
|
103
103
|
mock_result = mock("MockResult")
|
104
104
|
mock_result.expects(:hits).returns([{"id" => "changeme:30"}, {"id" => "changeme:22"}])
|
105
|
-
#mock_solr.expects(:query).with('has_model_s:info\\:fedora/afmodel\\:SpecModel\:\:Basic', :rows=>1001).returns(mock_result)
|
106
105
|
mock_solr.expects(:query).with('has_model_s:info\\:fedora/afmodel\\:SpecModel_Basic', :rows=>1001).returns(mock_result)
|
107
106
|
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
108
107
|
ActiveFedora::RubydoraConnection.instance.expects(:find_model).with("changeme:30", SpecModel::Basic).returns("Fake Object1")
|
@@ -150,6 +149,26 @@ describe ActiveFedora::Model do
|
|
150
149
|
end
|
151
150
|
|
152
151
|
end
|
152
|
+
|
153
|
+
describe '#count' do
|
154
|
+
|
155
|
+
it "should return a count" do
|
156
|
+
mock_solr = mock("SolrConnection")
|
157
|
+
mock_result = mock("MockResult")
|
158
|
+
mock_result.expects(:total_hits).returns(7)
|
159
|
+
mock_solr.expects(:query).with('has_model_s:info\\:fedora/afmodel\\:SpecModel_Basic', :rows=>0).returns(mock_result)
|
160
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
161
|
+
SpecModel::Basic.count.should == 7
|
162
|
+
end
|
163
|
+
it "should allow conditions" do
|
164
|
+
mock_solr = mock("SolrConnection")
|
165
|
+
mock_result = mock("MockResult")
|
166
|
+
mock_result.expects(:total_hits).returns(7)
|
167
|
+
mock_solr.expects(:query).with('has_model_s:info\\:fedora/afmodel\\:SpecModel_Basic AND foo:bar', :rows=>0).returns(mock_result)
|
168
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
169
|
+
SpecModel::Basic.count(:conditions=>'foo:bar').should == 7
|
170
|
+
end
|
171
|
+
end
|
153
172
|
|
154
173
|
|
155
174
|
it 'should provide #find_by_solr' do
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1923832039
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
9
|
- 0
|
10
10
|
- pre
|
11
|
-
-
|
12
|
-
version: 3.2.0.
|
11
|
+
- 7
|
12
|
+
version: 3.2.0.pre7
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Matt Zumwalt
|
@@ -19,7 +19,7 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2012-01-
|
22
|
+
date: 2012-01-04 00:00:00 -06:00
|
23
23
|
default_executable:
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|