Floppy-amee 2.0.17 → 2.0.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -43,7 +43,7 @@ module AMEE
43
43
  # Create object
44
44
  Category.new(data)
45
45
  rescue
46
- raise AMEE::BadData.new("Couldn't load DataCategory from JSON data. Check that your URL is correct.")
46
+ raise AMEE::BadData.new("Couldn't load DataCategory from JSON data. Check that your URL is correct.\n#{json}")
47
47
  end
48
48
 
49
49
  def self.from_xml(xml)
@@ -78,7 +78,7 @@ module AMEE
78
78
  # Create object
79
79
  Category.new(data)
80
80
  rescue
81
- raise AMEE::BadData.new("Couldn't load DataCategory from XML data. Check that your URL is correct.")
81
+ raise AMEE::BadData.new("Couldn't load DataCategory from XML data. Check that your URL is correct.\n#{xml}")
82
82
  end
83
83
 
84
84
  def self.get(connection, path, items_per_page = 10)
@@ -95,7 +95,7 @@ module AMEE
95
95
  # Done
96
96
  return cat
97
97
  rescue
98
- raise AMEE::BadData.new("Couldn't load DataCategory. Check that your URL is correct.")
98
+ raise AMEE::BadData.new("Couldn't load DataCategory. Check that your URL is correct.\n#{response}")
99
99
  end
100
100
 
101
101
  def self.root(connection)
@@ -59,7 +59,7 @@ module AMEE
59
59
  # Create object
60
60
  Item.new(data)
61
61
  rescue
62
- raise AMEE::BadData.new("Couldn't load DataItem from JSON. Check that your URL is correct.")
62
+ raise AMEE::BadData.new("Couldn't load DataItem from JSON. Check that your URL is correct.\n#{json}")
63
63
  end
64
64
 
65
65
  def self.from_xml(xml)
@@ -102,7 +102,7 @@ module AMEE
102
102
  # Create object
103
103
  Item.new(data)
104
104
  rescue
105
- raise AMEE::BadData.new("Couldn't load DataItem from XML. Check that your URL is correct.")
105
+ raise AMEE::BadData.new("Couldn't load DataItem from XML. Check that your URL is correct.\n#{xml}")
106
106
  end
107
107
 
108
108
 
@@ -120,7 +120,7 @@ module AMEE
120
120
  # Done
121
121
  return item
122
122
  rescue
123
- raise AMEE::BadData.new("Couldn't load DataItem. Check that your URL is correct.")
123
+ raise AMEE::BadData.new("Couldn't load DataItem. Check that your URL is correct.\n#{response}")
124
124
  end
125
125
 
126
126
  def self.create_batch_without_category(connection, category_path, items, options = {})
@@ -47,7 +47,7 @@ module AMEE
47
47
  # Create object
48
48
  ItemValue.new(data)
49
49
  rescue
50
- raise AMEE::BadData.new("Couldn't load DataItemValue from JSON. Check that your URL is correct.")
50
+ raise AMEE::BadData.new("Couldn't load DataItemValue from JSON. Check that your URL is correct.\n#{json}")
51
51
  end
52
52
 
53
53
  def self.from_xml(xml, path)
@@ -66,7 +66,7 @@ module AMEE
66
66
  # Create object
67
67
  ItemValue.new(data)
68
68
  rescue
69
- raise AMEE::BadData.new("Couldn't load DataItemValue from XML. Check that your URL is correct.")
69
+ raise AMEE::BadData.new("Couldn't load DataItemValue from XML. Check that your URL is correct.\n#{xml}")
70
70
  end
71
71
 
72
72
  def self.get(connection, path)
@@ -84,7 +84,7 @@ module AMEE
84
84
  # Done
85
85
  return value
86
86
  rescue
87
- raise AMEE::BadData.new("Couldn't load DataItemValue. Check that your URL is correct.")
87
+ raise AMEE::BadData.new("Couldn't load DataItemValue. Check that your URL is correct.\n#{response}")
88
88
  end
89
89
 
90
90
  def save!
@@ -52,7 +52,7 @@ module AMEE
52
52
  # Create object
53
53
  DrillDown.new(data)
54
54
  rescue
55
- raise AMEE::BadData.new("Couldn't load DrillDown resource from JSON data. Check that your URL is correct.")
55
+ raise AMEE::BadData.new("Couldn't load DrillDown resource from JSON data. Check that your URL is correct.\n#{json}")
56
56
  end
57
57
 
58
58
  def self.from_xml(xml)
@@ -75,7 +75,7 @@ module AMEE
75
75
  # Create object
76
76
  DrillDown.new(data)
77
77
  rescue
78
- raise AMEE::BadData.new("Couldn't load DrillDown resource from XML data. Check that your URL is correct.")
78
+ raise AMEE::BadData.new("Couldn't load DrillDown resource from XML data. Check that your URL is correct.\n#{xml}")
79
79
  end
80
80
 
81
81
  def self.get(connection, path)
@@ -94,7 +94,7 @@ module AMEE
94
94
  # Done
95
95
  return drill
96
96
  rescue
97
- raise AMEE::BadData.new("Couldn't load DrillDown resource. Check that your URL is correct (#{path}).")
97
+ raise AMEE::BadData.new("Couldn't load DrillDown resource. Check that your URL is correct (#{path}).\n#{response}")
98
98
  end
99
99
 
100
100
  end
@@ -89,7 +89,7 @@ module AMEE
89
89
  return category_data
90
90
  end
91
91
 
92
- def self.from_json(json)
92
+ def self.from_json(json, options)
93
93
  # Parse json
94
94
  doc = JSON.parse(json)
95
95
  data = {}
@@ -118,12 +118,12 @@ module AMEE
118
118
  raise AMEE::BadData.new("Couldn't load ProfileCategory from JSON data. Check that your URL is correct.")
119
119
  end
120
120
 
121
- def self.from_v2_json(json)
121
+ def self.from_v2_json(json, options)
122
122
  # Parse json
123
123
  doc = JSON.parse(json)
124
124
  data = {}
125
125
  data[:profile_uid] = doc['profile']['uid']
126
- #data[:profile_date] = DateTime.strptime(doc['profileDate'], "%Y%m")
126
+ data[:profile_date] = options[:start_date]
127
127
  data[:name] = doc['dataCategory']['name']
128
128
  data[:path] = doc['path']
129
129
  data[:total_amount] = doc['totalAmount']['value'].to_f rescue nil
@@ -146,7 +146,7 @@ module AMEE
146
146
  rescue
147
147
  raise AMEE::BadData.new("Couldn't load ProfileCategory from V2 JSON data. Check that your URL is correct.")
148
148
  end
149
-
149
+
150
150
  def self.parse_xml_profile_item(item)
151
151
  item_data = {}
152
152
  item_data[:values] = {}
@@ -175,6 +175,22 @@ module AMEE
175
175
  return item_data
176
176
  end
177
177
 
178
+ def self.from_v2_batch_json(json)
179
+ # Parse JSON
180
+ doc = JSON.parse(json)
181
+ data = {}
182
+ data[:profileItems] = []
183
+ doc['profileItems'].each do |child|
184
+ profile_item = {}
185
+ profile_item[:uri] = child['uri'].to_s
186
+ profile_item[:uid] = child['uid'].to_s
187
+ data[:profileItems] << profile_item
188
+ end
189
+ return data
190
+ rescue
191
+ raise AMEE::BadData.new("Couldn't load ProfileCategory batch response from V2 JSON data. Check that your URL is correct.")
192
+ end
193
+
178
194
  def self.parse_xml_profile_category(category)
179
195
  category_data = {}
180
196
  category_data[:name] = category.elements['DataCategory'].elements['Name'].text
@@ -200,7 +216,7 @@ module AMEE
200
216
  return category_data
201
217
  end
202
218
 
203
- def self.from_xml(xml)
219
+ def self.from_xml(xml, options)
204
220
  # Parse XML
205
221
  doc = REXML::Document.new(xml)
206
222
  data = {}
@@ -280,12 +296,12 @@ module AMEE
280
296
  return item_data
281
297
  end
282
298
 
283
- def self.from_v2_xml(xml)
299
+ def self.from_v2_xml(xml, options)
284
300
  # Parse XML
285
301
  doc = REXML::Document.new(xml)
286
302
  data = {}
287
303
  data[:profile_uid] = REXML::XPath.first(doc, "/Resources/ProfileCategoryResource/Profile/@uid").to_s
288
- #data[:profile_date] = DateTime.strptime(REXML::XPath.first(doc, "/Resources/ProfileCategoryResource/ProfileDate").text, "%Y%m")
304
+ data[:profile_date] = options[:start_date]
289
305
  data[:name] = REXML::XPath.first(doc, '/Resources/ProfileCategoryResource/DataCategory/Name').text
290
306
  data[:path] = REXML::XPath.first(doc, '/Resources/ProfileCategoryResource/Path').text || ""
291
307
  data[:total_amount] = REXML::XPath.first(doc, '/Resources/ProfileCategoryResource/TotalAmount').text.to_f rescue nil
@@ -314,12 +330,28 @@ module AMEE
314
330
  raise AMEE::BadData.new("Couldn't load ProfileCategory from V2 XML data. Check that your URL is correct.")
315
331
  end
316
332
 
317
- def self.from_v2_atom(response)
333
+ def self.from_v2_batch_xml(xml)
334
+ # Parse XML
335
+ doc = REXML::Document.new(xml)
336
+ data = {}
337
+ data[:profileItems] = []
338
+ REXML::XPath.each(doc, '/Resources/ProfileItems/ProfileItem') do |child|
339
+ profile_item = {}
340
+ profile_item[:uri] = child.attributes['uri'].to_s
341
+ profile_item[:uid] = child.attributes['uid'].to_s
342
+ data[:profileItems] << profile_item
343
+ end
344
+ return data
345
+ rescue
346
+ raise AMEE::BadData.new("Couldn't load ProfileCategory batch response from V2 XML data. Check that your URL is correct.")
347
+ end
348
+
349
+ def self.from_v2_atom(response, options)
318
350
  # Parse XML
319
351
  doc = REXML::Document.new(response)
320
352
  data = {}
321
353
  data[:profile_uid] = REXML::XPath.first(doc, "/feed/@xml:base").to_s.match("/profiles/(.*?)/")[1]
322
- # data[:profile_date] = DateTime.strptime(REXML::XPath.first(doc, "/Resources/ProfileCategoryResource/ProfileDate").text, "%Y%m")
354
+ data[:profile_date] = options[:start_date]
323
355
  data[:name] = REXML::XPath.first(doc, '/feed/amee:name').text
324
356
  data[:path] = REXML::XPath.first(doc, "/feed/@xml:base").to_s.match("/profiles/.*?(/.*)")[1]
325
357
  data[:total_amount] = REXML::XPath.first(doc, '/feed/amee:totalAmount').text.to_f rescue nil
@@ -394,18 +426,18 @@ module AMEE
394
426
  return history.reverse
395
427
  end
396
428
 
397
- def self.parse(connection, response)
429
+ def self.parse(connection, response, options)
398
430
  # Parse data from response
399
431
  if response.is_v2_json?
400
- cat = Category.from_v2_json(response)
432
+ cat = Category.from_v2_json(response, options)
401
433
  elsif response.is_json?
402
- cat = Category.from_json(response)
434
+ cat = Category.from_json(response, options)
403
435
  elsif response.is_v2_atom?
404
- cat = Category.from_v2_atom(response)
436
+ cat = Category.from_v2_atom(response, options)
405
437
  elsif response.is_v2_xml?
406
- cat = Category.from_v2_xml(response)
438
+ cat = Category.from_v2_xml(response, options)
407
439
  elsif response.is_xml?
408
- cat = Category.from_xml(response)
440
+ cat = Category.from_xml(response, options)
409
441
  end
410
442
  # Store connection in object for future use
411
443
  cat.connection = connection
@@ -413,7 +445,16 @@ module AMEE
413
445
  return cat
414
446
  end
415
447
 
416
-
448
+ def self.parse_batch(connection, response)
449
+ if response.is_v2_json?
450
+ return Category.from_v2_batch_json(response)
451
+ elsif response.is_v2_xml?
452
+ return Category.from_v2_batch_xml(response)
453
+ else
454
+ return self.parse(connection, response)
455
+ end
456
+ end
457
+
417
458
  def self.get(connection, path, options = {})
418
459
  unless options.is_a?(Hash)
419
460
  raise AMEE::ArgumentError.new("Third argument must be a hash of options!")
@@ -424,17 +465,15 @@ module AMEE
424
465
  elsif options[:start_date] && connection.version >= 2
425
466
  options[:startDate] = options[:start_date].xmlschema
426
467
  end
427
- options.delete(:start_date)
428
468
  if options[:end_date] && connection.version >= 2
429
469
  options[:endDate] = options[:end_date].xmlschema
430
470
  end
431
- options.delete(:end_date)
432
471
  if options[:duration] && connection.version >= 2
433
472
  options[:duration] = "PT#{options[:duration] * 86400}S"
434
473
  end
435
474
  # Load data from path
436
475
  response = connection.get(path, options).body
437
- return Category.parse(connection, response)
476
+ return Category.parse(connection, response, options)
438
477
  rescue
439
478
  raise AMEE::BadData.new("Couldn't load ProfileCategory. Check that your URL is correct.")
440
479
  end
@@ -299,7 +299,7 @@ module AMEE
299
299
  response = connection.raw_post(category_path, post_data).body
300
300
  # Send back a category object containing all the created items
301
301
  unless response.empty?
302
- return AMEE::Profile::Category.parse(connection, response)
302
+ return AMEE::Profile::Category.parse_batch(connection, response)
303
303
  else
304
304
  return true
305
305
  end
data/lib/amee/rails.rb CHANGED
@@ -1,6 +1,13 @@
1
1
  module AMEE
2
2
  module Rails
3
3
 
4
+ def self.establish_connection(server, username, password)
5
+ # Connect
6
+ $amee = AMEE::Connection.new(server, username, password)
7
+ # Authenticate now to get it out of the way and to check settings
8
+ $amee.authenticate
9
+ end
10
+
4
11
  def self.included(base)
5
12
  base.extend ClassMethods
6
13
  end
data/lib/amee/version.rb CHANGED
@@ -3,7 +3,7 @@ module AMEE
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 2
5
5
  MINOR = 0
6
- TINY = 16
6
+ TINY = 18
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
9
9
 
data/rails/init.rb CHANGED
@@ -7,9 +7,7 @@ if File.exist?(amee_config)
7
7
  # Load config
8
8
  $AMEE_CONFIG = YAML.load_file(amee_config)[RAILS_ENV]
9
9
  # Create a global AMEE connection that we can use from anywhere in this app
10
- $amee = AMEE::Connection.new($AMEE_CONFIG['server'], $AMEE_CONFIG['username'], $AMEE_CONFIG['password'])
11
- # Authenticate now to get it out of the way and to check settings
12
- $amee.authenticate
10
+ AMEE::Rails.establish_connection($AMEE_CONFIG['server'], $AMEE_CONFIG['username'], $AMEE_CONFIG['password'])
13
11
  else
14
12
  # Create an example AMEE config file and save it to config/amee.yml
15
13
  example_config = {}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Floppy-amee
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.17
4
+ version: 2.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Smith
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-12 00:00:00 -07:00
12
+ date: 2009-07-24 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency