sk-api 1.1.0 → 1.1.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/.gitignore +1 -0
- data/Gemfile +2 -0
- data/README.rdoc +2 -240
- data/Rakefile +9 -30
- data/lib/patches/README +2 -1
- data/lib/patches/ar2/base.rb +3 -1
- data/lib/patches/ar3/base.rb +4 -1
- data/lib/resources/base.rb +13 -6
- data/lib/resources/invoice.rb +1 -20
- data/lib/sk_api.rb +1 -3
- data/lib/version.rb +3 -0
- data/sk-api.gemspec +16 -64
- data/spec/resources/client_spec.rb +2 -23
- data/spec/resources/credit_note_spec.rb +2 -24
- data/spec/resources/invoice_spec.rb +1 -14
- data/spec/resources/product_spec.rb +7 -25
- data/spec/spec_helper.rb +4 -2
- data/spec/utils/field_map_spec.rb +4 -4
- metadata +86 -27
- data/VERSION +0 -1
- data/init.rb +0 -1
- data/tasks/sk_api_tasks.rake +0 -4
- data/vendor/jsonschema-1.0.0/README.rdoc +0 -94
- data/vendor/jsonschema-1.0.0/Rakefile +0 -94
- data/vendor/jsonschema-1.0.0/lib/jsonschema.rb +0 -292
- data/vendor/jsonschema-1.0.0/ruby-jsonschema.gemspec +0 -31
- data/vendor/jsonschema-1.0.0/test/jsonschema_test.rb +0 -998
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -1,241 +1,3 @@
|
|
1
|
-
=
|
1
|
+
= This gem is DEPRECATED & OUTDATED
|
2
2
|
|
3
|
-
|
4
|
-
In the near future this will be decoupled and you will find links to the new gems here.
|
5
|
-
|
6
|
-
The SalesKing API client uses JSON and ActiveResource, with some fixes due to json parsing.
|
7
|
-
|
8
|
-
To be able to use the API you must have an SalesKing account and API access.
|
9
|
-
Than you can start writing your own middelware-stack.
|
10
|
-
|
11
|
-
== Install
|
12
|
-
|
13
|
-
if you try to use it please tell us, so we can provide you a login on our dev system
|
14
|
-
and support.
|
15
|
-
|
16
|
-
gem install sk-api
|
17
|
-
|
18
|
-
Use with bundler
|
19
|
-
|
20
|
-
gem "sk-api", :require => 'sk_api'
|
21
|
-
|
22
|
-
== Usage
|
23
|
-
|
24
|
-
SalesKing's api interface is RESTful(mostly) and returns & accepts JSON data.
|
25
|
-
All resources such as clients, invoices, products can be accessed via URL's
|
26
|
-
through standard HTTP methods GET, POST, PUT and DELETE.
|
27
|
-
|
28
|
-
To give it quick shot, point your browser to my-account.salesking.eu/api/clients.json
|
29
|
-
(while beeing logged in) and you will see the JSON in the response.
|
30
|
-
This is an example of a GET-request issued by your browser.
|
31
|
-
|
32
|
-
<b>Request Method overview:</b>
|
33
|
-
GET => read
|
34
|
-
POST => create new data
|
35
|
-
PUT => update data
|
36
|
-
DELETE => delete data
|
37
|
-
|
38
|
-
Want to know more about REST style webservices?
|
39
|
-
* http://en.wikipedia.org/wiki/Representational_State_Transfer
|
40
|
-
* http://www.google.com/search?q=REST+site%3Awww.infoq.com
|
41
|
-
|
42
|
-
=== Authentification & Safety
|
43
|
-
|
44
|
-
Authentification is done with HTTP basic using your SalesKing login email and password.
|
45
|
-
For a production environment it is advisable to create a user, per api
|
46
|
-
client-software, and restrict his rights with our build in role-system.
|
47
|
-
|
48
|
-
=== Toolz
|
49
|
-
|
50
|
-
Since browsers do not support PUT/DELETE methods you can use CURL, a linux
|
51
|
-
command-line http client, for testing. And of course any http library supporting
|
52
|
-
http-basic-auth can be used.
|
53
|
-
|
54
|
-
* JSONView FF-Plugin - view json in firefox https://addons.mozilla.org/de/firefox/addon/10869/
|
55
|
-
* JSONovich FF-Plugin - https://addons.mozilla.org/de/firefox/addon/10122/
|
56
|
-
* A java GUI REST client http://code.google.com/p/rest-client/
|
57
|
-
|
58
|
-
=== GET / Show data
|
59
|
-
|
60
|
-
Get a list of resources:
|
61
|
-
GET xy.salesking.eu/api/invoices
|
62
|
-
|
63
|
-
Get a single resource
|
64
|
-
GET xy.salesking.eu/invoices/:id
|
65
|
-
|
66
|
-
Using CURL
|
67
|
-
|
68
|
-
curl -u your@login-mail.com:password \
|
69
|
-
https://demo.salesking.eu/clients.json
|
70
|
-
|
71
|
-
Returned JSON data for a listings, abbreviated:
|
72
|
-
{
|
73
|
-
"clients": [ # array of resources => clients
|
74
|
-
{ "client": { # a single resource
|
75
|
-
"number": "0800013", ..
|
76
|
-
"links":{} #links to actions for the resource (comming soon)
|
77
|
-
}, ...
|
78
|
-
],
|
79
|
-
collection": { # information about the collection
|
80
|
-
"total_pages": 1,
|
81
|
-
"total_entries": 3,
|
82
|
-
"current_page": 1,
|
83
|
-
"per_page": 30
|
84
|
-
},
|
85
|
-
"links": { # links for the collection
|
86
|
-
"prev": "/api/clients?page=0",
|
87
|
-
"next": "/api/clients?page=2",
|
88
|
-
"self": "/api/clients?page=1"
|
89
|
-
},
|
90
|
-
}
|
91
|
-
|
92
|
-
==== Filtering
|
93
|
-
|
94
|
-
Filtering data can be achived by adding a filter parameter to the url.
|
95
|
-
|
96
|
-
All objects which can be tagged(clients, documents, products) can be filter by a tag param, taking one or multiple tags:
|
97
|
-
GET xy.salesking.eu/api/invoices?filter[tags]=Agentur
|
98
|
-
GET xy.salesking.eu/api/invoices?filter[tags]=Agentur Grafik
|
99
|
-
# find all objects without tags
|
100
|
-
GET xy.salesking.eu/api/invoices?filter[not_tagged]=1
|
101
|
-
|
102
|
-
All objects have a q-search available. The fields to be searched in can be seen inside SalesKing, behind the search field above list.
|
103
|
-
GET xy.salesking.eu/api/invoices?q=0800013
|
104
|
-
GET xy.salesking.eu/api/invoices?filter[q]=0800013
|
105
|
-
|
106
|
-
Document specific filters
|
107
|
-
# find all documents for a client
|
108
|
-
GET xy.salesking.eu/api/invoices?filter[client]=:client_id
|
109
|
-
|
110
|
-
Client filter:
|
111
|
-
# find clients organisation or lastname starting with A
|
112
|
-
GET xy.salesking.eu/api/clients?filter[letter]=A
|
113
|
-
|
114
|
-
=== POST / Create data
|
115
|
-
|
116
|
-
To create a resource you can use the gem with its methods or make a POST request containing the json for a single resource.
|
117
|
-
The JSON format can be seen in each of the resources: http://github.com/salesking/sk-api/tree/master/lib/resources/
|
118
|
-
|
119
|
-
POST https://my-sub.salesking.eu/invoices.json content-type application/json
|
120
|
-
|
121
|
-
This a minimal json to create a draft invoice:
|
122
|
-
|
123
|
-
{"invoice": {
|
124
|
-
"due_days": 14,
|
125
|
-
"line_items": [
|
126
|
-
{
|
127
|
-
"quantity_unit": "Stuck",
|
128
|
-
"tax": 19,
|
129
|
-
"price_single": 0,
|
130
|
-
"position": 1,
|
131
|
-
"quantity": 21,
|
132
|
-
"description": "dep38usabq4Boxen kostenlos"
|
133
|
-
},
|
134
|
-
{
|
135
|
-
"quantity_unit": "Stuck",
|
136
|
-
"tax": 19,
|
137
|
-
"price_single": 0.042022,
|
138
|
-
"position": 2,
|
139
|
-
"quantity": 21,
|
140
|
-
"description": "dep38usabq4 Boxen"
|
141
|
-
}
|
142
|
-
],
|
143
|
-
"title": "Dabei",
|
144
|
-
"client_id": "c5d5xIwZGr3R56abxfpGMl",
|
145
|
-
"address_field": "Wurst Bolle\nHalve-Hahn Alle 4711\n50733 Köln-Nippes"
|
146
|
-
}}
|
147
|
-
|
148
|
-
Some quick hints on document creation:
|
149
|
-
|
150
|
-
* The line items array does not need prefixes .. (sry little inconsistency here)
|
151
|
-
* Dates are formatted like <tt>yyyy-mm-dd 2010-09-08</tt>
|
152
|
-
* <tt>"price_total": 0.88, "price_tax": 0.167</tt> can be ommited are calculated by sk => read only
|
153
|
-
* <tt>due_date</tt> if left out will be auto calculated from due days. If date and due date are given due_days are not taken into consideration.
|
154
|
-
* <tt>status: draft</tt> is default, so can be omitted
|
155
|
-
* <tt>client_id</tt> must be given as uuid of the client object
|
156
|
-
* line items with quantity of 0 are kicked
|
157
|
-
* If you create the doc as draft you can leave out any dates. When “opened” in salesking the date will be set and due date is calculated from due_days
|
158
|
-
* If you create the invoice as "open" you must set a number(and date), by now there is no api method to get the next number.
|
159
|
-
* The proposed workflow is to create the document as draft and continue (open/send/close) in SalesKing.
|
160
|
-
|
161
|
-
|
162
|
-
For more information on how to use take a look into the tests/specs:
|
163
|
-
|
164
|
-
http://github.com/salesking/sk-api/tree/master/spec/resources/
|
165
|
-
|
166
|
-
=== PUT / Update data
|
167
|
-
|
168
|
-
To Update a client:
|
169
|
-
|
170
|
-
PUT ( application/json ) to ../api/clients/:id
|
171
|
-
{
|
172
|
-
'client':
|
173
|
-
{
|
174
|
-
'gender':'male',
|
175
|
-
'first_name': "Andrew"
|
176
|
-
}
|
177
|
-
}
|
178
|
-
|
179
|
-
=== DELETE / kill data
|
180
|
-
|
181
|
-
To delete a record simply issue a DELETE request to a resource url:
|
182
|
-
|
183
|
-
DELETE https://demo.salesking.eu/clients/:id
|
184
|
-
|
185
|
-
== Ruby Example
|
186
|
-
|
187
|
-
Since the sk-api gem provides a wrapper around the whole url/request stuff its
|
188
|
-
pretty straight forward to use:
|
189
|
-
|
190
|
-
class SomeMiddleware
|
191
|
-
include SKApi::Resources
|
192
|
-
|
193
|
-
def initialize()
|
194
|
-
# init api connection => just an example depending on your code structure do it wherever you want
|
195
|
-
set_api_connection
|
196
|
-
end
|
197
|
-
|
198
|
-
def create_client(last_name)
|
199
|
-
# create a new client object
|
200
|
-
client = SKApi::Resources::Client.new(:last_name=> last_name)
|
201
|
-
# set more data
|
202
|
-
client.first_name = "Meister"
|
203
|
-
# save it, which also does the remote saving action
|
204
|
-
client.save
|
205
|
-
end
|
206
|
-
|
207
|
-
def set_api_connection
|
208
|
-
SKApi::Resources::Base.set_connection({
|
209
|
-
:site => 'my_sub.salesking.eu',
|
210
|
-
:user => 'demo@salesking.eu',
|
211
|
-
:password => 'password',
|
212
|
-
:format => :json # symbol expected
|
213
|
-
})
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
##### use it
|
218
|
-
a = SomeMiddleware.new
|
219
|
-
a.create_client('eder')
|
220
|
-
|
221
|
-
|
222
|
-
== Salesking API Resources
|
223
|
-
|
224
|
-
Right now the following resources are available:
|
225
|
-
|
226
|
-
* clients
|
227
|
-
* invoices
|
228
|
-
* products
|
229
|
-
* credit_notes
|
230
|
-
|
231
|
-
See classes here:
|
232
|
-
http://github.com/salesking/sk-api/tree/master/lib/resources/
|
233
|
-
|
234
|
-
== Tests / Specs
|
235
|
-
|
236
|
-
To run the test you must insert some credentials into the spec helper.
|
237
|
-
We will gladly provide you with a test account on one of our development
|
238
|
-
systems.
|
239
|
-
|
240
|
-
|
241
|
-
Copyright (c) 2009, 2010 Georg Leciejewski, released under the MIT license
|
3
|
+
{Use our new SalesKing-SDK}[https://github.com/salesking/sk_sdk]
|
data/Rakefile
CHANGED
@@ -1,42 +1,21 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'rake'
|
3
|
-
require '
|
4
|
-
require '
|
2
|
+
require 'rspec'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'rdoc/task'
|
5
|
+
require 'bundler/gem_helper'
|
6
|
+
|
7
|
+
Bundler::GemHelper.install_tasks
|
5
8
|
|
6
|
-
begin
|
7
|
-
require 'jeweler'
|
8
|
-
Jeweler::Tasks.new do |gem|
|
9
|
-
gem.name = "sk-api"
|
10
|
-
gem.summary = %Q{Interact with SalesKing}
|
11
|
-
gem.description = %Q{Interact with SalesKing}
|
12
|
-
gem.email = "gl@salesking.eu"
|
13
|
-
gem.homepage = "http://github.com/salesking/sk-api"
|
14
|
-
gem.authors = ["Georg Leciejewski"]
|
15
|
-
gem.add_development_dependency "rspec", ">= 0"
|
16
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
-
end
|
18
|
-
Jeweler::GemcutterTasks.new
|
19
|
-
rescue LoadError
|
20
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
|
-
end
|
22
9
|
|
23
10
|
desc 'Default: run specs.'
|
24
11
|
task :default => :spec
|
25
12
|
|
26
|
-
spec_files = Rake::FileList["spec/**/*_spec.rb"]
|
27
|
-
|
28
13
|
desc "Run specs"
|
29
|
-
|
30
|
-
t.
|
31
|
-
|
14
|
+
RSpec::Core::RakeTask.new do |t|
|
15
|
+
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
16
|
+
# Put spec opts in a file named .rspec in root
|
32
17
|
end
|
33
18
|
|
34
|
-
desc "Generate code coverage"
|
35
|
-
Spec::Rake::SpecTask.new(:coverage) do |t|
|
36
|
-
t.spec_files = spec_files
|
37
|
-
t.rcov = true
|
38
|
-
t.rcov_opts = ['--exclude', 'spec,/var/lib/gems']
|
39
|
-
end
|
40
19
|
|
41
20
|
desc 'Generate sk-api documentation.'
|
42
21
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
data/lib/patches/README
CHANGED
data/lib/patches/ar2/base.rb
CHANGED
@@ -22,7 +22,9 @@ module ActiveResource
|
|
22
22
|
|
23
23
|
# override ARes method to parse only the client part
|
24
24
|
def load_attributes_from_response(response)
|
25
|
-
if response['
|
25
|
+
if (response['Transfer-Encoding'] == 'chunked' ||
|
26
|
+
(!response['Content-Length'].blank? && response['Content-Length'] != "0")) &&
|
27
|
+
!response.body.nil? && response.body.strip.size > 0
|
26
28
|
load( self.class.format.decode(response.body)[self.class.element_name] )
|
27
29
|
end
|
28
30
|
end
|
data/lib/patches/ar3/base.rb
CHANGED
@@ -5,8 +5,11 @@ module ActiveResource
|
|
5
5
|
|
6
6
|
# override ARes method to parse only the client part
|
7
7
|
def load_attributes_from_response(response)
|
8
|
-
if response['
|
8
|
+
if (response['Transfer-Encoding'] == 'chunked' ||
|
9
|
+
(!response['Content-Length'].blank? && response['Content-Length'] != "0")) &&
|
10
|
+
!response.body.nil? && response.body.strip.size > 0
|
9
11
|
load( self.class.format.decode(response.body)[self.class.element_name] )
|
12
|
+
@persisted = true
|
10
13
|
end
|
11
14
|
end
|
12
15
|
|
data/lib/resources/base.rb
CHANGED
@@ -4,12 +4,19 @@ module SKApi
|
|
4
4
|
class Base < ActiveResource::Base
|
5
5
|
include SKApi::Utils::Serializer
|
6
6
|
self.format = :json # bug in AR must be set here
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
# hook before init in activeresource base because json comes in nested:
|
8
|
+
# {client={data}
|
9
|
+
if ActiveResource::VERSION::MAJOR == 3 && ActiveResource::VERSION::MINOR > 0
|
10
|
+
def initialize(attributes = {}, *args)
|
11
|
+
attr = attributes[self.class.element_name] || attributes
|
12
|
+
super(attr, *args)
|
13
|
+
end
|
14
|
+
else
|
15
|
+
def initialize(attributes = {})
|
16
|
+
attr = attributes[self.class.element_name] || attributes
|
17
|
+
super(attr)
|
18
|
+
end
|
19
|
+
end
|
13
20
|
|
14
21
|
# Define the connection to be used when talking to a salesking server
|
15
22
|
def self.set_connection(opts)
|
data/lib/resources/invoice.rb
CHANGED
@@ -6,19 +6,6 @@ module SKApi
|
|
6
6
|
save_with_validation
|
7
7
|
end
|
8
8
|
|
9
|
-
def open
|
10
|
-
self.put(:open, :id => self.id) # PUT /invoices/:id/open
|
11
|
-
end
|
12
|
-
|
13
|
-
# rethink
|
14
|
-
def print(template_id)
|
15
|
-
self.get(:print, :template_id => template_id) # GET /invoices.pdf?template_id=:ids
|
16
|
-
end
|
17
|
-
|
18
|
-
def mail(template_id, cc, bcc)
|
19
|
-
self.get(:print, :template_id => template_id) # GET /invoices.pdf?template_id=:ids
|
20
|
-
end
|
21
|
-
|
22
9
|
##########################################################################
|
23
10
|
# Class methods
|
24
11
|
##########################################################################
|
@@ -54,14 +41,8 @@ module SKApi
|
|
54
41
|
|
55
42
|
def self.api_links
|
56
43
|
#internal links on fields=> id => salesking.eu/clients/4567.json
|
44
|
+
#external links to actions and related objects => invoeis => salesking.eu/clients/4567/invoices.json
|
57
45
|
[:edit, :destroy, :copy, :print, :show, :payments, :payment_new]
|
58
|
-
# [ :edit,
|
59
|
-
# :destroy,
|
60
|
-
# { :copy =>"invoices/new?source=#{self.id}" },
|
61
|
-
# :open => "PUT invoices/#{self.id}/open",
|
62
|
-
# :print,
|
63
|
-
# :show, ]
|
64
|
-
|
65
46
|
end
|
66
47
|
end
|
67
48
|
end
|
data/lib/sk_api.rb
CHANGED
data/lib/version.rb
ADDED
data/sk-api.gemspec
CHANGED
@@ -1,12 +1,9 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
|
-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'version'
|
6
4
|
Gem::Specification.new do |s|
|
7
5
|
s.name = %q{sk-api}
|
8
|
-
s.version =
|
9
|
-
|
6
|
+
s.version = SKApi::VERSION
|
10
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
8
|
s.authors = ["Georg Leciejewski"]
|
12
9
|
s.date = %q{2010-11-07}
|
@@ -15,68 +12,23 @@ Gem::Specification.new do |s|
|
|
15
12
|
s.extra_rdoc_files = [
|
16
13
|
"README.rdoc"
|
17
14
|
]
|
18
|
-
|
19
|
-
".gitignore",
|
20
|
-
"MIT-LICENSE",
|
21
|
-
"Manifest",
|
22
|
-
"README.rdoc",
|
23
|
-
"Rakefile",
|
24
|
-
"VERSION",
|
25
|
-
"init.rb",
|
26
|
-
"lib/patches/README",
|
27
|
-
"lib/patches/ar2/base.rb",
|
28
|
-
"lib/patches/ar2/validations.rb",
|
29
|
-
"lib/patches/ar3/base.rb",
|
30
|
-
"lib/patches/ar3/validations.rb",
|
31
|
-
"lib/resources/address.rb",
|
32
|
-
"lib/resources/base.rb",
|
33
|
-
"lib/resources/client.rb",
|
34
|
-
"lib/resources/credit_note.rb",
|
35
|
-
"lib/resources/invoice.rb",
|
36
|
-
"lib/resources/line_item.rb",
|
37
|
-
"lib/resources/product.rb",
|
38
|
-
"lib/sk_api.rb",
|
39
|
-
"lib/utils/field_map.rb",
|
40
|
-
"lib/utils/serializer.rb",
|
41
|
-
"sk-api.gemspec",
|
42
|
-
"spec/resources/client_spec.rb",
|
43
|
-
"spec/resources/credit_note_spec.rb",
|
44
|
-
"spec/resources/invoice_spec.rb",
|
45
|
-
"spec/resources/product_spec.rb",
|
46
|
-
"spec/spec_helper.rb",
|
47
|
-
"spec/utils/field_map_spec.rb",
|
48
|
-
"tasks/sk_api_tasks.rake",
|
49
|
-
"vendor/jsonschema-1.0.0/README.rdoc",
|
50
|
-
"vendor/jsonschema-1.0.0/Rakefile",
|
51
|
-
"vendor/jsonschema-1.0.0/lib/jsonschema.rb",
|
52
|
-
"vendor/jsonschema-1.0.0/ruby-jsonschema.gemspec",
|
53
|
-
"vendor/jsonschema-1.0.0/test/jsonschema_test.rb"
|
54
|
-
]
|
15
|
+
|
55
16
|
s.homepage = %q{http://github.com/salesking/sk-api}
|
56
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
57
17
|
s.require_paths = ["lib"]
|
58
18
|
s.rubygems_version = %q{1.3.7}
|
59
19
|
s.summary = %q{Interact with SalesKing}
|
60
|
-
s.
|
61
|
-
|
62
|
-
|
63
|
-
"spec/resources/invoice_spec.rb",
|
64
|
-
"spec/resources/product_spec.rb",
|
65
|
-
"spec/spec_helper.rb",
|
66
|
-
"spec/utils/field_map_spec.rb"
|
67
|
-
]
|
20
|
+
s.executables = nil
|
21
|
+
s.files = `git ls-files`.split("\n").reject{|i| i[/^docs\//] }
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
68
23
|
|
69
|
-
|
70
|
-
|
71
|
-
s.specification_version = 3
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
s.rubygems_version = %q{1.6.2}
|
72
26
|
|
73
|
-
|
74
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
75
|
-
else
|
76
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
77
|
-
end
|
78
|
-
else
|
79
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
80
|
-
end
|
81
|
-
end
|
27
|
+
s.add_runtime_dependency 'activeresource', '< 3'
|
82
28
|
|
29
|
+
s.add_development_dependency 'rdoc'
|
30
|
+
s.add_development_dependency 'rspec'
|
31
|
+
s.add_development_dependency 'simplecov'
|
32
|
+
s.add_development_dependency 'xml-simple'
|
33
|
+
s.add_development_dependency 'rake', '>= 0.9.2'
|
34
|
+
end
|