ke 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a454abebf9c74fc4899e037d679ffc93ff2c3c5f
4
- data.tar.gz: ddb889ef03b9d3ebfcd45aec0cc492825d0db945
3
+ metadata.gz: ac5fe567263c2c11146fb81885c01e7d1c7e563b
4
+ data.tar.gz: 2be98663121456d17d17afadc50589c61d5a54b3
5
5
  SHA512:
6
- metadata.gz: e9c14271dbff7f588832f90d102a006ad808a6c6a6c9e606f50bc950e2e587aa601fc53e94aa750d8332905a92cef6dd9e7d5de5bf237f9d0813c06fdbb870b4
7
- data.tar.gz: c1dfe86497dab79e7957510475b461a46a5a32719056b4d420efdabed6247c9ce08d088a5327d24b9bf0f982fbb6d0788b6f970015a6df97ae4561766fd9c939
6
+ metadata.gz: 5f77cf8fe60eb71c672203fcae9ec837f97b0bd62bf8b264a278b4f7152d6e3503ad25822763400ba4e56032482bb35a2e6988e00a63a20e295b9dcbd7b0be79
7
+ data.tar.gz: a5d860927aa29abec767b81a0d542fcd577966028571714eaf11334ef1ef39f207c163f6234d5b62598d5208e7b9ae978b551dd3c7081a470b08b37b884651a2
@@ -22,15 +22,28 @@ module Ke
22
22
  alias :to_ary :to_a
23
23
 
24
24
  def mean
25
+ array_mean @array
26
+ end
27
+
28
+ def mean_iqr
29
+ array_sorted = @array.sort
30
+ array_size = @array.size
31
+ iqr = array_sorted[(array_size * 0.25).floor..(array_size * 0.75).ceil]
32
+ array_mean iqr
33
+ end
34
+
35
+ def to_s
36
+ "#<CappedSample: #{@array.inspect}>"
37
+ end
38
+
39
+ private
40
+
41
+ def array_mean(array)
25
42
  if @array.size > 0
26
43
  @array.inject(:+) / @array.size.to_f
27
44
  else
28
45
  0
29
46
  end
30
47
  end
31
-
32
- def to_s
33
- "#<CappedSample: #{@array.inspect}>"
34
- end
35
48
  end
36
49
  end
@@ -7,6 +7,7 @@ module Ke
7
7
  @duration_per_tick = 0
8
8
  @duration_per_tick_history = CappedSample.new(100)
9
9
  @mutex = Mutex.new
10
+ @last_tick_time = nil
10
11
  end
11
12
 
12
13
  def start_time
@@ -26,7 +27,7 @@ module Ke
26
27
  end
27
28
 
28
29
  def duration_per_tick
29
- @duration_per_tick_history.mean
30
+ @duration_per_tick_history.mean_iqr
30
31
  end
31
32
 
32
33
  def tick
@@ -11,19 +11,35 @@ module Ke
11
11
  end
12
12
 
13
13
  def print_tick
14
- ticks_per_second = (1 / @task.duration_per_tick).round(2)
14
+ @io.puts "#{prefix}#{infix}#{suffix}"
15
+ end
16
+
17
+ def print_complete
18
+ @io.puts "Completed #{@label}, #{@task.total_duration} total duration"
19
+ end
20
+
21
+ private
22
+
23
+ def prefix
15
24
  elapsed_time = (@task.elapsed_duration / 60.0).round(2)
25
+ "Running #{@label}, #{elapsed_time} minutes elapsed"
26
+ end
16
27
 
28
+ def infix
17
29
  if @task.respond_to?(:estimated_duration_until_complete)
18
30
  estimated_duration_until_complete = (@task.estimated_duration_until_complete / 60.0).round(2)
19
- @io.puts "Running #{@label}, #{elapsed_time} minutes elapsed, #{estimated_duration_until_complete} minutes remaining"
31
+ ", #{estimated_duration_until_complete} minutes remaining"
20
32
  else
21
- @io.puts "Running #{@label}, #{elapsed_time} minutes elapsed, #{ticks_per_second} ticks/second"
33
+ ticks_per_second = (1.0 / @task.duration_per_tick).round(2)
34
+ ", #{ticks_per_second} ticks/second"
22
35
  end
23
36
  end
24
37
 
25
- def print_complete
26
- @io.puts "Completed #{@label}, #{@task.total_duration} total duration"
38
+ def suffix
39
+ if @task.respond_to?(:total_ticks)
40
+ pct = (@task.tick_count.to_f * 100 / @task.total_ticks).round(2)
41
+ ", #{@task.tick_count}/#{@task.total_ticks} ticks ~ #{pct}% complete"
42
+ end
27
43
  end
28
44
  end
29
45
  end
@@ -7,7 +7,7 @@ module Ke
7
7
  end
8
8
 
9
9
  def print_start
10
- @io.print "Starting #{@label}"
10
+ @io.print "Starting #{@label} ..."
11
11
  end
12
12
 
13
13
  def print_tick
@@ -16,14 +16,20 @@ module Ke
16
16
 
17
17
  if @task.respond_to?(:estimated_duration_until_complete)
18
18
  estimated_duration_until_complete = (@task.estimated_duration_until_complete / 60.0).round(2)
19
- @io.print "{#{elapsed_time}/#{estimated_duration_until_complete} mins}"
19
+
20
+ if @task.respond_to?(:total_ticks)
21
+ pct = (@task.tick_count.to_f * 100 / @task.total_ticks).round(2)
22
+ @io.print " #{elapsed_time}/#{estimated_duration_until_complete} mins, #{@task.tick_count}/#{@task.total_ticks} ticks ~ #{pct}% ..."
23
+ else
24
+ @io.print " #{elapsed_time}/#{estimated_duration_until_complete} mins ..."
25
+ end
20
26
  else
21
- @io.print "{#{elapsed_time} mins, #{ticks_per_second} ticks/sec}"
27
+ @io.print " #{elapsed_time} mins, #{ticks_per_second} ticks/sec ..."
22
28
  end
23
29
  end
24
30
 
25
31
  def print_complete
26
- @io.puts "complete."
32
+ @io.puts " complete (#{@task.total_duration} total duration)."
27
33
  end
28
34
  end
29
35
  end
@@ -1,3 +1,3 @@
1
1
  module Ke
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,26 +1,28 @@
1
1
  require 'test_helper'
2
2
 
3
- task = Ke::IndeterminateTask.new
4
- reporter = Ke::MultiLineReporter.new(task, "indeterminate task")
5
- task.start
6
- reporter.print_start
7
- loop do
8
- break if rand(200) == 50
9
- sleep 0.1
10
- task.tick
11
- reporter.print_tick if task.tick_count % 10 == 0
12
- end
13
- task.complete
14
- reporter.print_complete
3
+ [Ke::MultiLineReporter, Ke::SingleLineReporter].each do |reporter_klass|
4
+ task = Ke::IndeterminateTask.new
5
+ reporter = reporter_klass.new(task, "indeterminate task")
6
+ task.start
7
+ reporter.print_start
8
+ loop do
9
+ break if rand(200) == 50
10
+ sleep 0.05 + (rand / 100.0)
11
+ task.tick
12
+ reporter.print_tick if task.tick_count % 10 == 0
13
+ end
14
+ task.complete
15
+ reporter.print_complete
15
16
 
16
- task = Ke::DeterminateTask.new(total_ticks: 50)
17
- reporter = Ke::SingleLineReporter.new(task, "determinate task")
18
- task.start
19
- reporter.print_start
20
- 50.times do
21
- sleep 0.1
22
- task.tick
23
- reporter.print_tick if task.tick_count % 10 == 0
17
+ task = Ke::DeterminateTask.new(total_ticks: 50)
18
+ reporter = reporter_klass.new(task, "determinate task")
19
+ task.start
20
+ reporter.print_start
21
+ 50.times do
22
+ sleep 0.05 + (rand / 100.0)
23
+ task.tick
24
+ reporter.print_tick if task.tick_count % 10 == 0
25
+ end
26
+ task.complete
27
+ reporter.print_complete
24
28
  end
25
- task.complete
26
- reporter.print_complete
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ke
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Dodwell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-12 00:00:00.000000000 Z
11
+ date: 2017-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Measure progress of Ruby code.
@@ -45,8 +45,8 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
49
- - .travis.yml
48
+ - ".gitignore"
49
+ - ".travis.yml"
50
50
  - Gemfile
51
51
  - LICENSE
52
52
  - README.md
@@ -73,21 +73,20 @@ require_paths:
73
73
  - lib
74
74
  required_ruby_version: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - '>='
76
+ - - ">="
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
79
  required_rubygems_version: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '>='
81
+ - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  requirements: []
85
85
  rubyforge_project:
86
- rubygems_version: 2.2.2
86
+ rubygems_version: 2.4.5.1
87
87
  signing_key:
88
88
  specification_version: 4
89
89
  summary: Measure progress of Ruby code.
90
90
  test_files:
91
91
  - test/ke_test.rb
92
92
  - test/test_helper.rb
93
- has_rdoc: