fluidinfo 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|