Module: PMP::Parser

Includes:
Utils
Included in:
CollectionDocument, Link
Defined in:
lib/pmp/parser.rb

Instance Method Summary collapse

Methods included from Utils

#to_json_key_name, #to_ruby_safe_name

Instance Method Details

#as_json(options = {}) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/pmp/parser.rb', line 8

def as_json(options={})
  result = {}
  result['version']    = self.version
  result['links']      = extract_links
  result['attributes'] = extract_attributes

  result
end

#extract_attributes(obj = self) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/pmp/parser.rb', line 17

def extract_attributes(obj=self)
  obj.attributes.inject({}) do |result, pair|
    value = pair.last
    name = to_json_key_name(pair.first)
    result[name] = value
    result
  end
end


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pmp/parser.rb', line 26

def extract_links(obj=self)
  obj.links.inject({}) do |result, pair|
    value = pair.last
    name = to_json_key_name(pair.first)

    links = if value.is_a?(PMP::Link)
      [extract_attributes(value)]
    elsif value.is_a?(Array)
      value.map{|v| extract_attributes(v)}
    elsif value.is_a?(Hash)
      value.values.map{|v| extract_attributes(v)}
    end

    result[name] = links

    result
  end
end

#parse(doc) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/pmp/parser.rb', line 45

def parse(doc)
  return if (!doc)
  parse_version(doc['version'])
  parse_attributes(doc['attributes'])
  parse_links(doc['links'])
  parse_items(doc['items'])
  # parse_error(doc)
end

#parse_attributes(document) ⇒ Object



58
59
60
61
62
# File 'lib/pmp/parser.rb', line 58

def parse_attributes(document)
  Array(document).each do |k,v|
    self.send("#{to_ruby_safe_name(k)}=", v)
  end
end

#parse_items(document) ⇒ Object



93
94
95
# File 'lib/pmp/parser.rb', line 93

def parse_items(document)
  self.items = Array(document).collect{|i| PMP::CollectionDocument.new(options.merge(document:i))}
end


73
74
75
76
77
78
79
80
81
82
83
# File 'lib/pmp/parser.rb', line 73

def parse_link(name, info)
  if ['query', 'edit', 'navigation'].include?(name.to_s)
    parse_links_list(info)
  elsif !info.is_a?(Array)
    Link.new(info)
  # elsif info.size == 1
  #   Link.new(info.first)
  elsif info.size > 0        
    info.map{|l| Link.new(l)}
  end
end


64
65
66
67
68
69
70
71
# File 'lib/pmp/parser.rb', line 64

def parse_links(document)
  Array(document).each do |k,v|
    link = parse_link(k,v)
    if link
      self.links[k] = link
    end
  end
end


85
86
87
88
89
90
91
# File 'lib/pmp/parser.rb', line 85

def parse_links_list(links)
  links.inject({}) do |results, query|
    rel = query['rels'].first
    results[rel] = Link.new(query)
    results
  end
end

#parse_version(document) ⇒ Object



54
55
56
# File 'lib/pmp/parser.rb', line 54

def parse_version(document)
  self.version = document || '1.0'
end