Floppy-amee 0.1.5 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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