dor-rights-auth 0.8.0 → 1.0.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.
- data/lib/dor/rights_auth.rb +24 -8
- metadata +21 -36
data/lib/dor/rights_auth.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'nokogiri'
|
2
|
-
|
2
|
+
require 'time'
|
3
3
|
|
4
4
|
module Dor
|
5
|
+
|
5
6
|
# The Individual Right
|
6
7
|
Rights = Struct.new(:value, :rule)
|
7
8
|
|
@@ -27,12 +28,20 @@ module Dor
|
|
27
28
|
# end
|
28
29
|
|
29
30
|
class RightsAuth
|
31
|
+
|
32
|
+
CONTAINS_STANFORD_XPATH = "contains(translate(text(), 'STANFORD', 'stanford'), 'stanford')"
|
30
33
|
|
31
|
-
attr_accessor :obj_lvl, :file
|
34
|
+
attr_accessor :obj_lvl, :file, :embargoed
|
32
35
|
|
33
36
|
def initialize
|
34
37
|
@file = {}
|
35
38
|
end
|
39
|
+
|
40
|
+
# Returns true if the object is under embargo.
|
41
|
+
# @return [Boolean]
|
42
|
+
def embargoed?
|
43
|
+
@embargoed
|
44
|
+
end
|
36
45
|
|
37
46
|
# Returns true if the object is world readable AND has no rule attribute
|
38
47
|
# @return [Boolean]
|
@@ -154,8 +163,7 @@ module Dor
|
|
154
163
|
[@file[file_name].agent[agent_name].value, @file[file_name].agent[agent_name].rule]
|
155
164
|
end
|
156
165
|
|
157
|
-
#
|
158
|
-
# Parse the xml and create a Dor::RightsAuth object
|
166
|
+
# Create a Dor::RightsAuth object from xml
|
159
167
|
# @param [String] xml rightsMetadata xml that will be parsed to build a RightsAuth object
|
160
168
|
# @return Dor::RightsAuth created after parsing rightsMetadata xml
|
161
169
|
def RightsAuth.parse(xml)
|
@@ -181,9 +189,9 @@ module Dor
|
|
181
189
|
|
182
190
|
rights.obj_lvl.group = { :stanford => Rights.new }
|
183
191
|
|
184
|
-
if(doc.at_xpath("//rightsMetadata/access[@type='read' and not(file)]/machine/group[
|
192
|
+
if(doc.at_xpath("//rightsMetadata/access[@type='read' and not(file)]/machine/group[#{CONTAINS_STANFORD_XPATH}]"))
|
185
193
|
rights.obj_lvl.group[:stanford].value = true
|
186
|
-
rule = doc.at_xpath("//rightsMetadata/access[@type='read' and not(file)]/machine/group[
|
194
|
+
rule = doc.at_xpath("//rightsMetadata/access[@type='read' and not(file)]/machine/group[#{CONTAINS_STANFORD_XPATH}]/@rule")
|
187
195
|
rights.obj_lvl.group[:stanford].rule = rule.value if(rule)
|
188
196
|
else
|
189
197
|
rights.obj_lvl.group[:stanford].value = false
|
@@ -196,14 +204,22 @@ module Dor
|
|
196
204
|
r.rule = node['rule']
|
197
205
|
rights.obj_lvl.agent[node.content] = r
|
198
206
|
end
|
207
|
+
|
208
|
+
# Initialze embargo_status to false
|
209
|
+
rights.embargoed = false
|
210
|
+
embargo_node = doc.at_xpath("//rightsMetadata/access[@type='read']/machine/embargoReleaseDate")
|
211
|
+
if(embargo_node)
|
212
|
+
embargo_dt = Time.parse(embargo_node.content)
|
213
|
+
rights.embargoed = true if(embargo_dt > Time.now)
|
214
|
+
end
|
199
215
|
|
200
216
|
access_with_files = doc.xpath( "//rightsMetadata/access[@type='read' and file]")
|
201
217
|
access_with_files.each do |access_node|
|
202
218
|
stanford_access = Rights.new
|
203
219
|
world_access = Rights.new
|
204
|
-
if access_node.at_xpath("machine/group[
|
220
|
+
if access_node.at_xpath("machine/group[#{CONTAINS_STANFORD_XPATH}]")
|
205
221
|
stanford_access.value = true
|
206
|
-
rule = access_node.at_xpath("machine/group[
|
222
|
+
rule = access_node.at_xpath("machine/group[#{CONTAINS_STANFORD_XPATH}]/@rule")
|
207
223
|
stanford_access.rule = rule.value if (rule)
|
208
224
|
else
|
209
225
|
stanford_access.value = false
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dor-rights-auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
- 8
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Willy Mene
|
@@ -15,10 +15,9 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-10-09 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
prerelease: false
|
22
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
22
|
none: false
|
24
23
|
requirements:
|
@@ -28,11 +27,11 @@ dependencies:
|
|
28
27
|
segments:
|
29
28
|
- 0
|
30
29
|
version: "0"
|
31
|
-
|
32
|
-
name: nokogiri
|
30
|
+
prerelease: false
|
33
31
|
type: :runtime
|
32
|
+
name: nokogiri
|
33
|
+
requirement: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
prerelease: false
|
36
35
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
36
|
none: false
|
38
37
|
requirements:
|
@@ -42,26 +41,25 @@ dependencies:
|
|
42
41
|
segments:
|
43
42
|
- 0
|
44
43
|
version: "0"
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
46
|
+
name: rspec
|
45
47
|
requirement: *id002
|
46
|
-
name: rest-client
|
47
|
-
type: :runtime
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
|
-
prerelease: false
|
50
49
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
51
50
|
none: false
|
52
51
|
requirements:
|
53
|
-
- -
|
52
|
+
- - ">="
|
54
53
|
- !ruby/object:Gem::Version
|
55
54
|
hash: 3
|
56
55
|
segments:
|
57
|
-
- 2
|
58
56
|
- 0
|
59
|
-
version: "
|
60
|
-
|
61
|
-
name: rspec
|
57
|
+
version: "0"
|
58
|
+
prerelease: false
|
62
59
|
type: :development
|
60
|
+
name: ruby-debug
|
61
|
+
requirement: *id003
|
63
62
|
- !ruby/object:Gem::Dependency
|
64
|
-
prerelease: false
|
65
63
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
66
64
|
none: false
|
67
65
|
requirements:
|
@@ -71,11 +69,11 @@ dependencies:
|
|
71
69
|
segments:
|
72
70
|
- 0
|
73
71
|
version: "0"
|
74
|
-
|
75
|
-
name: ruby-debug
|
72
|
+
prerelease: false
|
76
73
|
type: :development
|
74
|
+
name: yard
|
75
|
+
requirement: *id004
|
77
76
|
- !ruby/object:Gem::Dependency
|
78
|
-
prerelease: false
|
79
77
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
80
78
|
none: false
|
81
79
|
requirements:
|
@@ -85,23 +83,10 @@ dependencies:
|
|
85
83
|
segments:
|
86
84
|
- 0
|
87
85
|
version: "0"
|
88
|
-
requirement: *id005
|
89
|
-
name: yard
|
90
|
-
type: :development
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
86
|
prerelease: false
|
93
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
|
-
requirements:
|
96
|
-
- - ">="
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
hash: 3
|
99
|
-
segments:
|
100
|
-
- 0
|
101
|
-
version: "0"
|
102
|
-
requirement: *id006
|
103
|
-
name: lyberteam-gems-devel
|
104
87
|
type: :development
|
88
|
+
name: lyberteam-gems-devel
|
89
|
+
requirement: *id005
|
105
90
|
description: Parses rightsMetadata xml into a useable object
|
106
91
|
email:
|
107
92
|
- wmene@stanford.edu
|
@@ -144,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
129
|
requirements: []
|
145
130
|
|
146
131
|
rubyforge_project:
|
147
|
-
rubygems_version: 1.8.
|
132
|
+
rubygems_version: 1.8.24
|
148
133
|
signing_key:
|
149
134
|
specification_version: 3
|
150
135
|
summary: Parses rightsMetadata xml into a useable object
|