Module: Halidate::PureRuby

Defined in:
lib/halidate/pure_ruby.rb

Instance Method Summary collapse

Instance Method Details

#_embeddedObject



74
75
76
# File 'lib/halidate/pure_ruby.rb', line 74

def _embedded
  @json['_embedded']
end


78
79
80
# File 'lib/halidate/pure_ruby.rb', line 78

def _links
  @json['_links']
end

#embedded_valid?Boolean

Returns:

  • (Boolean)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/halidate/pure_ruby.rb', line 52

def embedded_valid?
  return true if _embedded.nil?

  _embedded.all? do |resource_type, resource|
    case resource
    when Array
      resource.all?{|x| Halidator.new(x).valid?}
    else
      begin
        Halidator.new(resource).valid?
      rescue JSON::ParserError
        errors << "'#{resource}' is not a valid embedded object"
        return false
      end
    end
  end
end


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

def has_links
  if _links
    true
  else
    errors << '_links does not exist'
    false
  end
end

Returns:

  • (Boolean)


20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/halidate/pure_ruby.rb', line 20

def link_valid?(link)
  debug "    #{link}"

  unless link['href']
    errors << "no href in #{link}"
    return false
  end
  unless template_valid?(link)
    errors << "invalid template for #{link}"
    return false
  end
  true
end

Returns:

  • (Boolean)


7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/halidate/pure_ruby.rb', line 7

def links_all_valid?
  _links.all? do |k, v|
    debug "\n\n", k, v

    case v
    when Array # is an array of links
      v.all?{|x| link_valid?(x)}
    else
      link_valid?(v)
    end
  end
end


91
92
93
94
95
96
97
98
# File 'lib/halidate/pure_ruby.rb', line 91

def links_has_self
  if _links['self']
    true
  else
    errors << "no self in #{_links.inspect}"
    false
  end
end

#meets_minimal_JSON_representation?Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/halidate/pure_ruby.rb', line 70

def meets_minimal_JSON_representation?
  has_links && links_has_self && self_has_href
end

#self_has_hrefObject



100
101
102
103
104
105
106
107
# File 'lib/halidate/pure_ruby.rb', line 100

def self_has_href
  if _links['self']['href']
    true
  else
    errors << "no href in #{_links['self']}"
    false
  end
end

#template_valid?(link) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/halidate/pure_ruby.rb', line 34

def template_valid?(link)
  return true unless link['templated'] == true

  pairs = 0
  res = link['href'].each_char.all? do |c|
    if '{' == c
      pairs += 1
      pairs == 1
    elsif '}' == c
      pairs -= 1
      pairs == 0
    else
      true
    end
  end
  res && (pairs == 0) && link['href'].include?('{')
end

#validate_json_as_halObject



3
4
5
# File 'lib/halidate/pure_ruby.rb', line 3

def validate_json_as_hal
  meets_minimal_JSON_representation? && links_all_valid? && embedded_valid?
end