checkoff 0.44.2 → 0.44.4

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: d924c906eed129ad1c57bdbfdd8cdcc61b572e296a09721195b7c1a10d78dbe5
4
- data.tar.gz: 79e71aac6289b18a448288a601c62a02cee6583bcbbc966e64a71003c8e73e89
3
+ metadata.gz: 37638fcbc55eff5ef89c7335ba3841e39376d9055c7995ecbf5e17446f3f641e
4
+ data.tar.gz: 97e451ca7abae2f8cc5a6f70af6fa9779131c69361452b87ace3c631e0a6d8aa
5
5
  SHA512:
6
- metadata.gz: 8bc265211c02ebf11e7c7f35ce79aae7517c6b86cf023c8d0b41713a24df2365954f9757bfe9b44a85573187af7fb355f84e7d6b1bad9e8b32fc9b8b9ed6891d
7
- data.tar.gz: 5de92894cb1f12d633667b87f426f4460d63a54d84cb1a9f2e8e38c529c45d41efdd9097cb9a2dd6f73691669a4a070ba87aedc55a5d8ec7780fa9cec5e2d13a
6
+ metadata.gz: 2fbdeb108ae04b165077972937931f3889c1e4b72c647cedb45ac176de303d80ce47bb08fe4d0b50b2433fc522db9ebec5ca703b5e27cc7e1f52b38721af1e45
7
+ data.tar.gz: fa3f9c267cb2d750ef04382023ab691114239d6b359379ac1951ecfc31e9cb9750fff03211bb53a82e3f2c8ab6a5f160a23e7c92e5fc6c3c02426e02a8fcd288
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.44.2)
15
+ checkoff (0.44.4)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
+ # rubocop:disable Layout/LineLength
3
4
  # @!parse
4
5
  # class Time
5
6
  # class << self
@@ -16,7 +17,12 @@
16
17
  # def workspaces; end
17
18
  # # @return [Asana::ProxiedResourceClasses::Section]
18
19
  # def sections; end
20
+ # # @return [Asana::ProxiedResourceClasses::Project]
21
+ # def projects; end
22
+ # # @return [Asana::ProxiedResourceClasses::UserTaskList]
23
+ # def user_task_lists; end
19
24
  # end
25
+ # class Collection < Asana::Resources::Collection; end
20
26
  # module Resources
21
27
  # class Task
22
28
  # # @return [String, nil]
@@ -45,9 +51,45 @@
45
51
  # # @param options [Hash] the request I/O options.
46
52
  # # @return [Asana::Resources::Task]
47
53
  # def find_by_id(id, options: {}); end
54
+ # # Returns the compact task records for some filtered set of tasks. Use one
55
+ # # or more of the parameters provided to filter the tasks returned. You must
56
+ # # specify a `project`, `section`, `tag`, or `user_task_list` if you do not
57
+ # # specify `assignee` and `workspace`.
58
+ # #
59
+ # # @param assignee [String] The assignee to filter tasks on.
60
+ # # @param workspace [String] The workspace or organization to filter tasks on.
61
+ # # @param project [String] The project to filter tasks on.
62
+ # # @param section [Gid] The section to filter tasks on.
63
+ # # @param tag [Gid] The tag to filter tasks on.
64
+ # # @param user_task_list [Gid] The user task list to filter tasks on.
65
+ # # @param completed_since [String] Only return tasks that are either incomplete or that have been
66
+ # # completed since this time.
67
+ # #
68
+ # # @param modified_since [String] Only return tasks that have been modified since the given time.
69
+ # #
70
+ # # @param per_page [Integer] the number of records to fetch per page.
71
+ # # @param options [Hash] the request I/O options.
72
+ # # Notes:
73
+ # #
74
+ # # If you specify `assignee`, you must also specify the `workspace` to filter on.
75
+ # #
76
+ # # If you specify `workspace`, you must also specify the `assignee` to filter on.
77
+ # #
78
+ # # Currently, this is only supported in board views.
79
+ # #
80
+ # # A task is considered "modified" if any of its properties change,
81
+ # # or associations between it and other objects are modified (e.g.
82
+ # # a task being added to a project). A task is not considered modified
83
+ # # just because another object it is associated with (e.g. a subtask)
84
+ # # is modified. Actions that count as modifying the task include
85
+ # # assigning, renaming, completing, and adding stories.
86
+ # # @return [Asana::Collection<Asana::Resources::Task>]
87
+ # def find_all(assignee: nil, workspace: nil, project: nil, section: nil,
88
+ # tag: nil, user_task_list: nil, completed_since: nil,
89
+ # modified_since: nil, per_page: 20, options: {}); end
48
90
  # # @param section [Asana::Resources::section]
49
91
  # # @param options [Hash] the request I/O options.
50
- # # @return [Array<Asana::Resources::Task>]
92
+ # # @return [Enumerable<Asana::Resources::Task>]
51
93
  # def get_tasks(assignee: nil,
52
94
  # project: nil,
53
95
  # section: nil,
@@ -58,13 +100,43 @@
58
100
  # options: {}); end
59
101
  # end
60
102
  # class Workspace
61
- # # @return [Array<Asana::Resources::Workspace>]
103
+ # # @return [Enumerable<Asana::Resources::Workspace>]
62
104
  # def find_all; end
63
105
  # end
64
106
  # class Section
65
107
  # # @param project_gid [String]
66
- # # @return [Array<Asana::Resources::Section>]
108
+ # # @return [Enumerable<Asana::Resources::Section>]
67
109
  # def get_sections_for_project(client, project_gid:, options: {}); end
68
110
  # end
111
+ # class Project
112
+ # # Returns the compact project records for all projects in the workspace.
113
+ # #
114
+ # # @param workspace [Strin] The workspace or organization to find projects in.
115
+ # # @param is_template [Boolean] **Note: This parameter can only be included if a team is also defined, or the workspace is not an organization**
116
+ # # Filters results to include only template projects.
117
+ # #
118
+ # # @param archived [Boolean] Only return projects whose `archived` field takes on the value of
119
+ # # this parameter.
120
+ # #
121
+ # # @param per_page [Integer] the number of records to fetch per page.
122
+ # # @param options [Hash] the request I/O options.
123
+ # # @return [Asana::Collection<Asana::Resources::Project>]
124
+ # def find_by_workspace(client, workspace: required("workspace"), is_template: nil, archived: nil, per_page: 20, options: {}); end
125
+ # # Returns the complete project record for a single project.
126
+ # #
127
+ # # @param id [String] The project to get.
128
+ # # @param options [Hash] the request I/O options.
129
+ # # @return [Asana::Resources::Project]
130
+ # def find_by_id(id, options: {}); end
131
+ # end
132
+ # class UserTaskList
133
+ # # @param user_gid [String] (required) A string identifying a user. This can either be the string \"me\", an email, or the gid of a user.
134
+ # # @param workspace [String] (required) The workspace in which to get the user task list.
135
+ # # @param options [Hash] the request I/O options
136
+ # # @return [Asana::Resources::UserTaskList]
137
+ # def get_user_task_list_for_user(client, user_gid:,
138
+ # workspace: nil, options: {}); end
139
+ # end
69
140
  # end
70
141
  # end
142
+ # rubocop:enable Layout/LineLength
@@ -17,19 +17,18 @@ module Checkoff
17
17
  # Work with projects in Asana
18
18
  class Projects
19
19
  MINUTE = 60
20
- # @sg-ignore
21
20
  HOUR = MINUTE * 60
22
21
  DAY = 24 * HOUR
23
- # @sg-ignore
24
22
  REALLY_LONG_CACHE_TIME = HOUR * 1
25
- # @sg-ignore
26
23
  LONG_CACHE_TIME = MINUTE * 15
27
24
  SHORT_CACHE_TIME = MINUTE
28
25
 
29
26
  # @!parse
30
27
  # extend CacheMethod::ClassMethods
31
28
 
29
+ # @param config [Hash<Symbol, Object>]
32
30
  # @param client [Asana::Client]
31
+ # @param workspaces [Checkoff::Workspaces]
33
32
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
34
33
  client: Checkoff::Clients.new(config: config).client,
35
34
  workspaces: Checkoff::Workspaces.new(config: config,
@@ -59,8 +58,9 @@ module Checkoff
59
58
  if project_name.is_a?(Symbol) && project_name.to_s.start_with?('my_tasks')
60
59
  my_tasks(workspace_name)
61
60
  else
62
- projects = projects_by_workspace_name(workspace_name)
63
- projects.find do |project|
61
+ # @type [Asana::Collection<Asana::Resources::Project>]
62
+ ps = projects_by_workspace_name(workspace_name)
63
+ ps.find do |project|
64
64
  project.name == project_name
65
65
  end
66
66
  end
@@ -79,18 +79,17 @@ module Checkoff
79
79
  cache_method :project_or_raise, LONG_CACHE_TIME
80
80
 
81
81
  # find uncompleted tasks in a list
82
- # @param [Array<Asana::Resources::Task>] tasks
83
- # @return [Array<Asana::Resources::Task>]
82
+ # @param [Enumerable<Asana::Resources::Task>] tasks
83
+ # @return [Enumerable<Asana::Resources::Task>]
84
84
  def active_tasks(tasks)
85
85
  tasks.select { |task| task.completed_at.nil? }
86
86
  end
87
87
 
88
88
  # pull task objects from a named project
89
- # @sg-ignore
90
89
  # @param [Asana::Resources::Project] project
91
90
  # @param [Boolean] only_uncompleted
92
91
  # @param [Array<String>] extra_fields
93
- # @return [Array<Asana::Resources::Task>]
92
+ # @return [Enumerable<Asana::Resources::Task>]
94
93
  def tasks_from_project(project, only_uncompleted: true, extra_fields: [])
95
94
  options = task_options
96
95
  options[:completed_since] = '9999-12-01' if only_uncompleted
@@ -102,31 +101,30 @@ module Checkoff
102
101
 
103
102
  private
104
103
 
104
+ # @return [Asana::Client]
105
105
  attr_reader :client
106
106
 
107
- # @sg-ignore
107
+ # @return [Asana::ProxiedResourceClasses::Project]
108
108
  def projects
109
109
  client.projects
110
110
  end
111
111
  cache_method :projects, LONG_CACHE_TIME
112
112
 
113
- # @sg-ignore
114
113
  # @param [String] workspace_name
115
- # @return [Array<Asana::Resources::Project>]
114
+ # @return [Asana::Collection<Asana::Resources::Project>]
116
115
  def projects_by_workspace_name(workspace_name)
117
116
  workspace = @workspaces.workspace_or_raise(workspace_name)
118
117
  raise "Could not find workspace named #{workspace_name}" unless workspace
119
118
 
120
- projects.find_by_workspace(workspace: workspace.gid)
119
+ projects.find_by_workspace(workspace: workspace.gid, per_page: 100)
121
120
  end
121
+ cache_method :projects_by_workspace_name, LONG_CACHE_TIME
122
122
 
123
- # @sg-ignore
124
123
  # @param [String] workspace_name
125
124
  # @return [Asana::Resources::Project]
126
125
  def my_tasks(workspace_name)
127
126
  workspace = @workspaces.workspace_or_raise(workspace_name)
128
127
  # @sg-ignore
129
- # @type [Asana::Resources::UserTaskList]
130
128
  result = client.user_task_lists.get_user_task_list_for_user(user_gid: 'me',
131
129
  workspace: workspace.gid)
132
130
  gid = result.gid
@@ -53,19 +53,20 @@ module Checkoff
53
53
  # @param workspace_name [String]
54
54
  # @param project_name [String, Symbol]
55
55
  #
56
- # @return [Array<Asana::Resources::Section>]
56
+ # @return [Enumerable<Asana::Resources::Section>]
57
57
  def sections_or_raise(workspace_name, project_name)
58
58
  project = project_or_raise(workspace_name, project_name)
59
59
  # @sg-ignore
60
60
  client.sections.get_sections_for_project(project_gid: project.gid)
61
61
  end
62
+ cache_method :sections_or_raise, SHORT_CACHE_TIME
62
63
 
63
64
  # Given a workspace name and project name, then provide a Hash of
64
65
  # tasks with section name -> task list of the uncompleted tasks
65
66
  # @param workspace_name [String]
66
67
  # @param project_name [String, Symbol]
67
68
  # @param extra_fields [Array<String>]
68
- # @return [Hash{[String, nil] => Array<Asana::Resources::Task>}]
69
+ # @return [Hash{[String, nil] => Enumerable<Asana::Resources::Task>}]
69
70
  def tasks_by_section(workspace_name, project_name, extra_fields: [])
70
71
  raise ArgumentError, 'Provided nil workspace name' if workspace_name.nil?
71
72
  raise ArgumentError, 'Provided nil project name' if project_name.nil?
@@ -88,7 +89,7 @@ module Checkoff
88
89
  # @param only_uncompleted [Boolean]
89
90
  # @param extra_fields [Array<String>]
90
91
  #
91
- # @return [Array<Asana::Resources::Task>]
92
+ # @return [Enumerable<Asana::Resources::Task>]
92
93
  def tasks(workspace_name, project_name, section_name,
93
94
  only_uncompleted: true,
94
95
  extra_fields: [])
@@ -140,7 +141,7 @@ module Checkoff
140
141
  # tasks with section name -> task list of the uncompleted tasks
141
142
  # @param project [Asana::Resources::Project]
142
143
  # @param extra_fields [Array<String>]
143
- # @return [Hash<[String,nil], Array<Asana::Resources::Task>>]
144
+ # @return [Hash<[String,nil], Enumerable<Asana::Resources::Task>>]
144
145
  def tasks_by_section_for_project(project, extra_fields: [])
145
146
  raw_tasks = projects.tasks_from_project(project, extra_fields: extra_fields)
146
147
  active_tasks = projects.active_tasks(raw_tasks)
@@ -150,16 +151,16 @@ module Checkoff
150
151
  # @param name [String]
151
152
  # @return [String, nil]
152
153
  def section_key(name)
153
- inbox_section_names = ['(no section)', 'Untitled section', 'Inbox']
154
+ inbox_section_names = ['(no section)', 'Untitled section', 'Inbox', 'Recently assigned']
154
155
  return nil if inbox_section_names.include?(name)
155
156
 
156
157
  name
157
158
  end
158
159
 
159
160
  # Given a list of tasks, pull a Hash of tasks with section name -> task list
160
- # @param tasks [Array<Asana::Resources::Task>]
161
+ # @param tasks [Enumerable<Asana::Resources::Task>]
161
162
  # @param project_gid [String]
162
- # @return [Hash<[String,nil], Array<Asana::Resources::Task>>]
163
+ # @return [Hash<[String,nil], Enumerable<Asana::Resources::Task>>]
163
164
  def by_section(tasks, project_gid)
164
165
  by_section = {}
165
166
  # @sg-ignore
@@ -170,7 +171,7 @@ module Checkoff
170
171
  end
171
172
  cache_method :by_section, LONG_CACHE_TIME
172
173
 
173
- # @param by_section [Hash{[String, nil] => Array<Asana::Resources::Task>}]
174
+ # @param by_section [Hash{[String, nil] => Enumerable<Asana::Resources::Task>}]
174
175
  # @param task [Asana::Resources::Task]
175
176
  # @param project_gid [String]
176
177
  # @return [void]
@@ -27,8 +27,8 @@ module Checkoff
27
27
  end
28
28
 
29
29
  # pulls a Hash of subtasks broken out by section
30
- # @param tasks [Array<Asana::Resources::Task>]
31
- # @return [Hash<[nil,String], Array<Asana::Resources::Task>>]
30
+ # @param tasks [Enumerable<Asana::Resources::Task>]
31
+ # @return [Hash<[nil,String], Enumerable<Asana::Resources::Task>>]
32
32
  def by_section(tasks)
33
33
  current_section = nil
34
34
  by_section = { nil => [] }
data/lib/checkoff/tags.rb CHANGED
@@ -30,7 +30,7 @@ module Checkoff
30
30
  @client = client
31
31
  end
32
32
 
33
- # @return [Array<Asana::Resources::Task>]
33
+ # @return [Enumerable<Asana::Resources::Task>]
34
34
  def tasks(workspace_name, tag_name,
35
35
  only_uncompleted: true,
36
36
  extra_fields: [])
@@ -57,7 +57,7 @@ module Checkoff
57
57
  # @param [String] workspace_name
58
58
  # @param [String] url
59
59
  # @param [Array<String>] extra_fields
60
- # @return [Array<Asana::Resources::Task>]
60
+ # @return [Enumerable<Asana::Resources::Task>]
61
61
  def task_search(workspace_name, url, extra_fields: [])
62
62
  workspace = workspaces.workspace_or_raise(workspace_name)
63
63
  # @sg-ignore
@@ -109,7 +109,7 @@ module Checkoff
109
109
  # @param section_name [String, nil, :unspecified]
110
110
  # @param only_uncompleted [Boolean]
111
111
  # @param extra_fields [Array<String>]
112
- # @return [Array<Asana::Resources::Task>]
112
+ # @return [Enumerable<Asana::Resources::Task>]
113
113
  def tasks_from_section(workspace_name, project_name,
114
114
  section_name:,
115
115
  only_uncompleted:,
@@ -160,7 +160,7 @@ module Checkoff
160
160
  # https://github.com/Asana/ruby-asana/issues/125
161
161
 
162
162
  # @sg-ignore
163
- # @type [Array<Asana::Resources::Task>, nil]
163
+ # @type [Enumerable<Asana::Resources::Task>, nil]
164
164
  dependencies = task.instance_variable_get(:@dependencies)
165
165
  dependencies = task.dependencies.map { |task| { 'gid' => task.gid } } if dependencies.nil?
166
166
 
@@ -3,5 +3,5 @@
3
3
  # Command-line and gem client for Asana (unofficial)
4
4
  module Checkoff
5
5
  # Version of library
6
- VERSION = '0.44.2'
6
+ VERSION = '0.44.4'
7
7
  end
@@ -41,6 +41,7 @@ module Checkoff
41
41
  workspace.name == workspace_name
42
42
  end
43
43
  end
44
+ cache_method :workspace, LONG_CACHE_TIME
44
45
 
45
46
  # @return [Asana::Resources::Workspace]
46
47
  def default_workspace
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.44.2
4
+ version: 0.44.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-02 00:00:00.000000000 Z
11
+ date: 2023-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport