checkoff 0.1.0 → 0.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.
- checksums.yaml +4 -4
- data/README.md +106 -10
- data/coverage/.last_run.json +1 -1
- data/docs/example_project.png +0 -0
- data/lib/checkoff/cli.rb +7 -1
- data/lib/checkoff/config_loader.rb +1 -1
- data/lib/checkoff/projects.rb +0 -1
- data/lib/checkoff/tasks.rb +2 -2
- data/lib/checkoff/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8eda5499a65efce1e6439d1f91558d00e358dde1
|
4
|
+
data.tar.gz: 8390ace557f726d0a6a80bb3411de2459a2f5345
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef603fb6034b3b37d8587225a1fadf0dbd42e508197e22f9a075dd2a0fe7263ee7f75906098e0c4b50f1b7b743b4e1b85b9b21f049281eed0ded528b0e6a4d84
|
7
|
+
data.tar.gz: c94b4a269d580b99e6e44614ed070c770dee3ccfb909e8e9772e41a99d3bacbf725e993b8e8f193d5302c3f727bedbc9102c0c954887959a80e8aea9344cff62
|
data/README.md
CHANGED
@@ -3,31 +3,127 @@ Command-line and gem client for Asana (unofficial)
|
|
3
3
|
[](https://circleci.com/gh/apiology/checkoff)
|
4
4
|
[](https://travis-ci.org/apiology/checkoff)
|
5
5
|
|
6
|
+
## Using
|
7
|
+
|
8
|
+
```
|
9
|
+
$ checkoff --help
|
10
|
+
View tasks:
|
11
|
+
checkoff view workspace project [section]
|
12
|
+
|
13
|
+
'project' can be set to a project name, or :my_tasks, :my_tasks_upcoming, :my_tasks_new, or :my_tasks_today
|
14
|
+
```
|
15
|
+
|
16
|
+
Let's say we have a project like this:
|
17
|
+
|
18
|
+

|
19
|
+
|
20
|
+
Checkoff outputs things in JSON. 'jq' is a great tool to use in combination:
|
21
|
+
|
22
|
+
```
|
23
|
+
$ checkoff view 'Personal Projects' 'Create demo'
|
24
|
+
{"":[{"name":"This is a task that doesn't belong to any sections."}],"Write it:":[{"name":"Write something"}],"Publish to github:":[{"name":"git push!"}],"Make sure it looks OK!:":[{"name":"Looks it up in your browser..."}]}
|
25
|
+
$
|
26
|
+
```
|
27
|
+
|
28
|
+
```json
|
29
|
+
$ checkoff view 'Personal Projects' 'Create demo' | jq
|
30
|
+
{
|
31
|
+
"": [
|
32
|
+
{
|
33
|
+
"name": "This is a task that doesn't belong to any sections."
|
34
|
+
}
|
35
|
+
],
|
36
|
+
"Write it:": [
|
37
|
+
{
|
38
|
+
"name": "Write something"
|
39
|
+
}
|
40
|
+
],
|
41
|
+
"Publish to github:": [
|
42
|
+
{
|
43
|
+
"name": "git push!"
|
44
|
+
}
|
45
|
+
],
|
46
|
+
"Make sure it looks OK!:": [
|
47
|
+
{
|
48
|
+
"name": "Looks it up in your browser..."
|
49
|
+
}
|
50
|
+
]
|
51
|
+
}
|
52
|
+
```
|
53
|
+
|
54
|
+
You can drill down into a section on the command line:
|
55
|
+
|
56
|
+
```
|
57
|
+
$ checkoff view 'Personal Projects' 'Create demo' 'Publish to github:'
|
58
|
+
[{"name":"git push!"}]
|
59
|
+
```
|
60
|
+
|
61
|
+
You can use fun `jq` tricks:
|
62
|
+
|
63
|
+
```json
|
64
|
+
$ checkoff view 'Personal Projects' 'Create demo' | jq 'to_entries | map(.value) | flatten | map(.name)'
|
65
|
+
[
|
66
|
+
"This is a task that doesn't belong to any sections.",
|
67
|
+
"Write something",
|
68
|
+
"git push!",
|
69
|
+
"Looks it up in your browser..."
|
70
|
+
]
|
71
|
+
```
|
72
|
+
|
73
|
+
And even gather counts for project metrics:
|
74
|
+
|
75
|
+
```bash
|
76
|
+
$ checkoff view 'Personal Projects' 'Create demo' | jq 'to_entries | map(.value) | flatten | map(.name) | length'
|
77
|
+
4
|
78
|
+
$
|
79
|
+
```
|
80
|
+
|
6
81
|
## Caching
|
7
82
|
|
8
83
|
Note that I don't know of a way through the Asana API to target
|
9
84
|
individual sections and pull back only those tasks, which is a real
|
10
85
|
bummer! As a result, sometimes the number of tasks brought back to
|
11
|
-
answer a query is really large and takes a while
|
12
|
-
|
13
|
-
it.
|
86
|
+
answer a query is really large and takes a while--especially if you're
|
87
|
+
querying on something like `:my_tasks_today`. To help make that less
|
88
|
+
annoying, I do caching using memcached; you'll need to install it.
|
89
|
+
|
90
|
+
If you're working in real time with modifications in Asana, you may
|
91
|
+
need to occasionally run `echo 'flush_all' | nc localhost 11211` to
|
92
|
+
clear the cache.
|
14
93
|
|
15
94
|
## Installing
|
16
95
|
|
96
|
+
This will work under OS X:
|
97
|
+
|
17
98
|
```bash
|
18
99
|
brew install memcached
|
100
|
+
ln -sfv /usr/local/opt/memcached/*.plist ~/Library/LaunchAgents
|
101
|
+
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.memcached.plist
|
19
102
|
gem install checkoff
|
20
|
-
|
21
103
|
```
|
22
104
|
|
23
|
-
##
|
105
|
+
## Configuring
|
24
106
|
|
25
|
-
|
26
|
-
$ checkoff --help
|
27
|
-
View tasks:
|
28
|
-
exe/checkoff view workspace project [section]
|
107
|
+
You'll need to create a file called `.asana.yml` in your home directory, that looks like this:
|
29
108
|
|
30
|
-
|
109
|
+
```yaml
|
110
|
+
---
|
111
|
+
|
112
|
+
#
|
113
|
+
# when you click on 'My Tasks' in Asana, put the number (just the
|
114
|
+
# number) from the URL in the mapping below.
|
115
|
+
#
|
116
|
+
my_tasks:
|
117
|
+
'Your workspace name here': 'some_long_number'
|
118
|
+
|
119
|
+
#
|
120
|
+
|
121
|
+
# Click on your profile in the uppper right in Asana, go to 'My
|
122
|
+
# Profile Settings', click on 'Apps', got o 'Manage Developer Apps',
|
123
|
+
# and select 'Create New Personal Access Token'. Note down the key
|
124
|
+
# in this section.
|
125
|
+
#
|
126
|
+
personal_access_token: 'some_big_long_string_from_asana.com_here'
|
31
127
|
```
|
32
128
|
|
33
129
|
## Developing
|
data/coverage/.last_run.json
CHANGED
Binary file
|
data/lib/checkoff/cli.rb
CHANGED
@@ -21,9 +21,15 @@ module Checkoff
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def task_to_hash(task)
|
24
|
-
{
|
24
|
+
task_out = {
|
25
25
|
name: task.name,
|
26
26
|
}
|
27
|
+
if task.due_on
|
28
|
+
task_out[:due] = task.due_on
|
29
|
+
elsif task.due_at
|
30
|
+
task_out[:due] = task.due_at
|
31
|
+
end
|
32
|
+
task_out
|
27
33
|
end
|
28
34
|
|
29
35
|
def tasks_to_hash(tasks)
|
data/lib/checkoff/projects.rb
CHANGED
@@ -64,7 +64,6 @@ module Checkoff
|
|
64
64
|
if project_name.is_a?(Symbol) && project_name.to_s.start_with?('my_tasks')
|
65
65
|
my_tasks(workspace_name)
|
66
66
|
else
|
67
|
-
STDERR.puts "Looking for #{project_name} under #{workspace_name}"
|
68
67
|
projects = projects_by_workspace_name(workspace_name)
|
69
68
|
projects.find do |project|
|
70
69
|
project.name == project_name
|
data/lib/checkoff/tasks.rb
CHANGED
@@ -12,8 +12,8 @@ module Checkoff
|
|
12
12
|
LONG_CACHE_TIME = MINUTE * 15
|
13
13
|
SHORT_CACHE_TIME = MINUTE * 5
|
14
14
|
|
15
|
-
def initialize
|
16
|
-
@sections =
|
15
|
+
def initialize(sections: Checkoff::Sections.new)
|
16
|
+
@sections = sections
|
17
17
|
end
|
18
18
|
|
19
19
|
def tasks_minus_sections(tasks)
|
data/lib/checkoff/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: checkoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vince Broz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dalli
|
@@ -173,6 +173,7 @@ files:
|
|
173
173
|
- checkoff.gemspec
|
174
174
|
- circle.yml
|
175
175
|
- coverage/.last_run.json
|
176
|
+
- docs/example_project.png
|
176
177
|
- exe/checkoff
|
177
178
|
- lib/checkoff.rb
|
178
179
|
- lib/checkoff/cli.rb
|