odrl-ruby 0.2.3 → 0.2.4
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/.rubocop.yml +16 -16
- data/CHANGELOG.md +5 -5
- data/Gemfile +12 -12
- data/Gemfile.lock +249 -249
- data/LICENSE.txt +21 -21
- data/README.md +128 -127
- data/Rakefile +8 -8
- data/bin/console +15 -15
- data/bin/setup +8 -8
- data/examples/biohackathon-output.ttl +63 -63
- data/examples/build_profile.rb +48 -47
- data/examples/create-biohackathon-offer.rb +44 -44
- data/examples/create-nagoya-es-offer.rb +54 -54
- data/examples/nagoya-output.ttl +66 -66
- data/launch.json +10 -10
- data/lib/odrl/action.rb +106 -106
- data/lib/odrl/asset.rb +77 -77
- data/lib/odrl/base.rb +230 -230
- data/lib/odrl/constraint.rb +110 -110
- data/lib/odrl/odrl/version.rb +7 -7
- data/lib/odrl/party.rb +97 -97
- data/lib/odrl/policy.rb +97 -97
- data/lib/odrl/profile/builder.rb +348 -186
- data/lib/odrl/ruby.rb +26 -26
- data/lib/odrl/rule.rb +116 -116
- metadata +8 -6
data/lib/odrl/constraint.rb
CHANGED
@@ -1,110 +1,110 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ODRL
|
4
|
-
class Constraint < Base
|
5
|
-
attr_accessor :uid, :rightOperand, :leftOperand, :operator, :rightOperandReference, :dataType, :unit, :status
|
6
|
-
|
7
|
-
def initialize(
|
8
|
-
rightOperand:, operator:, leftOperand:, uid: nil,
|
9
|
-
rightOPerandReference: nil,
|
10
|
-
dataType: nil,
|
11
|
-
unit: nil,
|
12
|
-
status: nil,
|
13
|
-
type: CCONSTRAINT,
|
14
|
-
**args
|
15
|
-
)
|
16
|
-
|
17
|
-
@uid = uid
|
18
|
-
@uid ||= Base.baseURI + "#constraint_" + Base.getuuid
|
19
|
-
super(uid: @uid, type: type, **args)
|
20
|
-
|
21
|
-
@rightOperand = rightOperand
|
22
|
-
raise "Constraints must haves a Right operand such as 'event' - I'm dead!" unless @rightOperand
|
23
|
-
|
24
|
-
# if it is already a URI, then let it go
|
25
|
-
# @rightOperand = "http://www.w3.org/ns/odrl/2/#{@rightOperand}" unless @rightOperand =~ %r{https?://}
|
26
|
-
|
27
|
-
@leftOperand = leftOperand
|
28
|
-
unless LEFTOPERANDS.include?(@leftOperand)
|
29
|
-
warn "The selected leftOperand is not part of the default set... just sayin'"
|
30
|
-
end
|
31
|
-
unless @leftOperand
|
32
|
-
raise "Constraints must haves a Left Operand such as 'http://some.event.org/on-now' - I'm dead!"
|
33
|
-
end
|
34
|
-
|
35
|
-
# if it is already a URI, then let it go
|
36
|
-
@leftOperand = "http://www.w3.org/ns/odrl/2/#{@leftOperand}" unless @leftOperand =~ %r{https?://}
|
37
|
-
|
38
|
-
@operator = operator
|
39
|
-
raise "Constraints must haves an operator such as 'eq' - I'm dead!" unless @operator
|
40
|
-
|
41
|
-
warn "The selected operator is not part of the default set... just sayin'" unless OPERATORS.include?(@operator)
|
42
|
-
|
43
|
-
# if it is already a URI, then let it go
|
44
|
-
@operator = "http://www.w3.org/ns/odrl/2/#{@operator}" unless @operator =~ %r{https?://}
|
45
|
-
|
46
|
-
@rightOperandReference = rightOperandReference
|
47
|
-
@dataType = dataType
|
48
|
-
@unit = unit
|
49
|
-
@status = status
|
50
|
-
end
|
51
|
-
|
52
|
-
def load_graph
|
53
|
-
super
|
54
|
-
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
55
|
-
if rightOperand
|
56
|
-
predicate = PRIGHT
|
57
|
-
object = rightOperand
|
58
|
-
subject = uid
|
59
|
-
repo = repository
|
60
|
-
triplify(subject, predicate, object, repo)
|
61
|
-
end
|
62
|
-
if leftOperand
|
63
|
-
predicate = PLEFT
|
64
|
-
object = leftOperand
|
65
|
-
subject = uid
|
66
|
-
repo = repository
|
67
|
-
triplify(subject, predicate, object, repo)
|
68
|
-
end
|
69
|
-
if operator
|
70
|
-
predicate = POPERATOR
|
71
|
-
object = operator
|
72
|
-
subject = uid
|
73
|
-
repo = repository
|
74
|
-
triplify(subject, predicate, object, repo)
|
75
|
-
end
|
76
|
-
if rightOperandReference
|
77
|
-
predicate = POPERANDREFERENCE
|
78
|
-
object = rightOperandReference
|
79
|
-
subject = uid
|
80
|
-
repo = repository
|
81
|
-
triplify(subject, predicate, object, repo)
|
82
|
-
end
|
83
|
-
if dataType
|
84
|
-
predicate = PDATATYPE
|
85
|
-
object = dataType
|
86
|
-
subject = uid
|
87
|
-
repo = repository
|
88
|
-
triplify(subject, predicate, object, repo)
|
89
|
-
end
|
90
|
-
if unit
|
91
|
-
predicate = PUNIT
|
92
|
-
object = unit
|
93
|
-
subject = uid
|
94
|
-
repo = repository
|
95
|
-
triplify(subject, predicate, object, repo)
|
96
|
-
end
|
97
|
-
return unless status
|
98
|
-
|
99
|
-
predicate = PSTATUS
|
100
|
-
object = status
|
101
|
-
subject = uid
|
102
|
-
repo = repository
|
103
|
-
triplify(subject, predicate, object, repo)
|
104
|
-
end
|
105
|
-
|
106
|
-
def serialize(format:)
|
107
|
-
super
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ODRL
|
4
|
+
class Constraint < Base
|
5
|
+
attr_accessor :uid, :rightOperand, :leftOperand, :operator, :rightOperandReference, :dataType, :unit, :status
|
6
|
+
|
7
|
+
def initialize(
|
8
|
+
rightOperand:, operator:, leftOperand:, uid: nil,
|
9
|
+
rightOPerandReference: nil,
|
10
|
+
dataType: nil,
|
11
|
+
unit: nil,
|
12
|
+
status: nil,
|
13
|
+
type: CCONSTRAINT,
|
14
|
+
**args
|
15
|
+
)
|
16
|
+
|
17
|
+
@uid = uid
|
18
|
+
@uid ||= Base.baseURI + "#constraint_" + Base.getuuid
|
19
|
+
super(uid: @uid, type: type, **args)
|
20
|
+
|
21
|
+
@rightOperand = rightOperand
|
22
|
+
raise "Constraints must haves a Right operand such as 'event' - I'm dead!" unless @rightOperand
|
23
|
+
|
24
|
+
# if it is already a URI, then let it go
|
25
|
+
# @rightOperand = "http://www.w3.org/ns/odrl/2/#{@rightOperand}" unless @rightOperand =~ %r{https?://}
|
26
|
+
|
27
|
+
@leftOperand = leftOperand
|
28
|
+
unless LEFTOPERANDS.include?(@leftOperand)
|
29
|
+
warn "The selected leftOperand is not part of the default set... just sayin'"
|
30
|
+
end
|
31
|
+
unless @leftOperand
|
32
|
+
raise "Constraints must haves a Left Operand such as 'http://some.event.org/on-now' - I'm dead!"
|
33
|
+
end
|
34
|
+
|
35
|
+
# if it is already a URI, then let it go
|
36
|
+
@leftOperand = "http://www.w3.org/ns/odrl/2/#{@leftOperand}" unless @leftOperand =~ %r{https?://}
|
37
|
+
|
38
|
+
@operator = operator
|
39
|
+
raise "Constraints must haves an operator such as 'eq' - I'm dead!" unless @operator
|
40
|
+
|
41
|
+
warn "The selected operator is not part of the default set... just sayin'" unless OPERATORS.include?(@operator)
|
42
|
+
|
43
|
+
# if it is already a URI, then let it go
|
44
|
+
@operator = "http://www.w3.org/ns/odrl/2/#{@operator}" unless @operator =~ %r{https?://}
|
45
|
+
|
46
|
+
@rightOperandReference = rightOperandReference
|
47
|
+
@dataType = dataType
|
48
|
+
@unit = unit
|
49
|
+
@status = status
|
50
|
+
end
|
51
|
+
|
52
|
+
def load_graph
|
53
|
+
super
|
54
|
+
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
55
|
+
if rightOperand
|
56
|
+
predicate = PRIGHT
|
57
|
+
object = rightOperand
|
58
|
+
subject = uid
|
59
|
+
repo = repository
|
60
|
+
triplify(subject, predicate, object, repo)
|
61
|
+
end
|
62
|
+
if leftOperand
|
63
|
+
predicate = PLEFT
|
64
|
+
object = leftOperand
|
65
|
+
subject = uid
|
66
|
+
repo = repository
|
67
|
+
triplify(subject, predicate, object, repo)
|
68
|
+
end
|
69
|
+
if operator
|
70
|
+
predicate = POPERATOR
|
71
|
+
object = operator
|
72
|
+
subject = uid
|
73
|
+
repo = repository
|
74
|
+
triplify(subject, predicate, object, repo)
|
75
|
+
end
|
76
|
+
if rightOperandReference
|
77
|
+
predicate = POPERANDREFERENCE
|
78
|
+
object = rightOperandReference
|
79
|
+
subject = uid
|
80
|
+
repo = repository
|
81
|
+
triplify(subject, predicate, object, repo)
|
82
|
+
end
|
83
|
+
if dataType
|
84
|
+
predicate = PDATATYPE
|
85
|
+
object = dataType
|
86
|
+
subject = uid
|
87
|
+
repo = repository
|
88
|
+
triplify(subject, predicate, object, repo)
|
89
|
+
end
|
90
|
+
if unit
|
91
|
+
predicate = PUNIT
|
92
|
+
object = unit
|
93
|
+
subject = uid
|
94
|
+
repo = repository
|
95
|
+
triplify(subject, predicate, object, repo)
|
96
|
+
end
|
97
|
+
return unless status
|
98
|
+
|
99
|
+
predicate = PSTATUS
|
100
|
+
object = status
|
101
|
+
subject = uid
|
102
|
+
repo = repository
|
103
|
+
triplify(subject, predicate, object, repo)
|
104
|
+
end
|
105
|
+
|
106
|
+
def serialize(format:)
|
107
|
+
super
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/odrl/odrl/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ODRL
|
4
|
-
module ODRL
|
5
|
-
VERSION = "0.2.
|
6
|
-
end
|
7
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ODRL
|
4
|
+
module ODRL
|
5
|
+
VERSION = "0.2.4"
|
6
|
+
end
|
7
|
+
end
|
data/lib/odrl/party.rb
CHANGED
@@ -1,97 +1,97 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ODRL
|
4
|
-
class Party < Base
|
5
|
-
attr_accessor :uid, :refinements, :partOf, :predicate, :type
|
6
|
-
|
7
|
-
def initialize(
|
8
|
-
uid: nil,
|
9
|
-
refinements: nil,
|
10
|
-
partOf: nil,
|
11
|
-
predicate: nil,
|
12
|
-
type: CPARTY,
|
13
|
-
**args
|
14
|
-
)
|
15
|
-
|
16
|
-
@uid = uid
|
17
|
-
@uid ||= Base.baseURI + "#party_" + Base.getuuid
|
18
|
-
super(uid: @uid, type: type, **args)
|
19
|
-
|
20
|
-
@refinements = {}
|
21
|
-
@partOf = {}
|
22
|
-
@predicate = predicate.to_s
|
23
|
-
|
24
|
-
if @predicate&.match(/https?:/)
|
25
|
-
# do nothing! It's their choice to send a full predicate!
|
26
|
-
elsif @predicate # we're guessing it will be a string from the valid list?
|
27
|
-
unless PARTYFUNCTIONS.include? @predicate
|
28
|
-
raise "You didn't indicate a valid predicate"
|
29
|
-
# @predicate = ODRLV.assigner
|
30
|
-
else
|
31
|
-
@predicate = "#{ODRLV.to_s}#{predicate}" # make the URI form of the valid predicate
|
32
|
-
end
|
33
|
-
elsif @predicate.nil?
|
34
|
-
raise "If you don't indicate a predicate at all"
|
35
|
-
# @predicate = ODRLV.assigner
|
36
|
-
end
|
37
|
-
|
38
|
-
refinements = [refinements] unless refinements.is_a? Array
|
39
|
-
unless refinements.first.nil?
|
40
|
-
refinements.each do |c|
|
41
|
-
addRefinement(refinement: c)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
partOf = [partOf] unless partOf.is_a? Array
|
46
|
-
unless partOf.first.nil?
|
47
|
-
partOf.each do |p|
|
48
|
-
p.addPart(part: self)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
unless @partOf and !(@partOf.is_a? PartyCollection) # if it exists and is the wrong type
|
53
|
-
raise "The parent collection of a Party must be of type ODRL::PaertyCollection."
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
def addRefinement(refinement: args)
|
59
|
-
raise "Refinement is not an ODRL Constraint" unless refinement.is_a?(Constraint)
|
60
|
-
|
61
|
-
refinements[refinement.uid] = [PREFINEMENT, refinement]
|
62
|
-
end
|
63
|
-
|
64
|
-
def addPart(part: args)
|
65
|
-
raise "Party cannot be added as part of something that is not an PartyCollection" unless self.is_a?(PartyCollection)
|
66
|
-
part.partOf[uid] = [PPARTOF, self]
|
67
|
-
end
|
68
|
-
|
69
|
-
def load_graph
|
70
|
-
super
|
71
|
-
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
72
|
-
# TODO: Currently we don't support partOf
|
73
|
-
%i[refinements].each do |connected_object_type|
|
74
|
-
next unless send(connected_object_type)
|
75
|
-
|
76
|
-
send(connected_object_type).each do |_uid, typedconnection|
|
77
|
-
predicate, odrlobject = typedconnection # e.g. "refinement", RefinementObject
|
78
|
-
object = odrlobject.uid
|
79
|
-
subject = uid
|
80
|
-
repo = repository
|
81
|
-
triplify(subject, predicate, object, repo)
|
82
|
-
odrlobject.load_graph # start the cascade
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def serialize(format:)
|
88
|
-
super
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
class PartyCollection < Party
|
93
|
-
def initialize(type: CPARTYCOLLECTION, **args)
|
94
|
-
super(type: type, **args)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ODRL
|
4
|
+
class Party < Base
|
5
|
+
attr_accessor :uid, :refinements, :partOf, :predicate, :type
|
6
|
+
|
7
|
+
def initialize(
|
8
|
+
uid: nil,
|
9
|
+
refinements: nil,
|
10
|
+
partOf: nil,
|
11
|
+
predicate: nil,
|
12
|
+
type: CPARTY,
|
13
|
+
**args
|
14
|
+
)
|
15
|
+
|
16
|
+
@uid = uid
|
17
|
+
@uid ||= Base.baseURI + "#party_" + Base.getuuid
|
18
|
+
super(uid: @uid, type: type, **args)
|
19
|
+
|
20
|
+
@refinements = {}
|
21
|
+
@partOf = {}
|
22
|
+
@predicate = predicate.to_s
|
23
|
+
|
24
|
+
if @predicate&.match(/https?:/)
|
25
|
+
# do nothing! It's their choice to send a full predicate!
|
26
|
+
elsif @predicate # we're guessing it will be a string from the valid list?
|
27
|
+
unless PARTYFUNCTIONS.include? @predicate
|
28
|
+
raise "You didn't indicate a valid predicate"
|
29
|
+
# @predicate = ODRLV.assigner
|
30
|
+
else
|
31
|
+
@predicate = "#{ODRLV.to_s}#{predicate}" # make the URI form of the valid predicate
|
32
|
+
end
|
33
|
+
elsif @predicate.nil?
|
34
|
+
raise "If you don't indicate a predicate at all"
|
35
|
+
# @predicate = ODRLV.assigner
|
36
|
+
end
|
37
|
+
|
38
|
+
refinements = [refinements] unless refinements.is_a? Array
|
39
|
+
unless refinements.first.nil?
|
40
|
+
refinements.each do |c|
|
41
|
+
addRefinement(refinement: c)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
partOf = [partOf] unless partOf.is_a? Array
|
46
|
+
unless partOf.first.nil?
|
47
|
+
partOf.each do |p|
|
48
|
+
p.addPart(part: self)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
unless @partOf and !(@partOf.is_a? PartyCollection) # if it exists and is the wrong type
|
53
|
+
raise "The parent collection of a Party must be of type ODRL::PaertyCollection."
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def addRefinement(refinement: args)
|
59
|
+
raise "Refinement is not an ODRL Constraint" unless refinement.is_a?(Constraint)
|
60
|
+
|
61
|
+
refinements[refinement.uid] = [PREFINEMENT, refinement]
|
62
|
+
end
|
63
|
+
|
64
|
+
def addPart(part: args)
|
65
|
+
raise "Party cannot be added as part of something that is not an PartyCollection" unless self.is_a?(PartyCollection)
|
66
|
+
part.partOf[uid] = [PPARTOF, self]
|
67
|
+
end
|
68
|
+
|
69
|
+
def load_graph
|
70
|
+
super
|
71
|
+
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
72
|
+
# TODO: Currently we don't support partOf
|
73
|
+
%i[refinements].each do |connected_object_type|
|
74
|
+
next unless send(connected_object_type)
|
75
|
+
|
76
|
+
send(connected_object_type).each do |_uid, typedconnection|
|
77
|
+
predicate, odrlobject = typedconnection # e.g. "refinement", RefinementObject
|
78
|
+
object = odrlobject.uid
|
79
|
+
subject = uid
|
80
|
+
repo = repository
|
81
|
+
triplify(subject, predicate, object, repo)
|
82
|
+
odrlobject.load_graph # start the cascade
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def serialize(format:)
|
88
|
+
super
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class PartyCollection < Party
|
93
|
+
def initialize(type: CPARTYCOLLECTION, **args)
|
94
|
+
super(type: type, **args)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/odrl/policy.rb
CHANGED
@@ -1,97 +1,97 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "odrl/version"
|
4
|
-
|
5
|
-
module ODRL
|
6
|
-
class Error < StandardError; end
|
7
|
-
|
8
|
-
class Policy < Base
|
9
|
-
attr_accessor :rules, :profiles
|
10
|
-
|
11
|
-
def initialize(uid: nil, type: CPOLICY, **args)
|
12
|
-
@uid = uid
|
13
|
-
self.uid = Base.baseURI + "#policy_" + Base.getuuid unless @uid
|
14
|
-
super(uid: @uid, type: type, **args)
|
15
|
-
|
16
|
-
@rules = {}
|
17
|
-
@profiles = {}
|
18
|
-
end
|
19
|
-
|
20
|
-
def addDuty(rule:)
|
21
|
-
uid = rule.uid
|
22
|
-
rules[uid] = [POBLIGATION, rule]
|
23
|
-
end
|
24
|
-
|
25
|
-
def addPermission(rule:)
|
26
|
-
uid = rule.uid
|
27
|
-
rules[uid] = [PPERMISSION, rule]
|
28
|
-
end
|
29
|
-
|
30
|
-
def addProhibition(rule:)
|
31
|
-
uid = rule.uid
|
32
|
-
rules[uid] = [PPROHIBITION, rule]
|
33
|
-
end
|
34
|
-
|
35
|
-
def addProfile(profile:)
|
36
|
-
uid = profile.uid
|
37
|
-
profiles[uid] = [PPROFILE, uid]
|
38
|
-
end
|
39
|
-
|
40
|
-
def load_graph
|
41
|
-
super
|
42
|
-
rules.each do |_uid, rulepair|
|
43
|
-
predicate, ruleobject = rulepair # e.g. "permission", RuleObject
|
44
|
-
object = ruleobject.uid
|
45
|
-
subject = uid
|
46
|
-
repo = repository
|
47
|
-
triplify(subject, predicate, object, repo)
|
48
|
-
ruleobject.load_graph # start the cascade
|
49
|
-
end
|
50
|
-
|
51
|
-
# TODO make test for profiles
|
52
|
-
profiles.each do |_uid, profile_pair|
|
53
|
-
predicate, profileuri = profile_pair # e.g. "permission", RuleObject
|
54
|
-
object = profileuri
|
55
|
-
subject = uid
|
56
|
-
repo = repository
|
57
|
-
triplify(subject, predicate, object, repo)
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
def serialize(format:)
|
63
|
-
super
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class Set < Policy
|
68
|
-
def initialize(type: CSET, **args)
|
69
|
-
super(type: type, **args)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class Offer < Set
|
74
|
-
def initialize(type: COFFER, **args)
|
75
|
-
super(type: type, **args)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class Agreement < Set
|
80
|
-
def initialize(type: CAGREEMENT, **args)
|
81
|
-
super(type: type, **args)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
class Request < Set
|
86
|
-
def initialize(type: CREQUEST, **args)
|
87
|
-
super(type: type, **args)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class Privacy < Set
|
92
|
-
def initialize(type: CPRIVACY, **args)
|
93
|
-
super(type: type, **args)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
# ====================================================
|
97
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "odrl/version"
|
4
|
+
|
5
|
+
module ODRL
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
class Policy < Base
|
9
|
+
attr_accessor :rules, :profiles
|
10
|
+
|
11
|
+
def initialize(uid: nil, type: CPOLICY, **args)
|
12
|
+
@uid = uid
|
13
|
+
self.uid = Base.baseURI + "#policy_" + Base.getuuid unless @uid
|
14
|
+
super(uid: @uid, type: type, **args)
|
15
|
+
|
16
|
+
@rules = {}
|
17
|
+
@profiles = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def addDuty(rule:)
|
21
|
+
uid = rule.uid
|
22
|
+
rules[uid] = [POBLIGATION, rule]
|
23
|
+
end
|
24
|
+
|
25
|
+
def addPermission(rule:)
|
26
|
+
uid = rule.uid
|
27
|
+
rules[uid] = [PPERMISSION, rule]
|
28
|
+
end
|
29
|
+
|
30
|
+
def addProhibition(rule:)
|
31
|
+
uid = rule.uid
|
32
|
+
rules[uid] = [PPROHIBITION, rule]
|
33
|
+
end
|
34
|
+
|
35
|
+
def addProfile(profile:)
|
36
|
+
uid = profile.uid
|
37
|
+
profiles[uid] = [PPROFILE, uid]
|
38
|
+
end
|
39
|
+
|
40
|
+
def load_graph
|
41
|
+
super
|
42
|
+
rules.each do |_uid, rulepair|
|
43
|
+
predicate, ruleobject = rulepair # e.g. "permission", RuleObject
|
44
|
+
object = ruleobject.uid
|
45
|
+
subject = uid
|
46
|
+
repo = repository
|
47
|
+
triplify(subject, predicate, object, repo)
|
48
|
+
ruleobject.load_graph # start the cascade
|
49
|
+
end
|
50
|
+
|
51
|
+
# TODO make test for profiles
|
52
|
+
profiles.each do |_uid, profile_pair|
|
53
|
+
predicate, profileuri = profile_pair # e.g. "permission", RuleObject
|
54
|
+
object = profileuri
|
55
|
+
subject = uid
|
56
|
+
repo = repository
|
57
|
+
triplify(subject, predicate, object, repo)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
def serialize(format:)
|
63
|
+
super
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class Set < Policy
|
68
|
+
def initialize(type: CSET, **args)
|
69
|
+
super(type: type, **args)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class Offer < Set
|
74
|
+
def initialize(type: COFFER, **args)
|
75
|
+
super(type: type, **args)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class Agreement < Set
|
80
|
+
def initialize(type: CAGREEMENT, **args)
|
81
|
+
super(type: type, **args)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class Request < Set
|
86
|
+
def initialize(type: CREQUEST, **args)
|
87
|
+
super(type: type, **args)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class Privacy < Set
|
92
|
+
def initialize(type: CPRIVACY, **args)
|
93
|
+
super(type: type, **args)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
# ====================================================
|
97
|
+
end
|