help_desk_dashboard 0.0.5 → 0.0.6

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.
@@ -11,7 +11,7 @@ class DashboardGenerator
11
11
  def generate
12
12
  output_dir = @config[:output_dir]
13
13
  FileUtils.mkdir_p output_dir
14
- data_file_generator = DataFileGenerator.new @config, File.join(output_dir, 'data')
14
+ data_file_generator = DataFileGenerator.new @config
15
15
  data_file_generator.generate
16
16
  source_dir = File.join File.dirname(__FILE__), 'lib', 'web'
17
17
  FileUtils.cp_r "#{source_dir}/.", output_dir
@@ -16,12 +16,6 @@ class AppConfig
16
16
  @config[:users].select { |u| u[:password] }
17
17
  end
18
18
 
19
- def self.from_file(path)
20
- json = File.read path
21
- config = JSON.parse json
22
- AppConfig.new config
23
- end
24
-
25
19
  private
26
20
 
27
21
  def set_defaults(config)
@@ -1,46 +1,69 @@
1
1
  require 'fileutils'
2
- require_relative 'app_config'
3
2
  require_relative 'provider_factory'
4
3
 
5
4
  class DataFileGenerator
6
5
 
7
- def initialize(config, output_dir)
6
+ def initialize(config)
8
7
  @config = config
9
- @output_dir = output_dir
8
+ @provider_factory = ProviderFactory.new
10
9
  end
11
10
 
12
11
  def generate
13
- provider_factory = ProviderFactory.new
14
- provider = provider_factory.create @config[:provider]
12
+ provider = @provider_factory.create @config[:provider]
15
13
  requests = provider.get_requests @config.users_with_password, threads: @config[:threads]
16
- requests_by_submitter = requests.group_by { |r| r[:submitted_by] }
17
14
  teams = @config[:teams].map do |team|
18
15
  {
19
- team_name: team[:name],
20
- title: "#{team[:name]} Help Desk Requests",
21
- requests: team[:members].map { |username| requests_by_submitter[username] }.flatten.compact
16
+ title: title(team),
17
+ requests: team_requests(team, requests)
22
18
  }
23
19
  end
20
+ requests.each { |r| replace_username_with_name r, :submitted_by, :assigned_to }
21
+ FileUtils.mkdir_p output_dir
22
+ teams.each { |t| create_data_file t }
23
+ end
24
24
 
25
- requests.each do |r|
26
- user = config[:users].find { |u| u[:username] == r[:assigned_to] }
27
- r[:assigned_to] = user[:name] if user
28
- user = config[:users].find { |u| u[:username] == r[:submitted_by] }
29
- r[:submitted_by] = user[:name] if user
25
+ private
26
+
27
+ def title(team)
28
+ team[:title] || "#{team[:name]} Help Desk Dashboard"
29
+ end
30
+
31
+ def team_requests(team, requests)
32
+ members = team[:members].map { |m| username m }
33
+ requests.select { |r| members.include? username(r[:submitted_by]) }
34
+ end
35
+
36
+ def replace_username_with_name(request, *keys)
37
+ keys.each do |key|
38
+ username = username(request[key])
39
+ user = get_user username
40
+ request[key] = user[:name] if user
30
41
  end
42
+ end
31
43
 
32
- FileUtils.rm_rf @output_dir
33
- FileUtils.mkdir_p @output_dir
34
- teams.each { |t| create_data_file t }
44
+ def get_user(username)
45
+ users_by_username[username][0]
46
+ end
35
47
 
48
+ def users_by_username
49
+ @users_by_username ||= @config[:users].group_by { |u| username u[:username] }
36
50
  end
37
51
 
38
- private
52
+ def username(username)
53
+ username.downcase
54
+ end
39
55
 
40
56
  def create_data_file(team)
57
+ File.write data_file_path(team), team.to_json
58
+ end
59
+
60
+ def data_file_path(team)
41
61
  file_name = "#{team[:team_name]}.json".downcase.gsub(' ', '-')
42
- path = File.join @output_dir, file_name
43
- File.write path, team.to_json
62
+ File.join output_dir, file_name
63
+ end
64
+
65
+ def output_dir
66
+ File.join @config[:output_dir], 'data'
44
67
  end
45
68
 
46
69
  end
@@ -13,7 +13,7 @@ function create_requests_table(requests) {
13
13
  resolved_requests.push(request);
14
14
  });
15
15
 
16
- function sort_asc(r1, r2) {
16
+ function sort_deadline_asc(r1, r2) {
17
17
  var date1 = Date.parse(r1.deadline);
18
18
  var date2 = Date.parse(r2.deadline);
19
19
  if (date1 > date2) return 1;
@@ -21,17 +21,17 @@ function create_requests_table(requests) {
21
21
  return 0;
22
22
  }
23
23
 
24
- function sort_desc(r1, r2) {
25
- var date1 = Date.parse(r1.deadline);
26
- var date2 = Date.parse(r2.deadline);
24
+ function sort_resolved_on_desc(r1, r2) {
25
+ var date1 = Date.parse(r1.resolved_on);
26
+ var date2 = Date.parse(r2.resolved_on);
27
27
  if (date1 > date2) return -1;
28
28
  if (date1 < date2) return 1;
29
29
  return 0;
30
30
  }
31
31
 
32
- overdue_requests.sort(sort_asc);
33
- pending_requests.sort(sort_asc);
34
- resolved_requests.sort(sort_desc);
32
+ overdue_requests.sort(sort_deadline_asc);
33
+ pending_requests.sort(sort_deadline_asc);
34
+ resolved_requests.sort(sort_resolved_on_desc);
35
35
  requests = overdue_requests.concat(pending_requests, resolved_requests);
36
36
 
37
37
  var table = $('<table class="requests"></table>');
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: help_desk_dashboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-06 00:00:00.000000000 Z
12
+ date: 2013-07-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
16
- requirement: &70198175013500 !ruby/object:Gem::Requirement
16
+ requirement: &70255893994400 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.0.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70198175013500
24
+ version_requirements: *70255893994400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70198175013020 !ruby/object:Gem::Requirement
27
+ requirement: &70255893993920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.7.7
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70198175013020
35
+ version_requirements: *70255893993920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack
38
- requirement: &70198175012560 !ruby/object:Gem::Requirement
38
+ requirement: &70255893993460 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.5.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70198175012560
46
+ version_requirements: *70255893993460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: trackit_scraper
49
- requirement: &70198175012100 !ruby/object:Gem::Requirement
49
+ requirement: &70255893993000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70198175012100
57
+ version_requirements: *70255893993000
58
58
  description:
59
59
  email: matthew-github@matthewriley.name
60
60
  executables: []
@@ -105,5 +105,5 @@ rubyforge_project:
105
105
  rubygems_version: 1.8.15
106
106
  signing_key:
107
107
  specification_version: 3
108
- summary: Generates a traffic light dashboard to help keep track of help desk requests.
108
+ summary: Generates a traffic light dashboard of help desk requests.
109
109
  test_files: []