fluidinfo 0.3.0 → 0.3.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/VERSION +1 -1
- data/fluidinfo.gemspec +3 -3
- data/lib/fluidinfo.rb +56 -43
- data/test/test_fluidinfo.rb +35 -1
- metadata +12 -14
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/fluidinfo.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fluidinfo}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Eric Seidel"]
|
12
|
-
s.date = %q{2011-03
|
12
|
+
s.date = %q{2011-04-03}
|
13
13
|
s.description = %q{This gem provides a simple interface to fluidinfo, built on top of the rest-client gem.}
|
14
14
|
s.email = %q{gridaphobe@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.homepage = %q{http://github.com/gridaphobe/fluidinfo.rb}
|
33
33
|
s.licenses = ["MIT"]
|
34
34
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = %q{1.
|
35
|
+
s.rubygems_version = %q{1.7.1}
|
36
36
|
s.summary = %q{Provides a simple interface to fluidinfo}
|
37
37
|
s.test_files = [
|
38
38
|
"test/helper.rb",
|
data/lib/fluidinfo.rb
CHANGED
@@ -5,16 +5,18 @@ require "base64"
|
|
5
5
|
require "set"
|
6
6
|
|
7
7
|
module Fluidinfo
|
8
|
-
ITERABLE_TYPES
|
8
|
+
ITERABLE_TYPES = Set.new [Array, Hash]
|
9
9
|
SERIALIZABLE_TYPES = Set.new [NilClass, String, Fixnum, Float, Symbol,
|
10
|
-
|
10
|
+
TrueClass, FalseClass]
|
11
|
+
JSON_TYPES = Set.new ["application/json",
|
12
|
+
"application/vnd.fluiddb.value+json"]
|
11
13
|
|
12
14
|
class Client
|
13
15
|
# The main fluidinfo instance.
|
14
16
|
@@MAIN = 'https://fluiddb.fluidinfo.com'
|
15
17
|
# The sandbox instance, test your code here.
|
16
18
|
@@SANDBOX = 'https://sandbox.fluidinfo.com'
|
17
|
-
|
19
|
+
|
18
20
|
def initialize(instance=:main)
|
19
21
|
if instance == :sandbox
|
20
22
|
@instance = @@SANDBOX
|
@@ -44,7 +46,11 @@ module Fluidinfo
|
|
44
46
|
def get(path, options={})
|
45
47
|
url = build_url path, options
|
46
48
|
response = RestClient.get url, @headers
|
47
|
-
|
49
|
+
if JSON_TYPES.include? response.headers[:content_type]
|
50
|
+
JSON.parse response
|
51
|
+
else
|
52
|
+
response
|
53
|
+
end
|
48
54
|
end
|
49
55
|
|
50
56
|
##
|
@@ -80,7 +86,8 @@ module Fluidinfo
|
|
80
86
|
def put(path, options={})
|
81
87
|
url = build_url path, options
|
82
88
|
payload = build_payload options
|
83
|
-
headers = @headers.merge
|
89
|
+
headers = @headers.merge(:content_type => payload[:mime],
|
90
|
+
:content_length => payload[:size])
|
84
91
|
RestClient.put url, payload[:body], headers
|
85
92
|
end
|
86
93
|
|
@@ -95,53 +102,59 @@ module Fluidinfo
|
|
95
102
|
# nothing returned in response body for DELETE
|
96
103
|
RestClient.delete url, @headers
|
97
104
|
end
|
98
|
-
|
105
|
+
|
99
106
|
private
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end
|
112
|
-
else
|
113
|
-
arr << "#{key}=#{val}"
|
107
|
+
##
|
108
|
+
# Build a url from the given path and url args
|
109
|
+
def build_url(path, options={})
|
110
|
+
opts = options.reject do |key, val|
|
111
|
+
[:body, :mime].include? key
|
112
|
+
end
|
113
|
+
args = opts.inject([]) do |arr, (key, val)|
|
114
|
+
if key == :tags
|
115
|
+
# dealing with tag list
|
116
|
+
val.each do |tag|
|
117
|
+
arr << "tag=#{tag}"
|
114
118
|
end
|
115
|
-
arr
|
116
|
-
end.join('&')
|
117
|
-
if args != ''
|
118
|
-
URI.escape "#{@instance}#{path}?#{args}"
|
119
119
|
else
|
120
|
-
"#{
|
120
|
+
arr << "#{key}=#{val}"
|
121
121
|
end
|
122
|
+
arr
|
123
|
+
end.join('&')
|
124
|
+
if args != ''
|
125
|
+
URI.escape "#{@instance}#{path}?#{args}"
|
126
|
+
else
|
127
|
+
"#{@instance}#{path}"
|
122
128
|
end
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
payload[:
|
134
|
-
payload
|
135
|
-
elsif SERIALIZABLE_TYPES.include? payload[:body].class
|
136
|
-
payload[:body] = JSON.dump payload[:body]
|
137
|
-
payload[:mime] = "application/vnd.fluiddb.value+json"
|
138
|
-
payload
|
129
|
+
end
|
130
|
+
|
131
|
+
##
|
132
|
+
# Build the payload from the options hash
|
133
|
+
def build_payload(options)
|
134
|
+
payload = options.reject {|k,v| !([:body, :mime].include? k)}
|
135
|
+
if payload[:mime]
|
136
|
+
# user set mime-type, let them deal with it :)
|
137
|
+
# fix for ruby 1.8
|
138
|
+
if payload[:body].is_a? File
|
139
|
+
payload[:size] = payload[:body].path.size
|
139
140
|
else
|
140
|
-
|
141
|
+
payload[:size] = payload[:body].size
|
141
142
|
end
|
143
|
+
payload
|
144
|
+
elsif ITERABLE_TYPES.include? payload[:body].class
|
145
|
+
payload[:body] = JSON.dump payload[:body]
|
146
|
+
payload[:mime] = "application/json"
|
147
|
+
payload
|
148
|
+
elsif SERIALIZABLE_TYPES.include? payload[:body].class
|
149
|
+
payload[:body] = JSON.dump payload[:body]
|
150
|
+
payload[:mime] = "application/vnd.fluiddb.value+json"
|
151
|
+
payload
|
152
|
+
else
|
153
|
+
raise TypeError, "You must supply the mime-type"
|
142
154
|
end
|
155
|
+
end
|
143
156
|
end
|
144
|
-
|
157
|
+
|
145
158
|
def self.version
|
146
159
|
# This was borrowed from the rest-client gem :)
|
147
160
|
version_path = File.dirname(__FILE__) + "/../VERSION"
|
data/test/test_fluidinfo.rb
CHANGED
@@ -123,7 +123,7 @@ class FluidinfoTest < Test::Unit::TestCase
|
|
123
123
|
end
|
124
124
|
|
125
125
|
context "/tags" do
|
126
|
-
should "update tag values" do
|
126
|
+
should "update primitive tag values" do
|
127
127
|
new_ns = UUIDTools::UUID.random_create
|
128
128
|
ns_body = {
|
129
129
|
'description' => 'a test namespace',
|
@@ -154,6 +154,40 @@ class FluidinfoTest < Test::Unit::TestCase
|
|
154
154
|
@fluid.delete "/tags/test/#{new_ns}/#{new_tag}"
|
155
155
|
@fluid.delete "/namespaces/test/#{new_ns}"
|
156
156
|
end
|
157
|
+
|
158
|
+
should "update opaque tag values" do
|
159
|
+
new_ns = UUIDTools::UUID.random_create
|
160
|
+
ns_body = {
|
161
|
+
'description' => 'a test namespace',
|
162
|
+
'name' => new_ns
|
163
|
+
}
|
164
|
+
resp = @fluid.post '/namespaces/test', :body => ns_body
|
165
|
+
assert_not_nil resp["id"]
|
166
|
+
ns_id = resp["id"] # for later use
|
167
|
+
|
168
|
+
new_tag = UUIDTools::UUID.random_create
|
169
|
+
tag_body = {
|
170
|
+
'description' => 'a test tag',
|
171
|
+
'name' => new_tag,
|
172
|
+
'indexed' => false
|
173
|
+
}
|
174
|
+
resp = @fluid.post "/tags/test/#{new_ns}", :body => tag_body
|
175
|
+
file = File.new(__FILE__)
|
176
|
+
path = "/objects/#{ns_id}/test/#{new_ns}/#{new_tag}"
|
177
|
+
resp = @fluid.put path, :body => file, :mime => "text/ruby"
|
178
|
+
assert_equal File.new(__FILE__).read, @fluid.get(path)
|
179
|
+
|
180
|
+
# now cleanup
|
181
|
+
@fluid.delete "/tags/test/#{new_ns}/#{new_tag}"
|
182
|
+
@fluid.delete "/namespaces/test/#{new_ns}"
|
183
|
+
end
|
184
|
+
|
185
|
+
should "raise TypeError on malformed request" do
|
186
|
+
file = File.new(__FILE__)
|
187
|
+
assert_raise TypeError do
|
188
|
+
@fluid.put("/objects", :body => file)
|
189
|
+
end
|
190
|
+
end
|
157
191
|
end
|
158
192
|
end
|
159
193
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluidinfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eric Seidel
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03
|
19
|
-
default_executable:
|
18
|
+
date: 2011-04-03 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
@@ -30,8 +29,8 @@ dependencies:
|
|
30
29
|
- 6
|
31
30
|
- 1
|
32
31
|
version: 1.6.1
|
33
|
-
name: rest-client
|
34
32
|
version_requirements: *id001
|
33
|
+
name: rest-client
|
35
34
|
prerelease: false
|
36
35
|
type: :runtime
|
37
36
|
- !ruby/object:Gem::Dependency
|
@@ -46,8 +45,8 @@ dependencies:
|
|
46
45
|
- 8
|
47
46
|
- 2
|
48
47
|
version: 0.8.2
|
49
|
-
name: yajl-ruby
|
50
48
|
version_requirements: *id002
|
49
|
+
name: yajl-ruby
|
51
50
|
prerelease: false
|
52
51
|
type: :runtime
|
53
52
|
- !ruby/object:Gem::Dependency
|
@@ -60,8 +59,8 @@ dependencies:
|
|
60
59
|
segments:
|
61
60
|
- 0
|
62
61
|
version: "0"
|
63
|
-
name: shoulda
|
64
62
|
version_requirements: *id003
|
63
|
+
name: shoulda
|
65
64
|
prerelease: false
|
66
65
|
type: :development
|
67
66
|
- !ruby/object:Gem::Dependency
|
@@ -76,8 +75,8 @@ dependencies:
|
|
76
75
|
- 0
|
77
76
|
- 0
|
78
77
|
version: 1.0.0
|
79
|
-
name: bundler
|
80
78
|
version_requirements: *id004
|
79
|
+
name: bundler
|
81
80
|
prerelease: false
|
82
81
|
type: :development
|
83
82
|
- !ruby/object:Gem::Dependency
|
@@ -92,8 +91,8 @@ dependencies:
|
|
92
91
|
- 5
|
93
92
|
- 2
|
94
93
|
version: 1.5.2
|
95
|
-
name: jeweler
|
96
94
|
version_requirements: *id005
|
95
|
+
name: jeweler
|
97
96
|
prerelease: false
|
98
97
|
type: :development
|
99
98
|
- !ruby/object:Gem::Dependency
|
@@ -106,8 +105,8 @@ dependencies:
|
|
106
105
|
segments:
|
107
106
|
- 0
|
108
107
|
version: "0"
|
109
|
-
name: rcov
|
110
108
|
version_requirements: *id006
|
109
|
+
name: rcov
|
111
110
|
prerelease: false
|
112
111
|
type: :development
|
113
112
|
- !ruby/object:Gem::Dependency
|
@@ -122,8 +121,8 @@ dependencies:
|
|
122
121
|
- 1
|
123
122
|
- 2
|
124
123
|
version: 2.1.2
|
125
|
-
name: uuidtools
|
126
124
|
version_requirements: *id007
|
125
|
+
name: uuidtools
|
127
126
|
prerelease: false
|
128
127
|
type: :development
|
129
128
|
description: This gem provides a simple interface to fluidinfo, built on top of the rest-client gem.
|
@@ -147,7 +146,6 @@ files:
|
|
147
146
|
- lib/fluidinfo.rb
|
148
147
|
- test/helper.rb
|
149
148
|
- test/test_fluidinfo.rb
|
150
|
-
has_rdoc: true
|
151
149
|
homepage: http://github.com/gridaphobe/fluidinfo.rb
|
152
150
|
licenses:
|
153
151
|
- MIT
|
@@ -177,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
175
|
requirements: []
|
178
176
|
|
179
177
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.
|
178
|
+
rubygems_version: 1.7.1
|
181
179
|
signing_key:
|
182
180
|
specification_version: 3
|
183
181
|
summary: Provides a simple interface to fluidinfo
|