fluidinfo 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
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.0"
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-23}
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.6.2}
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 = Set.new [Array, Hash]
8
+ ITERABLE_TYPES = Set.new [Array, Hash]
9
9
  SERIALIZABLE_TYPES = Set.new [NilClass, String, Fixnum, Float, Symbol,
10
- TrueClass, FalseClass]
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
- JSON.parse response
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 :content_type => payload[:mime]
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
- # Build a url from the given path and url args
102
- def build_url(path, options={})
103
- opts = options.reject do |key, val|
104
- [:body, :mime].include? key
105
- end
106
- args = opts.inject([]) do |arr, (key, val)|
107
- if key == :tags
108
- # dealing with tag list
109
- val.each do |tag|
110
- arr << "tag=#{tag}"
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
- "#{@instance}#{path}"
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
- # Build the payload from the options hash
126
- def build_payload(options)
127
- payload = options.reject {|k,v| !([:body, :mime].include? k)}
128
- if payload[:mime]
129
- # user set mime-type, let them deal with it :)
130
- payload
131
- elsif ITERABLE_TYPES.include? payload[:body].class
132
- payload[:body] = JSON.dump payload[:body]
133
- payload[:mime] = "application/json"
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
- raise TypeError, "You must supply the mime-type"
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"
@@ -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: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
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-23 00:00:00 -04:00
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.6.2
178
+ rubygems_version: 1.7.1
181
179
  signing_key:
182
180
  specification_version: 3
183
181
  summary: Provides a simple interface to fluidinfo