directed-edge 0.1.1 → 0.1.2
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/VERSION +1 -1
- data/directed-edge.gemspec +2 -2
- data/lib/directed_edge.rb +49 -39
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/directed-edge.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{directed-edge}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Directed Edge"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-04-06}
|
13
13
|
s.description = %q{Bindings for the Directed Edge webservices API}
|
14
14
|
s.email = %q{info@directededge.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/directed_edge.rb
CHANGED
@@ -26,40 +26,6 @@ require 'rest_client'
|
|
26
26
|
require 'rexml/document'
|
27
27
|
require 'cgi'
|
28
28
|
|
29
|
-
class Hash
|
30
|
-
|
31
|
-
# An extension to normalize tokens and strings of the form foo_bar to strings
|
32
|
-
# of fooBar as expected by the REST API.
|
33
|
-
|
34
|
-
def normalize!
|
35
|
-
each do |key, value|
|
36
|
-
if !key.is_a?(String)
|
37
|
-
delete(key)
|
38
|
-
key = key.to_s
|
39
|
-
store(key, value.to_s)
|
40
|
-
end
|
41
|
-
if key.match(/_\w/)
|
42
|
-
delete(key)
|
43
|
-
store(key.gsub(/_\w/) { |s| s[1, 1].upcase }, value.to_s)
|
44
|
-
elsif !value.is_a?(String)
|
45
|
-
store(key, value.to_s)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
self
|
49
|
-
end
|
50
|
-
|
51
|
-
def []=(key, value)
|
52
|
-
store(key, value)
|
53
|
-
@insert_order = [] if @insert_order.nil?
|
54
|
-
@insert_order.delete(key) if @insert_order.include?(key)
|
55
|
-
@insert_order.push(key)
|
56
|
-
end
|
57
|
-
|
58
|
-
def insert_order_each
|
59
|
-
@insert_order.each { |key| yield key, fetch(key) } unless @insert_order.nil?
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
29
|
# The DirectedEdge module contains three classes:
|
64
30
|
#
|
65
31
|
# - Database - encapsulation of connection a database hosted by Directed Edge.
|
@@ -68,11 +34,34 @@ end
|
|
68
34
|
|
69
35
|
module DirectedEdge
|
70
36
|
|
37
|
+
# A hash subclass that tracks the insert order, which is useful when returning
|
38
|
+
# a set of results that include full properties.
|
39
|
+
|
40
|
+
class InsertOrderHash < Hash
|
41
|
+
|
42
|
+
# Overridden assignment to track insert order
|
43
|
+
|
44
|
+
def []=(key, value)
|
45
|
+
store(key, value)
|
46
|
+
@insert_order = [] if @insert_order.nil?
|
47
|
+
@insert_order.delete(key) if @insert_order.include?(key)
|
48
|
+
@insert_order.push(key)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Provides an iterator that uses the hash's insert order
|
52
|
+
|
53
|
+
def insert_order_each
|
54
|
+
@insert_order.each { |key| yield key, fetch(key) } unless @insert_order.nil?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
71
58
|
# Base class used for Database and Item that has some basic resource
|
72
59
|
# grabbing functionality.
|
73
60
|
|
74
61
|
class Resource
|
75
62
|
|
63
|
+
private
|
64
|
+
|
76
65
|
# Reads an item from the database and puts it into an XML document.
|
77
66
|
|
78
67
|
def read_document(method='', params={})
|
@@ -95,7 +84,7 @@ module DirectedEdge
|
|
95
84
|
# 'item1' => { 'foo' => 'bar' }
|
96
85
|
|
97
86
|
def property_hash_from_document(document, element)
|
98
|
-
values =
|
87
|
+
values = InsertOrderHash.new
|
99
88
|
document.elements.each("//#{element}") do |e|
|
100
89
|
values[e.text] = {}
|
101
90
|
e.attributes.each_attribute { |a| values[e.text][a.name] = a.value }
|
@@ -122,6 +111,27 @@ module DirectedEdge
|
|
122
111
|
end
|
123
112
|
values
|
124
113
|
end
|
114
|
+
|
115
|
+
# Normalizes the parameters in an argument hash to a standard form
|
116
|
+
# so that they can be passed off to the web services API -- e.g.
|
117
|
+
# :foo_bar to 'fooBar'
|
118
|
+
|
119
|
+
def normalize_params(hash)
|
120
|
+
hash.each do |key, value|
|
121
|
+
if !key.is_a?(String)
|
122
|
+
hash.delete(key)
|
123
|
+
key = key.to_s
|
124
|
+
hash.store(key, value.to_s)
|
125
|
+
end
|
126
|
+
if key.match(/_\w/)
|
127
|
+
hash.delete(key)
|
128
|
+
hash.store(key.gsub(/_\w/) { |s| s[1, 1].upcase }, value.to_s)
|
129
|
+
elsif !value.is_a?(String)
|
130
|
+
hash.store(key, value.to_s)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
hash
|
134
|
+
end
|
125
135
|
end
|
126
136
|
|
127
137
|
# A Database is an encapsulation of a database being accessed via the Directed
|
@@ -175,12 +185,12 @@ module DirectedEdge
|
|
175
185
|
|
176
186
|
def group_related(items=Set.new, tags=Set.new, params={})
|
177
187
|
if !items.is_a?(Array) || items.size < 1
|
178
|
-
return (params['includeProperties'] == 'true') ?
|
188
|
+
return (params['includeProperties'] == 'true') ? InsertOrderHash.new : []
|
179
189
|
end
|
180
190
|
params['items'] = items.to_a.join(',')
|
181
191
|
params['tags'] = tags.to_a.join(',')
|
182
192
|
params['union'] = true
|
183
|
-
params
|
193
|
+
params = normalize_params(params)
|
184
194
|
if params['includeProperties'] == 'true'
|
185
195
|
property_hash_from_document(read_document('related', params), 'related')
|
186
196
|
else
|
@@ -538,7 +548,7 @@ module DirectedEdge
|
|
538
548
|
# This will not reflect any unsaved changes to items.
|
539
549
|
|
540
550
|
def related(tags=Set.new, params={})
|
541
|
-
params
|
551
|
+
params = normalize_params(params)
|
542
552
|
params['tags'] = tags.to_a.join(',')
|
543
553
|
if params['includeProperties'] == 'true'
|
544
554
|
property_hash_from_document(read_document('related', params), 'related')
|
@@ -559,7 +569,7 @@ module DirectedEdge
|
|
559
569
|
# This will not reflect any unsaved changes to items.
|
560
570
|
|
561
571
|
def recommended(tags=Set.new, params={})
|
562
|
-
params
|
572
|
+
params = normalize_params(params)
|
563
573
|
params['tags'] = tags.to_a.join(',')
|
564
574
|
params.key?('excludeLinked') || params['excludeLinked'] = 'true'
|
565
575
|
if params['includeProperties'] == 'true'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: directed-edge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Directed Edge
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-04-06 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|