checkoff 0.3.1 → 0.5.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +9 -3
- data/.rubocop.yml +45 -10
- data/.ruby-version +1 -1
- data/.travis.yml +14 -12
- data/Makefile +27 -0
- data/checkoff.gemspec +5 -5
- data/coverage/.last_run.json +1 -1
- data/lib/checkoff.rb +1 -0
- data/lib/checkoff/cli.rb +1 -1
- data/lib/checkoff/config_loader.rb +1 -1
- data/lib/checkoff/projects.rb +6 -3
- data/lib/checkoff/sections.rb +33 -19
- data/lib/checkoff/subtasks.rb +41 -0
- data/lib/checkoff/version.rb +1 -1
- data/lib/checkoff/workspaces.rb +1 -1
- data/lib/tasks/ci.rake +1 -0
- data/lib/tasks/clear_metrics.rake +1 -0
- data/lib/tasks/localtest.rake +1 -0
- data/metrics/bigfiles_high_water_mark +1 -1
- data/metrics/punchlist_high_water_mark +1 -2
- data/metrics/rubocop_high_water_mark +1 -1
- metadata +18 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf801216d45c8e3b9c09e80e8d5f05d097dec4361f076f3d70efafd10a628ec5
|
4
|
+
data.tar.gz: 19e168d38d597f1ca0962f22d14d2e4326975b847334672337c879edf19d74bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11b63053e7902dad783ccc000990f211a0184a90a016f938fa354871bec3c101ff8fff4743e798998844405710b34e686cc18def737fd44b7956f179bdeb83df
|
7
|
+
data.tar.gz: 80577a035c94855fbdcb2ee0abbca795c41a426d8d1737c33f7c9250a86dc52e7699dc64b39c895930bd581fcebe8b90fafc50fb2671c3cfb1729c4074ba8487
|
data/.circleci/config.yml
CHANGED
@@ -6,6 +6,12 @@ jobs:
|
|
6
6
|
- image: apiology/circleci-ruby:latest
|
7
7
|
steps:
|
8
8
|
- checkout
|
9
|
-
-
|
10
|
-
|
11
|
-
- run:
|
9
|
+
- type: cache-restore
|
10
|
+
key: checkoff-{{ checksum "checkoff.gemspec" }}-{{ checksum "Gemfile" }}
|
11
|
+
- run: gem install --no-document bundler
|
12
|
+
- run: bundle install --path vendor/bundle --jobs=4
|
13
|
+
- type: cache-save
|
14
|
+
key: checkoff-{{ checksum "checkoff.gemspec" }}-{{ checksum "Gemfile" }}
|
15
|
+
paths:
|
16
|
+
- "vendor/bundle"
|
17
|
+
- run: bundle exec rake --jobs=4 ci
|
data/.rubocop.yml
CHANGED
@@ -1,30 +1,27 @@
|
|
1
|
-
# I like trailing commas in
|
1
|
+
# I like trailing commas in hashes. They let me insert new elements and
|
2
2
|
# see them as one line in a diff, not two.
|
3
|
-
Style/
|
3
|
+
Style/TrailingCommaInHashLiteral:
|
4
4
|
EnforcedStyleForMultiline: comma
|
5
5
|
|
6
|
-
Style/
|
6
|
+
Style/TrailingCommaInArrayLiteral:
|
7
7
|
EnforcedStyleForMultiline: comma
|
8
8
|
|
9
9
|
# I use keyword arguments for a poor man's dependency injection to cut
|
10
10
|
# down on the magic in my tests.
|
11
|
-
ParameterLists:
|
11
|
+
Metrics/ParameterLists:
|
12
12
|
CountKeywordArgs: false
|
13
13
|
|
14
|
-
# If
|
14
|
+
# If I'm using one function name and returning the contents of an
|
15
15
|
# attribute, that's OK. The alternative would be this, which I find
|
16
16
|
# confusing and often not really what I mean:
|
17
17
|
#
|
18
18
|
# attr_reader :something_else
|
19
19
|
# alias_method :something, :something_else
|
20
|
-
TrivialAccessors:
|
20
|
+
Style/TrivialAccessors:
|
21
21
|
ExactNameMatch: true
|
22
22
|
|
23
|
-
Layout/MultilineMethodCallIndentation:
|
24
|
-
EnforcedStyle: indented
|
25
|
-
|
26
23
|
#
|
27
|
-
# Add '
|
24
|
+
# Add 'XX X' to the standard list
|
28
25
|
#
|
29
26
|
Style/CommentAnnotation:
|
30
27
|
Keywords:
|
@@ -40,3 +37,41 @@ Style/CommentAnnotation:
|
|
40
37
|
W"
|
41
38
|
- "XX\
|
42
39
|
X"
|
40
|
+
|
41
|
+
# https://stackoverflow.com/questions/40934345/rubocop-25-line-block-size-and-rspec-tests
|
42
|
+
Metrics/BlockLength:
|
43
|
+
# Exclude DSLs
|
44
|
+
Exclude:
|
45
|
+
- 'Rakefile'
|
46
|
+
- '*.gemspec'
|
47
|
+
- '**/*.rake'
|
48
|
+
- 'spec/**/*.rb'
|
49
|
+
- 'feature/**/*.rb'
|
50
|
+
|
51
|
+
# http://www.betterspecs.org/#single
|
52
|
+
#
|
53
|
+
# > in tests that are not isolated (e.g. ones that integrate with a
|
54
|
+
# > DB, an external webservice, or end-to-end-tests), you take a
|
55
|
+
# > massive performance hit to do the same setup over and over again,
|
56
|
+
# > just to set a different expectation in each test. In these sorts
|
57
|
+
# > of slower tests, I think it's fine to specify more than one
|
58
|
+
# > isolated behavior.
|
59
|
+
RSpec/MultipleExpectations:
|
60
|
+
Exclude:
|
61
|
+
- 'feature/**/*.rb'
|
62
|
+
|
63
|
+
Style/StringLiterals:
|
64
|
+
EnforcedStyle: single_quotes
|
65
|
+
SupportedStyles:
|
66
|
+
- single_quotes
|
67
|
+
- double_quotes
|
68
|
+
ConsistentQuotesInMultiline: true
|
69
|
+
|
70
|
+
AllCops:
|
71
|
+
TargetRubyVersion: 2.4
|
72
|
+
|
73
|
+
|
74
|
+
require:
|
75
|
+
- rubocop-rspec
|
76
|
+
- rubocop-minitest
|
77
|
+
- rubocop-rake
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.6
|
data/.travis.yml
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
1
3
|
before_install:
|
4
|
+
# https://bundler.io/blog/2019/05/14/
|
5
|
+
# solutions-for-cant-find-gem-bundler-with-executable-bundle.html
|
6
|
+
- gem update --system
|
2
7
|
- gem install bundler
|
3
|
-
language: ruby
|
4
8
|
rvm:
|
5
|
-
-
|
6
|
-
-
|
7
|
-
|
8
|
-
# -
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
#
|
15
|
-
- ruby-head # Upstream bug - see https://travis-ci.org/apiology/checkoff/jobs/138626934
|
9
|
+
# JRuby error with native code build - possibly can be overcome?
|
10
|
+
# checking for main() in -lstdc++... RuntimeError: The compiler failed to generate
|
11
|
+
# https://travis-ci.com/apiology/pronto-punchlist/jobs/264907931
|
12
|
+
# - jruby-head
|
13
|
+
- ruby-head
|
14
|
+
- ruby-2.7
|
15
|
+
- ruby-2.6
|
16
|
+
- ruby-2.5
|
17
|
+
- ruby-2.4
|
data/Makefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
.PHONY: spec feature
|
2
|
+
|
3
|
+
all: localtest
|
4
|
+
|
5
|
+
localtest:
|
6
|
+
@bundle exec rake localtest
|
7
|
+
|
8
|
+
feature:
|
9
|
+
@bundle exec rake feature
|
10
|
+
|
11
|
+
spec:
|
12
|
+
@bundle exec rake spec
|
13
|
+
|
14
|
+
rubocop:
|
15
|
+
@bundle exec rake rubocop
|
16
|
+
|
17
|
+
punchlist:
|
18
|
+
@bundle exec rake punchlist
|
19
|
+
|
20
|
+
pronto:
|
21
|
+
@bundle exec rake pronto
|
22
|
+
|
23
|
+
bigfiles:
|
24
|
+
@bundle exec rake bigfiles
|
25
|
+
|
26
|
+
quality:
|
27
|
+
@bundle exec rake quality
|
data/checkoff.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
1
|
# coding: ascii
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
lib = File.expand_path('
|
4
|
+
lib = File.expand_path('lib', __dir__)
|
5
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
6
|
require 'checkoff/version'
|
7
7
|
|
@@ -27,11 +27,11 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_runtime_dependency 'cache_method'
|
28
28
|
spec.add_runtime_dependency 'dalli'
|
29
29
|
|
30
|
-
spec.add_development_dependency 'bundler'
|
30
|
+
spec.add_development_dependency 'bundler'
|
31
31
|
spec.add_development_dependency 'minitest-profile'
|
32
32
|
spec.add_development_dependency 'mocha'
|
33
|
-
spec.add_development_dependency 'quality'
|
34
|
-
spec.add_development_dependency 'rake', '~>
|
33
|
+
spec.add_development_dependency 'quality', '~> 37'
|
34
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
35
35
|
spec.add_development_dependency 'rspec', '>=3.4'
|
36
36
|
spec.add_development_dependency 'simplecov'
|
37
37
|
end
|
data/coverage/.last_run.json
CHANGED
data/lib/checkoff.rb
CHANGED
data/lib/checkoff/cli.rb
CHANGED
@@ -103,7 +103,7 @@ module Checkoff
|
|
103
103
|
stderr.puts " #{$PROGRAM_NAME} quickadd workspace task_name"
|
104
104
|
stderr.puts
|
105
105
|
stderr.puts "'project' can be set to a project name, or :my_tasks, " \
|
106
|
-
|
106
|
+
":my_tasks_upcoming, :my_tasks_new, or :my_tasks_today"
|
107
107
|
end
|
108
108
|
|
109
109
|
def view(workspace_name, project_name, section_name)
|
data/lib/checkoff/projects.rb
CHANGED
@@ -43,6 +43,7 @@ module Checkoff
|
|
43
43
|
def projects_by_workspace_name(workspace_name)
|
44
44
|
workspace = @workspaces.workspace_by_name(workspace_name)
|
45
45
|
raise "Could not find workspace named #{workspace_name}" unless workspace
|
46
|
+
|
46
47
|
projects.find_by_workspace(workspace: workspace.gid)
|
47
48
|
end
|
48
49
|
|
@@ -52,6 +53,7 @@ module Checkoff
|
|
52
53
|
if my_tasks.nil? || gid.nil?
|
53
54
|
raise "Please define [:my_tasks][#{workspace_name}] in config file"
|
54
55
|
end
|
56
|
+
|
55
57
|
projects.find_by_id(gid)
|
56
58
|
end
|
57
59
|
|
@@ -75,7 +77,8 @@ module Checkoff
|
|
75
77
|
{
|
76
78
|
per_page: 100,
|
77
79
|
options: {
|
78
|
-
fields: %w[name completed_at due_at due_on assignee_status tags
|
80
|
+
fields: %w[name completed_at due_at due_on assignee_status tags
|
81
|
+
memberships.project.gid memberships.section.name],
|
79
82
|
},
|
80
83
|
}
|
81
84
|
end
|
@@ -85,8 +88,8 @@ module Checkoff
|
|
85
88
|
options[:completed_since] = '9999-12-01' if only_uncompleted
|
86
89
|
options[:project] = project.gid
|
87
90
|
options[:options][:fields] += extra_fields
|
88
|
-
client.tasks.find_all(options).to_a
|
91
|
+
client.tasks.find_all(**options).to_a
|
89
92
|
end
|
90
|
-
cache_method :tasks_from_project,
|
93
|
+
cache_method :tasks_from_project, SHORT_CACHE_TIME
|
91
94
|
end
|
92
95
|
end
|
data/lib/checkoff/sections.rb
CHANGED
@@ -21,7 +21,34 @@ module Checkoff
|
|
21
21
|
|
22
22
|
def_delegators :@projects, :client
|
23
23
|
|
24
|
-
def file_task_by_section(
|
24
|
+
def file_task_by_section(by_section, task, project_gid)
|
25
|
+
membership = task.memberships.find { |m| m.project.gid == project_gid }
|
26
|
+
if membership.nil?
|
27
|
+
raise "Could not find task in project_gid #{project_gid}: #{task}"
|
28
|
+
end
|
29
|
+
|
30
|
+
current_section = membership.section.name
|
31
|
+
current_section = nil if current_section == '(no section)'
|
32
|
+
by_section[current_section] ||= []
|
33
|
+
by_section[current_section] << task
|
34
|
+
end
|
35
|
+
|
36
|
+
def by_section(tasks, project_gid)
|
37
|
+
by_section = {}
|
38
|
+
tasks.each do |task|
|
39
|
+
file_task_by_section(by_section, task, project_gid)
|
40
|
+
end
|
41
|
+
by_section
|
42
|
+
end
|
43
|
+
cache_method :by_section, LONG_CACHE_TIME
|
44
|
+
|
45
|
+
def tasks_by_section_for_project(project)
|
46
|
+
raw_tasks = projects.tasks_from_project(project)
|
47
|
+
active_tasks = projects.active_tasks(raw_tasks)
|
48
|
+
by_section(active_tasks, project.gid)
|
49
|
+
end
|
50
|
+
|
51
|
+
def legacy_file_task_by_section(current_section, by_section, task)
|
25
52
|
if task.name =~ /:$/
|
26
53
|
current_section = task.name
|
27
54
|
by_section[current_section] = []
|
@@ -32,31 +59,24 @@ module Checkoff
|
|
32
59
|
[current_section, by_section]
|
33
60
|
end
|
34
61
|
|
35
|
-
def
|
62
|
+
def legacy_by_section(tasks)
|
36
63
|
current_section = nil
|
37
64
|
by_section = {}
|
38
65
|
tasks.each do |task|
|
39
|
-
current_section, by_section =
|
40
|
-
|
66
|
+
current_section, by_section =
|
67
|
+
legacy_file_task_by_section(current_section, by_section, task)
|
41
68
|
end
|
42
69
|
by_section
|
43
70
|
end
|
44
|
-
cache_method :by_section, LONG_CACHE_TIME
|
45
|
-
|
46
|
-
def tasks_by_section_for_project(project)
|
47
|
-
raw_tasks = projects.tasks_from_project(project)
|
48
|
-
active_tasks = projects.active_tasks(raw_tasks)
|
49
|
-
by_section(active_tasks)
|
50
|
-
end
|
51
71
|
|
52
72
|
def tasks_by_section_for_project_and_assignee_status(project,
|
53
73
|
assignee_status)
|
54
74
|
raw_tasks = projects.tasks_from_project(project)
|
55
75
|
by_assignee_status =
|
56
76
|
projects.active_tasks(raw_tasks)
|
57
|
-
|
77
|
+
.group_by(&:assignee_status)
|
58
78
|
active_tasks = by_assignee_status[assignee_status]
|
59
|
-
|
79
|
+
legacy_by_section(active_tasks)
|
60
80
|
end
|
61
81
|
|
62
82
|
def project_or_raise(workspace_name, project_name)
|
@@ -100,12 +120,6 @@ module Checkoff
|
|
100
120
|
end
|
101
121
|
cache_method :section_task_names, SHORT_CACHE_TIME
|
102
122
|
|
103
|
-
# Returns all subtasks, including section headers
|
104
|
-
def raw_subtasks(task)
|
105
|
-
task.subtasks(projects.task_options)
|
106
|
-
end
|
107
|
-
cache_method :raw_subtasks, LONG_CACHE_TIME
|
108
|
-
|
109
123
|
def task_due?(task)
|
110
124
|
if task.due_at
|
111
125
|
Time.parse(task.due_at) <= time.now
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Checkoff
|
6
|
+
# Query different subtasks of Asana tasks
|
7
|
+
class Subtasks
|
8
|
+
MINUTE = 60
|
9
|
+
LONG_CACHE_TIME = MINUTE * 15
|
10
|
+
SHORT_CACHE_TIME = MINUTE * 5
|
11
|
+
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
def file_task_by_section(current_section, by_section, task)
|
15
|
+
if task.name =~ /:$/
|
16
|
+
current_section = task.name
|
17
|
+
by_section[current_section] = []
|
18
|
+
else
|
19
|
+
by_section[current_section] ||= []
|
20
|
+
by_section[current_section] << task
|
21
|
+
end
|
22
|
+
[current_section, by_section]
|
23
|
+
end
|
24
|
+
|
25
|
+
def by_section(tasks)
|
26
|
+
current_section = nil
|
27
|
+
by_section = {}
|
28
|
+
tasks.each do |task|
|
29
|
+
current_section, by_section = file_task_by_section(current_section,
|
30
|
+
by_section, task)
|
31
|
+
end
|
32
|
+
by_section
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns all subtasks, including section headers
|
36
|
+
def raw_subtasks(task)
|
37
|
+
task.subtasks(projects.task_options)
|
38
|
+
end
|
39
|
+
cache_method :raw_subtasks, LONG_CACHE_TIME
|
40
|
+
end
|
41
|
+
end
|
data/lib/checkoff/version.rb
CHANGED
data/lib/checkoff/workspaces.rb
CHANGED
@@ -12,7 +12,7 @@ module Checkoff
|
|
12
12
|
def client
|
13
13
|
@client ||= @asana_client.new do |c|
|
14
14
|
c.authentication :access_token, @config[:personal_access_token]
|
15
|
-
c.default_headers
|
15
|
+
c.default_headers 'asana-enable' => 'string_ids,new_sections'
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
data/lib/tasks/ci.rake
CHANGED
data/lib/tasks/localtest.rake
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
410
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
3
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1
|
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.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vince Broz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: minitest-profile
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,30 +112,30 @@ dependencies:
|
|
112
112
|
name: quality
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '37'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '37'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rake
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '13.0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '13.0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rspec
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +164,7 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
-
description:
|
167
|
+
description:
|
168
168
|
email:
|
169
169
|
- vince@broz.cc
|
170
170
|
executables:
|
@@ -180,6 +180,7 @@ files:
|
|
180
180
|
- CODE_OF_CONDUCT.md
|
181
181
|
- Gemfile
|
182
182
|
- LICENSE.txt
|
183
|
+
- Makefile
|
183
184
|
- README.md
|
184
185
|
- Rakefile
|
185
186
|
- bin/console
|
@@ -193,6 +194,7 @@ files:
|
|
193
194
|
- lib/checkoff/config_loader.rb
|
194
195
|
- lib/checkoff/projects.rb
|
195
196
|
- lib/checkoff/sections.rb
|
197
|
+
- lib/checkoff/subtasks.rb
|
196
198
|
- lib/checkoff/tasks.rb
|
197
199
|
- lib/checkoff/version.rb
|
198
200
|
- lib/checkoff/workspaces.rb
|
@@ -225,7 +227,7 @@ homepage: http://github.com/apiology/checkoff
|
|
225
227
|
licenses:
|
226
228
|
- MIT
|
227
229
|
metadata: {}
|
228
|
-
post_install_message:
|
230
|
+
post_install_message:
|
229
231
|
rdoc_options: []
|
230
232
|
require_paths:
|
231
233
|
- lib
|
@@ -241,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
243
|
version: '0'
|
242
244
|
requirements: []
|
243
245
|
rubygems_version: 3.0.3
|
244
|
-
signing_key:
|
246
|
+
signing_key:
|
245
247
|
specification_version: 4
|
246
248
|
summary: Command-line and gem client for Asana (unofficial)
|
247
249
|
test_files: []
|