Floppy-amee 0.1.5 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -23,11 +23,7 @@ examples/view_data_*.rb for simple usage examples. You can also get the list
23
23
  of available Profiles. See examples/list_profiles.rb for details.
24
24
 
25
25
  The gem will use the AMEE JSON API if the JSON gem is installed on the local
26
- system. Otherwise the XML API will be used. Currently, only DataCategories and
27
- Profile lists are supported with JSON, so you can disable JSON support by setting
28
- the fourth argument to AMEE::Connection.new() to false:
29
-
30
- > AMEE::Connection.new($srv, $user, $pass, false) # last arg disables JSON support
26
+ system. Otherwise the XML API will be used.
31
27
 
32
28
  == INTERACTIVE SHELL
33
29
 
@@ -17,7 +17,7 @@ OptionParser.new do |opts|
17
17
  end.parse!
18
18
 
19
19
  # Connect
20
- connection = AMEE::Connection.new(options[:server], options[:username], options[:password], false) # Disable JSON support for now
20
+ connection = AMEE::Connection.new(options[:server], options[:username], options[:password])
21
21
 
22
22
  # For each path in arg list, show details
23
23
  ARGV.each do |path|
data/lib/amee.rb CHANGED
@@ -7,6 +7,12 @@ rescue LoadError
7
7
  nil
8
8
  end
9
9
 
10
+ class String
11
+ def is_json?
12
+ slice(0,1) == '{'
13
+ end
14
+ end
15
+
10
16
  require 'amee/version'
11
17
  require 'amee/exceptions'
12
18
  require 'amee/connection'
@@ -14,4 +20,4 @@ require 'amee/object'
14
20
  require 'amee/data_category'
15
21
  require 'amee/data_item'
16
22
  require 'amee/data_item_value'
17
- require 'amee/profile'
23
+ require 'amee/profile'
@@ -13,71 +13,84 @@ module AMEE
13
13
  attr_reader :children
14
14
  attr_reader :items
15
15
 
16
+ def self.from_json(json)
17
+ # Parse json
18
+ doc = JSON.parse(json)
19
+ data = {}
20
+ data[:uid] = doc['dataCategory']['uid']
21
+ data[:created] = DateTime.parse(doc['dataCategory']['created'])
22
+ data[:modified] = DateTime.parse(doc['dataCategory']['modified'])
23
+ data[:name] = doc['dataCategory']['name']
24
+ data[:path] = doc['path']
25
+ data[:children] = []
26
+ doc['children']['dataCategories'].each do |child|
27
+ category_data = {}
28
+ category_data[:name] = child['name']
29
+ category_data[:path] = child['path']
30
+ category_data[:uid] = child['uid']
31
+ data[:children] << category_data
32
+ end
33
+ data[:items] = []
34
+ if doc['children']['dataItems']['rows']
35
+ doc['children']['dataItems']['rows'].each do |item|
36
+ item_data = {}
37
+ item_data[:label] = item['label']
38
+ item_data[:path] = item['path']
39
+ item_data[:uid] = item['uid']
40
+ data[:items] << item_data
41
+ end
42
+ end
43
+ # Create object
44
+ Category.new(data)
45
+ rescue
46
+ raise AMEE::BadData.new("Couldn't load DataCategory from JSON data. Check that your URL is correct.")
47
+ end
48
+
49
+ def self.from_xml(xml)
50
+ # Parse XML
51
+ doc = REXML::Document.new(xml)
52
+ data = {}
53
+ data[:uid] = REXML::XPath.first(doc, "/Resources/DataCategoryResource/DataCategory/@uid").to_s
54
+ data[:created] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataCategoryResource/DataCategory/@created").to_s)
55
+ data[:modified] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataCategoryResource/DataCategory/@modified").to_s)
56
+ data[:name] = REXML::XPath.first(doc, '/Resources/DataCategoryResource/DataCategory/Name').text
57
+ data[:path] = REXML::XPath.first(doc, '/Resources/DataCategoryResource/Path').text || ""
58
+ data[:children] = []
59
+ REXML::XPath.each(doc, '/Resources/DataCategoryResource/Children/DataCategories/DataCategory') do |child|
60
+ category_data = {}
61
+ category_data[:name] = child.elements['Name'].text
62
+ category_data[:path] = child.elements['Path'].text
63
+ category_data[:uid] = child.attributes['uid'].to_s
64
+ data[:children] << category_data
65
+ end
66
+ data[:items] = []
67
+ REXML::XPath.each(doc, '/Resources/DataCategoryResource/Children/DataItems/DataItem') do |item|
68
+ item_data = {}
69
+ item_data[:label] = item.elements['label'].text
70
+ item_data[:path] = item.elements['path'].text
71
+ item_data[:uid] = item.attributes['uid'].to_s
72
+ data[:items] << item_data
73
+ end
74
+ # Create object
75
+ Category.new(data)
76
+ rescue
77
+ raise AMEE::BadData.new("Couldn't load DataCategory from XML data. Check that your URL is correct.")
78
+ end
79
+
16
80
  def self.get(connection, path)
17
81
  # Load data from path
18
82
  response = connection.get(path)
19
83
  # Parse data from response
20
- profiles = []
21
- if response.slice(0,1) == '{'
22
- # Read JSON
23
- doc = JSON.parse(response)
24
- data = {}
25
- data[:uid] = doc['dataCategory']['uid']
26
- data[:created] = DateTime.parse(doc['dataCategory']['created'])
27
- data[:modified] = DateTime.parse(doc['dataCategory']['modified'])
28
- data[:name] = doc['dataCategory']['name']
29
- data[:path] = doc['path']
30
- data[:children] = []
31
- doc['children']['dataCategories'].each do |child|
32
- category_data = {}
33
- category_data[:name] = child['name']
34
- category_data[:path] = child['path']
35
- category_data[:uid] = child['uid']
36
- data[:children] << category_data
37
- end
38
- data[:items] = []
39
- if doc['children']['dataItems']['rows']
40
- doc['children']['dataItems']['rows'].each do |item|
41
- item_data = {}
42
- item_data[:label] = item['label']
43
- item_data[:path] = item['path']
44
- item_data[:uid] = item['uid']
45
- data[:items] << item_data
46
- end
47
- end
84
+ if response.is_json?
85
+ cat = Category.from_json(response)
48
86
  else
49
- # Read XML
50
- doc = REXML::Document.new(response)
51
- data = {}
52
- data[:uid] = REXML::XPath.first(doc, "/Resources/DataCategoryResource/DataCategory/@uid").to_s
53
- data[:created] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataCategoryResource/DataCategory/@created").to_s)
54
- data[:modified] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataCategoryResource/DataCategory/@modified").to_s)
55
- data[:name] = REXML::XPath.first(doc, '/Resources/DataCategoryResource/DataCategory/Name').text
56
- data[:path] = REXML::XPath.first(doc, '/Resources/DataCategoryResource/Path').text || ""
57
- data[:children] = []
58
- REXML::XPath.each(doc, '/Resources/DataCategoryResource/Children/DataCategories/DataCategory') do |child|
59
- category_data = {}
60
- category_data[:name] = child.elements['Name'].text
61
- category_data[:path] = child.elements['Path'].text
62
- category_data[:uid] = child.attributes['uid'].to_s
63
- data[:children] << category_data
64
- end
65
- data[:items] = []
66
- REXML::XPath.each(doc, '/Resources/DataCategoryResource/Children/DataItems/DataItem') do |item|
67
- item_data = {}
68
- item_data[:label] = item.elements['label'].text
69
- item_data[:path] = item.elements['path'].text
70
- item_data[:uid] = item.attributes['uid'].to_s
71
- data[:items] << item_data
72
- end
87
+ cat = Category.from_xml(response)
73
88
  end
74
- # Create category object
75
- cat = Category.new(data)
76
89
  # Store connection in object for future use
77
90
  cat.connection = connection
78
91
  # Done
79
92
  return cat
80
- rescue
93
+ rescue
81
94
  raise AMEE::BadData.new("Couldn't load DataCategory. Check that your URL is correct.")
82
95
  end
83
96
 
@@ -13,11 +13,43 @@ module AMEE
13
13
  attr_reader :choices
14
14
  attr_reader :label
15
15
 
16
- def self.get(connection, path)
17
- # Load data from path
18
- response = connection.get(path)
16
+ def self.from_json(json)
17
+ # Read JSON
18
+ doc = JSON.parse(json)
19
+ data = {}
20
+ data[:uid] = doc['dataItem']['uid']
21
+ data[:created] = DateTime.parse(doc['dataItem']['created'])
22
+ data[:modified] = DateTime.parse(doc['dataItem']['modified'])
23
+ data[:name] = doc['dataItem']['name']
24
+ data[:path] = doc['path']
25
+ data[:label] = doc['dataItem']['label']
26
+ # Get values
27
+ data[:values] = []
28
+ doc['dataItem']['itemValues'].each do |value|
29
+ value_data = {}
30
+ value_data[:name] = value['name']
31
+ value_data[:path] = value['path']
32
+ value_data[:value] = value['value']
33
+ value_data[:uid] = value['uid']
34
+ data[:values] << value_data
35
+ end
36
+ # Get choices
37
+ data[:choices] = []
38
+ doc['userValueChoices']['choices'].each do |choice|
39
+ choice_data = {}
40
+ choice_data[:name] = choice['name']
41
+ choice_data[:value] = choice['value']
42
+ data[:choices] << choice_data
43
+ end
44
+ # Create object
45
+ Item.new(data)
46
+ rescue
47
+ raise AMEE::BadData.new("Couldn't load DataItem from JSON. Check that your URL is correct.")
48
+ end
49
+
50
+ def self.from_xml(xml)
19
51
  # Parse data from response into hash
20
- doc = REXML::Document.new(response)
52
+ doc = REXML::Document.new(xml)
21
53
  data = {}
22
54
  data[:uid] = REXML::XPath.first(doc, "/Resources/DataItemResource/DataItem/@uid").to_s
23
55
  data[:created] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataItemResource/DataItem/@created").to_s)
@@ -40,11 +72,25 @@ module AMEE
40
72
  REXML::XPath.each(doc, '/Resources/DataItemResource/Choices/Choices/Choice') do |choice|
41
73
  choice_data = {}
42
74
  choice_data[:name] = choice.elements['Name'].text
43
- choice_data[:value] = choice.elements['Value'].text
75
+ choice_data[:value] = choice.elements['Value'].text || ""
44
76
  data[:choices] << choice_data
45
77
  end
46
- # Create item object
47
- item = Item.new(data)
78
+ # Create object
79
+ Item.new(data)
80
+ rescue
81
+ raise AMEE::BadData.new("Couldn't load DataItem from XML. Check that your URL is correct.")
82
+ end
83
+
84
+
85
+ def self.get(connection, path)
86
+ # Load data from path
87
+ response = connection.get(path)
88
+ # Parse data from response
89
+ if response.is_json?
90
+ item = Item.from_json(response)
91
+ else
92
+ item = Item.from_xml(response)
93
+ end
48
94
  # Store connection in object for future use
49
95
  item.connection = connection
50
96
  # Done
@@ -29,11 +29,26 @@ module AMEE
29
29
  @from_data
30
30
  end
31
31
 
32
- def self.get(connection, path)
33
- # Load data from path
34
- response = connection.get(path)
35
- # Parse data from response into hash
36
- doc = REXML::Document.new(response)
32
+ def self.from_json(json, path)
33
+ # Read JSON
34
+ doc = JSON.parse(json)['itemValue']
35
+ data = {}
36
+ data[:uid] = doc['uid']
37
+ data[:created] = DateTime.parse(doc['created'])
38
+ data[:modified] = DateTime.parse(doc['modified'])
39
+ data[:name] = doc['name']
40
+ data[:path] = path
41
+ data[:value] = doc['value']
42
+ data[:type] = doc['itemValueDefinition']['valueDefinition']['valueType']
43
+ # Create object
44
+ ItemValue.new(data)
45
+ rescue
46
+ raise AMEE::BadData.new("Couldn't load DataItemValue from JSON. Check that your URL is correct.")
47
+ end
48
+
49
+ def self.from_xml(xml, path)
50
+ # Read XML
51
+ doc = REXML::Document.new(xml)
37
52
  data = {}
38
53
  data[:uid] = REXML::XPath.first(doc, "/Resources/DataItemValueResource/ItemValue/@uid").to_s
39
54
  data[:created] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataItemValueResource/ItemValue/@Created").to_s)
@@ -44,12 +59,26 @@ module AMEE
44
59
  data[:type] = REXML::XPath.first(doc, '/Resources/DataItemValueResource/ItemValue/ItemValueDefinition/ValueDefinition/ValueType').text
45
60
  data[:from_profile] = REXML::XPath.first(doc, '/Resources/DataItemValueResource/ItemValue/ItemValueDefinition/FromProfile').text == "true" ? true : false
46
61
  data[:from_data] = REXML::XPath.first(doc, '/Resources/DataItemValueResource/ItemValue/ItemValueDefinition/FromData').text == "true" ? true : false
47
- # Create item object
48
- item = ItemValue.new(data)
62
+ # Create object
63
+ ItemValue.new(data)
64
+ rescue
65
+ raise AMEE::BadData.new("Couldn't load DataItemValue from XML. Check that your URL is correct.")
66
+ end
67
+
68
+ def self.get(connection, path)
69
+ # Load data from path
70
+ response = connection.get(path)
71
+ # Parse data from response
72
+ data = {}
73
+ if response.is_json?
74
+ value = ItemValue.from_json(response, path)
75
+ else
76
+ value = ItemValue.from_xml(response, path)
77
+ end
49
78
  # Store connection in object for future use
50
- item.connection = connection
79
+ value.connection = connection
51
80
  # Done
52
- return item
81
+ return value
53
82
  rescue
54
83
  raise AMEE::BadData.new("Couldn't load DataItemValue. Check that your URL is correct.")
55
84
  end
data/lib/amee/profile.rb CHANGED
@@ -6,7 +6,7 @@ module AMEE
6
6
  response = connection.get('/profiles')
7
7
  # Parse data from response
8
8
  profiles = []
9
- if response.slice(0,1) == '{'
9
+ if response.is_json?
10
10
  # Read JSON
11
11
  doc = JSON.parse(response)
12
12
  doc['profiles'].each do |p|
data/lib/amee/shell.rb CHANGED
@@ -60,7 +60,7 @@ require 'amee'
60
60
  include AMEE::Shell
61
61
 
62
62
  # Set up connection
63
- $connection = AMEE::Connection.new(ENV['AMEE_SERVER'], ENV['AMEE_USERNAME'], ENV['AMEE_PASSWORD'], false) # Disable JSON support for now
63
+ $connection = AMEE::Connection.new(ENV['AMEE_SERVER'], ENV['AMEE_USERNAME'], ENV['AMEE_PASSWORD'])
64
64
 
65
65
  if $connection.valid?
66
66
  # Change to root of data api to get going
data/lib/amee/version.rb CHANGED
@@ -2,8 +2,8 @@ module AMEE
2
2
 
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
- MINOR = 1
6
- TINY = 5
5
+ MINOR = 2
6
+ TINY = 1
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
9
9
 
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: 0.1.5
4
+ version: 0.2.1
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: 2008-07-29 00:00:00 -07:00
12
+ date: 2008-08-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15