zensana 1.6.2 → 1.7.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: 270fcda586476bd581c57dba08df15457fe6bcc9
4
- data.tar.gz: c1d0104c998a5642ce40e3cc474d0e48bdbab04e
3
+ metadata.gz: 26228bf1614321af4ecf3045084e0fdf3970fba6
4
+ data.tar.gz: 39b1f80fc6b4fe3323fd3711d6ae550d6ac65fb2
5
5
  SHA512:
6
- metadata.gz: 66f993aefbb98a6340a686ffe34fe4715e67d268fa85108eea29cdefcc965e2e462d7e35218af9e8e1c597dc5e5ad4619d3a34d5b874c5b4899b6c16d23f88fa
7
- data.tar.gz: f0a19e31dcff9dff8ee7d5499a8eb0ed5eb286adc89556ed2c7ca3619aefd8fd820194fc72b0e161447fc39153aacc2540f6cdb437cab44cb3ab08a16b8fa6fb
6
+ metadata.gz: 092da1a5c00e8d1e8c4f80f76d6928883649bfd7ea2a5b62ebd49ebfaedc5e566f7b347a317150752354b2ae670f47d6c17ee418aa14e694d0b705a6b6cf60b0
7
+ data.tar.gz: 8c89f95b12f3df61e704f90a5d5d0c3eeb26cb1a931797f703298c2960e2c88780d3823fa956b6685d75386a8624d8b29858e7aacec6c033bad2e598910def8e
data/README.md CHANGED
@@ -52,9 +52,12 @@ There is one command for Zendesk groups:
52
52
  #### view command
53
53
 
54
54
  There is one command to generate an export of Zendesk tickets from a
55
- defined view (provide its id):
55
+ defined view. Pass in a specific view number or select from the list of
56
+ all views available to you:
56
57
 
57
- zensana view export VIEW # Export Zendesk VIEW using the predetermined fields
58
+ zensana view export # Export Zendesk View using the predetermined fields
59
+ Options:
60
+ -v, [--view=VIEW] # specific view number to export
58
61
 
59
62
  The csv will contain the following fields:
60
63
 
data/lib/zensana.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'zensana/version'
2
+ require 'zensana/helpers'
2
3
 
3
4
  require 'zensana/services/asana'
4
5
  require 'zensana/services/error'
@@ -2,20 +2,28 @@ require 'csv'
2
2
 
3
3
  module Zensana
4
4
  class Command::View < Zensana::Command
5
+ include Zensana::Helpers
5
6
 
6
- desc 'export VIEW', 'Export Zendesk VIEW using the predetermined fields'
7
- def export(id)
7
+ desc 'export', 'Export Zendesk View using the predetermined fields'
8
+ option :view, type: 'string', aliases: '-v', default: nil, desc: 'specific view number to export'
9
+ def export
8
10
  view = Zensana::Zendesk::View.new
9
- view.find(id)
10
11
 
11
- unless yes?("This will export the tickets in the view called '#{view.title}' as a CSV. Proceed?", :yellow)
12
- say "\nNothing else for me to do, exiting...\n", :red
13
- exit
12
+ if view_id = options[:view]
13
+ view.find(view_id)
14
+ unless yes?("\nThis will export the tickets in the Zendesk View called '#{view.title}' as a CSV. Proceed?", :yellow)
15
+ say EXIT_SELECTION_MSG, :red
16
+ exit
17
+ end
18
+ else
19
+ views = view.list.map { |v| { :key => v['id'], :value => v['title'] } }.sort_by { |i| i[:value] }
20
+ view_id = ask_which_item(views, "\nChoose the Zendesk View you wish to export", :single).first
21
+ view.find(view_id)
14
22
  end
15
23
 
16
24
  tickets = view.tickets
17
25
 
18
- csv_file = "zendesk_export_view_#{id}_#{Time.now.strftime('%Y_%m_%d_%H%M')}.csv"
26
+ csv_file = "zendesk_export_view_#{view_id}_#{Time.now.strftime('%Y_%m_%d_%H%M')}.csv"
19
27
  Dir.chdir file_dir = File.join(Dir.home, 'Downloads')
20
28
 
21
29
  CSV.open(csv_file, 'w') do |output|
@@ -0,0 +1,55 @@
1
+ module Zensana
2
+ module Helpers
3
+
4
+ INVALID_SELECTION_MSG = "\n --> That's not a valid selection, I'm out of here!\n\n"
5
+ EXIT_SELECTION_MSG = "\n --> OK, nothing else for me to do here!\n\n"
6
+
7
+ # provide a list of choices to the user and ask them to select one or more
8
+ # list is an array of hashes like this:
9
+ # {
10
+ # :key => 'value to be returned if selected',
11
+ # :value'=> 'value to be displayed as choice'
12
+ # }
13
+ def ask_which_item(items, prompt, mode=:single)
14
+ return Array(get_hash(items.first, :key)) if items.size == 1
15
+ str_format = "\n %#{items.count.to_s.size}s: %s"
16
+ prompt << "\n > Enter a single selection, "
17
+ prompt << "multiple selections separated by ',', 'A' for all, " if mode == :multiple
18
+ prompt << "'Q' or nothing to quit"
19
+ question = set_color prompt, :yellow
20
+ answers = {}
21
+
22
+ items.each_with_index do |item, index|
23
+ i = (index + 1).to_s
24
+ answers[i] = get_hash(item, :key)
25
+ question << format(str_format, i, get_hash(item, :value))
26
+ end
27
+
28
+ say question
29
+ reply = ask(" >", :yellow).to_s
30
+ replies = reply.split(',')
31
+ if reply.empty? || reply.upcase == 'Q'
32
+ say EXIT_SELECTION_MSG, :green
33
+ exit 0
34
+ elsif answers[reply]
35
+ answers.values_at(reply)
36
+ elsif mode == :single
37
+ say INVALID_SELECTION_MSG, :red
38
+ exit 1
39
+ elsif mode == :multiple && reply.upcase == 'A'
40
+ answers.values
41
+ elsif mode == :multiple && !replies.empty?
42
+ selected_items = answers.values_at(*replies)
43
+ if selected_items.include?(nil)
44
+ say INVALID_SELECTION_MSG, :red
45
+ exit 1
46
+ end
47
+ selected_items
48
+ end
49
+ end
50
+
51
+ def get_hash(hash, key)
52
+ hash[key.to_sym] || hash [key.to_s]
53
+ end
54
+ end
55
+ end
@@ -11,8 +11,12 @@ module Zensana
11
11
  @attributes = {}
12
12
  end
13
13
 
14
+ def list(active_only = true)
15
+ fetch_list(active_only)
16
+ end
17
+
14
18
  def find(id)
15
- @attributes = fetch(id)
19
+ @attributes = fetch_view(id)
16
20
  end
17
21
 
18
22
  def tickets
@@ -30,10 +34,15 @@ module Zensana
30
34
 
31
35
  private
32
36
 
33
- def fetch(id)
37
+ def fetch_view(id)
34
38
  zendesk_service.fetch("/views/#{id}.json")['view']
35
39
  end
36
40
 
41
+ def fetch_list(active_only=true)
42
+ url = active_only ? "/views/active.json/" : "/views.json"
43
+ zendesk_service.fetch(url)['views']
44
+ end
45
+
37
46
  def get_tickets(id)
38
47
  zendesk_service.fetch("/views/#{id}/tickets.json")['tickets']
39
48
  end
@@ -1,3 +1,3 @@
1
1
  module Zensana
2
- VERSION = "1.6.2"
2
+ VERSION = "1.7.0"
3
3
  end
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.6.2
4
+ version: 1.7.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-11-08 00:00:00.000000000 Z
11
+ date: 2015-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -146,6 +146,7 @@ files:
146
146
  - lib/zensana/commands/group.rb
147
147
  - lib/zensana/commands/project.rb
148
148
  - lib/zensana/commands/view.rb
149
+ - lib/zensana/helpers.rb
149
150
  - lib/zensana/models/asana/attachment.rb
150
151
  - lib/zensana/models/asana/project.rb
151
152
  - lib/zensana/models/asana/task.rb