fluidinfo 0.5.0 → 0.5.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/README.rdoc +20 -14
- data/Rakefile +1 -2
- data/VERSION +1 -1
- data/fluidinfo.gemspec +1 -1
- data/lib/fluidinfo/client.rb +113 -80
- data/lib/fluidinfo/response.rb +16 -3
- data/lib/fluidinfo.rb +12 -0
- data/spec/fluidinfo_spec.rb +12 -14
- metadata +18 -18
data/README.rdoc
CHANGED
@@ -1,35 +1,41 @@
|
|
1
|
-
= fluidinfo
|
1
|
+
= fluidinfo.rb
|
2
2
|
|
3
|
-
|
3
|
+
+fluidinfo.rb+ provides a simple interface to {Fluidinfo}[http://www.fluidinfo.com].
|
4
4
|
|
5
5
|
== Simple Example
|
6
6
|
|
7
|
-
>> require
|
8
|
-
>>
|
9
|
-
>>
|
7
|
+
>> require "fluidinfo"
|
8
|
+
>> fi = Fluidinfo::Client.new
|
9
|
+
>> fi.get "/objects", :query => "has gridaphobe/met"
|
10
10
|
=> {"ids"=>["fa0bb30b-d1c2-4438-b65c-d86bbb1a44cd"]}
|
11
11
|
|
12
|
-
|
13
|
-
{documentation}[http://api.fluidinfo.com/] for explanations of each API call.
|
12
|
+
== Authentication
|
14
13
|
|
14
|
+
>> fi = Fluidinfo::Client.new :user => "user", :password => "password"
|
15
|
+
>> fi.post "/objects", :body => {:about => "Pulp Fiction"}
|
16
|
+
>> fi.put "/about/Pulp Fiction/user/rating", :body => 5
|
15
17
|
|
16
|
-
|
18
|
+
+fluidinfo.rb+ is a wrapper around the
|
19
|
+
{RestClient}[http://github.com/archiloque/rest-client] gem, and provides a
|
20
|
+
similar API. For more details read the {official documentation}[http://rdoc.info/github/gridaphobe/fluidinfo.rb/frames].
|
17
21
|
|
18
|
-
|
22
|
+
== Contributing to fluidinfo.rb
|
23
|
+
|
24
|
+
* Check out the latest master to make sure the feature hasn't been implemented
|
19
25
|
or the bug hasn't been fixed yet
|
20
|
-
* Check out the issue tracker to make sure someone already hasn't requested it
|
26
|
+
* Check out the issue tracker to make sure someone already hasn't requested it
|
21
27
|
and/or contributed it
|
22
28
|
* Fork the project
|
23
29
|
* Start a feature/bugfix branch
|
24
30
|
* Commit and push until you are happy with your contribution
|
25
|
-
* Make sure to add tests for it. This is important so I don't break it in a
|
31
|
+
* Make sure to add tests for it. This is important so I don't break it in a
|
26
32
|
future version unintentionally.
|
27
|
-
* Please try not to mess with the Rakefile, version, or history. If you want
|
28
|
-
to have your own version, or is otherwise necessary, that is fine, but please
|
33
|
+
* Please try not to mess with the Rakefile, version, or history. If you want
|
34
|
+
to have your own version, or is otherwise necessary, that is fine, but please
|
29
35
|
isolate to its own commit so I can cherry-pick around it.
|
30
36
|
|
31
37
|
== Copyright
|
32
38
|
|
33
|
-
Copyright (c) 2011 Eric Seidel. See LICENSE.txt for
|
39
|
+
Copyright (c) 2011 Eric Seidel. See {file:LICENSE.txt} for
|
34
40
|
further details.
|
35
41
|
|
data/Rakefile
CHANGED
@@ -29,10 +29,9 @@ Jeweler::RubygemsDotOrgTasks.new
|
|
29
29
|
require 'rspec/core/rake_task'
|
30
30
|
RSpec::Core::RakeTask.new(:spec)
|
31
31
|
|
32
|
-
require 'yard
|
32
|
+
require 'yard'
|
33
33
|
YARD::Rake::YardocTask.new do |t|
|
34
34
|
t.files = ['lib/**/*.rb']
|
35
|
-
t.options = ['--any', '--extra', '--opts']
|
36
35
|
end
|
37
36
|
|
38
37
|
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.1
|
data/fluidinfo.gemspec
CHANGED
data/lib/fluidinfo/client.rb
CHANGED
@@ -1,103 +1,133 @@
|
|
1
1
|
require "rest-client"
|
2
2
|
require "cgi"
|
3
|
+
require "uri"
|
3
4
|
require "yajl"
|
4
5
|
require "base64"
|
5
|
-
require "set"
|
6
6
|
|
7
7
|
module Fluidinfo
|
8
|
-
ITERABLE_TYPES = Set.new [Array]
|
9
|
-
SERIALIZEABLE_TYPES = Set.new [NilClass, String, Fixnum, Float, Symbol,
|
10
|
-
TrueClass, FalseClass, Array]
|
11
|
-
JSON_TYPES = Set.new ["application/json",
|
12
|
-
"application/vnd.fluiddb.value+json"]
|
13
8
|
|
9
|
+
##
|
10
|
+
# {Fluidinfo::Client} handles all of the communication between your
|
11
|
+
# application and Fluidinfo. You should create a new
|
12
|
+
# {Fluidinfo::Client} anytime you want to begin making calls as a
|
13
|
+
# different user. All {Fluidinfo::Client} methods return an instance
|
14
|
+
# of {Fluidinfo::Response}.
|
15
|
+
#
|
16
|
+
# Example Usage:
|
17
|
+
# # start with anonymous calls
|
18
|
+
# fi = Fluidinfo::Client.new
|
19
|
+
# fi.get "/values", :query => "has terry/rating > 4 and eric/seen",
|
20
|
+
# :tags => ["imdb.com/title", "amazon.com/price"]
|
21
|
+
# # now log in
|
22
|
+
# fi = Fluidinfo::Client.new :user => "user", :password => "password"
|
23
|
+
# fi.put "/about/Inception/user/comment", :body => "Awesome!"
|
14
24
|
class Client
|
15
|
-
# The main fluidinfo instance.
|
16
|
-
MAIN = 'https://fluiddb.fluidinfo.com'
|
17
|
-
# The sandbox instance, test your code here.
|
18
|
-
SANDBOX = 'https://sandbox.fluidinfo.com'
|
19
25
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
26
|
+
##
|
27
|
+
# Create a new instance of {Fluidinfo::Client}.
|
28
|
+
#
|
29
|
+
# @param [Hash] options Initialization options.
|
30
|
+
#
|
31
|
+
# @option options [String] :user The username to use for
|
32
|
+
# authentication.
|
33
|
+
# @option options [String] :password The password to use for
|
34
|
+
# authentication.
|
35
|
+
# @option options [Hash] :headers Additional headers to send with
|
36
|
+
# every API call made via this client.
|
37
|
+
def initialize(options={})
|
38
|
+
base_url = options[:instance] || Fluidinfo::MAIN
|
39
|
+
headers = {
|
27
40
|
:accept => "*/*",
|
28
41
|
:user_agent => "fluidinfo.rb/#{Fluidinfo.version}"
|
29
|
-
}
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
@headers[:authorization] = "Basic " +
|
34
|
-
(Base64.encode64 "#{user}:#{pass}").strip
|
35
|
-
end
|
36
|
-
|
37
|
-
def logout
|
38
|
-
@headers.delete :authorization
|
42
|
+
}.merge(options[:headers] || {})
|
43
|
+
@client = RestClient::Resource.new base_url, :user => options[:user],
|
44
|
+
:password => options[:password],
|
45
|
+
:headers => headers
|
39
46
|
end
|
40
47
|
|
41
48
|
##
|
42
|
-
# Call GET on one of the APIs
|
49
|
+
# Call GET on one of the APIs.
|
43
50
|
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
51
|
+
# @param [String] path The path segment of the API call.
|
52
|
+
# @param [Hash] options Additional arguments for the GET call.
|
53
|
+
#
|
54
|
+
# @option options [Hash] :headers Additional headers to send.
|
55
|
+
# @option options [String] :query A Fluidinfo query for objects, only used in
|
56
|
+
# +/objects+ and +/values+.
|
57
|
+
# @option options [Array] :tags Tags to be deleted, only used in +/values+.
|
47
58
|
def get(path, options={})
|
48
59
|
url = build_url path, options
|
49
|
-
|
60
|
+
headers = options[:headers] || {}
|
61
|
+
Response.new(@client[url].get headers)
|
50
62
|
end
|
51
63
|
|
52
64
|
##
|
53
|
-
# Call HEAD on the
|
54
|
-
# of a tag
|
55
|
-
|
56
|
-
|
57
|
-
|
65
|
+
# Call HEAD on one of the APIs. Only used to check for the
|
66
|
+
# existence of a tag using +/about+ or +/objects+.
|
67
|
+
#
|
68
|
+
# @param [String] path The path segment of the API call.
|
69
|
+
# @param [Hash] options Additional arguments for the GET call.
|
70
|
+
#
|
71
|
+
# @option options [Hash] :headers Additional headers to send.
|
72
|
+
def head(path, options={})
|
73
|
+
url = build_url path, options
|
74
|
+
headers = options[:headers] || {}
|
75
|
+
Response.new(@client[url].head headers)
|
58
76
|
end
|
59
77
|
|
60
78
|
##
|
61
|
-
# Call POST on one of the APIs
|
79
|
+
# Call POST on one of the APIs.
|
80
|
+
#
|
81
|
+
# @param [String] path The path segment of the API call.
|
82
|
+
# @param [Hash] options Additional arguments for the POST call.
|
62
83
|
#
|
63
|
-
#
|
64
|
-
#
|
84
|
+
# @option options [Hash] :headers Additional headers to send.
|
85
|
+
# @option options [Hash] :body The payload to send.
|
65
86
|
def post(path, options={})
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
87
|
+
url = build_url path, options
|
88
|
+
body = options[:body]
|
89
|
+
headers = options[:headers] || {}
|
90
|
+
if body
|
91
|
+
# the body for a POST will always be app/json, so no need
|
92
|
+
# to waste cycles in build_payload
|
93
|
+
body = Yajl.dump body
|
94
|
+
headers.merge! :content_type => "application/json"
|
73
95
|
end
|
96
|
+
Response.new(@client[url].post body, headers)
|
74
97
|
end
|
75
98
|
|
76
99
|
##
|
77
|
-
# Call PUT on one of the APIs
|
100
|
+
# Call PUT on one of the APIs.
|
78
101
|
#
|
79
|
-
#
|
102
|
+
# @param [String] path The path segment of the API call.
|
103
|
+
# @param [Hash] options Additional arguments for the PUT call.
|
80
104
|
#
|
81
|
-
#
|
82
|
-
#
|
105
|
+
# @option options [Hash] :headers Additional headers to send.
|
106
|
+
# @option options [Hash, other] :body The payload to send. Type
|
107
|
+
# should be +Hash+ unless sending a tag-value.
|
108
|
+
# @option options [String] :mime The mime-type of an opaque tag-value.
|
83
109
|
def put(path, options={})
|
84
110
|
url = build_url path, options
|
85
|
-
|
86
|
-
headers =
|
87
|
-
|
88
|
-
Response.new(RestClient.put url, payload[:body], headers)
|
111
|
+
body, mime = build_payload options
|
112
|
+
headers = (options[:headers] || {}).merge :content_type => mime
|
113
|
+
Response.new(@client[url].put body, headers)
|
89
114
|
end
|
90
115
|
|
91
116
|
##
|
92
|
-
# Call DELETE on one of the APIs
|
117
|
+
# Call DELETE on one of the APIs.
|
93
118
|
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
119
|
+
# @param [String] path The path segment of the API call.
|
120
|
+
# @param [Hash] options Additional arguments for the DELETE call.
|
121
|
+
#
|
122
|
+
# @option options [Hash] :headers Additional headers to send.
|
123
|
+
# @option options [String] :query A Fluidinfo query for objects, only used in
|
124
|
+
# +/values+.
|
125
|
+
# @option options [Array] :tags Tags to be deleted, only used in +/values+.
|
97
126
|
def delete(path, options={})
|
98
127
|
url = build_url path, options
|
128
|
+
headers = options[:headers] || {}
|
99
129
|
# nothing returned in response body for DELETE
|
100
|
-
Response.new(
|
130
|
+
Response.new(@client[url].delete headers)
|
101
131
|
end
|
102
132
|
|
103
133
|
private
|
@@ -120,50 +150,53 @@ module Fluidinfo
|
|
120
150
|
end.join('&')
|
121
151
|
# fix for /about API
|
122
152
|
if path.start_with? '/about/'
|
123
|
-
path
|
153
|
+
# path components need to be escaped with URI.escape instead
|
154
|
+
# of CGI.escape so " " is translated properly to "%20"
|
155
|
+
path = path.split("/").map{|x| URI.escape x}.join("/")
|
124
156
|
end
|
125
157
|
if args != ''
|
126
|
-
"#{
|
158
|
+
"#{path}?#{args}"
|
127
159
|
else
|
128
|
-
"#{
|
160
|
+
"#{path}"
|
129
161
|
end
|
130
162
|
end
|
131
163
|
|
132
164
|
##
|
133
165
|
# Build the payload from the options hash
|
134
166
|
def build_payload(options)
|
135
|
-
|
136
|
-
|
167
|
+
body = options[:body]
|
168
|
+
mime = options[:mime]
|
169
|
+
if mime
|
137
170
|
# user set mime-type, let them deal with it :)
|
138
171
|
# fix for ruby 1.8
|
139
|
-
if
|
140
|
-
|
172
|
+
if body.is_a? File
|
173
|
+
size = body.path.size
|
141
174
|
else
|
142
|
-
|
175
|
+
size = body.size
|
143
176
|
end
|
144
|
-
elsif
|
145
|
-
|
146
|
-
|
147
|
-
elsif SERIALIZEABLE_TYPES.include?
|
148
|
-
if ITERABLE_TYPES.include?
|
149
|
-
if is_set_of_strings?
|
177
|
+
elsif body.is_a? Hash
|
178
|
+
body = Yajl.dump body
|
179
|
+
mime = "application/json"
|
180
|
+
elsif SERIALIZEABLE_TYPES.include? body.class
|
181
|
+
if ITERABLE_TYPES.include? body.class
|
182
|
+
if is_set_of_strings? body
|
150
183
|
# set of strings is primitive
|
151
|
-
|
184
|
+
mime = "application/vnd.fluiddb.value+json"
|
152
185
|
else
|
153
186
|
# we have an Array with some non-String items
|
154
|
-
|
187
|
+
mime = "application/json"
|
155
188
|
end
|
156
189
|
else
|
157
190
|
# primitive type
|
158
|
-
|
191
|
+
mime = "application/vnd.fluiddb.value+json"
|
159
192
|
end
|
160
|
-
|
193
|
+
body = Yajl.dump body
|
161
194
|
else
|
162
195
|
raise TypeError, "You must supply the mime-type"
|
163
196
|
end
|
164
|
-
|
197
|
+
[body, mime]
|
165
198
|
end
|
166
|
-
|
199
|
+
|
167
200
|
##
|
168
201
|
# Check if payload is a "set of strings"
|
169
202
|
def is_set_of_strings?(list)
|
data/lib/fluidinfo/response.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
require "yajl"
|
2
2
|
|
3
3
|
module Fluidinfo
|
4
|
+
|
5
|
+
##
|
6
|
+
# An instance of {Fluidinfo::Response} is returned by all of the
|
7
|
+
# {Fluidinfo::Client} calls. There's no reason to instantiate one
|
8
|
+
# yourself.
|
4
9
|
class Response
|
5
|
-
|
10
|
+
# [Integer] The return code of the API call.
|
11
|
+
attr_reader :status
|
12
|
+
# [Hash] The returned headers.
|
13
|
+
attr_reader :headers
|
14
|
+
# [String, nil] The raw response
|
15
|
+
attr_reader :content
|
16
|
+
# [Hash, String] The parsed response if the +Content-Type+ was one of {Fluidinfo::JSON_TYPES}, otherwise equivalent to {#content}.
|
17
|
+
attr_reader :value
|
6
18
|
|
7
19
|
def initialize(response)
|
8
|
-
@response = response
|
9
20
|
@status = response.code
|
10
21
|
@headers = response.headers
|
11
22
|
@content = response.body
|
@@ -16,9 +27,11 @@ module Fluidinfo
|
|
16
27
|
end
|
17
28
|
end
|
18
29
|
|
30
|
+
##
|
31
|
+
# A shortcut for +Response.value#[]+.
|
19
32
|
def [](key)
|
20
33
|
@value[key]
|
21
34
|
end
|
22
|
-
|
35
|
+
|
23
36
|
end
|
24
37
|
end
|
data/lib/fluidinfo.rb
CHANGED
@@ -1,2 +1,14 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "/fluidinfo/client")
|
2
2
|
require File.join(File.dirname(__FILE__), "/fluidinfo/response")
|
3
|
+
|
4
|
+
##
|
5
|
+
# +fludiinfo.rb+ is a library for interacting with
|
6
|
+
# {http://www.fluidinfo.com Fluidinfo}. Take a look at
|
7
|
+
# {Fluidinfo::Client} to get started.
|
8
|
+
module Fluidinfo
|
9
|
+
ITERABLE_TYPES = [Array]
|
10
|
+
SERIALIZEABLE_TYPES = [NilClass, String, Fixnum, Float, Symbol, TrueClass, FalseClass, Array]
|
11
|
+
JSON_TYPES = ["application/json", "application/vnd.fluiddb.value+json"]
|
12
|
+
# The main instance of Fluidinfo.
|
13
|
+
MAIN = 'https://fluiddb.fluidinfo.com'
|
14
|
+
end
|
data/spec/fluidinfo_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe Fluidinfo do
|
|
10
10
|
it "should return a Fluidinfo::Response" do
|
11
11
|
r = @fluid.get("/about/fluidinfo")
|
12
12
|
r.should be_a(Fluidinfo::Response)
|
13
|
-
r.should respond_to(:status, :content, :headers, :value
|
13
|
+
r.should respond_to(:status, :content, :headers, :value)
|
14
14
|
end
|
15
15
|
|
16
16
|
describe "/objects" do
|
@@ -101,14 +101,13 @@ describe Fluidinfo do
|
|
101
101
|
|
102
102
|
describe "POST" do
|
103
103
|
before(:each) do
|
104
|
-
@fluid = Fluidinfo::Client.new
|
105
|
-
@fluid.login 'test', 'test'
|
104
|
+
@fluid = Fluidinfo::Client.new :user => "test", :password => "test"
|
106
105
|
end
|
107
106
|
|
108
107
|
it "should return a Fluidinfo::Response" do
|
109
108
|
r = @fluid.post("/objects")
|
110
109
|
r.should be_a(Fluidinfo::Response)
|
111
|
-
r.should respond_to(:status, :content, :headers, :value
|
110
|
+
r.should respond_to(:status, :content, :headers, :value)
|
112
111
|
end
|
113
112
|
|
114
113
|
describe "/namespaces" do
|
@@ -130,14 +129,13 @@ describe Fluidinfo do
|
|
130
129
|
|
131
130
|
describe "PUT" do
|
132
131
|
before(:each) do
|
133
|
-
@fluid = Fluidinfo::Client.new
|
134
|
-
@fluid.login 'test', 'test'
|
132
|
+
@fluid = Fluidinfo::Client.new :user => "test", :password => "test"
|
135
133
|
end
|
136
134
|
|
137
135
|
it "should return a Fluidinfo::Response" do
|
138
136
|
r = @fluid.put("/about/fluidinfo/test/tag", :body => nil)
|
139
137
|
r.should be_a(Fluidinfo::Response)
|
140
|
-
r.should respond_to(:status, :content, :headers, :value
|
138
|
+
r.should respond_to(:status, :content, :headers, :value)
|
141
139
|
@fluid.delete("/about/fluidinfo/test/tag")
|
142
140
|
end
|
143
141
|
|
@@ -226,12 +224,12 @@ describe Fluidinfo do
|
|
226
224
|
describe "build_url" do
|
227
225
|
it "escapes &'s in query tag-values" do
|
228
226
|
query = "test/tag=\"1&2\""
|
229
|
-
expected = "
|
227
|
+
expected = "/objects?query=test%2Ftag%3D%221%262%22"
|
230
228
|
@fluid.test_build_url("/objects", :query => query).should eq(expected)
|
231
229
|
|
232
230
|
query = "oreilly.com/title=\"HTML & CSS: The Good Parts\""
|
233
231
|
tags = ["oreilly.com/isbn"]
|
234
|
-
expected = "
|
232
|
+
expected = "/values?query=oreilly.com%2Ftitle%3D%22HTML+%26+CSS%3A+The+Good+Parts%22&tag=oreilly.com/isbn"
|
235
233
|
@fluid.test_build_url("/values",
|
236
234
|
:query => query,
|
237
235
|
:tags => tags).should eq(expected)
|
@@ -239,7 +237,7 @@ describe Fluidinfo do
|
|
239
237
|
|
240
238
|
it "escapes &'s in about-values" do
|
241
239
|
about = "tom & jerry"
|
242
|
-
expected = "
|
240
|
+
expected = "/about/tom%20&%20jerry"
|
243
241
|
@fluid.test_build_url('/about/tom & jerry').should eq(expected)
|
244
242
|
end
|
245
243
|
end
|
@@ -248,14 +246,14 @@ describe Fluidinfo do
|
|
248
246
|
it "sets proper mime-types" do
|
249
247
|
primitives = [1, 1.1, true, false, nil, ["1", "2", "hi"]]
|
250
248
|
primitives.each do |p|
|
251
|
-
|
252
|
-
|
249
|
+
body, mime = @fluid.test_build_payload :body => p
|
250
|
+
mime.should eq("application/vnd.fluiddb.value+json")
|
253
251
|
end
|
254
252
|
|
255
253
|
non_primitives = [[1, 2, 3], {"hi" => "there"}]
|
256
254
|
non_primitives.each do |n|
|
257
|
-
|
258
|
-
|
255
|
+
body, mime = @fluid.test_build_payload :body => n
|
256
|
+
mime.should eq("application/json")
|
259
257
|
end
|
260
258
|
end
|
261
259
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluidinfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-09-17 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &70240390467800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70240390467800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yajl-ruby
|
27
|
-
requirement: &
|
27
|
+
requirement: &70240390467260 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70240390467260
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70240390466660 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.9.2
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70240390466660
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70240390466120 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.6.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70240390466120
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70240390465540 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70240390465540
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70240390464960 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.6.4
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70240390464960
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: uuidtools
|
82
|
-
requirement: &
|
82
|
+
requirement: &70240390464380 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 2.1.2
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70240390464380
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &70240390463800 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: 0.7.2
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70240390463800
|
102
102
|
description: This gem provides a simple interface to fluidinfo, built on top of the
|
103
103
|
rest-client gem.
|
104
104
|
email: gridaphobe@gmail.com
|
@@ -137,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
137
|
version: '0'
|
138
138
|
segments:
|
139
139
|
- 0
|
140
|
-
hash:
|
140
|
+
hash: -1150775427864763998
|
141
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
142
|
none: false
|
143
143
|
requirements:
|