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 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