activefedora-aggregation 0.1.0 → 0.2.0

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: 74fb6af1b85424431bb3effb4dfa78d4db3d7760
4
- data.tar.gz: f7c34ca334ebae873b5ba1167ec1d209db901be8
3
+ metadata.gz: 7a55076e62ea008d34356dd58d2a502eb71114ab
4
+ data.tar.gz: 6b17d9e6891e6a8c280c7cc1edba9ab2408b8687
5
5
  SHA512:
6
- metadata.gz: f85e2ecc89fad1ffc071017203b0b935086cbc08675259a8785eeee2cb9e6d1b8e86106de3aed64835b71b899057570bdaa448b2c585e02d62bce785fa0daa0f
7
- data.tar.gz: 9beabc6d5def85ce0961339fdd8d51bb159989395f6f01d5758793b3a453ad266f9d9c02477cb193ad8ec948f7253ce1ac7cfeb1056d8c388ddb95594354919e
6
+ metadata.gz: 79a25936d708e62ee1747ee4ab26bf58b24716eab159f209a8eb5cc58231f7f96a86cdfb2e64cc55bdaf51dba9af6107e524bd4c6627f4de155ac11201688d08
7
+ data.tar.gz: c0f461eacfbe9437bc3950c9c0f560eea944974dc4d5bf116e3d23a4ed7e19c97d920b7df36ddff5def8ca84b47c7ba35a5ed299301c10a5831b68f65b5c6e5f
data/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ [![Gem Version](https://badge.fury.io/rb/activefedora-aggregation.svg)](http://badge.fury.io/rb/activefedora-aggregation) [![Build Status](https://travis-ci.org/curationexperts/activefedora-aggregation.svg?branch=v0.1.0)](https://travis-ci.org/curationexperts/activefedora-aggregation)
1
2
  # ActiveFedora::Aggregation
2
3
 
3
4
  Aggregations for ActiveFedora.
@@ -7,17 +8,48 @@ Aggregations for ActiveFedora.
7
8
  class GenericFile < ActiveFedora::Base
8
9
  end
9
10
 
10
- generic_file1 = GenericFile.create
11
- generic_file2 = GenericFile.create
11
+ generic_file1 = GenericFile.create(id: 'file1')
12
+ generic_file2 = GenericFile.create(id: 'file2')
12
13
 
13
14
  class Image < ActiveFedora::Base
14
15
  aggregates :generic_files
15
16
  end
16
17
 
17
- image = Image.create
18
+ image = Image.create(id: 'my_image')
18
19
  image.generic_files = [generic_file2, generic_file1]
19
20
  image.save
20
21
 
21
22
  ```
22
23
 
23
24
  Now the "generic\_files" method returns an ordered list of GenericFile objects.
25
+
26
+ Here's what the graph looks like:
27
+
28
+ ```ttl
29
+ <http://127.0.0.1:8983/fedora/rest/dev/my_image> a <http://www.w3.org/ns/ldp#RDFSource>,
30
+ <http://www.w3.org/ns/ldp#Container>;
31
+ <http://www.w3.org/ns/ldp#contains> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files>;
32
+ <info:fedora/fedora-system:def/model#hasModel> "Image" .
33
+
34
+ <http://127.0.0.1:8983/fedora/rest/dev/my_image/files> a <http://www.w3.org/ns/ldp#RDFSource>,
35
+ <http://www.w3.org/ns/ldp#Container>;
36
+ <http://www.iana.org/assignments/relation/first> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/5a5af870-594b-4966-93f6-0348402583f0>;
37
+ <http://www.iana.org/assignments/relation/last> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/9cc70b3d-c9d7-4cfc-b504-adbcb0bdfb3d>;
38
+ <http://www.w3.org/ns/ldp#contains> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/5a5af870-594b-4966-93f6-0348402583f0>,
39
+ <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/9cc70b3d-c9d7-4cfc-b504-adbcb0bdfb3d>;
40
+ <info:fedora/fedora-system:def/model#hasModel> "ActiveFedora::Aggregation::ProxyContainer" .
41
+
42
+ <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/5a5af870-594b-4966-93f6-0348402583f0> a <http://www.w3.org/ns/ldp#RDFSource>,
43
+ <http://www.w3.org/ns/ldp#Container>;
44
+ <http://www.iana.org/assignments/relation/next> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/9cc70b3d-c9d7-4cfc-b504-adbcb0bdfb3d>;
45
+ <http://www.openarchives.org/ore/terms/proxyFor> <http://127.0.0.1:8983/fedora/rest/dev/file2>;
46
+ <http://www.openarchives.org/ore/terms/proxyIn> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files>;
47
+ <info:fedora/fedora-system:def/model#hasModel> "ActiveFedora::Aggregation::Proxy" .
48
+
49
+ <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/9cc70b3d-c9d7-4cfc-b504-adbcb0bdfb3d> a <http://www.w3.org/ns/ldp#RDFSource>,
50
+ <http://www.w3.org/ns/ldp#Container>;
51
+ <http://www.iana.org/assignments/relation/prev> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files/5a5af870-594b-4966-93f6-0348402583f0>;
52
+ <http://www.openarchives.org/ore/terms/proxyFor> <http://127.0.0.1:8983/fedora/rest/dev/file1>;
53
+ <http://www.openarchives.org/ore/terms/proxyIn> <http://127.0.0.1:8983/fedora/rest/dev/my_image/files>;
54
+ <info:fedora/fedora-system:def/model#hasModel> "ActiveFedora::Aggregation::Proxy" .
55
+ ```
@@ -14,38 +14,42 @@ module ActiveFedora::Aggregation
14
14
  end
15
15
 
16
16
  def == other
17
- aggregation.to_a == other
17
+ container.to_a == other
18
18
  end
19
19
 
20
20
  def create(&block)
21
21
  klass.create(&block).tap do |created|
22
- aggregation << created
22
+ container << created
23
23
  end
24
24
  save #causes the (head/tail) pointers on the aggregation to be persisted
25
25
  end
26
26
 
27
27
  def save
28
- aggregation.save
28
+ container.save
29
29
  end
30
30
 
31
31
  def target=(vals)
32
- aggregation.target=(vals)
32
+ container.target=(vals)
33
33
  end
34
34
 
35
35
  def target_ids=(vals)
36
- aggregation.target_ids=(vals)
36
+ container.target_ids=(vals)
37
37
  end
38
38
 
39
39
  def target_ids
40
- aggregation.target_ids
40
+ container.target_ids
41
41
  end
42
42
 
43
- def aggregation
44
- @aggregation ||= Aggregator.find_or_initialize(klass.uri_to_id(uri))
43
+ def container
44
+ @container ||= begin
45
+ ProxyContainer.find_or_initialize(klass.uri_to_id(uri)).tap do |container|
46
+ container.parent = @parent
47
+ end
48
+ end
45
49
  end
46
50
 
47
51
  def first
48
- aggregation.first
52
+ container.first
49
53
  end
50
54
 
51
55
  def uri
@@ -5,6 +5,10 @@ module ActiveFedora::Aggregation
5
5
  def build
6
6
  reflection = super
7
7
  configure_dependency
8
+ model.has_and_belongs_to_many :proxies, predicate: ::RDF::Vocab::ORE.aggregates, class_name: 'ActiveFedora::Aggregation::Proxy', inverse_of: :containers
9
+ model.belongs_to :head, predicate: ::RDF::Vocab::IANA['first'], class_name: 'ActiveFedora::Aggregation::Proxy'
10
+ model.belongs_to :tail, predicate: ::RDF::Vocab::IANA.last, class_name: 'ActiveFedora::Aggregation::Proxy'
11
+
8
12
  reflection
9
13
  end
10
14
 
@@ -1,10 +1,13 @@
1
1
  module ActiveFedora::Aggregation
2
2
  class Proxy < ActiveFedora::Base
3
- belongs_to :aggregator, predicate: ::RDF::Vocab::ORE.proxyIn, class_name: 'ActiveFedora::Aggregation::Proxy'
3
+ # HABTM is actually only belongs to one
4
+ has_and_belongs_to_many :containers, predicate: ::RDF::Vocab::ORE.proxyIn, class_name: 'ActiveFedora::Base'
4
5
  belongs_to :target, predicate: ::RDF::Vocab::ORE.proxyFor, class_name: 'ActiveFedora::Base'
5
6
  belongs_to :next, predicate: ::RDF::Vocab::IANA.next, class_name: 'ActiveFedora::Aggregation::Proxy'
6
7
  belongs_to :prev, predicate: ::RDF::Vocab::IANA.prev, class_name: 'ActiveFedora::Aggregation::Proxy'
7
8
 
9
+ type ::RDF::Vocab::ORE.Proxy
10
+
8
11
  def as_list
9
12
  if self.next
10
13
  [self] + self.next.as_list
@@ -1,11 +1,26 @@
1
1
  module ActiveFedora::Aggregation
2
- class Aggregator < ActiveFedora::Base
3
- has_many :proxies, predicate: ::RDF::Vocab::ORE.proxyIn, class_name: 'ActiveFedora::Aggregation::Proxy'
4
- belongs_to :head, predicate: ::RDF::Vocab::IANA['first'], class_name: 'ActiveFedora::Aggregation::Proxy'
5
- belongs_to :tail, predicate: ::RDF::Vocab::IANA.last, class_name: 'ActiveFedora::Aggregation::Proxy'
2
+ class ProxyContainer < ActiveFedora::Base
3
+ type ::RDF::Vocab::LDP.IndirectContainer
4
+
5
+ attr_writer :parent
6
+
7
+ property :membership_resource, predicate: ::RDF::Vocab::LDP.membershipResource
8
+ property :member_relation, predicate: ::RDF::Vocab::LDP.hasMemberRelation
9
+ property :inserted_content_relation, predicate: ::RDF::Vocab::LDP.insertedContentRelation
10
+
11
+ after_initialize :default_relations
12
+
13
+ def parent
14
+ @parent || raise("Parent hasn't been set on #{self.class}")
15
+ end
16
+
17
+ def default_relations
18
+ self.member_relation = [::RDF::URI.new("http://pcdm.org/hasMember")] # TODO wrong predicate!
19
+ self.inserted_content_relation = [::RDF::Vocab::ORE.proxyFor]
20
+ end
6
21
 
7
22
  def first
8
- head.target
23
+ parent.head.target
9
24
  end
10
25
 
11
26
  # This can be a very expensive operation. avoid if possible
@@ -28,9 +43,9 @@ module ActiveFedora::Aggregation
28
43
  proxy.prev_id = new_proxies[idx-1].id unless idx == 0
29
44
  end
30
45
 
31
- self.head = new_proxies.first
32
- self.tail = new_proxies.last
33
- self.proxies = new_proxies
46
+ parent.head = new_proxies.first
47
+ parent.tail = new_proxies.last
48
+ parent.proxies = new_proxies
34
49
  end
35
50
 
36
51
  # TODO clear out the old proxies (or reuse them)
@@ -56,16 +71,16 @@ module ActiveFedora::Aggregation
56
71
  # @param obj [ActiveFedora::Base]
57
72
  def << (obj)
58
73
  node = if persisted?
59
- proxies.create(id: mint_proxy_id, target: obj, prev: tail)
74
+ parent.proxies.create(id: mint_proxy_id, target: obj, prev: parent.tail)
60
75
  else
61
- proxies.build(id: mint_proxy_id, target: obj, prev: tail)
76
+ parent.proxies.build(id: mint_proxy_id, target: obj, prev: parent.tail)
62
77
  end
63
78
  # set the old tail, if present, to have this new proxy as its next
64
- self.tail.update(next: node) if tail
79
+ parent.tail.update(next: node) if parent.tail
65
80
  # update the tail to point at the new node
66
- self.tail = node
81
+ parent.tail = node
67
82
  # if this is the first node, set it to be the head
68
- self.head = node unless head
83
+ parent.head = node unless parent.head
69
84
  reset_target!
70
85
  end
71
86
 
@@ -86,8 +101,8 @@ module ActiveFedora::Aggregation
86
101
 
87
102
  # return the proxies in order
88
103
  def list_of_proxies
89
- @proxy_list ||= if head
90
- head.as_list
104
+ @proxy_list ||= if parent.head
105
+ parent.head.as_list
91
106
  else
92
107
  []
93
108
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveFedora
2
2
  module Aggregation
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -7,7 +7,7 @@ module ActiveFedora
7
7
  module Aggregation
8
8
  extend ActiveSupport::Autoload
9
9
  eager_autoload do
10
- autoload :Aggregator
10
+ autoload :ProxyContainer
11
11
  autoload :Association
12
12
  autoload :Proxy
13
13
  autoload :Builder
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.1.0
4
+ version: 0.2.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-03-19 00:00:00.000000000 Z
11
+ date: 2015-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -127,11 +127,11 @@ files:
127
127
  - bin/console
128
128
  - bin/setup
129
129
  - lib/active_fedora/aggregation.rb
130
- - lib/active_fedora/aggregation/aggregator.rb
131
130
  - lib/active_fedora/aggregation/association.rb
132
131
  - lib/active_fedora/aggregation/base_extension.rb
133
132
  - lib/active_fedora/aggregation/builder.rb
134
133
  - lib/active_fedora/aggregation/proxy.rb
134
+ - lib/active_fedora/aggregation/proxy_container.rb
135
135
  - lib/active_fedora/aggregation/reflection.rb
136
136
  - lib/active_fedora/aggregation/through_association.rb
137
137
  - lib/active_fedora/aggregation/version.rb