fluidinfo 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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
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.1"
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>, [">= 0"])
47
- s.add_runtime_dependency(%q<json>, [">= 0"])
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>, [">= 0"])
54
- s.add_dependency(%q<json>, [">= 0"])
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>, [">= 0"])
62
- s.add_dependency(%q<json>, [">= 0"])
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(options={})
14
- if options[:sandbox]
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
- "Accept" => "*/*"
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["Authorization"] = auth
27
+ @headers[:authorization] = auth
27
28
  end
28
29
 
29
30
  def logout
30
- @headers.delete "Authorization"
31
+ @headers.delete :authorization
31
32
  end
32
33
 
33
- # Call GET
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
- eval response.to_str
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
- if options[:mime]
66
- mime = options[:mime]
67
- body = options[:body]
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
- body = options[:body]
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
@@ -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: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
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: 3
27
+ hash: 13
28
28
  segments:
29
- - 0
30
- version: "0"
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: 3
43
+ hash: 1
42
44
  segments:
43
- - 0
44
- version: "0"
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: shoulda
63
+ name: crack
60
64
  version_requirements: *id003
61
65
  prerelease: false
62
- type: :development
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: *id004
94
+ version_requirements: *id005
77
95
  prerelease: false
78
96
  type: :development
79
97
  - !ruby/object:Gem::Dependency
80
- requirement: &id005 !ruby/object:Gem::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: *id005
110
+ version_requirements: *id006
93
111
  prerelease: false
94
112
  type: :development
95
113
  - !ruby/object:Gem::Dependency
96
- requirement: &id006 !ruby/object:Gem::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: *id006
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.