zensana 1.2.0 → 1.3.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
  SHA1:
3
- metadata.gz: 1832214144fb9cf8e0af229da4ad08ca2f3977e8
4
- data.tar.gz: 7887bc8414164f1945aefb1c1a3c7b877330c8ad
3
+ metadata.gz: 08db9404392b3ccfc2461bc38d4a1af86648b687
4
+ data.tar.gz: 92153952d8bc3dd0b0f6f1d744e94697ba91da78
5
5
  SHA512:
6
- metadata.gz: 979c0c4796428272d3fa60676b28c344fde588686b1f98e7cd2a690e0d0de45ba3f1f5bd82ff6b282b02d5b87c760d8e12c8815f49b9f099c1dc1976e962b7cf
7
- data.tar.gz: df196da8ba97fe840b8903e184f66b47342d329f9449a37f1427af4169995faa2c6d1dafc62c36078138e6ac05d26e08ecaf66c29b0dfcd7fb574820324280f5
6
+ metadata.gz: ed052c75b1b0dcabe04002ba5c6ed34ec4bc23e9089c894fd576496b556a63d29ae77c84a20e1df1b1c7eadf3baeef37109b10009526b5754ba7a03d05631ebb
7
+ data.tar.gz: a0a5a7ccec8ff22f843849d49c7548dd6cc6e9c454193d7e1d79f099d6a9909bcc187668c7ea8a8b1e2ec362780db094c47e68e237bc8c3f254516804bd963c3
data/lib/zensana/cli.rb CHANGED
@@ -4,5 +4,8 @@ module Zensana
4
4
  desc 'project SUBCOMMAND', 'perform actions on Asana projects'
5
5
  subcommand 'project', Project
6
6
 
7
+ desc 'group SUBCOMMAND', 'perform actions on ZenDesk agent groups'
8
+ subcommand 'group', Group
9
+
7
10
  end
8
11
  end
@@ -0,0 +1,9 @@
1
+ module Zensana
2
+ class Command::Group < Zensana::Command
3
+
4
+ desc 'find GROUP', 'List ZenDesk agent groups that match GROUP (by ID or NAME, regexp accepted)'
5
+ def find(name)
6
+ puts Zensana::Zendesk::Group.search(name).collect { |p| "#{p['id']}: #{p['name']}" }.sort
7
+ end
8
+ end
9
+ end
@@ -5,7 +5,7 @@ module Zensana
5
5
 
6
6
  desc 'find PROJECT', 'List projects that match PROJECT (by ID or NAME, regexp accepted)'
7
7
  def find(name)
8
- puts Zensana::Asana::Project.search(name).collect { |p| p['name'] }.sort
8
+ puts Zensana::Asana::Project.search(name).collect { |p| "#{p['id']}: #{p['name']}" }.sort
9
9
  end
10
10
 
11
11
  desc 'show PROJECT', 'Display details of PROJECT (choosing from list matching ID or NAME, regexp accepted)'
@@ -32,6 +32,7 @@ module Zensana
32
32
  option :attachments, type: 'boolean', aliases: '-a', default: true, desc: 'download and upload any attachments'
33
33
  option :completed, type: 'boolean', aliases: '-c', default: false, desc: 'include tasks that are completed'
34
34
  option :global_tags, type: 'array', aliases: '-t', default: ['zensana'], desc: 'array of tag(s) to be applied to every ticket imported'
35
+ option :group_id, type: 'numeric', aliases: '-g', default: nil, desc: 'ZenDesk group_id to assign tickets to - must not conflict with default_user'
35
36
  option :stories, type: 'boolean', aliases: '-s', default: true, desc: 'import stories as comments'
36
37
  option :default_user, type: 'string', aliases: '-u', default: nil, desc: 'set a default user to assign to invalid asana user items'
37
38
  option :verified, type: 'boolean', aliases: '-v', default: true, desc: '`false` will send email to zendesk users created'
@@ -79,8 +80,8 @@ using options #{options}
79
80
  project_tags = [] << tags
80
81
  section_tags = []
81
82
 
82
- @asana_project.full_tasks.each do |task|
83
- task_to_ticket task, project_tags, section_tags
83
+ @asana_project.task_list.each do |task|
84
+ task_to_ticket task['id'], project_tags, section_tags
84
85
  end
85
86
  say "\n\n ---> Finished!\n\n", :green
86
87
  end
@@ -115,10 +116,11 @@ using options #{options}
115
116
  end
116
117
  end
117
118
 
118
- # convert and asana task into a zendesk ticket
119
+ # convert an asana task into a zendesk ticket
119
120
  # calls itself recursively for subtasks
120
121
  #
121
- def task_to_ticket(task, project_tags, section_tags )
122
+ def task_to_ticket(task_id, project_tags, section_tags )
123
+ task = Zensana::Asana::Task.new(task_id)
122
124
  if task.attributes['completed'] && !options[:completed]
123
125
  say "\nSkipping completed task: #{task.name}! ", :yellow
124
126
  return
@@ -187,6 +189,7 @@ using options #{options}
187
189
  Task attributes: #{task.attributes}
188
190
  EOF
189
191
  :assignee_id => zendesk_assignee_id(task.attributes['assignee']),
192
+ :group_id => options[:group_id],
190
193
  :created_at => task.created_at,
191
194
  :tags => flatten_tags(project_tags, section_tags),
192
195
  :comments => comments
@@ -197,9 +200,9 @@ using options #{options}
197
200
 
198
201
  # rinse and repeat for subtasks and their subtasks and ...
199
202
  # we create a new section tag list for each recursed level
200
- sub_section_tags = []
203
+ sub_section_tags = section_tags.dup << []
201
204
  task.subtasks.each do |sub|
202
- task_to_ticket Zensana::Asana::Task.new(sub.attributes['id']), project_tags, sub_section_tags
205
+ task_to_ticket sub.attributes['id'], project_tags, sub_section_tags
203
206
  end
204
207
 
205
208
  # this task's tags are now no longer required
@@ -15,7 +15,7 @@ module Zensana
15
15
  end
16
16
 
17
17
  def tags
18
- attributes['tags'].map { |t| snake_case t['name'] } if attributes['tags']
18
+ attributes['tags'].map { |t| t['name'] } if attributes['tags']
19
19
  end
20
20
 
21
21
  def is_section?
@@ -77,10 +77,6 @@ module Zensana
77
77
  def opt_fields
78
78
  FIELDS.map { |f| f.to_s }.join(',')
79
79
  end
80
-
81
- def snake_case(string)
82
- string.gsub(/(.)([A-Z])/,'\1_\2').downcase
83
- end
84
80
  end
85
81
  end
86
82
  end
@@ -0,0 +1,22 @@
1
+ module Zensana
2
+ class Zendesk
3
+ class Group
4
+ include Zensana::Zendesk::Access
5
+
6
+ class << self
7
+
8
+ def list
9
+ @@list ||= Zensana::Zendesk.inst.fetch('/groups.json')['groups']
10
+ end
11
+
12
+ def search(spec)
13
+ list.select { |g| g.to_s =~ %r{#{spec}} }
14
+ rescue RegexpError
15
+ raise BadSearch, "'#{spec}' is not a valid regular expression"
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Zensana
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
data/lib/zensana.rb CHANGED
@@ -13,10 +13,12 @@ require 'zensana/models/asana/task'
13
13
  require 'zensana/models/asana/user'
14
14
  require 'zensana/models/zendesk/attachment'
15
15
  require 'zensana/models/zendesk/comment'
16
+ require 'zensana/models/zendesk/group'
16
17
  require 'zensana/models/zendesk/ticket'
17
18
  require 'zensana/models/zendesk/user'
18
19
 
19
20
  require 'zensana/command'
21
+ require 'zensana/commands/group'
20
22
  require 'zensana/commands/project'
21
23
  require 'zensana/cli'
22
24
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zensana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Warren Bain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-22 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httmultiparty
@@ -143,6 +143,7 @@ files:
143
143
  - lib/zensana.rb
144
144
  - lib/zensana/cli.rb
145
145
  - lib/zensana/command.rb
146
+ - lib/zensana/commands/group.rb
146
147
  - lib/zensana/commands/project.rb
147
148
  - lib/zensana/models/asana/attachment.rb
148
149
  - lib/zensana/models/asana/project.rb
@@ -150,6 +151,7 @@ files:
150
151
  - lib/zensana/models/asana/user.rb
151
152
  - lib/zensana/models/zendesk/attachment.rb
152
153
  - lib/zensana/models/zendesk/comment.rb
154
+ - lib/zensana/models/zendesk/group.rb
153
155
  - lib/zensana/models/zendesk/ticket.rb
154
156
  - lib/zensana/models/zendesk/user.rb
155
157
  - lib/zensana/services/asana.rb