checkoff 0.15.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10f4779f3bcd067c2bbb80ed9ddea16121a5d26a2a9ee9f95ea6ca43c1931c9c
4
- data.tar.gz: 3ab265436a93926f0903aa97f792034f773b81c2e28fea7e4f5a49e4746aa62c
3
+ metadata.gz: 6077fb7e61bc4ca3d3853df3df9aa8321e1638b413c2913eec541e8ae94defe7
4
+ data.tar.gz: 809c7d2cb26099cef0816719f9cf3491e179d8a8c44b3b1e72d51af46ae98a85
5
5
  SHA512:
6
- metadata.gz: 6870f522f4b5b3a0dedd97126f784e38e4dc86bb0de81c466ec353db66d4be4cf06c3a0f24d9f33790711322faf8440f4d783d3d4759083191579ce2970e8e47
7
- data.tar.gz: 382a46c341315009e55ab0f3606c51bf8eaa2dcaf9c2a475c831a9a216cdb7fec4c5d2c1d7bbff95408ce17f512b2481dcc56417749ad246d057a05b2041cab1
6
+ metadata.gz: e8ed5e0dadd2384438b286d0f53a306d1e9f67b6253531e7f19f7809cdc59849b3562ea45d858c87725a532a2305650c5291d057545432a5e0eeeefc9060e9d0
7
+ data.tar.gz: b1f75a997bda89f8aaca31e1049f74a08d81da53f0495325503dba3114910daf5b9d8c4ae9fbc1428fece772253fb7dc2510708f61cdf7fa877b8a4df71e34e0
data/.circleci/config.yml CHANGED
@@ -110,6 +110,8 @@ jobs:
110
110
  git status --porcelain coverage/.last_run.json
111
111
  git diff coverage/.last_run.json
112
112
  test -z "$(git status --porcelain coverage/.last_run.json)"
113
+ # This seemed to shave 5ish% of the build time off when added
114
+ resource_class: large
113
115
 
114
116
  workflows:
115
117
  version: 2
data/.envrc CHANGED
@@ -1,2 +1,3 @@
1
+ # shellcheck shell=bash
1
2
  PATH_add bin
2
- eval $(with-op op-env sh -e ASANA__PERSONAL_ACCESS_TOKEN -e ASANA__DEFAULT_ASSIGNEE_GID)
3
+ eval "$(with-op op-env sh -e ASANA__PERSONAL_ACCESS_TOKEN -e ASANA__DEFAULT_ASSIGNEE_GID)"
data/.gitattributes ADDED
@@ -0,0 +1,6 @@
1
+ # there's a lot of .sh in the build machinery; this can overwhelm
2
+ # smaller projects and confuse GitHub's detection of majority project
3
+ # type (GitHub uses the linguist library)
4
+ #
5
+ # https://dev.to/katkelly/changing-your-repo-s-language-in-github-5gjo
6
+ *.sh linguist-detectable=false
data/.gitignore CHANGED
@@ -42,6 +42,9 @@ Temporary Items
42
42
  Gemfile.lock.installed
43
43
  requirements_dev.txt.installed
44
44
 
45
+ # Used by CircleCI as a place to store installed gems
46
+ /vendor
47
+
45
48
  # Installed by fix.sh based on what latest versions are
46
49
  /.python-version
47
50
  /.ruby-version
data/.overcommit.yml CHANGED
@@ -35,6 +35,8 @@ PreCommit:
35
35
  ShellCheck:
36
36
  enabled: true
37
37
  on_warn: fail
38
+ include:
39
+ - '.envrc'
38
40
  YamlLint:
39
41
  enabled: true
40
42
  on_warn: fail
data/.rubocop.yml CHANGED
@@ -101,6 +101,7 @@ AllCops:
101
101
  TargetRubyVersion: 2.6
102
102
  Exclude:
103
103
  - 'bin/*'
104
+ - 'vendor/**/*'
104
105
 
105
106
  require:
106
107
  - rubocop-rake
data/DEVELOPMENT.md CHANGED
@@ -16,6 +16,36 @@ quality checks. `bundle exec overcommit --install` will install it.
16
16
  This project uses direnv to manage environment variables used during
17
17
  development. See the `.envrc` file for detail.
18
18
 
19
+ ## cache_method
20
+
21
+ Checkoff uses the
22
+ [`cache_method`](https://github.com/seamusabshere/cache_method) gem to
23
+ cache results between invocations. Configuration details can be found
24
+ [here](https://github.com/seamusabshere/cache_method#configuration-and-supported-cache-clients).
25
+ By default a memcached client on the default port (11211) on the host
26
+ `memcached` will be used.
27
+
28
+ You can run memcached locally on macOS with Homebrew by running:
29
+
30
+ ```sh
31
+ brew install memcached
32
+ brew services start memcached
33
+ ```
34
+
35
+ You may want to add a `memcached` alias for `127.0.0.1` in `/etc/hosts`.
36
+
37
+ Please make sure this is only listening on loopback for security, of course.
38
+
39
+
40
+ ## gli
41
+
42
+ Checkoff uses [`gli`](https://github.com/davetron5000/gli) on the CLI.
43
+ To get a full stack trace when encountering a problem, run as follows:
44
+
45
+ ```sh
46
+ GLI_DEBUG=true checkoff your-arguments-here
47
+ ```
48
+
19
49
  ## Publishing
20
50
 
21
51
  To publish new version as a maintainer:
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.15.2)
15
+ checkoff (0.16.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -22,7 +22,7 @@ PATH
22
22
  GEM
23
23
  remote: https://rubygems.org/
24
24
  specs:
25
- activesupport (6.1.4.1)
25
+ activesupport (6.1.5.1)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (>= 1.6, < 2)
28
28
  minitest (>= 5.1)
@@ -35,8 +35,8 @@ GEM
35
35
  cache (>= 0.2.1)
36
36
  childprocess (4.0.0)
37
37
  coderay (1.1.3)
38
- concurrent-ruby (1.1.9)
39
- dalli (2.7.11)
38
+ concurrent-ruby (1.1.10)
39
+ dalli (3.2.1)
40
40
  docile (1.4.0)
41
41
  faraday (1.5.1)
42
42
  faraday-em_http (~> 1.0)
@@ -60,15 +60,15 @@ GEM
60
60
  faraday_middleware-multi_json (0.0.6)
61
61
  faraday_middleware
62
62
  multi_json
63
- gli (2.20.1)
64
- i18n (1.8.10)
63
+ gli (2.21.0)
64
+ i18n (1.10.0)
65
65
  concurrent-ruby (~> 1.0)
66
66
  imagen (0.1.8)
67
67
  parser (>= 2.5, != 2.5.1.1)
68
68
  iniparse (1.5.0)
69
69
  jwt (2.2.3)
70
70
  method_source (1.0.0)
71
- minitest (5.14.4)
71
+ minitest (5.15.0)
72
72
  minitest-profile (0.0.2)
73
73
  mocha (1.12.0)
74
74
  multi_json (1.15.0)
@@ -127,7 +127,7 @@ GEM
127
127
  rainbow (>= 2.1, < 4.0)
128
128
  rugged (>= 0.27, < 1.2)
129
129
  unicode-display_width (2.0.0)
130
- zeitwerk (2.4.2)
130
+ zeitwerk (2.5.4)
131
131
 
132
132
  PLATFORMS
133
133
  ruby
@@ -153,4 +153,4 @@ DEPENDENCIES
153
153
  undercover
154
154
 
155
155
  BUNDLED WITH
156
- 2.2.24
156
+ 2.2.25
data/Makefile CHANGED
@@ -15,7 +15,7 @@ export PRINT_HELP_PYSCRIPT
15
15
  help:
16
16
  @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
17
17
 
18
- default: localtest ## run default typechecking and tests
18
+ default: localtest ## run default tests and quality
19
19
 
20
20
  requirements_dev.txt.installed: requirements_dev.txt
21
21
  pip install -q --disable-pip-version-check -r requirements_dev.txt
@@ -50,6 +50,9 @@ test: ## Run lower-level tests
50
50
  localtest: ## run default local actions
51
51
  @bundle exec rake localtest
52
52
 
53
+ repl: ## Load up checkoff in pry
54
+ @bundle exec rake repl
55
+
53
56
  update_from_cookiecutter: ## Bring in changes from template project used to create this repo
54
57
  bundle exec overcommit --uninstall
55
58
  IN_COOKIECUTTER_PROJECT_UPGRADER=1 cookiecutter_project_upgrader || true
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "result": {
3
3
  "line": 99.78,
4
- "branch": 95.34
4
+ "branch": 94.31
5
5
  }
6
6
  }
data/fix.sh CHANGED
@@ -7,7 +7,7 @@ apt_upgraded=0
7
7
  update_apt() {
8
8
  if [ "${apt_upgraded}" = 0 ]
9
9
  then
10
- sudo apt-get update -y
10
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
11
11
  apt_upgraded=1
12
12
  fi
13
13
  }
@@ -243,7 +243,7 @@ install_package() {
243
243
  elif type apt-get >/dev/null 2>&1
244
244
  then
245
245
  update_apt
246
- sudo apt-get install -y "${apt_package}"
246
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${apt_package}"
247
247
  else
248
248
  >&2 echo "Teach me how to install packages on this plaform"
249
249
  exit 1
@@ -257,7 +257,7 @@ ensure_python_build_requirements() {
257
257
  ensure_dev_library ffi.h libffi libffi-dev
258
258
  ensure_dev_library sqlite3.h sqlite3 libsqlite3-dev
259
259
  ensure_dev_library lzma.h xz liblzma-dev
260
- ensure_dev_library readline.h readline libreadline-dev
260
+ ensure_dev_library readline/readline.h readline libreadline-dev
261
261
  }
262
262
 
263
263
  # You can find out which feature versions are still supported / have
@@ -275,8 +275,12 @@ ensure_python_versions() {
275
275
  do
276
276
  if [ "$(uname)" == Darwin ]
277
277
  then
278
+ if [ -z "${HOMEBREW_OPENSSL_PREFIX:-}" ]
279
+ then
280
+ HOMEBREW_OPENSSL_PREFIX="$(brew --prefix openssl)"
281
+ fi
278
282
  pyenv_install() {
279
- CFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include" LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib" pyenv install --skip-existing "$@"
283
+ CFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include -I${HOMEBREW_OPENSSL_PREFIX}/include" LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib -L${HOMEBREW_OPENSSL_PREFIX}/lib" pyenv install --skip-existing "$@"
280
284
  }
281
285
 
282
286
  major_minor="$(cut -d. -f1-2 <<<"${ver}")"
@@ -27,8 +27,7 @@ module Checkoff
27
27
  def client
28
28
  @client ||= @asana_client_class.new do |c|
29
29
  c.authentication :access_token, @config.fetch(:personal_access_token)
30
- c.default_headers 'asana-enable' => 'string_ids,new_sections'
31
- c.default_headers 'asana-disable' => 'new_user_task_lists'
30
+ c.default_headers 'asana-enable' => 'new_project_templates'
32
31
  end
33
32
  end
34
33
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ require_relative 'projects'
5
+ require_relative 'workspaces'
6
+ require_relative 'clients'
7
+
8
+ module Checkoff
9
+ # Query different sections of Asana 'My Tasks' projects
10
+ class MyTasks
11
+ MINUTE = 60
12
+ LONG_CACHE_TIME = MINUTE * 15
13
+ SHORT_CACHE_TIME = MINUTE * 5
14
+
15
+ attr_reader :projects
16
+
17
+ def initialize(config: Checkoff::ConfigLoader.load(:asana),
18
+ projects: Checkoff::Projects.new(config: config))
19
+ @config = config
20
+ @projects = projects
21
+ end
22
+
23
+ # Given a 'My Tasks' project object, pull all tasks, then provide
24
+ # a Hash of tasks with section name -> task list of the
25
+ # uncompleted tasks.
26
+ def tasks_by_section_for_my_tasks(project)
27
+ raw_tasks = projects.tasks_from_project(project,
28
+ extra_fields: ['assignee_section.name'])
29
+ active_tasks = projects.active_tasks(raw_tasks)
30
+ by_my_tasks_section(active_tasks)
31
+ end
32
+
33
+ # Given a list of tasks in 'My Tasks', pull a Hash of tasks with
34
+ # section name -> task list
35
+ def by_my_tasks_section(tasks)
36
+ by_section = {}
37
+ tasks.each do |task|
38
+ assignee_section = task.assignee_section
39
+ current_section = assignee_section.name
40
+ by_section[current_section] ||= []
41
+ by_section[current_section] << task
42
+ end
43
+ by_section
44
+ end
45
+ end
46
+ end
@@ -4,6 +4,7 @@ require 'forwardable'
4
4
  require_relative 'projects'
5
5
  require_relative 'workspaces'
6
6
  require_relative 'clients'
7
+ require_relative 'my_tasks'
7
8
 
8
9
  module Checkoff
9
10
  # Query different sections of Asana projects
@@ -14,7 +15,7 @@ module Checkoff
14
15
 
15
16
  extend Forwardable
16
17
 
17
- attr_reader :projects, :workspaces, :time
18
+ attr_reader :projects, :workspaces, :time, :my_tasks
18
19
 
19
20
  def initialize(config: Checkoff::ConfigLoader.load(:asana),
20
21
  projects: Checkoff::Projects.new(config: config),
@@ -24,8 +25,9 @@ module Checkoff
24
25
  time: Time)
25
26
  @projects = projects
26
27
  @workspaces = workspaces
27
- @time = time
28
+ @my_tasks = Checkoff::MyTasks.new(config: config, projects: projects)
28
29
  @client = client
30
+ @time = time
29
31
  end
30
32
 
31
33
  # Returns a list of Asana API section objects for a given project
@@ -38,9 +40,12 @@ module Checkoff
38
40
  # tasks with section name -> task list of the uncompleted tasks
39
41
  def tasks_by_section(workspace_name, project_name)
40
42
  project = project_or_raise(workspace_name, project_name)
41
- tasks_by_section_for_project(project)
43
+ if project_name == :my_tasks
44
+ my_tasks.tasks_by_section_for_my_tasks(project)
45
+ else
46
+ tasks_by_section_for_project(project)
47
+ end
42
48
  end
43
- cache_method :tasks_by_section, SHORT_CACHE_TIME
44
49
 
45
50
  # XXX: Rename to section_tasks
46
51
  #
@@ -83,7 +88,9 @@ module Checkoff
83
88
  # Given a project object, pull all tasks, then provide a Hash of
84
89
  # tasks with section name -> task list of the uncompleted tasks
85
90
  def tasks_by_section_for_project(project)
91
+ # print("project: #{project}")
86
92
  raw_tasks = projects.tasks_from_project(project)
93
+ # print("raw_tasks[0]: #{raw_tasks[0]}")
87
94
  active_tasks = projects.active_tasks(raw_tasks)
88
95
  by_section(active_tasks, project.gid)
89
96
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Checkoff
4
4
  # Version of library
5
- VERSION = '0.15.2'
5
+ VERSION = '0.16.0'
6
6
  end
data/requirements_dev.txt CHANGED
@@ -1,2 +1,2 @@
1
- pip==21.0.1
1
+ pip==21.1
2
2
  yamllint==1.26.0
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.15.2
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-14 00:00:00.000000000 Z
11
+ date: 2022-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -273,6 +273,7 @@ files:
273
273
  - ".circleci/config.yml"
274
274
  - ".envrc"
275
275
  - ".git-hooks/pre_commit/circle_ci.rb"
276
+ - ".gitattributes"
276
277
  - ".gitignore"
277
278
  - ".overcommit.yml"
278
279
  - ".rubocop.yml"
@@ -303,6 +304,7 @@ files:
303
304
  - lib/checkoff/config_loader.rb
304
305
  - lib/checkoff/create-entity.sh
305
306
  - lib/checkoff/custom_fields.rb
307
+ - lib/checkoff/my_tasks.rb
306
308
  - lib/checkoff/projects.rb
307
309
  - lib/checkoff/sections.rb
308
310
  - lib/checkoff/subtasks.rb