habitica_client 0.0.7 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/README.md +3 -3
- data/habitica_client.gemspec +1 -0
- data/lib/habitica_client/api_base.rb +12 -0
- data/lib/habitica_client/client.rb +2 -2
- data/lib/habitica_client/restful.rb +4 -2
- data/lib/habitica_client/{user/task → task}/date_accessor.rb +3 -1
- data/lib/habitica_client/{user/task → task}/status.rb +1 -1
- data/lib/habitica_client/{user/task → task}/type.rb +1 -1
- data/lib/habitica_client/task.rb +45 -0
- data/lib/habitica_client/{user/tasks → tasks}/status.rb +1 -1
- data/lib/habitica_client/{user/tasks → tasks}/types.rb +1 -1
- data/lib/habitica_client/{user/tasks.rb → tasks.rb} +9 -13
- data/lib/habitica_client/user/stats.rb +11 -11
- data/lib/habitica_client/user.rb +3 -12
- data/lib/habitica_client/version.rb +1 -1
- data/lib/habitica_client.rb +5 -0
- data/lib/hashup.rb +1 -1
- data/spec/habit_client/{user/task_spec.rb → task_spec.rb} +18 -3
- data/spec/habit_client/{user/tasks_spec.rb → tasks_spec.rb} +3 -3
- data/spec/habit_client/user_spec.rb +0 -20
- data/spec/spec_helper.rb +1 -0
- metadata +28 -16
- data/lib/habitica_client/user/task.rb +0 -43
- data/spec/cassettes/.keep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc2e42de48e261575d3cec43ced4290ac9759fce
|
4
|
+
data.tar.gz: 14cd60f8f5885c64b2dd5cbc4653d0c502f4eca6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08aba3ec6e1018ffcb0911554231d606d0904e93c7f504a45c4159f9311508a408f2dced29d1a16a132b0c39e6c15a6b9a90b2e8021e7bb495ffc2325dbb91d9
|
7
|
+
data.tar.gz: 455fc761bc9b115d1a856174a20372ff8f6fe24e7b073eaa3a4a1368a4bca1fd9b757a020c42270891e3b393ae9c1ff0a7a3421aa2e1f0318d8e3d49c5798a8e
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.2
|
data/README.md
CHANGED
@@ -35,12 +35,12 @@ habit.user.stats.hp
|
|
35
35
|
# 50
|
36
36
|
|
37
37
|
# Get tasks
|
38
|
-
habit.
|
38
|
+
habit.tasks.each do |task|
|
39
39
|
puts task.text
|
40
40
|
end
|
41
41
|
|
42
42
|
# Create task
|
43
|
-
task = habit.
|
43
|
+
task = habit.tasks.create(
|
44
44
|
text: 'Do the dishes',
|
45
45
|
type: 'todo'
|
46
46
|
)
|
@@ -74,7 +74,7 @@ puts stats.player_class
|
|
74
74
|
|
75
75
|
### Task
|
76
76
|
```ruby
|
77
|
-
stats = habitica_client.
|
77
|
+
stats = habitica_client.tasks
|
78
78
|
|
79
79
|
tasks.each do |task|
|
80
80
|
puts task.daily?
|
data/habitica_client.gemspec
CHANGED
@@ -26,5 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency 'byebug', '~> 5.0'
|
27
27
|
spec.add_development_dependency 'yard', '~> 0.8'
|
28
28
|
spec.add_development_dependency 'redcarpet', '~> 3.3'
|
29
|
+
spec.add_development_dependency 'awesome_print', '~> 1.7'
|
29
30
|
spec.add_runtime_dependency 'httparty', '~> 0.13'
|
30
31
|
end
|
@@ -12,6 +12,18 @@ class HabiticaClient
|
|
12
12
|
@client = client
|
13
13
|
end
|
14
14
|
|
15
|
+
def data
|
16
|
+
@data ||= client.class.get(endpoint)['data']
|
17
|
+
end
|
18
|
+
|
19
|
+
def endpoint
|
20
|
+
self.class.instance_variable_get(:@endpoint)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.endpoint(url)
|
24
|
+
instance_variable_set(:@endpoint, url)
|
25
|
+
end
|
26
|
+
|
15
27
|
end
|
16
28
|
|
17
29
|
end
|
@@ -11,14 +11,14 @@ class HabiticaClient
|
|
11
11
|
|
12
12
|
include HTTParty
|
13
13
|
|
14
|
-
base_uri 'https://habitrpg.com:443/api/
|
14
|
+
base_uri 'https://habitrpg.com:443/api/v3/'
|
15
15
|
|
16
16
|
def initialize(user_id, api_token)
|
17
17
|
@user_id = user_id
|
18
18
|
@api_token = api_token
|
19
19
|
|
20
20
|
self.class.headers('User-Agent' => 'habitapi-rpg',
|
21
|
-
'Content-Type'
|
21
|
+
'Content-Type' => 'application/json',
|
22
22
|
'x-api-key' => @api_token,
|
23
23
|
'x-api-user' => @user_id)
|
24
24
|
end
|
@@ -74,9 +74,11 @@ class HabiticaClient
|
|
74
74
|
url,
|
75
75
|
body: to_json)
|
76
76
|
|
77
|
-
|
77
|
+
unless response.response.code =~ /2\d{2}/
|
78
|
+
raise ServerError, response['err']
|
79
|
+
end
|
78
80
|
|
79
|
-
response.parsed_response
|
81
|
+
response.parsed_response['data']
|
80
82
|
end
|
81
83
|
|
82
84
|
def post
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'forwardable'
|
3
|
+
require 'time'
|
4
|
+
require 'hashup'
|
5
|
+
require 'habitica_client/restful'
|
6
|
+
|
7
|
+
class HabiticaClient
|
8
|
+
|
9
|
+
# A user task, which can be a habit, daily, or todo.
|
10
|
+
class Task < HabiticaClient::Restful
|
11
|
+
|
12
|
+
require 'habitica_client/task/date_accessor'
|
13
|
+
require 'habitica_client/task/status'
|
14
|
+
require 'habitica_client/task/type'
|
15
|
+
|
16
|
+
extend DateAccessor
|
17
|
+
include Status
|
18
|
+
include Type
|
19
|
+
extend Hashup
|
20
|
+
|
21
|
+
endpoint '/tasks'
|
22
|
+
|
23
|
+
attr_accessor :user_id, :reminders, :id, :text, :notes, :value, :priority,
|
24
|
+
:attribute, :type, :tags, :checklist, :value, :priority,
|
25
|
+
:challenge, :down, :up, :history, :streak, :frequency,
|
26
|
+
:history, :completed, :every_x, :repeat, :collapse_checklist
|
27
|
+
|
28
|
+
date_accessor :created_at, :updated_at, :start_date, :date
|
29
|
+
|
30
|
+
hashup :id, :text, :notes, :value, :priority, :attribute, :type, :tags,
|
31
|
+
:checklist, :value, :priority, :challenge, :down, :up, :history,
|
32
|
+
:streak, :frequency, :history, :completed, :every_x, :repeat,
|
33
|
+
:collapse_checklist, :created_at, :updated_at, :start_date, :date
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def url
|
38
|
+
return "#{endpoint}/#{id}" unless new?
|
39
|
+
|
40
|
+
"#{endpoint}/user/#{id}"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -1,22 +1,24 @@
|
|
1
|
-
class HabiticaClient
|
1
|
+
class HabiticaClient
|
2
2
|
|
3
3
|
# An enumerable object of all the user's tasks.
|
4
4
|
#
|
5
5
|
# Also contains the endpoint for creating new tasks.
|
6
6
|
class Tasks < HabiticaClient::ApiBase
|
7
7
|
|
8
|
-
require 'habitica_client/
|
9
|
-
require 'habitica_client/
|
10
|
-
require 'habitica_client/
|
8
|
+
require 'habitica_client/tasks/types'
|
9
|
+
require 'habitica_client/tasks/status'
|
10
|
+
require 'habitica_client/task'
|
11
11
|
|
12
12
|
include Enumerable
|
13
13
|
include Types
|
14
14
|
include Status
|
15
15
|
|
16
|
+
endpoint '/tasks/user'
|
17
|
+
|
16
18
|
# Iterate over user tasks
|
17
|
-
def each
|
18
|
-
|
19
|
-
|
19
|
+
def each
|
20
|
+
data.each do |task|
|
21
|
+
yield Task.parse(client, task)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -27,12 +29,6 @@ class HabiticaClient::User
|
|
27
29
|
Task.new(client, attributes).save
|
28
30
|
end
|
29
31
|
|
30
|
-
private
|
31
|
-
|
32
|
-
def tasks
|
33
|
-
@tasks ||= client.class.get('/user/tasks')
|
34
|
-
end
|
35
|
-
|
36
32
|
end
|
37
33
|
|
38
34
|
end
|
@@ -4,11 +4,18 @@ require 'hashup'
|
|
4
4
|
|
5
5
|
class HabiticaClient::User
|
6
6
|
|
7
|
-
|
7
|
+
module StatsProperty
|
8
|
+
def stats
|
9
|
+
@stats ||= Stats.new(data['stats'])
|
10
|
+
end
|
11
|
+
end
|
8
12
|
|
13
|
+
class Stats
|
9
14
|
extend Forwardable
|
10
15
|
extend Hashup
|
11
16
|
|
17
|
+
attr_reader :stats
|
18
|
+
|
12
19
|
def_delegators :stats, :training, :buffs, :per, :int, :con, :str,
|
13
20
|
:points, :lvl, :gp, :exp, :mp, :hp, :player_class
|
14
21
|
|
@@ -20,16 +27,9 @@ class HabiticaClient::User
|
|
20
27
|
:gp, :exp, :mp, :hp, :player_class, :to_next_level,
|
21
28
|
:max_health, :max_mp
|
22
29
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def stats
|
32
|
-
@stats ||= OpenStruct.new(Stats.parse(client.class.get('/user')['stats']))
|
30
|
+
def initialize(api_data)
|
31
|
+
api_data['player_class'] = api_data['class'] # 'class' is reserved
|
32
|
+
@stats = OpenStruct.new(api_data)
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
data/lib/habitica_client/user.rb
CHANGED
@@ -5,21 +5,12 @@ class HabiticaClient
|
|
5
5
|
# The authed user.
|
6
6
|
class User < HabiticaClient::ApiBase
|
7
7
|
|
8
|
+
endpoint '/user/'
|
9
|
+
|
8
10
|
require 'habitica_client/user/stats'
|
9
|
-
require 'habitica_client/user/tasks'
|
10
11
|
|
11
|
-
# Returns user's stats.
|
12
|
-
#
|
13
|
-
# @return [HabiticaClient::Stats]
|
14
12
|
def stats
|
15
|
-
@stats ||= Stats.new(
|
16
|
-
end
|
17
|
-
|
18
|
-
# Returns user's tasks.
|
19
|
-
#
|
20
|
-
# @return [HabiticaClient::Tasks]
|
21
|
-
def tasks
|
22
|
-
@tasks ||= Tasks.new(client)
|
13
|
+
@stats ||= Stats.new(data['stats'])
|
23
14
|
end
|
24
15
|
|
25
16
|
end
|
data/lib/habitica_client.rb
CHANGED
@@ -3,6 +3,7 @@ class HabiticaClient
|
|
3
3
|
require 'habitica_client/version'
|
4
4
|
require 'habitica_client/client'
|
5
5
|
require 'habitica_client/user'
|
6
|
+
require 'habitica_client/tasks'
|
6
7
|
|
7
8
|
attr_accessor :client
|
8
9
|
|
@@ -14,4 +15,8 @@ class HabiticaClient
|
|
14
15
|
@user ||= User.new(client)
|
15
16
|
end
|
16
17
|
|
18
|
+
def tasks
|
19
|
+
@tasks ||= Tasks.new(client)
|
20
|
+
end
|
21
|
+
|
17
22
|
end
|
data/lib/hashup.rb
CHANGED
@@ -3,15 +3,30 @@ require 'spec_helper'
|
|
3
3
|
properties = [:id, :text, :notes, :value, :checklist, :priority,
|
4
4
|
:attribute, :tags]
|
5
5
|
|
6
|
-
date_properties = [:
|
6
|
+
date_properties = [:created_at, :updated_at]
|
7
7
|
|
8
8
|
describe 'Task', vcr: { cassette_name: 'task' } do
|
9
9
|
|
10
10
|
let(:habitrpg) { HabiticaClient.new(USER_ID, API_TOKEN) }
|
11
|
-
let(:tasks) { habitrpg.
|
11
|
+
let(:tasks) { habitrpg.tasks }
|
12
12
|
let(:todo) { tasks.todos.last }
|
13
13
|
let(:habit) { tasks.habits.last }
|
14
14
|
let(:daily) { tasks.dailies.last }
|
15
|
+
dummy_tasks = nil
|
16
|
+
|
17
|
+
before do
|
18
|
+
dummy_tasks = {
|
19
|
+
todo: tasks.create(text: 'Testing 123', type: 'todo'),
|
20
|
+
habit: tasks.create(text: 'Testing 123', type: 'habit'),
|
21
|
+
daily: tasks.create(text: 'Testing 123', type: 'daily')
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
after do
|
26
|
+
# Don't leave tasks in my todo list!
|
27
|
+
dummy_tasks.each { |_k, t| t.delete }
|
28
|
+
|
29
|
+
end
|
15
30
|
|
16
31
|
describe '#completed?' do
|
17
32
|
it 'is the completed status' do
|
@@ -94,7 +109,7 @@ describe 'Task', vcr: { cassette_name: 'task' } do
|
|
94
109
|
|
95
110
|
expect(task.text).to eq(updated_text)
|
96
111
|
|
97
|
-
task.delete
|
112
|
+
task.delete # Don't leave tasks in my todo list!
|
98
113
|
end
|
99
114
|
|
100
115
|
end
|
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe 'Tasks', vcr: { cassette_name: 'tasks' } do
|
4
4
|
|
5
5
|
let(:habitrpg) { HabiticaClient.new(USER_ID, API_TOKEN) }
|
6
|
-
let(:tasks) { habitrpg.
|
6
|
+
let(:tasks) { habitrpg.tasks }
|
7
7
|
|
8
8
|
describe '.each' do
|
9
9
|
|
10
10
|
it 'can be iterated' do
|
11
11
|
tasks.each do |task|
|
12
|
-
expect(task).to be_a(HabiticaClient::
|
12
|
+
expect(task).to be_a(HabiticaClient::Task)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -72,7 +72,7 @@ describe 'Tasks', vcr: { cassette_name: 'tasks' } do
|
|
72
72
|
it 'can create a new task' do
|
73
73
|
task = tasks.create(text: 'Testing 123', type: 'todo')
|
74
74
|
expect(task.id).not_to be_nil
|
75
|
-
task.delete
|
75
|
+
task.delete # Don't leave tasks in my todo list!
|
76
76
|
end
|
77
77
|
|
78
78
|
end
|
@@ -9,24 +9,4 @@ describe 'User', :vcr do
|
|
9
9
|
expect(user).to be_a(HabiticaClient::User)
|
10
10
|
end
|
11
11
|
|
12
|
-
describe '#stats' do
|
13
|
-
|
14
|
-
subject { user.stats }
|
15
|
-
|
16
|
-
it 'returns Stats' do
|
17
|
-
expect(subject).to be_a(HabiticaClient::User::Stats)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '#tasks' do
|
23
|
-
|
24
|
-
subject { user.tasks }
|
25
|
-
|
26
|
-
it 'returns Tasks' do
|
27
|
-
expect(subject).to be_a(HabiticaClient::User::Tasks)
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
12
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: habitica_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Mckellar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '3.3'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: awesome_print
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.7'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '1.7'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: httparty
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,21 +213,20 @@ files:
|
|
199
213
|
- lib/habitica_client/api_base.rb
|
200
214
|
- lib/habitica_client/client.rb
|
201
215
|
- lib/habitica_client/restful.rb
|
216
|
+
- lib/habitica_client/task.rb
|
217
|
+
- lib/habitica_client/task/date_accessor.rb
|
218
|
+
- lib/habitica_client/task/status.rb
|
219
|
+
- lib/habitica_client/task/type.rb
|
220
|
+
- lib/habitica_client/tasks.rb
|
221
|
+
- lib/habitica_client/tasks/status.rb
|
222
|
+
- lib/habitica_client/tasks/types.rb
|
202
223
|
- lib/habitica_client/user.rb
|
203
224
|
- lib/habitica_client/user/stats.rb
|
204
|
-
- lib/habitica_client/user/task.rb
|
205
|
-
- lib/habitica_client/user/task/date_accessor.rb
|
206
|
-
- lib/habitica_client/user/task/status.rb
|
207
|
-
- lib/habitica_client/user/task/type.rb
|
208
|
-
- lib/habitica_client/user/tasks.rb
|
209
|
-
- lib/habitica_client/user/tasks/status.rb
|
210
|
-
- lib/habitica_client/user/tasks/types.rb
|
211
225
|
- lib/habitica_client/version.rb
|
212
226
|
- lib/hashup.rb
|
213
|
-
- spec/
|
227
|
+
- spec/habit_client/task_spec.rb
|
228
|
+
- spec/habit_client/tasks_spec.rb
|
214
229
|
- spec/habit_client/user/stats_spec.rb
|
215
|
-
- spec/habit_client/user/task_spec.rb
|
216
|
-
- spec/habit_client/user/tasks_spec.rb
|
217
230
|
- spec/habit_client/user_spec.rb
|
218
231
|
- spec/habit_client_spec.rb
|
219
232
|
- spec/spec_helper.rb
|
@@ -238,15 +251,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
238
251
|
version: '0'
|
239
252
|
requirements: []
|
240
253
|
rubyforge_project:
|
241
|
-
rubygems_version: 2.
|
254
|
+
rubygems_version: 2.4.5
|
242
255
|
signing_key:
|
243
256
|
specification_version: 4
|
244
257
|
summary: Another Habitica client
|
245
258
|
test_files:
|
246
|
-
- spec/
|
259
|
+
- spec/habit_client/task_spec.rb
|
260
|
+
- spec/habit_client/tasks_spec.rb
|
247
261
|
- spec/habit_client/user/stats_spec.rb
|
248
|
-
- spec/habit_client/user/task_spec.rb
|
249
|
-
- spec/habit_client/user/tasks_spec.rb
|
250
262
|
- spec/habit_client/user_spec.rb
|
251
263
|
- spec/habit_client_spec.rb
|
252
264
|
- spec/spec_helper.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
require 'forwardable'
|
3
|
-
require 'time'
|
4
|
-
require 'hashup'
|
5
|
-
require 'habitica_client/restful'
|
6
|
-
|
7
|
-
class HabiticaClient::User
|
8
|
-
|
9
|
-
# A user task, which can be a habit, daily, or todo.
|
10
|
-
class Task < HabiticaClient::Restful
|
11
|
-
|
12
|
-
require 'habitica_client/user/task/date_accessor'
|
13
|
-
require 'habitica_client/user/task/status'
|
14
|
-
require 'habitica_client/user/task/type'
|
15
|
-
|
16
|
-
extend DateAccessor
|
17
|
-
include Status
|
18
|
-
include Type
|
19
|
-
extend Hashup
|
20
|
-
|
21
|
-
attr_accessor :id, :text, :notes, :value, :priority, :attribute,
|
22
|
-
:type, :tags, :checklist, :value, :priority,
|
23
|
-
:challenge, :down, :up, :history, :streak,
|
24
|
-
:frequency, :history, :completed, :every_x, :repeat,
|
25
|
-
:collapse_checklist
|
26
|
-
|
27
|
-
date_accessor :date_created, :date_completed, :start_date, :date
|
28
|
-
|
29
|
-
hashup :id, :text, :notes, :value, :priority, :attribute, :type,
|
30
|
-
:tags, :checklist, :value, :priority, :challenge, :down,
|
31
|
-
:up, :history, :streak, :frequency, :history, :completed,
|
32
|
-
:every_x, :repeat, :collapse_checklist, :date_created,
|
33
|
-
:date_completed, :start_date, :date
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def endpoint
|
38
|
-
'/user/tasks'
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
data/spec/cassettes/.keep
DELETED
File without changes
|