Class: ConfigReader

Inherits:
Object
  • Object
show all
Defined in:
lib/config_reader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(conf) ⇒ ConfigReader

Returns a new instance of ConfigReader.



17
18
19
# File 'lib/config_reader.rb', line 17

def initialize(conf)
  @rule = parse_element(conf['rule'])
end

Instance Attribute Details

#ruleObject (readonly)

Returns the value of attribute rule.



15
16
17
# File 'lib/config_reader.rb', line 15

def rule
  @rule
end

Instance Method Details

#extract_exact_value(conf) ⇒ Object



83
84
85
86
87
88
89
# File 'lib/config_reader.rb', line 83

def extract_exact_value(conf)
  if conf.has_key?('value')
    conf['value']
  else
    JsonDef::ANY_VALUE
  end
end

#parse_array(conf) ⇒ Object



55
56
57
58
59
60
61
62
# File 'lib/config_reader.rb', line 55

def parse_array(conf)
  rule = JsonRuleArray.new
  min_val = if conf.has_key?('min') then conf['min'] else nil end
  max_val = if conf.has_key?('max') then conf['max'] else nil end
  rule.set_count(min_val, max_val)
  rule.set_rule(parse_element(conf['rule'])) if conf.has_key?('rule')
  rule
end

#parse_boolean(conf) ⇒ Object



74
75
76
77
# File 'lib/config_reader.rb', line 74

def parse_boolean(conf)
  rule = JsonRuleBoolean.new(extract_exact_value(conf))
  rule
end

#parse_element(conf) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/config_reader.rb', line 21

def parse_element(conf)
  case conf['type']
  when 'object'
    parse_object(conf)
  when 'array'
    parse_array(conf)
  when 'string'
    parse_string(conf)
  when 'number'
    parse_number(conf)
  when 'boolean'
    parse_boolean(conf)
  when 'nullval'
    parse_null(conf)
  else
    raise "Unknown rule type: #{conf['type']}"
  end
end

#parse_null(conf) ⇒ Object



79
80
81
# File 'lib/config_reader.rb', line 79

def parse_null(conf)
  JsonRuleNull.new
end

#parse_number(conf) ⇒ Object



69
70
71
72
# File 'lib/config_reader.rb', line 69

def parse_number(conf)
  rule = JsonRuleNumber.new(extract_exact_value(conf))
  rule
end

#parse_object(conf) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/config_reader.rb', line 40

def parse_object(conf)
  rule = JsonRuleObject.new
  conf['keys'].each { |k, v| rule.add_key_rule(parse_object_key(k, v)) } if conf.has_key?('keys')

  rule.disallow_other_keys if conf.has_key?('disallow_other_keys') && conf['disallow_other_keys']
  rule
end

#parse_object_key(key, conf) ⇒ Object



48
49
50
51
52
53
# File 'lib/config_reader.rb', line 48

def parse_object_key(key, conf)
  rule = JsonRuleObjectKey.new(key)
  rule.set_optional if conf.has_key?('optional') && conf['optional']
  rule.set_rule(parse_element(conf['rule'])) if conf.has_key?('rule')
  rule
end

#parse_string(conf) ⇒ Object



64
65
66
67
# File 'lib/config_reader.rb', line 64

def parse_string(conf)
  rule = JsonRuleString.new(extract_exact_value(conf))
  rule
end