jsondef 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/config_reader.rb +66 -0
  3. data/lib/jsondef.rb +45 -55
  4. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8df428945802e90fdf27e24e2d576aacdfec82d
4
- data.tar.gz: b6e23cb1afc34c5c4cf6f5bb6589b937472bca3a
3
+ metadata.gz: 437c6440ce1877442f035d8c21dcd01f531ed9e8
4
+ data.tar.gz: 0b0c349bb1096085c4d25698a16def0380af877f
5
5
  SHA512:
6
- metadata.gz: e718fee725f7dca9c35b839d864a737d1357dcf6007f75bff49ade7fd6e42a6f6b235eb7f7bdee7a1189e3b0379e81002b211a284a682ab9078a455932f20deb
7
- data.tar.gz: 41e45435df65bede5ca72820c00e6d993b3c8cc23b0bf92411419a44610964d259f914d1b3118e64b8bc5e6c7ae3e5f0eeeaa35ce26f70eb2d3b1e60ed7eb7e2
6
+ metadata.gz: ef51c4ca549455f1ef097ddc17c934680091d5aa0c4f9c71dace53bd6217f87f55426dd78a4e3ac86b870156604a17618b8edb7dc1d1d12e249ee1522004e38f
7
+ data.tar.gz: e7c5784f65f151e0d10f099d3eb9aea4d082c83498159722f49c962741ff21a30d79ba9d3c32e19fa61e70e2e5a2337294fb35bd4b047fceeabdd16cd3a839b3
@@ -0,0 +1,66 @@
1
+ require 'yaml'
2
+ require 'pp'
3
+ require_relative 'jsondef.rb'
4
+
5
+ module ConfigReaderFactory
6
+
7
+ def ConfigReaderFactory.fromJsonFile(path)
8
+ ConfigReader.new(YAML.load(IO.read(path)))
9
+ end
10
+
11
+ end
12
+
13
+ class ConfigReader
14
+
15
+ attr_reader :rule
16
+
17
+ def initialize(conf)
18
+ @rule = parse_element(conf['rule'])
19
+ end
20
+
21
+ def parse_element(conf)
22
+ case conf['type']
23
+ when 'object'
24
+ parse_object(conf)
25
+ when 'array'
26
+ parse_array(conf)
27
+ when 'string'
28
+ parse_string(conf)
29
+ when 'number'
30
+ parse_number(conf)
31
+ else
32
+ raise "Unknown rule type: " + conf['type']
33
+ end
34
+ end
35
+
36
+ def parse_object(conf)
37
+ rule = JsonRuleObject.new
38
+ conf['keys'].each { |k, v| rule.add_key_rule(parse_object_key(k, v)) } if conf.has_key?('keys')
39
+
40
+ rule.disallow_other_keys if conf.has_key?('disallow_other_keys') && conf['disallow_other_keys']
41
+ rule
42
+ end
43
+
44
+ def parse_object_key(key, conf)
45
+ rule = JsonRuleObjectKey.new(key)
46
+ rule.set_optional if conf.has_key?('optional') && conf['optional']
47
+ rule.set_rule(parse_element(conf['rule'])) if conf.has_key?('rule')
48
+ rule
49
+ end
50
+
51
+ def parse_array(conf)
52
+ rule = JsonRuleArray.new
53
+ rule
54
+ end
55
+
56
+ def parse_string(conf)
57
+ rule = JsonRuleString.new
58
+ rule
59
+ end
60
+
61
+ def parse_number(conf)
62
+ rule = JsonRuleNumber.new
63
+ rule
64
+ end
65
+
66
+ end
data/lib/jsondef.rb CHANGED
@@ -1,30 +1,30 @@
1
1
  module JsonDef
2
2
 
3
+ ANY_TYPE = :wildcard
4
+
3
5
  def JsonDef.verify(obj, rule)
4
6
  case rule.class.to_s
5
7
  when 'JsonRuleObject'
6
8
  JsonDef.verify_object(obj, rule)
9
+ when 'JsonRuleArray'
10
+ JsonDef.verify_array(obj, rule)
11
+ when 'JsonRuleString'
12
+ JsonDef.verify_string(obj, rule)
13
+ when 'JsonRuleNumber'
14
+ JsonDef.verify_number(obj, rule)
7
15
  else
8
- raise 'Unknown rule at [verify] level'
16
+ raise "Unknown rule at [verify] level: #{rule.class}"
9
17
  end
10
18
  end
11
19
 
12
- def JsonDef.verify_value_type(value, type)
13
- case type
14
- when :object
15
- value.kind_of?(Hash)
16
- when :number
17
- value.kind_of?(Numeric)
18
- when :string
19
- value.kind_of?(String)
20
- when :array
21
- value.kind_of?(Array)
22
- when :wildcard
23
- # Land of satisfaction.
24
- true
25
- else
26
- raise 'Unknown value type declaration'
27
- end
20
+ def JsonDef.verify_string(obj, rule)
21
+ return false unless obj.kind_of?(String)
22
+ true
23
+ end
24
+
25
+ def JsonDef.verify_number(obj, rule)
26
+ return false unless obj.kind_of?(Numeric)
27
+ true
28
28
  end
29
29
 
30
30
  def JsonDef.verify_object(obj, rule)
@@ -35,23 +35,17 @@ module JsonDef
35
35
  return true unless obj.has_key?(key_rule.key)
36
36
 
37
37
  case
38
- when key_rule.value.kind_of?(Symbol)
39
- return false unless JsonDef.verify_value_type(obj[key_rule.key], key_rule.value)
40
-
41
- when key_rule.value.kind_of?(JsonRuleObject)
42
- return false unless JsonDef.verify_object(obj[key_rule.key], key_rule.value)
43
-
44
- when key_rule.value.kind_of?(JsonRuleArray)
45
- return false unless JsonDef.verify_array(obj[key_rule.key], key_rule.value)
46
-
38
+ when key_rule.value == JsonDef::ANY_TYPE
39
+ next
40
+ when key_rule.value.kind_of?(JsonRuleBase)
41
+ return false unless JsonDef.verify(obj[key_rule.key], key_rule.value)
47
42
  else
48
- # Expected an exact value given.
49
- return false unless obj[key_rule.key] == key_rule.value
43
+ return false
50
44
  end
51
45
  end
52
46
 
53
- # @todo In case of strict, check if there are other not-allowed keys.
54
- if rule.strict?
47
+ # @todo In case of not allowing other keys, check if there are other not-allowed keys.
48
+ if !rule.allow_other_keys
55
49
  obj.each { |k, v| return false unless rule.keys.member?(k) }
56
50
  end
57
51
 
@@ -59,28 +53,27 @@ module JsonDef
59
53
  end
60
54
 
61
55
  def JsonDef.verify_array(obj, rule)
62
- return false if obj.kind_of?(Array)
56
+ return false unless obj.kind_of?(Array)
63
57
  true
64
58
  end
65
59
 
66
60
  end
67
61
 
68
- class JsonRuleObject
62
+ class JsonRuleBase
63
+ end
69
64
 
70
- attr_reader :key_rules, :keys
65
+ class JsonRuleObject < JsonRuleBase
66
+
67
+ attr_reader :key_rules, :keys, :allow_other_keys
71
68
 
72
69
  def initialize()
73
- @strict = false
70
+ @allow_other_keys = true
74
71
  @key_rules = []
75
72
  @keys = []
76
73
  end
77
74
 
78
- def strict?
79
- @strict
80
- end
81
-
82
- def set_strict
83
- @strict = true
75
+ def disallow_other_keys
76
+ @allow_other_keys = false
84
77
  self
85
78
  end
86
79
 
@@ -92,13 +85,6 @@ class JsonRuleObject
92
85
 
93
86
  end
94
87
 
95
- class JsonRuleArray
96
-
97
- def initialize
98
- end
99
-
100
- end
101
-
102
88
  class JsonRuleObjectKey
103
89
 
104
90
  attr_reader :required, :key, :value
@@ -106,22 +92,26 @@ class JsonRuleObjectKey
106
92
  def initialize(key)
107
93
  @key = key
108
94
  @required = true
109
- @value = :wildcard
95
+ @value = JsonDef::ANY_TYPE
110
96
  end
111
97
 
112
- def set_optional()
98
+ def set_optional
113
99
  @required = false
114
100
  self
115
101
  end
116
102
 
117
- def set_value_type(type)
118
- @value = type
119
- self
120
- end
121
-
122
- def set_value_rule(rule)
103
+ def set_rule(rule)
123
104
  @value = rule
124
105
  self
125
106
  end
126
107
 
127
108
  end
109
+
110
+ class JsonRuleArray < JsonRuleBase
111
+ end
112
+
113
+ class JsonRuleNumber < JsonRuleBase
114
+ end
115
+
116
+ class JsonRuleString < JsonRuleBase
117
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsondef
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Arato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-28 00:00:00.000000000 Z
11
+ date: 2017-02-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Can create JSON descriptor and verify if a given object satisfy it.
14
14
  email: it.arato@gmail.com
@@ -16,6 +16,7 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - lib/config_reader.rb
19
20
  - lib/jsondef.rb
20
21
  homepage: http://itarato.com
21
22
  licenses: