pushmi_pullyu 1.0.5 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,121 +0,0 @@
1
- require 'rdf'
2
- require 'rdf/n3'
3
- require 'rest-client'
4
-
5
- class PushmiPullyu::AIP::FileListCreator
6
-
7
- IANA = 'http://www.iana.org/assignments/relation/'.freeze
8
- PREDICATES = {
9
- proxy_for: RDF::URI('http://www.openarchives.org/ore/terms/proxyFor'),
10
- first: RDF::URI(IANA + 'first'),
11
- last: RDF::URI(IANA + 'last'),
12
- prev: RDF::URI(IANA + 'prev'),
13
- next: RDF::URI(IANA + 'next'),
14
- has_part: RDF::URI('http://purl.org/dc/terms/hasPart')
15
- }.freeze
16
-
17
- class NoProxyURIFound < StandardError; end
18
- class NoFirstProxyFound < StandardError; end
19
- class FirstProxyHasPrev < StandardError; end
20
- class ListSourceFileSetMismatch < StandardError; end
21
-
22
- def initialize(list_source_uri, output_xml_file, file_set_uuids)
23
- @uri = RDF::URI(list_source_uri)
24
- @auth_uri = RDF::URI(list_source_uri)
25
- @auth_uri.user = PushmiPullyu.options[:fedora][:user]
26
- @auth_uri.password = PushmiPullyu.options[:fedora][:password]
27
- @output_file = output_xml_file
28
-
29
- # These are the known fileset uuids, used for validation
30
- @file_set_uuids = file_set_uuids
31
- end
32
-
33
- def run
34
- extract_list_source_uuids
35
- raise ListSourceFileSetMismatch, @uri.to_s if @list_source_uuids.sort != @file_set_uuids.sort
36
-
37
- write_output_file
38
- end
39
-
40
- def extract_list_source_uuids
41
- # Note: raises IOError if can't find
42
- # raises RDF::ReaderError if can't parse
43
- @graph = RDF::Graph.load(@auth_uri, validate: true)
44
- @list_source_uuids = []
45
-
46
- # Fetch first FileSet in list source
47
- this_proxy = find_first_proxy
48
-
49
- while @list_source_uuids.count <= num_proxies
50
- @list_source_uuids << uuid_from_proxy(this_proxy)
51
- next_proxy = find_next_proxy(this_proxy)
52
-
53
- break if next_proxy.nil?
54
-
55
- raise NextPreviousProxyMismatch if this_proxy != find_prev_proxy(next_proxy)
56
-
57
- this_proxy = next_proxy
58
- end
59
-
60
- raise ProxyCountIncorrect if @list_source_uuids.count != num_proxies
61
- raise LastProxyFailsValidation if this_proxy != find_last_proxy
62
- end
63
-
64
- def num_proxies
65
- @num_proxies ||= @graph.query(subject: @uri, predicate: PREDICATES[:has_part]).count
66
- end
67
-
68
- def uuid_from_proxy(proxy_uri)
69
- @graph.query(subject: proxy_uri, predicate: PREDICATES[:proxy_for]) do |statement|
70
- return statement.object.to_s.split('/').last
71
- end
72
- raise NoProxyURIFound, proxy_uri.to_s
73
- end
74
-
75
- def find_first_proxy
76
- @graph.query(subject: @uri, predicate: PREDICATES[:first]) do |statement|
77
- first_uri = statement.object
78
- # Validate that the first proxy doesn't have a previous one
79
- raise FirstProxyHasPrev, @uri.to_s if find_prev_proxy(first_uri)
80
-
81
- return first_uri
82
- end
83
- raise NoFirstProxyFound, @uri.to_s
84
- end
85
-
86
- def find_last_proxy
87
- @graph.query(subject: @uri, predicate: PREDICATES[:last]) do |statement|
88
- last_uri = statement.object
89
- # Validate that the last proxy doesn't have a next one
90
- raise LastProxyHasNext, @uri.to_s if find_next_proxy(last_uri)
91
-
92
- return last_uri
93
- end
94
- raise LastProxyFound, @uri.to_s
95
- end
96
-
97
- def find_next_proxy(proxy_uri)
98
- @graph.query(subject: proxy_uri, predicate: PREDICATES[:next]) do |statement|
99
- return statement.object
100
- end
101
- nil
102
- end
103
-
104
- def find_prev_proxy(proxy_uri)
105
- @graph.query(subject: proxy_uri, predicate: PREDICATES[:prev]) do |statement|
106
- return statement.object
107
- end
108
- nil
109
- end
110
-
111
- def write_output_file
112
- File.open(@output_file, 'w') do |file|
113
- file.write("<file_order>\n")
114
- @list_source_uuids.each do |uuid|
115
- file.write(" <uuid>#{uuid}</uuid>\n")
116
- end
117
- file.write("</file_order>\n")
118
- end
119
- end
120
-
121
- end
@@ -1,50 +0,0 @@
1
- require 'net/http'
2
-
3
- class PushmiPullyu::AIP::OwnerEmailEditor
4
-
5
- OWNER_PREDICATE = RDF::URI('http://purl.org/ontology/bibo/owner').freeze
6
-
7
- class NoOwnerPredicate < StandardError; end
8
-
9
- def initialize(rdf_string)
10
- @document = rdf_string
11
- end
12
-
13
- def run
14
- setup_db_connection
15
- is_modified = false
16
- prefixes = nil
17
- # Read once to load prefixes (the @things at the top of an n3 file)
18
- RDF::N3::Reader.new(input = @document) do |reader|
19
- reader.each_statement { |_statement| }
20
- prefixes = reader.prefixes
21
- end
22
- new_body = RDF::N3::Writer.buffer(prefixes: prefixes) do |writer|
23
- RDF::N3::Reader.new(input = @document) do |reader|
24
- reader.each_statement do |statement|
25
- if statement.predicate == OWNER_PREDICATE
26
- user = PushmiPullyu::AIP::User.find(statement.object.to_i)
27
- writer << [statement.subject, statement.predicate, user.email]
28
- is_modified = true
29
- else
30
- writer << statement
31
- end
32
- end
33
- end
34
- end
35
- return new_body if is_modified
36
-
37
- raise NoOwnerPredicate
38
- end
39
-
40
- private
41
-
42
- def setup_db_connection
43
- ActiveRecord::Base.establish_connection(database_configuration)
44
- end
45
-
46
- def database_configuration
47
- PushmiPullyu.options[:database][:url]
48
- end
49
-
50
- end
@@ -1,2 +0,0 @@
1
- class PushmiPullyu::AIP::User < ActiveRecord::Base
2
- end