urtak 0.9.7

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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ spec/fixtures/*
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - ree
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in urtak.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ module Urtak
2
+ VERSION = "0.9.7"
3
+ end
data/lib/urtak.rb ADDED
@@ -0,0 +1,279 @@
1
+ require 'urtak/version'
2
+ require 'rest_client'
3
+ require 'digest/sha1'
4
+
5
+ # XML is supported by the API, but this wrapper does not parse it automatically!
6
+ require 'json'
7
+
8
+ module Urtak
9
+ module Errors
10
+ class Unimplemented < StandardError ; end
11
+ class NoToken < StandardError ; end
12
+ end
13
+
14
+ class Api
15
+ attr_accessor :options
16
+
17
+ def initialize(user_options = {})
18
+ @options = {
19
+ :api_key => nil,
20
+ :publication_key => nil,
21
+ :email => nil,
22
+ :user_id => nil,
23
+ :api_base => "https://urtak.com/api",
24
+ :api_format => "JSON",
25
+ :client_name => "Urtak API Wrapper for Ruby, v#{Urtak::VERSION}"
26
+ }.merge(user_options.select{|k,v|!v.nil?})
27
+ end
28
+
29
+ # ACCOUNTS
30
+ def get_account(id)
31
+ Response.new(fire(:get, "accounts/#{id}"))
32
+ end
33
+
34
+ def create_account(attributes)
35
+ Response.new(fire(:post, "accounts", {:account => attributes}))
36
+ end
37
+
38
+ # PUBLICATIONS
39
+ def get_publication(key = options[:publication_key])
40
+ Response.new(fire(:get, "publications/#{key}"))
41
+ end
42
+
43
+ def create_publication(attributes)
44
+ Response.new(fire(:post, "publications", {:publication => attributes}))
45
+ end
46
+
47
+ def update_publication(key, attributes)
48
+ Response.new(fire(:put, "publications/#{key}", {:publication => attributes}))
49
+ end
50
+
51
+ # URTAKS
52
+ def list_urtaks(options = {})
53
+ Response.new(fire(:get, "urtaks", options))
54
+ end
55
+
56
+ def get_urtak(property, value, options = {})
57
+ if property == :id
58
+ path = "urtaks/#{value}"
59
+ elsif property == :post_id
60
+ path = "urtaks/post/#{value}"
61
+ elsif property == :permalink
62
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}"
63
+ end
64
+
65
+ Response.new(fire(:get, path, options))
66
+ end
67
+
68
+ def create_urtak(urtak_attributes, questions=[])
69
+ Response.new(fire(:post, 'urtaks', {:urtak => urtak_attributes.merge(:questions => questions)}))
70
+ end
71
+
72
+ def update_urtak(property, attributes)
73
+ value = attributes.delete(property)
74
+
75
+ if property == :id
76
+ path = "urtaks/#{value}"
77
+ elsif property == :post_id
78
+ path = "urtaks/post/#{value}"
79
+ elsif property == :permalink
80
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}"
81
+ end
82
+
83
+ Response.new(fire(:put, path, {:urtak => attributes}))
84
+ end
85
+
86
+ # URTAK QUESTIONS
87
+ def list_urtak_questions(property, value, options = {})
88
+ if property == :id
89
+ path = "urtaks/#{value}/questions"
90
+ elsif property == :post_id
91
+ path = "urtaks/post/#{value}/questions"
92
+ elsif property == :permalink
93
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions"
94
+ end
95
+
96
+ Response.new(fire(:get, path, options))
97
+ end
98
+
99
+ def get_urtak_question(property, value, id, options = {})
100
+ if property == :id
101
+ path = "urtaks/#{value}/questions/#{id}"
102
+ elsif property == :post_id
103
+ path = "urtaks/post/#{value}/questions/#{id}"
104
+ elsif property == :permalink
105
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions/#{id}"
106
+ end
107
+
108
+ Response.new(fire(:get, path, options))
109
+ end
110
+
111
+ def create_urtak_question(property, value, question)
112
+ if property == :id
113
+ path = "urtaks/#{value}/questions"
114
+ elsif property == :post_id
115
+ path = "urtaks/post/#{value}/questions"
116
+ elsif property == :permalink
117
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions"
118
+ end
119
+
120
+ Response.new(fire(:post, path, {:question => question}))
121
+ end
122
+
123
+ def approve_urtak_question(property, value, id)
124
+ if property == :id
125
+ path = "urtaks/#{value}/questions/#{id}/approve"
126
+ elsif property == :post_id
127
+ path = "urtaks/post/#{value}/questions/#{id}/approve"
128
+ elsif property == :permalink
129
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions/#{id}/approve"
130
+ end
131
+
132
+ Response.new(fire(:put, path))
133
+ end
134
+
135
+ def reject_urtak_question(property, value, id)
136
+ if property == :id
137
+ path = "urtaks/#{value}/questions/#{id}/reject"
138
+ elsif property == :post_id
139
+ path = "urtaks/post/#{value}/questions/#{id}/reject"
140
+ elsif property == :permalink
141
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions/#{id}/reject"
142
+ end
143
+
144
+ Response.new(fire(:put, path))
145
+ end
146
+
147
+ def spam_urtak_question(property, value, id)
148
+ if property == :id
149
+ path = "urtaks/#{value}/questions/#{id}/spam"
150
+ elsif property == :post_id
151
+ path = "urtaks/post/#{value}/questions/#{id}/spam"
152
+ elsif property == :permalink
153
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions/#{id}/spam"
154
+ end
155
+
156
+ Response.new(fire(:put, path))
157
+ end
158
+
159
+ def ham_urtak_question(property, value, id)
160
+ if property == :id
161
+ path = "urtaks/#{value}/questions/#{id}/ham"
162
+ elsif property == :post_id
163
+ path = "urtaks/post/#{value}/questions/#{id}/ham"
164
+ elsif property == :permalink
165
+ path = "urtaks/hash/#{Digest::SHA1.hexdigest(value)}/questions/#{id}/ham"
166
+ end
167
+
168
+ Response.new(fire(:put, path))
169
+ end
170
+
171
+ # QUESTIONS
172
+ def list_questions(options={})
173
+ Response.new(fire(:get, "questions", options))
174
+ end
175
+
176
+ def get_question(id)
177
+ Response.new(fire(:get, "questions/#{id}"))
178
+ end
179
+
180
+
181
+ private
182
+ def fire(method, path, data={})
183
+ if method == :get
184
+ RestClient.get("#{options[:api_base]}/#{path}",
185
+ "User-Agent" => options[:client_name],
186
+ :params => retrieve_token.merge(data).merge(create_signature),
187
+ :accept => create_accept){|response, request, result| response }
188
+ elsif method == :head
189
+ RestClient.head("#{options[:api_base]}/#{path}",
190
+ "User-Agent" => options[:client_name],
191
+ :params => retrieve_token.merge(data).merge(create_signature),
192
+ :accept => create_accept){|response, request, result| response }
193
+ elsif method == :post
194
+ RestClient.post("#{options[:api_base]}/#{path}",
195
+ JSON.generate(retrieve_token.merge(data).merge(create_signature)),
196
+ "User-Agent" => options[:client_name],
197
+ :accept => create_accept,
198
+ :content_type => :json){|response, request, result| response }
199
+ elsif method == :put
200
+ RestClient.put("#{options[:api_base]}/#{path}",
201
+ JSON.generate(retrieve_token.merge(data).merge(create_signature)),
202
+ "User-Agent" => options[:client_name],
203
+ :accept => create_accept,
204
+ :content_type => :json){|response, request, result| response }
205
+ end
206
+ end
207
+
208
+ def retrieve_token
209
+ {
210
+ :publication_key => options[:publication_key],
211
+ :email => options[:email],
212
+ :user_id => options[:user_id]
213
+ }.select{|k,v|!v.nil?}
214
+ end
215
+
216
+ def create_signature
217
+ timestamp = Time.now.to_i
218
+ signature = Digest::SHA1.hexdigest("#{timestamp} #{options[:api_key]}")
219
+ {:timestamp => timestamp, :signature => signature}
220
+ end
221
+
222
+ def create_accept
223
+ if options[:api_format] == "JSON"
224
+ "application/vnd.urtak.urtak+json; version=1.0"
225
+ else
226
+ "application/vnd.urtak.urtak+xml; version=1.0"
227
+ end
228
+ end
229
+ end
230
+
231
+ class Response
232
+ attr_accessor :raw, :body
233
+
234
+ def initialize(response)
235
+ @raw = response
236
+
237
+ # TODO case statement
238
+ if response.headers[:content_type].nil?
239
+ @body = response
240
+ elsif response.headers[:content_type].match(/json/)
241
+ @body = JSON.parse(response)
242
+ elsif response.headers[:content_type].match(/xml/)
243
+ raise Urtak::Errors::Unimplemented
244
+ else
245
+ @body = response
246
+ end
247
+ end
248
+
249
+ def code
250
+ raw.code
251
+ end
252
+
253
+ def error
254
+ response.body['error'] ? response.body['error']['message'] : nil
255
+ end
256
+
257
+ def headers
258
+ raw.headers
259
+ end
260
+
261
+ def success?
262
+ code >= 200 && code < 400
263
+ end
264
+
265
+ def failure?
266
+ code >= 400
267
+ end
268
+
269
+ def not_found?
270
+ code == 404
271
+ end
272
+
273
+ # naive
274
+ def found?
275
+ code == 200 || code == 304
276
+ end
277
+
278
+ end
279
+ end
data/spec/base.rb ADDED
@@ -0,0 +1,26 @@
1
+ def is_ruby_19?
2
+ RUBY_VERSION == '1.9.1' or RUBY_VERSION == '1.9.2'
3
+ end
4
+
5
+ Encoding.default_internal = Encoding.default_external = "ASCII-8BIT" if is_ruby_19?
6
+
7
+ require 'rubygems'
8
+ require 'rspec'
9
+ require 'vcr'
10
+
11
+ RSpec.configure do |c|
12
+ c.extend VCR::RSpec::Macros
13
+ end
14
+
15
+ VCR.config do |c|
16
+ c.cassette_library_dir = 'spec/fixtures'
17
+ c.stub_with :fakeweb
18
+ end
19
+
20
+ begin
21
+ require "ruby-debug"
22
+ rescue LoadError
23
+ # NOP, ignore
24
+ end
25
+
26
+ require File.dirname(__FILE__) + '/../lib/urtak'
@@ -0,0 +1,293 @@
1
+ require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
+
3
+ describe Urtak::Api do
4
+
5
+ attr_accessor :settings
6
+
7
+ before(:all) do
8
+ @settings = { :api_base => ENV['API_BASE'] }
9
+ end
10
+
11
+ before(:each) do
12
+ @client = Urtak::Api.new(@settings)
13
+ end
14
+
15
+ it "should form http requests with proper accept headers"
16
+ it "should form http post requests with a proper content type"
17
+ it "should sign requests properly"
18
+
19
+ context "accounts" do
20
+ it "should create an account" do
21
+ VCR.use_cassette('create_account') do
22
+ response = @client.create_account({:email => "testuser+#{Time.now.to_i}@urtak.com"})
23
+ response.code.should eq(201)
24
+ settings[:user_id] = response.body['account']['id']
25
+ settings[:email] = response.body['account']['email']
26
+ settings[:api_key] = response.body['account']['api_key']
27
+ end
28
+ end
29
+
30
+ it "should find your account" do
31
+ VCR.use_cassette('get_account', :match_requests_on => [:method, :host, :path]) do
32
+ response = @client.get_account(settings[:user_id])
33
+ response.code.should eq(200)
34
+ end
35
+ end
36
+ end
37
+
38
+ context "publications" do
39
+ it "should create a publication" do
40
+ VCR.use_cassette('create_publication') do
41
+ @client = Urtak::Api.new(@settings)
42
+ publication = {
43
+ :name => "Fun with VCRs",
44
+ :domains => "knossos.local"
45
+ }
46
+ response = @client.create_publication(publication)
47
+ response.code.should eq(201)
48
+ settings[:publication_key] = response.body['publication']['key']
49
+ end
50
+ end
51
+
52
+ it "should find a publication" do
53
+ VCR.use_cassette('get_publication', :match_requests_on => [:method, :host, :path]) do
54
+ @client = Urtak::Api.new(@settings)
55
+ response = @client.get_publication(@settings[:publication_key])
56
+ response.class.should eq(Urtak::Response)
57
+ response.code.should eq(200)
58
+ end
59
+ end
60
+
61
+ it "should update a publication" do
62
+ VCR.use_cassette('update_publication') do
63
+ @client = Urtak::Api.new(@settings)
64
+ publication = {
65
+ :name => "Fun with VCRs",
66
+ :domains => "funwithvcrs.com"
67
+ }
68
+ response = @client.update_publication(@settings[:publication_key], publication)
69
+ response.code.should eq(204)
70
+ end
71
+ end
72
+ end
73
+
74
+ context "urtaks" do
75
+ it "should create an urtak" do
76
+ VCR.use_cassette('create_urtak') do
77
+ @client = Urtak::Api.new(@settings)
78
+ @post_id = Digest::SHA1.hexdigest("#{Time.now.to_i}")
79
+ urtak = {
80
+ :title => "200 Fun Things to Do with Cassette Tape",
81
+ :post_id => @post_id,
82
+ :permalink => "http://knossos.local/#{@post_id}-200-fun-things-to-do-with-cassette-tape"
83
+ }
84
+ questions = [
85
+ {:text => "Do you know what betamax is?"},
86
+ {:text => "Are you familiar with physics behind magnetic storage?"},
87
+ {:text => "Have you ever had to repair a cassette tape?"},
88
+ {:text => "Have you ever pulled tape from a reel for fun?"}
89
+ ]
90
+ response = @client.create_urtak(urtak, questions)
91
+ response.code.should eq(201)
92
+ end
93
+ end
94
+
95
+ it "should list urtaks" do
96
+ VCR.use_cassette('list_urtaks', :match_requests_on => [:method, :host, :path]) do
97
+ @client = Urtak::Api.new(@settings)
98
+ response = @client.list_urtaks
99
+ response.code.should eq(200)
100
+ response.body['urtaks']['urtak'].class.should eq(Array)
101
+ end
102
+ end
103
+
104
+ it "should find an urtak by id" do
105
+ VCR.use_cassette('list_urtaks', :match_requests_on => [:method, :host, :path]) do
106
+ @client = Urtak::Api.new(@settings)
107
+ response = @client.list_urtaks
108
+ @urtak = response.body['urtaks']['urtak'].last
109
+
110
+ VCR.use_cassette('get_urtak_by_id', :match_requests_on => [:method, :host, :path]) do
111
+ @client = Urtak::Api.new(@settings)
112
+ response = @client.get_urtak(:id, @urtak['id'])
113
+ response.code.should eq(200)
114
+ end
115
+ end
116
+ end
117
+
118
+ it "should find an urtak by permalink hash" do
119
+ VCR.use_cassette('list_urtaks', :match_requests_on => [:method, :host, :path]) do
120
+ @client = Urtak::Api.new(@settings)
121
+ response = @client.list_urtaks
122
+ @urtak = response.body['urtaks']['urtak'].last
123
+
124
+ VCR.use_cassette('get_urtak_by_permalink', :match_requests_on => [:method, :host, :path]) do
125
+ @client = Urtak::Api.new(@settings)
126
+ response = @client.get_urtak(:permalink, @urtak['permalink'])
127
+ response.code.should eq(200)
128
+ end
129
+ end
130
+ end
131
+
132
+ it "should find an urtak by post_id" do
133
+ VCR.use_cassette('list_urtaks', :match_requests_on => [:method, :host, :path]) do
134
+ @client = Urtak::Api.new(@settings)
135
+ response = @client.list_urtaks
136
+ @urtak = response.body['urtaks']['urtak'].last
137
+
138
+ VCR.use_cassette('get_urtak_by_post_id', :match_requests_on => [:method, :host, :path]) do
139
+ @client = Urtak::Api.new(@settings)
140
+ response = @client.get_urtak(:post_id, @urtak['post_id'])
141
+ response.code.should eq(200)
142
+ end
143
+ end
144
+ end
145
+
146
+ it "should update an urtak" do
147
+ VCR.use_cassette('list_urtaks', :match_requests_on => [:method, :host, :path]) do
148
+ @client = Urtak::Api.new(@settings)
149
+ response = @client.list_urtaks
150
+ @urtak = response.body['urtaks']['urtak'].last
151
+
152
+ VCR.use_cassette('update_urtak') do
153
+ @client = Urtak::Api.new(@settings)
154
+
155
+ urtak = {
156
+ :title => "200 really fun things to do with a cassette tape",
157
+ :post_id => @urtak['post_id'],
158
+ :permalink => "http://knossos.local/#{@urtak['post_id']}-200-fun-things-to-do-with-cassette-tape"
159
+ }
160
+
161
+ response = @client.update_urtak(:post_id, urtak)
162
+ response.code.should eq(204)
163
+ end
164
+
165
+ end
166
+ end
167
+ end
168
+
169
+ context "urtak-questions" do
170
+ before(:each) do
171
+ VCR.use_cassette('list_urtaks', :match_requests_on => [:method, :host, :path]) do
172
+ @client = Urtak::Api.new(@settings)
173
+ response = @client.list_urtaks
174
+ @urtak = response.body['urtaks']['urtak'].last
175
+ end
176
+ end
177
+
178
+ it "should list questions on an urtak" do
179
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
180
+ response = @client.list_urtak_questions(:id, @urtak['id'])
181
+ response.code.should eq(200)
182
+ response.body['questions']['question'].class.should eq(Array)
183
+ end
184
+ end
185
+
186
+ it "should find a question on an urtak" do
187
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
188
+ response = @client.list_urtak_questions(:id, @urtak['id'])
189
+ @question = response.body['questions']['question'].last
190
+
191
+ VCR.use_cassette('find_urtak_question', :match_requests_on => [:method, :host, :path]) do
192
+ response = @client.get_urtak_question(:id, @urtak['id'], @question['id'])
193
+ response.code.should eq(200)
194
+ response.body['question'].class.should eq(Hash)
195
+ response.body['question']['status'].should eq("approved")
196
+ end
197
+ end
198
+ end
199
+
200
+ it "should create a question" do
201
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
202
+ VCR.use_cassette('create_urtak_question') do
203
+ question = {:text => "Have you ever owned a VCR?"}
204
+ response = @client.create_urtak_question(:id, @urtak['id'], question)
205
+ response.code.should eq(201)
206
+ base = "#{@client.options[:api_base]}/urtaks/#{@urtak['id']}/questions"
207
+ response.headers[:location].should =~ /#{Regexp.escape(base)}\/\d+/
208
+ end
209
+ end
210
+ end
211
+
212
+ it "should approve a question" do
213
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
214
+ response = @client.list_urtak_questions(:id, @urtak['id'])
215
+ @question = response.body['questions']['question'].last
216
+
217
+ VCR.use_cassette('approve_urtak_question') do
218
+ response = @client.approve_urtak_question(:id, @urtak['id'], @question['id'])
219
+ response.code.should eq(204)
220
+ end
221
+ end
222
+ end
223
+
224
+ it "should reject a question" do
225
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
226
+ response = @client.list_urtak_questions(:id, @urtak['id'])
227
+ @question = response.body['questions']['question'].last
228
+
229
+ VCR.use_cassette('reject_urtak_question') do
230
+ response = @client.reject_urtak_question(:id, @urtak['id'], @question['id'])
231
+ response.code.should eq(204)
232
+ end
233
+ end
234
+ end
235
+
236
+ it "should mark a question as spam" do
237
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
238
+ response = @client.list_urtak_questions(:id, @urtak['id'])
239
+ @question = response.body['questions']['question'].last
240
+
241
+ VCR.use_cassette('spam_urtak_question') do
242
+ response = @client.spam_urtak_question(:id, @urtak['id'], @question['id'])
243
+ response.code.should eq(204)
244
+ end
245
+ end
246
+ end
247
+
248
+ it "should mark a question as ham" do
249
+ VCR.use_cassette('list_urtak_questions', :match_requests_on => [:method, :host, :path]) do
250
+ response = @client.list_urtak_questions(:id, @urtak['id'])
251
+ @question = response.body['questions']['question'].last
252
+
253
+ VCR.use_cassette('ham_urtak_question') do
254
+ response = @client.ham_urtak_question(:id, @urtak['id'], @question['id'])
255
+ response.code.should eq(204)
256
+ end
257
+ end
258
+ end
259
+ end
260
+
261
+ context "questions" do
262
+ it "should list questions" do
263
+ VCR.use_cassette('list_questions', :match_requests_on => [:method, :host, :path]) do
264
+ @client = Urtak::Api.new(@settings)
265
+ response = @client.list_questions
266
+ if ENV['ADMIN']
267
+ response.code.should eq(200)
268
+ else
269
+ response.code.should eq(403)
270
+ end
271
+ end
272
+ end
273
+
274
+ it "should find a question" do
275
+ VCR.use_cassette('list_questions', :match_requests_on => [:method, :host, :path]) do
276
+ @client = Urtak::Api.new(@settings)
277
+
278
+ VCR.use_cassette('get_question', :match_requests_on => [:method, :host, :path]) do
279
+ if ENV['ADMIN']
280
+ @question = @client.list_questions.body['questions']['question'].last
281
+ response = @client.get_question(@question['id'])
282
+ response.code.should eq(200)
283
+ else
284
+ # Shouldn't matter what the ID is here
285
+ response = @client.get_question(1)
286
+ response.code.should eq(403)
287
+ end
288
+ end
289
+ end
290
+ end
291
+ end
292
+
293
+ end
data/urtak.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "urtak/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "urtak"
7
+ s.version = Urtak::VERSION
8
+ s.authors = ["Kunal Shah"]
9
+ s.email = ["kunal@urtak.com"]
10
+ s.homepage = "https://github.com/urtak/urtak-rb"
11
+ s.summary = %q{Ruby Client for the Urtak REST API}
12
+ s.description = %q{Ruby Client for the Urtak REST API}
13
+
14
+ s.rubyforge_project = "urtak"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency "rake"
23
+ s.add_development_dependency "rspec"
24
+ s.add_development_dependency "fakeweb"
25
+ s.add_development_dependency "vcr"
26
+ s.add_runtime_dependency "rest-client"
27
+ s.add_runtime_dependency "json"
28
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: urtak
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.7
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kunal Shah
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-01 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70275140141100 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70275140141100
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70275140140300 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70275140140300
36
+ - !ruby/object:Gem::Dependency
37
+ name: fakeweb
38
+ requirement: &70275140139520 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70275140139520
47
+ - !ruby/object:Gem::Dependency
48
+ name: vcr
49
+ requirement: &70275140139080 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70275140139080
58
+ - !ruby/object:Gem::Dependency
59
+ name: rest-client
60
+ requirement: &70275140138640 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70275140138640
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ requirement: &70275140138200 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70275140138200
80
+ description: Ruby Client for the Urtak REST API
81
+ email:
82
+ - kunal@urtak.com
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - .gitignore
88
+ - .travis.yml
89
+ - Gemfile
90
+ - Rakefile
91
+ - lib/urtak.rb
92
+ - lib/urtak/version.rb
93
+ - spec/base.rb
94
+ - spec/client_spec.rb
95
+ - urtak.gemspec
96
+ homepage: https://github.com/urtak/urtak-rb
97
+ licenses: []
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project: urtak
116
+ rubygems_version: 1.8.10
117
+ signing_key:
118
+ specification_version: 3
119
+ summary: Ruby Client for the Urtak REST API
120
+ test_files:
121
+ - spec/base.rb
122
+ - spec/client_spec.rb