37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/amee/data_item.rb', line 37
def self.from_json(json)
doc = JSON.parse(json)
begin
data = {}
data[:uid] = doc['dataItem']['uid']
data[:created] = DateTime.parse(doc['dataItem']['created'])
data[:modified] = DateTime.parse(doc['dataItem']['modified'])
data[:name] = doc['dataItem']['name']
data[:path] = doc['path']
data[:label] = doc['dataItem']['label']
data[:item_definition] = doc['dataItem']['itemDefinition']['uid']
data[:category_uid] = doc['dataItem']['dataCategory']['uid']
data[:total_amount] = doc['amount']['value'] rescue nil
data[:total_amount_unit] = doc['amount']['unit'] rescue nil
if data[:total_amount].nil?
data[:total_amount] = doc['amountPerMonth'] rescue nil
data[:total_amount_unit] = "kg/month"
end
data[:values] = []
doc['dataItem']['itemValues'].each do |value|
value_data = {}
value_data[:name] = value['name']
value_data[:path] = value['path']
value_data[:value] = value['value']
value_data[:drill] = value['itemValueDefinition']['drillDown'] rescue nil
value_data[:uid] = value['uid']
data[:values] << value_data
end
data[:choices] = []
doc['userValueChoices']['choices'].each do |choice|
choice_data = {}
choice_data[:name] = choice['name']
choice_data[:value] = choice['value']
data[:choices] << choice_data
end
data[:start_date] = DateTime.parse(doc['dataItem']['startDate']) rescue nil
Item.new(data)
rescue
raise AMEE::BadData.new("Couldn't load DataItem from JSON. Check that your URL is correct.\n#{json}")
end
end
|