fluidinfo 0.2.1 → 0.2.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/Gemfile +4 -2
- data/Gemfile.lock +6 -2
- data/VERSION +1 -1
- data/fluidinfo.gemspec +13 -7
- data/lib/fluidinfo.rb +45 -23
- data/test/test_fluidinfo.rb +65 -0
- metadata +50 -16
data/Gemfile
CHANGED
@@ -2,8 +2,9 @@ source "http://rubygems.org"
|
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
# Example:
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
5
|
-
gem "rest-client"
|
6
|
-
gem "json"
|
5
|
+
gem "rest-client", ">= 1.6.1"
|
6
|
+
gem "json", ">= 1.5.1"
|
7
|
+
gem "crack"
|
7
8
|
|
8
9
|
# Add dependencies to develop your gem here.
|
9
10
|
# Include everything needed to run rake, tests, features, etc.
|
@@ -12,4 +13,5 @@ group :development do
|
|
12
13
|
gem "bundler", "~> 1.0.0"
|
13
14
|
gem "jeweler", "~> 1.5.2"
|
14
15
|
gem "rcov", ">= 0"
|
16
|
+
gem "uuidtools", ">= 2.1.2"
|
15
17
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
crack (0.1.8)
|
4
5
|
git (1.2.5)
|
5
6
|
jeweler (1.5.2)
|
6
7
|
bundler (~> 1.0.0)
|
@@ -13,14 +14,17 @@ GEM
|
|
13
14
|
rest-client (1.6.1)
|
14
15
|
mime-types (>= 1.16)
|
15
16
|
shoulda (2.11.3)
|
17
|
+
uuidtools (2.1.2)
|
16
18
|
|
17
19
|
PLATFORMS
|
18
20
|
ruby
|
19
21
|
|
20
22
|
DEPENDENCIES
|
21
23
|
bundler (~> 1.0.0)
|
24
|
+
crack
|
22
25
|
jeweler (~> 1.5.2)
|
23
|
-
json
|
26
|
+
json (>= 1.5.1)
|
24
27
|
rcov
|
25
|
-
rest-client
|
28
|
+
rest-client (>= 1.6.1)
|
26
29
|
shoulda
|
30
|
+
uuidtools (>= 2.1.2)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/fluidinfo.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fluidinfo}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
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"]
|
@@ -43,27 +43,33 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.specification_version = 3
|
44
44
|
|
45
45
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
-
s.add_runtime_dependency(%q<rest-client>, [">=
|
47
|
-
s.add_runtime_dependency(%q<json>, [">=
|
46
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 1.6.1"])
|
47
|
+
s.add_runtime_dependency(%q<json>, [">= 1.5.1"])
|
48
|
+
s.add_runtime_dependency(%q<crack>, [">= 0"])
|
48
49
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
49
50
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
50
51
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
51
52
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
53
|
+
s.add_development_dependency(%q<uuidtools>, [">= 2.1.2"])
|
52
54
|
else
|
53
|
-
s.add_dependency(%q<rest-client>, [">=
|
54
|
-
s.add_dependency(%q<json>, [">=
|
55
|
+
s.add_dependency(%q<rest-client>, [">= 1.6.1"])
|
56
|
+
s.add_dependency(%q<json>, [">= 1.5.1"])
|
57
|
+
s.add_dependency(%q<crack>, [">= 0"])
|
55
58
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
56
59
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
57
60
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
58
61
|
s.add_dependency(%q<rcov>, [">= 0"])
|
62
|
+
s.add_dependency(%q<uuidtools>, [">= 2.1.2"])
|
59
63
|
end
|
60
64
|
else
|
61
|
-
s.add_dependency(%q<rest-client>, [">=
|
62
|
-
s.add_dependency(%q<json>, [">=
|
65
|
+
s.add_dependency(%q<rest-client>, [">= 1.6.1"])
|
66
|
+
s.add_dependency(%q<json>, [">= 1.5.1"])
|
67
|
+
s.add_dependency(%q<crack>, [">= 0"])
|
63
68
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
64
69
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
65
70
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
66
71
|
s.add_dependency(%q<rcov>, [">= 0"])
|
72
|
+
s.add_dependency(%q<uuidtools>, [">= 2.1.2"])
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
data/lib/fluidinfo.rb
CHANGED
@@ -2,6 +2,7 @@ require "rest-client"
|
|
2
2
|
require "uri"
|
3
3
|
require "json"
|
4
4
|
require "base64"
|
5
|
+
require "crack/json"
|
5
6
|
|
6
7
|
module Fluidinfo
|
7
8
|
class Client
|
@@ -10,27 +11,32 @@ module Fluidinfo
|
|
10
11
|
# The sandbox instance, test your code here.
|
11
12
|
@@SANDBOX = 'https://sandbox.fluidinfo.com'
|
12
13
|
|
13
|
-
def initialize(
|
14
|
-
if
|
14
|
+
def initialize(instance=:main)
|
15
|
+
if instance == :sandbox
|
15
16
|
@instance = @@SANDBOX
|
16
17
|
else
|
17
18
|
@instance = @@MAIN
|
18
19
|
end
|
19
20
|
@headers = {
|
20
|
-
|
21
|
+
:accept => "*/*"
|
21
22
|
}
|
22
23
|
end
|
23
24
|
|
24
25
|
def login(user, pass)
|
25
26
|
auth = "Basic " + (Base64.encode64 "#{user}:#{pass}").strip
|
26
|
-
@headers[
|
27
|
+
@headers[:authorization] = auth
|
27
28
|
end
|
28
29
|
|
29
30
|
def logout
|
30
|
-
@headers.delete
|
31
|
+
@headers.delete :authorization
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
+
##
|
35
|
+
# Call GET on one of the APIs
|
36
|
+
#
|
37
|
+
# +options+ contains URI arguments that will be appended to +path+
|
38
|
+
# consult the {Fluidinfo API documentation}[api.fluidinfo.com] for a list of
|
39
|
+
# appropriate options
|
34
40
|
def get(path, options={})
|
35
41
|
path = @instance + path
|
36
42
|
args = ''
|
@@ -50,36 +56,42 @@ module Fluidinfo
|
|
50
56
|
JSON.load response.to_str
|
51
57
|
rescue JSON::ParserError
|
52
58
|
# this should mean that fluidinfo returned a non-hash/array primitive
|
53
|
-
|
59
|
+
Crack::JSON.parse response.to_str
|
54
60
|
end
|
55
61
|
end
|
56
62
|
|
63
|
+
##
|
64
|
+
# Call HEAD on the /about or /object API to test for the existence
|
65
|
+
# of a tag
|
57
66
|
def head(path)
|
58
67
|
path = @instance + path
|
59
68
|
RestClient.head path
|
60
69
|
end
|
61
|
-
|
70
|
+
|
71
|
+
##
|
72
|
+
# Call POST on one of the APIs
|
73
|
+
#
|
74
|
+
# +options[:body]+ contains the request payload. For some API
|
75
|
+
# calls this may be empty.
|
62
76
|
def post(path, options={})
|
63
77
|
path = @instance + path
|
64
78
|
if options[:body]
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
else
|
69
|
-
mime = "application/json"
|
70
|
-
begin
|
71
|
-
body = JSON.dump options[:body]
|
72
|
-
rescue JSON::GeneratorError
|
73
|
-
body = options[:body]
|
74
|
-
end
|
75
|
-
end
|
79
|
+
body = options[:body]
|
80
|
+
mime = "application/json"
|
81
|
+
body = JSON.dump options[:body]
|
76
82
|
headers = @headers.merge :content_type => mime
|
77
83
|
JSON.parse(RestClient.post path, body, headers)
|
78
84
|
else
|
79
85
|
JSON.parse(RestClient.post path, nil)
|
80
86
|
end
|
81
87
|
end
|
82
|
-
|
88
|
+
|
89
|
+
##
|
90
|
+
# Call PUT on one of the APIs
|
91
|
+
#
|
92
|
+
# +options[:body]+ contains the request payload.
|
93
|
+
#
|
94
|
+
# +options[:mime]+ contains the MIME-type unless the payload is JSON-encodable
|
83
95
|
def put(path, options={})
|
84
96
|
path = @instance + path
|
85
97
|
if options[:query]
|
@@ -94,14 +106,24 @@ module Fluidinfo
|
|
94
106
|
begin
|
95
107
|
body = JSON.dump options[:body]
|
96
108
|
rescue JSON::GeneratorError
|
97
|
-
|
109
|
+
if options[:body] == nil
|
110
|
+
body = "null"
|
111
|
+
else
|
112
|
+
body = options[:body].to_s
|
113
|
+
end
|
98
114
|
end
|
99
115
|
end
|
100
116
|
# nothing returned in response body for PUT
|
101
117
|
headers = @headers.merge :content_type => mime
|
102
118
|
RestClient.put path, body, headers
|
103
119
|
end
|
104
|
-
|
120
|
+
|
121
|
+
##
|
122
|
+
# Call DELETE on one of the APIs
|
123
|
+
#
|
124
|
+
# +options+ contains URI arguments that will be appended to +path+
|
125
|
+
# consult the {Fluidinfo API documentation}[api.fluidinfo.com] for a list of
|
126
|
+
# appropriate options
|
105
127
|
def delete(path, options={})
|
106
128
|
path = @instance + path
|
107
129
|
if options[:query]
|
@@ -115,7 +137,7 @@ module Fluidinfo
|
|
115
137
|
end
|
116
138
|
end
|
117
139
|
# nothing returned in response body for DELETE
|
118
|
-
RestClient.delete path
|
140
|
+
RestClient.delete path, @headers
|
119
141
|
end
|
120
142
|
end
|
121
143
|
end
|
data/test/test_fluidinfo.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'uuidtools'
|
2
3
|
|
3
4
|
class FluidinfoTest < Test::Unit::TestCase
|
4
5
|
context "GET" do
|
@@ -73,4 +74,68 @@ class FluidinfoTest < Test::Unit::TestCase
|
|
73
74
|
end
|
74
75
|
end
|
75
76
|
end
|
77
|
+
|
78
|
+
context "POST" do
|
79
|
+
setup do
|
80
|
+
@fluid = Fluidinfo::Client.new :sandbox
|
81
|
+
@fluid.login 'test', 'test'
|
82
|
+
end
|
83
|
+
|
84
|
+
context "/namespaces" do
|
85
|
+
should "create new namespaces" do
|
86
|
+
new_ns = UUIDTools::UUID.random_create
|
87
|
+
body = {
|
88
|
+
'description' => 'a test namespace',
|
89
|
+
'name' => new_ns
|
90
|
+
}
|
91
|
+
resp = @fluid.post "/namespaces/test", :body => body
|
92
|
+
# assert_equal 201, resp.code
|
93
|
+
assert_not_nil resp["id"]
|
94
|
+
|
95
|
+
# now cleanup
|
96
|
+
@fluid.delete "/namespaces/test/#{new_ns}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context "PUT" do
|
102
|
+
setup do
|
103
|
+
@fluid = Fluidinfo::Client.new :sandbox
|
104
|
+
@fluid.login 'test', 'test'
|
105
|
+
end
|
106
|
+
|
107
|
+
context "/tags" do
|
108
|
+
should "update tag values" do
|
109
|
+
new_ns = UUIDTools::UUID.random_create
|
110
|
+
ns_body = {
|
111
|
+
'description' => 'a test namespace',
|
112
|
+
'name' => new_ns
|
113
|
+
}
|
114
|
+
resp = @fluid.post '/namespaces/test', :body => ns_body
|
115
|
+
assert_not_nil resp["id"]
|
116
|
+
ns_id = resp["id"] # for later use
|
117
|
+
|
118
|
+
new_tag = UUIDTools::UUID.random_create
|
119
|
+
tag_body = {
|
120
|
+
'description' => 'a test tag',
|
121
|
+
'name' => new_tag,
|
122
|
+
'indexed' => false
|
123
|
+
}
|
124
|
+
resp = @fluid.post "/tags/test/#{new_ns}", :body => tag_body
|
125
|
+
assert_not_nil resp["id"]
|
126
|
+
path = "/objects/#{ns_id}/test/#{new_ns}/#{new_tag}"
|
127
|
+
# Make sure that all primitive values are properly encoded and
|
128
|
+
# sent to Fluidinfo
|
129
|
+
primitives = [1, 1.1, "foo", true, nil, [1, 2, 3]]
|
130
|
+
primitives.each do |p|
|
131
|
+
resp = @fluid.put path, :body => p
|
132
|
+
assert_equal p, @fluid.get(path)
|
133
|
+
end
|
134
|
+
|
135
|
+
# now cleanup
|
136
|
+
@fluid.delete "/tags/test/#{new_ns}/#{new_tag}"
|
137
|
+
@fluid.delete "/namespaces/test/#{new_ns}"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
76
141
|
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: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eric Seidel
|
@@ -24,10 +24,12 @@ dependencies:
|
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
hash:
|
27
|
+
hash: 13
|
28
28
|
segments:
|
29
|
-
-
|
30
|
-
|
29
|
+
- 1
|
30
|
+
- 6
|
31
|
+
- 1
|
32
|
+
version: 1.6.1
|
31
33
|
name: rest-client
|
32
34
|
version_requirements: *id001
|
33
35
|
prerelease: false
|
@@ -38,10 +40,12 @@ dependencies:
|
|
38
40
|
requirements:
|
39
41
|
- - ">="
|
40
42
|
- !ruby/object:Gem::Version
|
41
|
-
hash:
|
43
|
+
hash: 1
|
42
44
|
segments:
|
43
|
-
-
|
44
|
-
|
45
|
+
- 1
|
46
|
+
- 5
|
47
|
+
- 1
|
48
|
+
version: 1.5.1
|
45
49
|
name: json
|
46
50
|
version_requirements: *id002
|
47
51
|
prerelease: false
|
@@ -56,12 +60,26 @@ dependencies:
|
|
56
60
|
segments:
|
57
61
|
- 0
|
58
62
|
version: "0"
|
59
|
-
name:
|
63
|
+
name: crack
|
60
64
|
version_requirements: *id003
|
61
65
|
prerelease: false
|
62
|
-
type: :
|
66
|
+
type: :runtime
|
63
67
|
- !ruby/object:Gem::Dependency
|
64
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
name: shoulda
|
78
|
+
version_requirements: *id004
|
79
|
+
prerelease: false
|
80
|
+
type: :development
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
65
83
|
none: false
|
66
84
|
requirements:
|
67
85
|
- - ~>
|
@@ -73,11 +91,11 @@ dependencies:
|
|
73
91
|
- 0
|
74
92
|
version: 1.0.0
|
75
93
|
name: bundler
|
76
|
-
version_requirements: *
|
94
|
+
version_requirements: *id005
|
77
95
|
prerelease: false
|
78
96
|
type: :development
|
79
97
|
- !ruby/object:Gem::Dependency
|
80
|
-
requirement: &
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
81
99
|
none: false
|
82
100
|
requirements:
|
83
101
|
- - ~>
|
@@ -89,11 +107,11 @@ dependencies:
|
|
89
107
|
- 2
|
90
108
|
version: 1.5.2
|
91
109
|
name: jeweler
|
92
|
-
version_requirements: *
|
110
|
+
version_requirements: *id006
|
93
111
|
prerelease: false
|
94
112
|
type: :development
|
95
113
|
- !ruby/object:Gem::Dependency
|
96
|
-
requirement: &
|
114
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
97
115
|
none: false
|
98
116
|
requirements:
|
99
117
|
- - ">="
|
@@ -103,7 +121,23 @@ dependencies:
|
|
103
121
|
- 0
|
104
122
|
version: "0"
|
105
123
|
name: rcov
|
106
|
-
version_requirements: *
|
124
|
+
version_requirements: *id007
|
125
|
+
prerelease: false
|
126
|
+
type: :development
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
hash: 15
|
134
|
+
segments:
|
135
|
+
- 2
|
136
|
+
- 1
|
137
|
+
- 2
|
138
|
+
version: 2.1.2
|
139
|
+
name: uuidtools
|
140
|
+
version_requirements: *id008
|
107
141
|
prerelease: false
|
108
142
|
type: :development
|
109
143
|
description: This gem provides a simple interface to fluidinfo, built on top of the rest-client gem.
|