unshuffle 0.0.1 → 0.0.2
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/bin/unshuffle +2 -0
- data/lib/unshuffle.rb +2 -1
- data/lib/unshuffle/cli.rb +14 -0
- data/lib/unshuffle/client.rb +33 -0
- data/lib/unshuffle/version.rb +1 -1
- data/spec/bin/unshuffle_spec.rb +0 -0
- data/spec/cassettes/tasks.yml +57 -0
- data/spec/lib/unshuffle/cli_spec.rb +24 -0
- data/spec/lib/unshuffle/client_spec.rb +19 -0
- data/spec/spec_helper.rb +11 -0
- data/unshuffle.gemspec +5 -0
- metadata +77 -3
data/bin/unshuffle
CHANGED
data/lib/unshuffle.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Unshuffle
|
4
|
+
class CLI < Thor
|
5
|
+
desc 'tasks', 'Lists all your tasks'
|
6
|
+
method_options token: :string
|
7
|
+
def tasks
|
8
|
+
client = Unshuffle::Client.new(options[:token])
|
9
|
+
puts client.tasks.map(&:title).join("\n")
|
10
|
+
end
|
11
|
+
|
12
|
+
default_task :tasks
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rocket_pants'
|
2
|
+
|
3
|
+
module Unshuffle
|
4
|
+
class Client < RocketPants::Client
|
5
|
+
version 1
|
6
|
+
base_uri 'http://unshuffle.me/api'
|
7
|
+
|
8
|
+
def initialize(token)
|
9
|
+
@token = token
|
10
|
+
end
|
11
|
+
|
12
|
+
class Task < APISmith::Smash
|
13
|
+
property :title
|
14
|
+
property :priority
|
15
|
+
property :state
|
16
|
+
end
|
17
|
+
|
18
|
+
def tasks
|
19
|
+
get('tasks', as: Task)
|
20
|
+
end
|
21
|
+
|
22
|
+
def base_request_options
|
23
|
+
{
|
24
|
+
headers: {
|
25
|
+
'Authorization' => ActionController::HttpAuthentication::Token.encode_credentials(token)
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
attr_reader :token
|
32
|
+
end
|
33
|
+
end
|
data/lib/unshuffle/version.rb
CHANGED
File without changes
|
@@ -0,0 +1,57 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://unshuffle.me/api/1/tasks?
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Token token="faketoken"
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 200
|
15
|
+
message: OK
|
16
|
+
headers:
|
17
|
+
Server:
|
18
|
+
- nginx
|
19
|
+
Date:
|
20
|
+
- Wed, 13 Mar 2013 05:14:24 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
Content-Length:
|
24
|
+
- '2301'
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
X-Ua-Compatible:
|
28
|
+
- IE=Edge,chrome=1
|
29
|
+
Etag:
|
30
|
+
- ! '"091d710cbf9c40b0155ef41236df24a4"'
|
31
|
+
Cache-Control:
|
32
|
+
- must-revalidate, private, max-age=0
|
33
|
+
X-Request-Id:
|
34
|
+
- 4e30c15f4f7aa5f0dcbbe04ff43afb02
|
35
|
+
X-Runtime:
|
36
|
+
- '0.013982'
|
37
|
+
X-Rack-Cache:
|
38
|
+
- miss
|
39
|
+
body:
|
40
|
+
encoding: US-ASCII
|
41
|
+
string: ! '{"response":[{"completed_at":null,"created_at":"2013-02-20T04:56:10Z","detail":null,"id":1460,"priority":null,"snoozed_until":null,"state":"archived","title":"Example:
|
42
|
+
This is an archived task. Archive tasks you''ve decided not to do but don''t
|
43
|
+
want to lose.","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":null,"created_at":"2013-02-27T04:56:10Z","detail":null,"id":1461,"priority":null,"snoozed_until":null,"state":"new","title":"Example:
|
44
|
+
This task has been sitting in your Inbox for a while, you should archive it
|
45
|
+
or prioritize it.","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":"2013-03-13T04:56:10Z","created_at":"2013-03-06T04:56:10Z","detail":null,"id":1467,"priority":null,"snoozed_until":null,"state":"completed","title":"Example:
|
46
|
+
This is something you''ve already done!","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":null,"created_at":"2013-03-12T18:56:10Z","detail":null,"id":1462,"priority":null,"snoozed_until":null,"state":"new","title":"Example:
|
47
|
+
This task was created a few hours ago, possibly while you were on the move
|
48
|
+
and couldn''t decide when it should be done.","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":null,"created_at":"2013-03-13T04:51:10Z","detail":null,"id":1463,"priority":null,"snoozed_until":null,"state":"new","title":"Example:
|
49
|
+
This is a task you''ve just added, don''t worry you can decide when you want
|
50
|
+
to do it later.","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":null,"created_at":"2013-02-27T04:56:10Z","detail":null,"id":1465,"priority":1,"snoozed_until":null,"state":"scheduled","title":"Example:
|
51
|
+
You''ve decided this task is the next thing you should do.","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":null,"created_at":"2013-03-12T04:56:10Z","detail":null,"id":1464,"priority":1,"snoozed_until":null,"state":"started","title":"Example:
|
52
|
+
This is a task you''ve started doing, but haven''t yet finshed.","updated_at":"2013-03-13T04:56:10Z","user_id":58},{"completed_at":null,"created_at":"2013-03-13T04:46:10Z","detail":null,"id":1466,"priority":1,"snoozed_until":null,"state":"scheduled","title":"Example:
|
53
|
+
This task also needs to get done, but only after you''ve done the ones before
|
54
|
+
it.","updated_at":"2013-03-13T04:56:10Z","user_id":58}],"count":8}'
|
55
|
+
http_version:
|
56
|
+
recorded_at: Wed, 13 Mar 2013 05:14:26 GMT
|
57
|
+
recorded_with: VCR 2.4.0
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Unshuffle
|
4
|
+
describe CLI, vcr: {cassette_name: 'tasks'} do
|
5
|
+
it 'prints a list of tasks' do
|
6
|
+
args = ['--token', 'faketoken']
|
7
|
+
output = capture(:stdout) { CLI.start(args) }
|
8
|
+
output.should include("Example: This task also needs to get done, but only after you've done the ones before it.")
|
9
|
+
end
|
10
|
+
|
11
|
+
def capture(stream)
|
12
|
+
begin
|
13
|
+
stream = stream.to_s
|
14
|
+
eval "$#{stream} = StringIO.new"
|
15
|
+
yield
|
16
|
+
result = eval("$#{stream}").string
|
17
|
+
ensure
|
18
|
+
eval("$#{stream} = #{stream.upcase}")
|
19
|
+
end
|
20
|
+
|
21
|
+
result
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Unshuffle
|
4
|
+
describe Client, vcr: { cassette_name: 'tasks'} do
|
5
|
+
subject { Client.new('faketoken') }
|
6
|
+
|
7
|
+
describe '#tasks' do
|
8
|
+
it 'lists all tasks' do
|
9
|
+
tasks = subject.tasks
|
10
|
+
tasks.should have(8).tasks
|
11
|
+
tasks.last.should eq(
|
12
|
+
"priority" => 1,
|
13
|
+
"state" => "scheduled",
|
14
|
+
"title" => "Example: This task also needs to get done, but only after you've done the ones before it."
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,2 +1,13 @@
|
|
1
1
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
2
|
require 'unshuffle'
|
3
|
+
require 'vcr'
|
4
|
+
|
5
|
+
VCR.configure do |c|
|
6
|
+
c.cassette_library_dir = 'spec/cassettes'
|
7
|
+
c.hook_into :webmock
|
8
|
+
c.configure_rspec_metadata!
|
9
|
+
end
|
10
|
+
|
11
|
+
RSpec.configure do |c|
|
12
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
13
|
+
end
|
data/unshuffle.gemspec
CHANGED
@@ -18,7 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency "thor"
|
22
|
+
spec.add_dependency "rocket_pants"
|
23
|
+
|
21
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
25
|
spec.add_development_dependency "rake"
|
23
26
|
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "webmock", "< 1.10"
|
28
|
+
spec.add_development_dependency "vcr"
|
24
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unshuffle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,6 +11,38 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2013-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rocket_pants
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
14
46
|
- !ruby/object:Gem::Dependency
|
15
47
|
name: bundler
|
16
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,6 +91,38 @@ dependencies:
|
|
59
91
|
- - ! '>='
|
60
92
|
- !ruby/object:Gem::Version
|
61
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: webmock
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - <
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.10'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - <
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.10'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: vcr
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
62
126
|
description: The official command line interface for http://unshuffle.me/
|
63
127
|
email:
|
64
128
|
- abhijit@hiremaga.com
|
@@ -77,7 +141,13 @@ files:
|
|
77
141
|
- Rakefile
|
78
142
|
- bin/unshuffle
|
79
143
|
- lib/unshuffle.rb
|
144
|
+
- lib/unshuffle/cli.rb
|
145
|
+
- lib/unshuffle/client.rb
|
80
146
|
- lib/unshuffle/version.rb
|
147
|
+
- spec/bin/unshuffle_spec.rb
|
148
|
+
- spec/cassettes/tasks.yml
|
149
|
+
- spec/lib/unshuffle/cli_spec.rb
|
150
|
+
- spec/lib/unshuffle/client_spec.rb
|
81
151
|
- spec/spec_helper.rb
|
82
152
|
- spec/unshuffle_spec.rb
|
83
153
|
- unshuffle.gemspec
|
@@ -96,7 +166,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
166
|
version: '0'
|
97
167
|
segments:
|
98
168
|
- 0
|
99
|
-
hash:
|
169
|
+
hash: 2117695239493698247
|
100
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
171
|
none: false
|
102
172
|
requirements:
|
@@ -105,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
175
|
version: '0'
|
106
176
|
segments:
|
107
177
|
- 0
|
108
|
-
hash:
|
178
|
+
hash: 2117695239493698247
|
109
179
|
requirements: []
|
110
180
|
rubyforge_project:
|
111
181
|
rubygems_version: 1.8.25
|
@@ -113,5 +183,9 @@ signing_key:
|
|
113
183
|
specification_version: 3
|
114
184
|
summary: The official command line interface for http://unshuffle.me/
|
115
185
|
test_files:
|
186
|
+
- spec/bin/unshuffle_spec.rb
|
187
|
+
- spec/cassettes/tasks.yml
|
188
|
+
- spec/lib/unshuffle/cli_spec.rb
|
189
|
+
- spec/lib/unshuffle/client_spec.rb
|
116
190
|
- spec/spec_helper.rb
|
117
191
|
- spec/unshuffle_spec.rb
|