harvested 3.0.0.rc1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.md +2 -0
- data/README.md +11 -12
- data/examples/basics.rb +5 -5
- data/examples/clear_account.rb +9 -9
- data/examples/project_create_script.rb +5 -5
- data/examples/task_assignments.rb +6 -6
- data/examples/user_assignments.rb +6 -6
- data/harvested.gemspec +2 -2
- data/lib/harvest/api/base.rb +1 -1
- data/lib/harvest/api/projects.rb +1 -1
- data/lib/harvest/model.rb +1 -1
- data/lib/harvest/project.rb +0 -11
- data/lib/harvest/version.rb +1 -1
- data/spec/functional/account_spec.rb +2 -2
- data/spec/functional/reporting_spec.rb +2 -0
- data/spec/harvest/project_spec.rb +1 -7
- data/spec/harvest/task_assignment_spec.rb +2 -2
- data/spec/harvest/user_assignment_spec.rb +2 -2
- metadata +8 -10
- data/spec/test_rubies +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9671d7604da7b9da9bee9fd922b00cac9aa08a9
|
4
|
+
data.tar.gz: e0295ab8a592616dff967a03a43ec9b0c669d3b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fac81456746627a0ff7372defcf6013ada70ae07e53013085c7844761b1a853c9f1f666af0d0fcdd3a83969a3b7d78c01b6b1ca499980e089301d2d5c56c154
|
7
|
+
data.tar.gz: d54e0f9f6b67aa16747cf2f527d954a5bdc42501819727396b43a2abb0a4d53423940d85e0ea5b5378b2c501e02e800e4a895090c8890460c2bcce3b0c75f581
|
data/HISTORY.md
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
* Allow OAuth authentication (Thanks Brendan Loudermilk - @bloudermilk)
|
4
4
|
* Allow expenses_by_project to be retrieved (Thanks Jordan Yeo - @jordanyeo)
|
5
5
|
* Reports now pass through any remaining options (Thanks Philip Arndt - @parndt)
|
6
|
+
* No longer requires Hashie v1 as a dependency
|
7
|
+
* Fixes bug where project hints were not handled properly
|
6
8
|
|
7
9
|
## 2.0.0 - April 23, 2014
|
8
10
|
* Every connection must be SSL
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ This is a Ruby wrapper for the [Harvest API](http://www.getharvest.com/api).
|
|
9
9
|
## Examples
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
harvest = Harvest.client('yoursubdomain', 'yourusername', 'yourpassword')
|
12
|
+
harvest = Harvest.client(subdomain: 'yoursubdomain', username: 'yourusername', password: 'yourpassword')
|
13
13
|
harvest.projects.all # list out projects
|
14
14
|
|
15
15
|
client = Harvest::Client.new(:name => "Billable Company LTD.")
|
@@ -21,7 +21,7 @@ You can also pass query options in as the last parameter on any objects `all` fi
|
|
21
21
|
method, for example to find all the projects for client ID 12345:
|
22
22
|
|
23
23
|
```ruby
|
24
|
-
harvest = Harvest.client('yoursubdomain', 'yourusername', 'yourpassword')
|
24
|
+
harvest = Harvest.client(subdomain: 'yoursubdomain', username: 'yourusername', password: 'yourpassword')
|
25
25
|
harvest.projects.all(nil, :client => 12345)
|
26
26
|
```
|
27
27
|
|
@@ -33,6 +33,10 @@ You can pass in any hash of query attributes you wish as per the
|
|
33
33
|
|
34
34
|
You can find more examples in `/examples` and in the documentation for Harvest::Base
|
35
35
|
|
36
|
+
## Permissions
|
37
|
+
|
38
|
+
For most operations you need to be an Admin on the Harvest account. You can do few select things as normal users and project managers, but you will likely get errors.
|
39
|
+
|
36
40
|
## Hardy Client
|
37
41
|
|
38
42
|
The guys at Harvest built a great API, but there are always dangers in writing code that depends on an API. For example, HTTP Timeouts, Occasional Bad Gateways, and Rate Limiting issues need to be accounted for.
|
@@ -40,13 +44,13 @@ The guys at Harvest built a great API, but there are always dangers in writing c
|
|
40
44
|
Using `Harvested#client` your code needs to handle all these situations. However you can also use `Harvested#hardy_client` which will retry errors and wait for Rate Limit resets.
|
41
45
|
|
42
46
|
```ruby
|
43
|
-
harvest = Harvest.hardy_client('yoursubdomain', 'yourusername', 'yourpassword')
|
47
|
+
harvest = Harvest.hardy_client(subdomain: 'yoursubdomain', username: 'yourusername', password: 'yourpassword')
|
44
48
|
harvest.projects.all # This will wait for the Rate Limit reset if you have gone over your limit
|
45
49
|
```
|
46
50
|
|
47
51
|
## Ruby support
|
48
52
|
|
49
|
-
Harvested's tests are currently
|
53
|
+
Harvested's tests are currently supports ruby 2.0+
|
50
54
|
|
51
55
|
## Links
|
52
56
|
|
@@ -72,8 +76,9 @@ If you want to contribute an enhancement or a fix:
|
|
72
76
|
|
73
77
|
1. Fork the project on github http://github.com/zmoazeni/harvested
|
74
78
|
2. Make your changes with tests
|
75
|
-
3. Commit the changes without messing with the Rakefile,
|
76
|
-
4.
|
79
|
+
3. Commit the changes without messing with the Rakefile, or Version
|
80
|
+
4. Make an entry to HISTORY.md
|
81
|
+
5. Send me a pull request
|
77
82
|
|
78
83
|
Note on running tests: most specs run against a live Harvest account. To run the suite, sign up for a free trial account and fill out `/spec/support/harvest_credentials.yml` *(a sample harvest_credentials.example.yml has been included)*.
|
79
84
|
|
@@ -81,12 +86,6 @@ Note on running tests: most specs run against a live Harvest account. To run the
|
|
81
86
|
|
82
87
|
The tests use [VCR](https://github.com/myronmarston/vcr) to cache the API responses. This is a great boon for running the tests offline. While uncommon, sometimes the Harvest API will send an erroneous response, VCR will cache it, and subsequent runs will use the incorrect cached response. In order to clear the cached responses, you can run the specs with the `VCR_REFRESH` environmental variable set to true (e.g. `VCR_REFRESH=true bundle exec rake spec`).
|
83
88
|
|
84
|
-
Using [rvm](https://rvm.beginrescueend.com/) you can run the tests against the popular ruby runtimes by running:
|
85
|
-
|
86
|
-
./spec/test_rubies
|
87
|
-
|
88
|
-
Each runtime needs to be installed in rvm along with the bundler gem.
|
89
|
-
|
90
89
|
## Notes on Harvest Estimates
|
91
90
|
|
92
91
|
Estimates aren't currently supported due to lack of an API. If this opens up, harvested will include them.
|
data/examples/basics.rb
CHANGED
@@ -4,7 +4,7 @@ subdomain = 'yoursubdomain'
|
|
4
4
|
username = 'yourusername'
|
5
5
|
password = 'yourpassword'
|
6
6
|
|
7
|
-
harvest = Harvest.hardy_client(subdomain, username, password)
|
7
|
+
harvest = Harvest.hardy_client(subdomain: subdomain, username: username, password: password)
|
8
8
|
|
9
9
|
# Print out all users, clients, and projects on the account
|
10
10
|
puts "Users:"
|
@@ -18,18 +18,18 @@ harvest.projects.all.each {|project| p project }
|
|
18
18
|
|
19
19
|
# Create a Client add a Project to that Client, Add a Task to the Project, track some Time against the Project/Task, and then Run a report against all time I've submitted
|
20
20
|
|
21
|
-
client = Harvest::Client.new(:
|
21
|
+
client = Harvest::Client.new(name: 'SuprCorp')
|
22
22
|
client = harvest.clients.create(client)
|
23
23
|
|
24
|
-
project = Harvest::Project.new(:
|
24
|
+
project = Harvest::Project.new(name: 'SuprGlu', client_id: client.id, notes: 'Some notes about this project')
|
25
25
|
project = harvest.projects.create(project)
|
26
26
|
|
27
27
|
harvest.projects.create_task(project, 'Bottling Glue')
|
28
28
|
task_assignment = harvest.task_assignments.all(project).first
|
29
29
|
|
30
|
-
time_entry = Harvest::TimeEntry.new(:
|
30
|
+
time_entry = Harvest::TimeEntry.new(notes: 'Bottled glue today', hours: 8, spent_at: "04/11/2010", project_id: project.id, task_id: task_assignment.task_id)
|
31
31
|
time_entry = harvest.time.create(time_entry)
|
32
32
|
|
33
33
|
entries = harvest.reports.time_by_project(project, Time.parse("04/11/2010"), Time.parse("04/12/2010"))
|
34
34
|
puts "Entries:"
|
35
|
-
entries.each {|e| p e}
|
35
|
+
entries.each {|e| p e}
|
data/examples/clear_account.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
# This is commented out because it can be very dangerous if run against a production account
|
2
2
|
|
3
3
|
# require "harvested"
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# subdomain = 'yoursubdomain'
|
6
6
|
# username = 'yourusername'
|
7
7
|
# password = 'yourpassword'
|
8
|
-
#
|
9
|
-
# api = Harvest.hardy_client(subdomain, username, password)
|
10
|
-
#
|
8
|
+
#
|
9
|
+
# api = Harvest.hardy_client(subdomain: subdomain, username: username, password: password)
|
10
|
+
#
|
11
11
|
# raise "Are you sure you want to do this? (comment out this exception if so)"
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# api.users.all.each do |u|
|
14
14
|
# api.users.delete(u) if u.email != username
|
15
15
|
# end
|
16
16
|
# my_user = api.users.all.first
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# api.reports.time_by_user(my_user, Time.parse('01/01/2000'), Time.now).each do |time|
|
19
19
|
# api.time.delete(time)
|
20
20
|
# end
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# api.reports.expenses_by_user(my_user, Time.parse('01/01/2000'), Time.now).each do |time|
|
23
23
|
# api.expenses.delete(time)
|
24
24
|
# end
|
25
|
-
#
|
25
|
+
#
|
26
26
|
# %w(expenses expense_categories projects contacts clients tasks).each do |collection|
|
27
27
|
# api.send(collection).all.each {|m| api.send(collection).delete(m) }
|
28
|
-
# end
|
28
|
+
# end
|
@@ -13,7 +13,7 @@ subdomain = 'yoursubdomain'
|
|
13
13
|
username = 'yourusername'
|
14
14
|
password = 'yourpassword'
|
15
15
|
|
16
|
-
harvest = Harvest.hardy_client(subdomain, username, password)
|
16
|
+
harvest = Harvest.hardy_client(subdomain: subdomain, username: username, password: password)
|
17
17
|
|
18
18
|
puts "\nPlease search for a client by typing part of their name:"
|
19
19
|
cname = gets.chomp
|
@@ -35,7 +35,7 @@ when 1..15
|
|
35
35
|
puts " #{i+1}. #{c.name}"
|
36
36
|
end
|
37
37
|
|
38
|
-
client_index = gets.chomp.to_i - 1
|
38
|
+
client_index = gets.chomp.to_i - 1
|
39
39
|
else
|
40
40
|
puts "Too many client matches. Please try a more specific search term.\n"
|
41
41
|
abort
|
@@ -69,13 +69,13 @@ tasks = harvest.tasks.all.select { |t| use_tasks.include?(t.name) }
|
|
69
69
|
|
70
70
|
# Create the project
|
71
71
|
puts "Creating new project: \"#{project_name}\" for client: #{client.name}\n"
|
72
|
-
project = Harvest::Project.new(:
|
72
|
+
project = Harvest::Project.new(name: project_name, client_id: client.id, billable: billable, notes: notes)
|
73
73
|
project = harvest.projects.create(project)
|
74
74
|
|
75
75
|
# Add all the project tasks to the project
|
76
76
|
tasks.each do |t|
|
77
77
|
puts " Adding Task: #{t.name}"
|
78
|
-
task_assignment = Harvest::TaskAssignment.new(:
|
78
|
+
task_assignment = Harvest::TaskAssignment.new(task_id: t.id, project_id: project.id)
|
79
79
|
task_assignment = harvest.task_assignments.create(task_assignment)
|
80
80
|
end
|
81
81
|
|
@@ -85,7 +85,7 @@ harvest.users.all.each do |u|
|
|
85
85
|
next unless u.is_active?
|
86
86
|
|
87
87
|
puts " Adding User: #{u.first_name} #{u.last_name}"
|
88
|
-
user_assignment = Harvest::UserAssignment.new(:
|
88
|
+
user_assignment = Harvest::UserAssignment.new(user_id: u.id, project_id: project.id)
|
89
89
|
harvest.user_assignments.create(user_assignment)
|
90
90
|
end
|
91
91
|
|
@@ -4,14 +4,14 @@ subdomain = 'yoursubdomain'
|
|
4
4
|
username = 'yourusername'
|
5
5
|
password = 'yourpassword'
|
6
6
|
|
7
|
-
harvest = Harvest.hardy_client(subdomain, username, password)
|
7
|
+
harvest = Harvest.hardy_client(subdomain: subdomain, username: username, password: password)
|
8
8
|
|
9
9
|
# Create a Client add a Project to that Client
|
10
10
|
|
11
|
-
client = Harvest::Client.new(:
|
11
|
+
client = Harvest::Client.new(name: 'SuprCorp')
|
12
12
|
client = harvest.clients.create(client)
|
13
13
|
|
14
|
-
project = Harvest::Project.new(:
|
14
|
+
project = Harvest::Project.new(name: 'SuprGlu', client_id: client.id, notes: 'Some notes about this project')
|
15
15
|
project = harvest.projects.create(project)
|
16
16
|
|
17
17
|
# You can create an assign a task in one call
|
@@ -19,9 +19,9 @@ harvest.projects.create_task(project, 'Bottling Glue')
|
|
19
19
|
puts "Assigned the task 'Bottling Glue' to the project 'SuprGlu'"
|
20
20
|
|
21
21
|
# You can explicitly create the task and then assign it
|
22
|
-
task = Harvest::Task.new(:
|
22
|
+
task = Harvest::Task.new(name: 'Packaging Glue', hourly_rate: 30, billable: true)
|
23
23
|
task = harvest.tasks.create(task)
|
24
24
|
|
25
|
-
task_assignment = Harvest::TaskAssignment.new(:
|
25
|
+
task_assignment = Harvest::TaskAssignment.new(task_id: task.id, project_id: project.id)
|
26
26
|
task_assignment = harvest.task_assignments.create(task_assignment)
|
27
|
-
puts "Assigned the task 'Packaging Glue' to the project 'SuprGlu'"
|
27
|
+
puts "Assigned the task 'Packaging Glue' to the project 'SuprGlu'"
|
@@ -4,21 +4,21 @@ subdomain = 'yoursubdomain'
|
|
4
4
|
username = 'userusername'
|
5
5
|
password = 'yourpassword'
|
6
6
|
|
7
|
-
harvest = Harvest.hardy_client(subdomain, username, password)
|
7
|
+
harvest = Harvest.hardy_client(subdomain: subdomain, username: username, password: password)
|
8
8
|
|
9
9
|
# Create a Client, Project, and a User then assign that User to that Project
|
10
10
|
|
11
|
-
client = Harvest::Client.new(:
|
11
|
+
client = Harvest::Client.new(name: 'SuprCorp')
|
12
12
|
client = harvest.clients.create(client)
|
13
13
|
|
14
|
-
project = Harvest::Project.new(:
|
14
|
+
project = Harvest::Project.new(name: 'SuprGlu', client_id: client.id, notes: 'Some notes about this project')
|
15
15
|
project = harvest.projects.create(project)
|
16
16
|
|
17
17
|
harvest.projects.create_task(project, 'Bottling Glue')
|
18
18
|
|
19
|
-
user = Harvest::User.new(:
|
19
|
+
user = Harvest::User.new(first_name: 'Jane', last_name: 'Doe', email: 'jane@doe.com', timezone: :est, password: 'secure')
|
20
20
|
user = harvest.users.create(user)
|
21
21
|
|
22
|
-
user_assignment = Harvest::UserAssignment.new(:
|
22
|
+
user_assignment = Harvest::UserAssignment.new(user_id: user.id, project_id: project.id)
|
23
23
|
harvest.user_assignments.create(user_assignment)
|
24
|
-
puts 'Assigned Jane Doe to the project "SuprGlu"'
|
24
|
+
puts 'Assigned Jane Doe to the project "SuprGlu"'
|
data/harvested.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Harvest::VERSION
|
9
9
|
spec.authors = ["Zach Moazeni"]
|
10
10
|
spec.email = ["zach.moazeni@gmail.com"]
|
11
|
-
spec.summary
|
11
|
+
spec.summary = "A Ruby Wrapper for the Harvest API http://www.getharvest.com/"
|
12
12
|
spec.description = "Harvested wraps the Harvest API concisely without the use of Rails dependencies. More information about the Harvest API can be found on their website (http://www.getharvest.com/api). For support hit up the Mailing List (http://groups.google.com/group/harvested)"
|
13
13
|
spec.homepage = "http://github.com/zmoazeni/harvested"
|
14
14
|
spec.license = "MIT"
|
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = '>= 2.0'
|
22
22
|
|
23
23
|
spec.add_runtime_dependency('httparty')
|
24
|
-
spec.add_runtime_dependency('hashie'
|
24
|
+
spec.add_runtime_dependency('hashie')
|
25
25
|
spec.add_runtime_dependency('json')
|
26
26
|
end
|
data/lib/harvest/api/base.rb
CHANGED
@@ -48,7 +48,7 @@ module Harvest
|
|
48
48
|
when 401
|
49
49
|
raise Harvest::AuthenticationFailed.new(response, params)
|
50
50
|
when 404
|
51
|
-
raise Harvest::NotFound.new(response, params)
|
51
|
+
raise Harvest::NotFound.new(response, params, "Do you have sufficient privileges?")
|
52
52
|
when 500
|
53
53
|
raise Harvest::ServerError.new(response, params)
|
54
54
|
when 502
|
data/lib/harvest/api/projects.rb
CHANGED
@@ -10,7 +10,7 @@ module Harvest
|
|
10
10
|
def all(*)
|
11
11
|
super
|
12
12
|
rescue NotFound => e
|
13
|
-
raise NotFound.new(e.response, e.params, "Do you have sufficient
|
13
|
+
raise NotFound.new(e.response, e.params, "Do you have sufficient privileges? If not, consider using time.trackable_projects instead.")
|
14
14
|
end
|
15
15
|
|
16
16
|
# Creates and Assigns a task to the project
|
data/lib/harvest/model.rb
CHANGED
data/lib/harvest/project.rb
CHANGED
@@ -33,16 +33,5 @@ module Harvest
|
|
33
33
|
json[json_root].delete("hint_latest_record_at")
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
def self.parse(json)
|
38
|
-
json = String === json ? JSON.parse(json) : json
|
39
|
-
Array.wrap(json).each do |attrs|
|
40
|
-
# need to cleanup some attributes
|
41
|
-
project_attrs = attrs[json_root] || {}
|
42
|
-
project_attrs["hint_latest_record_at"] = project_attrs.delete("hint-latest-record-at")
|
43
|
-
project_attrs["hint_earliest_record_at"] = project_attrs.delete("hint-earliest-record-at")
|
44
|
-
end
|
45
|
-
super(json)
|
46
|
-
end
|
47
36
|
end
|
48
37
|
end
|
data/lib/harvest/version.rb
CHANGED
@@ -4,10 +4,10 @@ describe 'account information' do
|
|
4
4
|
it 'returns the rate limit when requested' do
|
5
5
|
cassette('account1') do
|
6
6
|
status = harvest.account.rate_limit_status
|
7
|
-
status.max_calls.should ==
|
7
|
+
status.max_calls.should == 100
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it 'returns the result of whoami' do
|
12
12
|
cassette('account2') do
|
13
13
|
user = harvest.account.who_am_i
|
@@ -32,6 +32,7 @@ describe 'harvest reporting' do
|
|
32
32
|
harvest.reports.time_by_project(project2, Time.utc(2009, 12, 20), Time.utc(2009,12,30), billable: true).should == []
|
33
33
|
harvest.reports.time_by_project(project2, Time.utc(2009, 12, 20), Time.utc(2009,12,30), billable: false).first.should == entry2
|
34
34
|
|
35
|
+
sleep 10
|
35
36
|
harvest.reports.time_by_project(project1, Time.utc(2009, 12, 10), Time.utc(2009,12,30), {updated_since: Time.now.utc}).should == []
|
36
37
|
|
37
38
|
harvest.reports.time_by_user(user, Time.utc(2009, 12, 20), Time.utc(2009,12,30)).map(&:id).should == [entry1, entry2].map(&:id)
|
@@ -80,6 +81,7 @@ describe 'harvest reporting' do
|
|
80
81
|
harvest.reports.expenses_by_project(project, Time.utc(2009, 12, 20), Time.utc(2009,12,30)).first.should == expense
|
81
82
|
harvest.reports.expenses_by_user(user, Time.utc(2009, 12, 20), Time.utc(2009,12,30)).first.should == expense
|
82
83
|
|
84
|
+
sleep 10
|
83
85
|
harvest.reports.expenses_by_user(user, Time.utc(2009, 12, 20), Time.utc(2009,12,30), {updated_since: Time.now.utc}).should == []
|
84
86
|
|
85
87
|
my_user = harvest.users.all.detect {|u| u.email == credentials["username"]}
|
@@ -2,10 +2,4 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Harvest::Project do
|
4
4
|
it_behaves_like 'a json sanitizer', %w(hint_latest_record_at hint_earliest_record_at cache_version)
|
5
|
-
|
6
|
-
it "cleans up weird attributes" do
|
7
|
-
project = Harvest::Project.parse('[{"project":{"hint-earliest-record-at":10, "hint-latest-record-at":20}}]').first
|
8
|
-
project.hint_earliest_record_at.should == 10
|
9
|
-
project.hint_latest_record_at.should == 20
|
10
|
-
end
|
11
|
-
end
|
5
|
+
end
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Harvest::TaskAssignment do
|
4
4
|
context "task_as_json" do
|
5
5
|
it "generates the json for existing tasks" do
|
6
|
-
assignment = Harvest::TaskAssignment.new(:task =>
|
6
|
+
assignment = Harvest::TaskAssignment.new(:task => double(:task, :to_i => 3))
|
7
7
|
assignment.task_as_json.should == {"task" => {"id" => 3}}
|
8
8
|
end
|
9
9
|
end
|
10
|
-
end
|
10
|
+
end
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Harvest::UserAssignment do
|
4
4
|
describe "#user_as_json" do
|
5
5
|
it "should generate the xml for existing users" do
|
6
|
-
assignment = Harvest::UserAssignment.new(:user =>
|
6
|
+
assignment = Harvest::UserAssignment.new(:user => double(:user, :to_i => 3))
|
7
7
|
assignment.user_as_json.should == {"user" => {"id" => 3}}
|
8
8
|
end
|
9
9
|
end
|
10
|
-
end
|
10
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: harvested
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Moazeni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: hashie
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,7 +153,6 @@ files:
|
|
153
153
|
- spec/support/harvest_credentials.example.yml
|
154
154
|
- spec/support/harvested_helpers.rb
|
155
155
|
- spec/support/json_examples.rb
|
156
|
-
- spec/test_rubies
|
157
156
|
homepage: http://github.com/zmoazeni/harvested
|
158
157
|
licenses:
|
159
158
|
- MIT
|
@@ -169,9 +168,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
168
|
version: '2.0'
|
170
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
170
|
requirements:
|
172
|
-
- - "
|
171
|
+
- - ">="
|
173
172
|
- !ruby/object:Gem::Version
|
174
|
-
version:
|
173
|
+
version: '0'
|
175
174
|
requirements: []
|
176
175
|
rubyforge_project:
|
177
176
|
rubygems_version: 2.2.2
|
@@ -210,5 +209,4 @@ test_files:
|
|
210
209
|
- spec/support/harvest_credentials.example.yml
|
211
210
|
- spec/support/harvested_helpers.rb
|
212
211
|
- spec/support/json_examples.rb
|
213
|
-
- spec/test_rubies
|
214
212
|
has_rdoc:
|