activefedora-aggregation 0.5.0 → 0.6.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/activefedora-aggregation.gemspec +2 -2
- data/lib/active_fedora/aggregation/list_source.rb +27 -7
- data/lib/active_fedora/aggregation/version.rb +1 -1
- data/lib/active_fedora/orders/association.rb +4 -0
- data/lib/active_fedora/orders/list_node.rb +1 -1
- data/lib/active_fedora/orders/ordered_list.rb +5 -3
- data/lib/active_fedora/orders/target_proxy.rb +12 -0
- data/script/load_test.rb +72 -0
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4f1b581036f16e61c0a2ad437f0a9f056510eec
|
4
|
+
data.tar.gz: 53f99afd97226cc78543ca0c3836b5976fdd4cd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b962fe055c52589673ad661b50097650316df71052c2389da488e63a9850932c2c227a947e71e2ee5710b5e5dd375f138ea2791e3c451fc72395d6aa2b12d7d
|
7
|
+
data.tar.gz: e4e3da14538596e0616aefbc63aac94950df533de810ab915b11398d17626676482b381960e1ba1687bc4ac7138076ab33c3b26605bf895cc4d4dfff5e29b804
|
data/.gitignore
CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_dependency 'activesupport'
|
20
20
|
spec.add_dependency 'active-fedora', '~> 9.5'
|
21
21
|
spec.add_dependency 'rdf-vocab', '~> 0.8.1'
|
22
|
-
#
|
22
|
+
# Avoid RDF 1.1.17 because of a bug from ruby 2.2
|
23
23
|
# https://github.com/ruby-rdf/rdf/pull/213
|
24
|
-
spec.add_dependency 'rdf', '~>1.1.
|
24
|
+
spec.add_dependency 'rdf', '~> 1.1', '>= 1.1.17.1'
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.8"
|
27
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -11,11 +11,18 @@ module ActiveFedora
|
|
11
11
|
super
|
12
12
|
end
|
13
13
|
|
14
|
+
# Overriding so that we don't track previously_changed, which was
|
15
|
+
# rather expensive.
|
16
|
+
def clear_changed_attributes
|
17
|
+
@changed_attributes.clear
|
18
|
+
end
|
19
|
+
|
14
20
|
def changed?
|
15
21
|
super || ordered_self.changed?
|
16
22
|
end
|
17
23
|
|
18
24
|
# Ordered list representation of proxies in graph.
|
25
|
+
# @return [Array<ListNode>]
|
19
26
|
def ordered_self
|
20
27
|
@ordered_self ||= ordered_list_factory.new(resource, head_subject, tail_subject)
|
21
28
|
end
|
@@ -32,10 +39,7 @@ module ActiveFedora
|
|
32
39
|
# @note This method is used by ActiveFedora::Base upstream for indexing,
|
33
40
|
# at https://github.com/projecthydra/active_fedora/blob/master/lib/active_fedora/profile_indexing_service.rb.
|
34
41
|
def serializable_hash(options=nil)
|
35
|
-
|
36
|
-
options[:except] ||= []
|
37
|
-
options[:except] += [:head, :tail, :nodes]
|
38
|
-
super
|
42
|
+
{}
|
39
43
|
end
|
40
44
|
|
41
45
|
def to_solr(solr_doc={})
|
@@ -45,13 +49,29 @@ module ActiveFedora
|
|
45
49
|
})
|
46
50
|
end
|
47
51
|
|
52
|
+
# Not useful and slows down indexing.
|
53
|
+
def create_date
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
|
57
|
+
# Not useful, slows down indexing.
|
58
|
+
def modified_date
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
|
62
|
+
# Not useful, slows down indexing.
|
63
|
+
def has_model
|
64
|
+
["ActiveFedora::Aggregation::ListSource"]
|
65
|
+
end
|
66
|
+
|
48
67
|
private
|
49
68
|
|
50
69
|
def persist_ordered_self
|
51
70
|
nodes_will_change!
|
52
71
|
# Delete old statements
|
53
|
-
|
54
|
-
|
72
|
+
subj = resource.subjects.to_a.select{|x| x.to_s.split("/").last.to_s.include?("#g")}
|
73
|
+
subj.each do |s|
|
74
|
+
resource.delete [s, nil, nil]
|
55
75
|
end
|
56
76
|
# Assert head and tail
|
57
77
|
self.head = ordered_self.head.next.rdf_subject
|
@@ -67,7 +87,7 @@ module ActiveFedora
|
|
67
87
|
end
|
68
88
|
|
69
89
|
def has_unpersisted_proxy_for?
|
70
|
-
ordered_self.
|
90
|
+
ordered_self.select(&:new_record?).map(&:target).find{|x| x.respond_to?(:uri)}
|
71
91
|
end
|
72
92
|
|
73
93
|
def head_subject
|
@@ -41,7 +41,7 @@ module ActiveFedora::Orders
|
|
41
41
|
# @return [ActiveFedora::Orders::ListNode::Resource]
|
42
42
|
def to_graph
|
43
43
|
g = Resource.new(rdf_subject)
|
44
|
-
g.proxy_for =
|
44
|
+
g.proxy_for = ActiveFedora::Base.id_to_uri(target_id)
|
45
45
|
g.proxy_in = proxy_in.try(:uri)
|
46
46
|
g.next = self.next.try(:rdf_subject)
|
47
47
|
g.prev = self.prev.try(:rdf_subject)
|
@@ -101,18 +101,20 @@ module ActiveFedora
|
|
101
101
|
node.prev.next = next_node
|
102
102
|
node.next.prev = prev_node
|
103
103
|
@changed = true
|
104
|
+
node
|
105
|
+
else
|
106
|
+
nil
|
104
107
|
end
|
105
|
-
self
|
106
108
|
end
|
107
109
|
|
108
110
|
# @param [Integer] loc Index of node to delete.
|
109
111
|
def delete_at(loc)
|
110
|
-
return
|
112
|
+
return nil if loc == nil
|
111
113
|
arr = ordered_reader.take(loc+1)
|
112
114
|
if arr.length == loc+1
|
113
115
|
delete_node(arr.last)
|
114
116
|
else
|
115
|
-
|
117
|
+
nil
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
@@ -19,6 +19,18 @@ module ActiveFedora
|
|
19
19
|
self
|
20
20
|
end
|
21
21
|
|
22
|
+
def insert_at(loc, record)
|
23
|
+
association.insert_target_at(loc, record)
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_at(loc)
|
28
|
+
result = association.delete_at(loc)
|
29
|
+
if result
|
30
|
+
result.target
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
22
34
|
def clear
|
23
35
|
while to_ary.present?
|
24
36
|
association.delete_at(0)
|
data/script/load_test.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
puts "Loading environment..."
|
3
|
+
lib = File.expand_path('../../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'active_fedora/aggregation'
|
6
|
+
require 'byebug'
|
7
|
+
puts "Ready"
|
8
|
+
ActiveFedora::Base.logger = Logger.new('logfile.log')
|
9
|
+
|
10
|
+
# When the log level is set to debug, log all LDP HTTP API traffic
|
11
|
+
class LogSubscriber < ActiveSupport::LogSubscriber
|
12
|
+
def initialize
|
13
|
+
super
|
14
|
+
@odd = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def http(event)
|
18
|
+
return unless logger.debug?
|
19
|
+
|
20
|
+
payload = event.payload
|
21
|
+
|
22
|
+
name = "#{payload[:name]} (#{event.duration.round(1)}ms)"
|
23
|
+
url = payload[:url] || "[no url]"
|
24
|
+
|
25
|
+
if odd?
|
26
|
+
name = color(name, CYAN, true)
|
27
|
+
url = color(url, nil, true)
|
28
|
+
else
|
29
|
+
name = color(name, MAGENTA, true)
|
30
|
+
end
|
31
|
+
|
32
|
+
debug " #{name} #{url} Service: #{payload[:ldp_client]}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def odd?
|
36
|
+
@odd = !@odd
|
37
|
+
end
|
38
|
+
|
39
|
+
def logger
|
40
|
+
ActiveFedora::Base.logger
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
LogSubscriber.attach_to :ldp
|
45
|
+
|
46
|
+
|
47
|
+
class Foo < ActiveFedora::Base
|
48
|
+
ordered_aggregation :members,
|
49
|
+
has_member_relation: ::RDF::DC.hasPart,
|
50
|
+
class_name: 'ActiveFedora::Base',
|
51
|
+
through: :list_source
|
52
|
+
end
|
53
|
+
class Bar < ActiveFedora::Base
|
54
|
+
end
|
55
|
+
|
56
|
+
i = Foo.create!
|
57
|
+
|
58
|
+
iterations = 30
|
59
|
+
require 'benchmark'
|
60
|
+
|
61
|
+
iterations.times do |n|
|
62
|
+
time = Benchmark.measure do |x|
|
63
|
+
# byebug if n > 10
|
64
|
+
image = Foo.find(i.id)
|
65
|
+
fs = Bar.create!
|
66
|
+
image.ordered_members << fs
|
67
|
+
image.save!
|
68
|
+
end
|
69
|
+
|
70
|
+
puts "#{n} - #{time.real}"
|
71
|
+
end
|
72
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activefedora-aggregation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -58,14 +58,20 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.1
|
61
|
+
version: '1.1'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 1.1.17.1
|
62
65
|
type: :runtime
|
63
66
|
prerelease: false
|
64
67
|
version_requirements: !ruby/object:Gem::Requirement
|
65
68
|
requirements:
|
66
69
|
- - "~>"
|
67
70
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.1
|
71
|
+
version: '1.1'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.1.17.1
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: bundler
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,6 +195,7 @@ files:
|
|
189
195
|
- lib/active_fedora/orders/ordered_list.rb
|
190
196
|
- lib/active_fedora/orders/reflection.rb
|
191
197
|
- lib/active_fedora/orders/target_proxy.rb
|
198
|
+
- script/load_test.rb
|
192
199
|
homepage: http://github.org/curationexperts/activefedora-aggregation
|
193
200
|
licenses:
|
194
201
|
- APACHE2
|