ruby_yappl 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7ddcce6585d16853a0e8dad53cb65842f94423b3
4
+ data.tar.gz: faaa209a92c611bd1932af1aa828d80261d92aaf
5
+ SHA512:
6
+ metadata.gz: 81ad6072e4b766128d1c8b14ebb8a8c6650044ad0febbdd85a234cc05d9df46a4be0eaf141f1327406537e42ac20ae0b96961d51b9eafc38835449c1e4fdad26
7
+ data.tar.gz: 2316925d189a73c984f503572ce30f6d277a967141be524297333dca395fe57cd77e21994878c285b7074ab5cc52a01c5c68a5687739ac65b8a3d1ae61e2c232
data/lib/parser.rb ADDED
@@ -0,0 +1,22 @@
1
+ module YaPPL
2
+ class Parser
3
+ def self.parse(json)
4
+ raise SchemaError unless JsonValidator.validate('yappl', json)
5
+
6
+ data = JSON.parse(json)
7
+ rules = data['preference'].collect do |preference|
8
+ rule = preference['rule']
9
+ Rule.new(
10
+ permitted_purposes: rule['purpose']['permitted'],
11
+ excluded_purposes: rule['purpose']['excluded'],
12
+ permitted_utilizers: rule['utilizer']['permitted'],
13
+ excluded_utilizers: rule['utilizer']['excluded'],
14
+ transformations: rule['transformation'],
15
+ valid_from: Time.parse(rule['valid_from']),
16
+ expiration_date: Time.parse(rule['exp_date'])
17
+ )
18
+ end
19
+ return Policy.new(data['id'], rules)
20
+ end
21
+ end
22
+ end
data/lib/policy.rb ADDED
@@ -0,0 +1,84 @@
1
+ module YaPPL
2
+ class Policy
3
+ attr_reader :id, :rules
4
+
5
+ def initialize(id, rules)
6
+ @id = id
7
+ @rules = rules
8
+ end
9
+
10
+ def self.from_policy_file(json)
11
+ Parser.parse(json)
12
+ end
13
+
14
+ def create_policy
15
+ to_json
16
+ end
17
+
18
+ def get_excluded_purpose
19
+ rules.map(&:excluded_purposes).flatten.uniq
20
+ end
21
+
22
+ def get_excluded_utilizer
23
+ rules.map(&:excluded_utilizers).flatten.uniq
24
+ end
25
+
26
+ def new_rule(args)
27
+ add_rule Rule.new(args)
28
+ end
29
+
30
+ def add_rule(rule)
31
+ max_id = rules.map(&:id).max
32
+ rule.id = max_id + 1
33
+ rules << rule
34
+ end
35
+
36
+ def get_tr_rules # rename?
37
+ active_rules.map do |rule|
38
+ {
39
+ permitted_purposes: rule.permitted_purposes,
40
+ permitted_utilizers: rule.permitted_utilizers,
41
+ transformations: rule.transformations
42
+ }
43
+ end
44
+ end
45
+
46
+ def archive_rule(rule_id)
47
+ rule = rule_by_id(rule_id)
48
+ rule.archive!
49
+ end
50
+
51
+ def update_rule(id, args)
52
+ archive_rule(id)
53
+ rule = Rule.new(args)
54
+ rule.id = id
55
+ rules << rule
56
+ end
57
+
58
+ def to_json
59
+ preferences = @rules.map { |rule| { rule: rule.to_h } }
60
+
61
+ {
62
+ id: @id,
63
+ preference: preferences
64
+ }.to_json
65
+ end
66
+
67
+ def rule_by_id(id)
68
+ matching_rules = rules.select { |rule| rule.id == id }
69
+ if matching_rules.count == 1
70
+ matching_rules.first
71
+ else
72
+ matching_rules
73
+ end
74
+ end
75
+
76
+ def archived_rules
77
+ rules.select { |rule| rule.id == -1 }
78
+ end
79
+
80
+ def active_rules
81
+ rules.select { |rule| rule.id != -1 && !rule.expired? }
82
+ end
83
+ end
84
+ end
data/lib/ruby_yappl.rb ADDED
@@ -0,0 +1,8 @@
1
+ require './lib/parser'
2
+ require './lib/policy'
3
+ require './lib/rule'
4
+ require './lib/exceptions'
5
+ require './lib/json_validator'
6
+
7
+ module YaPPL
8
+ end
data/lib/rule.rb ADDED
@@ -0,0 +1,46 @@
1
+ module YaPPL
2
+ class Rule
3
+ attr_accessor :id
4
+ attr_reader :permitted_purposes, :excluded_purposes, :permitted_utilizers,
5
+ :excluded_utilizers, :transformations, :valid_from, :expiration_date
6
+
7
+ def initialize(args = {})
8
+ args.each do |key, value|
9
+ self.instance_variable_set("@#{key}".to_sym, value)
10
+ end
11
+ @valid_from = Time.now unless valid_from
12
+ @expiration_date = default_time unless expiration_date
13
+ end
14
+
15
+ def archive!
16
+ @id = -1
17
+ @expiration_date = Time.now
18
+ end
19
+
20
+ def expired?
21
+ expiration_date != default_time && Time.now > expiration_date
22
+ end
23
+
24
+ def to_h
25
+ {
26
+ purpose: {
27
+ permitted: permitted_purposes,
28
+ excluded: excluded_purposes
29
+ },
30
+ utilizer: {
31
+ permitted: permitted_utilizers,
32
+ excluded: excluded_utilizers
33
+ },
34
+ transformation: transformations,
35
+ valid_from: valid_from.strftime('%FT%T.%LZ'),
36
+ exp_date: expiration_date.strftime('%FT%T.%LZ')
37
+ }
38
+ end
39
+
40
+ private
41
+
42
+ def default_time
43
+ Time.new(0, 1, 1)
44
+ end
45
+ end
46
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_yappl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Peikert
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-10-16 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: t.s.peikert+yappl@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/parser.rb
20
+ - lib/policy.rb
21
+ - lib/ruby_yappl.rb
22
+ - lib/rule.rb
23
+ homepage: http://rubygems.org/gems/ruby_yappl
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.5.2
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: ruby gem for the yappl privacy preference language
47
+ test_files: []