monotime 0.7.0 → 0.7.1

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
  SHA256:
3
- metadata.gz: c88bca715126cabf9bf5ea1af377e16d43da5ecc06ee45f98dad584360eaa15b
4
- data.tar.gz: 8f741d6219cfe4b9050f892f2df905ed603f859e4a79f930a4eb954c213bf639
3
+ metadata.gz: 8a9395967e506d690912041251bc7b6afd1a373aa49d0b4425ec08ca611e5238
4
+ data.tar.gz: '09ec6a1e96c9ce434d4847d275d85f7514c4a9bb3d9c71d205b04ab0f06e6d5b'
5
5
  SHA512:
6
- metadata.gz: 5ed67631407691f935ffdd30727c4054b3fa7f5964a9cdcb0db0f94e1a2aecddb83eac4b1e4a8e032cd3c57145152e6649ddf14093643329ff23b5d43348000f
7
- data.tar.gz: f38b77609652866fa4c1b7bfee164977a7f7895feeb0f76d8dd5e71a05da31b0cda24c680f5b2aef19c3f5c7787da237f580ee56ccb86e456dae576fc95d0e89
6
+ metadata.gz: a68a338484a8534a8953abf5bec0a98a6b7a2dc6a506cd1f5fb1e3b29e1b534fa0d41e4175aa81598273ee5d706d16caeb60ce1b89a92b5e8192f87a960265f3
7
+ data.tar.gz: f9f329d74339eccc1b4c50007d2cb93cc87132ce6a5841faa327d4db48dfb347df8faee3f9777551cb686e90001def65d72c8a77c6b6df4dfed1d847598ac685
@@ -0,0 +1,16 @@
1
+ name: CI
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ runs-on: ubuntu-latest
6
+ strategy:
7
+ fail-fast: false
8
+ matrix:
9
+ ruby: ['2.5', '2.6', '2.7', '3.0', jruby, truffleruby]
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: ${{ matrix.ruby }}
15
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
16
+ - run: bundle exec rake
data/.rubocop.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ NewCops: enable
2
3
  Exclude:
3
4
  - "bin/*"
4
5
  - "test/*"
@@ -6,7 +7,7 @@ AllCops:
6
7
  - "Rakefile"
7
8
  - "Gemfile"
8
9
 
9
- Metrics/LineLength:
10
+ Layout/LineLength:
10
11
  Max: 96
11
12
 
12
13
  Metrics/ClassLength:
@@ -20,3 +21,18 @@ Style/AccessModifierDeclarations:
20
21
 
21
22
  Style/FormatStringToken:
22
23
  Enabled: false
24
+
25
+ Style/HashEachMethods:
26
+ Enabled: true
27
+
28
+ Style/HashTransformKeys:
29
+ Enabled: true
30
+
31
+ Style/HashTransformValues:
32
+ Enabled: true
33
+
34
+ Style/ExplicitBlockArgument:
35
+ Enabled: false
36
+
37
+ Style/MixinUsage:
38
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.1 - 2021-10-22
4
+ ### Added
5
+ - `simplecov` introduced to test suite.
6
+ - `monotime/include.rb` to auto-include types globally.
7
+
8
+ ### Changed
9
+ - All `Instant` and `Duration` instances are now frozen.
10
+ - Migrate from Travis CI to Github Actions
11
+ - Update development dependency on `rake`.
12
+
3
13
  ## [0.7.0] - 2019-04-24
4
14
  ### Added
5
15
  - `Duration.with_measure`, which yields and returns an array containing its
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/monotime.svg)](https://badge.fury.io/rb/monotime)
2
- [![Build Status](https://travis-ci.org/Freaky/monotime.svg?branch=master)](https://travis-ci.org/Freaky/monotime)
2
+ ![Build Status](https://github.com/Freaky/monotime/actions/workflows/ci.yml/badge.svg)
3
3
  [![Inline docs](http://inch-ci.org/github/Freaky/monotime.svg?branch=master)](http://inch-ci.org/github/Freaky/monotime)
4
4
  [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](https://www.rubydoc.info/gems/monotime)
5
5
 
@@ -23,10 +23,17 @@ Or install it yourself as:
23
23
 
24
24
  $ gem install monotime
25
25
 
26
- `Monotime` is tested on Ruby 2.4—2.6 and recent JRuby 9.x releases.
26
+ `Monotime` is tested on Ruby 2.5—3.0 and recent JRuby 9.x releases.
27
27
 
28
28
  ## Usage
29
29
 
30
+ ```ruby
31
+ require 'monotime'
32
+ # or, to automatically include Monotime::* in the global scope,
33
+ # as used by these examples:
34
+ require 'monotime/include'
35
+ ```
36
+
30
37
  `Monotime` offers a `Duration` type for describing spans of time, and an
31
38
  `Instant` type for describing points in time. Both operate at nanosecond
32
39
  resolution to the limits of whatever your Ruby implementation supports.
@@ -36,8 +43,6 @@ start point, perform the action and then ask for the `Duration` that has elapsed
36
43
  since:
37
44
 
38
45
  ```ruby
39
- include Monotime
40
-
41
46
  start = Instant.now
42
47
  do_something
43
48
  elapsed = start.elapsed
@@ -47,9 +52,7 @@ Or use a convenience method:
47
52
 
48
53
  ```ruby
49
54
  elapsed = Duration.measure { do_something }
50
-
51
55
  # or
52
-
53
56
  return_value, elapsed = Duration.with_measure { compute_something }
54
57
  ```
55
58
 
@@ -98,34 +101,37 @@ is not yet implemented):
98
101
  ```ruby
99
102
  # Equivalent
100
103
  sleep(Duration.secs(1).secs) # => 1
101
-
102
- Duration.secs(1).sleep # => 1
104
+ Duration.secs(1).sleep # => 1
103
105
  ```
104
106
 
105
107
  So can `Instant`, taking a `Duration` and sleeping until the given `Duration`
106
- past the time the `Instant` was created, if any. This may be useful if you wish
107
- to maintain an approximate interval while performing work in between:
108
+ past the time the `Instant` was created, if any. This can be useful for
109
+ maintaining a precise candence between tasks:
108
110
 
109
111
  ```ruby
110
- poke_duration = Duration.secs(60)
112
+ interval = Duration.secs(60)
113
+ start = Instant.now
111
114
  loop do
112
- start = Instant.now
113
- poke_my_api(api_to_poke, what_to_poke_it_with)
114
- start.sleep(poke_duration) # sleeps 60 seconds minus how long poke_my_api took
115
- # alternative: start.sleep_secs(60)
115
+ do_stuff
116
+ start.sleep(interval)
117
+ start += interval
116
118
  end
117
119
  ```
118
120
 
119
- Or you can declare a future `Instant` and ask to sleep until it passes:
121
+ Or you can declare an `Instant` in the future and sleep to that point:
120
122
 
121
123
  ```ruby
122
- next_minute = Instant.now + Duration.secs(60)
123
- do_stuff
124
- next_minute.sleep # => sleeps any remaining seconds
124
+ interval = Duration.secs(60)
125
+ deadline = Instant.now + interval
126
+ loop do
127
+ do_stuff
128
+ deadline.sleep
129
+ deadline += interval
130
+ end
125
131
  ```
126
132
 
127
133
  `Instant#sleep` returns a `Duration` which was slept, or a negative `Duration`
128
- if the desired sleep period has passed.
134
+ indicating that the desired sleep point was in the past.
129
135
 
130
136
  ## Duration duck typing
131
137
 
@@ -174,5 +180,3 @@ depending on platform.
174
180
  which also includes a variety of features for gathering statistics about
175
181
  measurements, and may offer higher precision on some platforms.
176
182
 
177
- Note until [#73](https://github.com/copiousfreetime/hitimes/pull/73) is closed it
178
- depends on compiled C/Java extensions.
@@ -14,6 +14,7 @@ module Monotime
14
14
  # @see #from_nanos
15
15
  def initialize(nanos = 0)
16
16
  @ns = Integer(nanos)
17
+ freeze
17
18
  end
18
19
 
19
20
  class << self
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'monotime'
4
+
5
+ include Monotime
@@ -19,6 +19,7 @@ module Monotime
19
19
  # @see #now
20
20
  def initialize(nanos = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond))
21
21
  @ns = Integer(nanos)
22
+ freeze
22
23
  end
23
24
 
24
25
  # An alias to +new+, and generally preferred over it.
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Monotime
4
4
  # Try to avoid blatting existing VERSION constants when we're included.
5
- MONOTIME_VERSION = '0.7.0'
5
+ MONOTIME_VERSION = '0.7.1'
6
6
  end
data/monotime.gemspec CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.require_paths = ["lib"]
33
33
 
34
34
  spec.add_development_dependency "bundler", "~> 2"
35
- spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "rake", "~> 13.0"
36
36
  spec.add_development_dependency "minitest", "~> 5.0"
37
+ spec.add_development_dependency "simplecov", "~> 0.21"
37
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monotime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Hurst
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-24 00:00:00.000000000 Z
11
+ date: 2021-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.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
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,16 +52,30 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
- description:
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.21'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.21'
69
+ description:
56
70
  email:
57
71
  - tom@hur.st
58
72
  executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
76
+ - ".github/workflows/ci.yml"
62
77
  - ".gitignore"
63
78
  - ".rubocop.yml"
64
- - ".travis.yml"
65
79
  - CHANGELOG.md
66
80
  - Gemfile
67
81
  - LICENSE.txt
@@ -71,6 +85,7 @@ files:
71
85
  - bin/setup
72
86
  - lib/monotime.rb
73
87
  - lib/monotime/duration.rb
88
+ - lib/monotime/include.rb
74
89
  - lib/monotime/instant.rb
75
90
  - lib/monotime/version.rb
76
91
  - monotime.gemspec
@@ -79,7 +94,7 @@ licenses:
79
94
  - MIT
80
95
  metadata:
81
96
  allowed_push_host: https://rubygems.org
82
- post_install_message:
97
+ post_install_message:
83
98
  rdoc_options: []
84
99
  require_paths:
85
100
  - lib
@@ -94,9 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
109
  - !ruby/object:Gem::Version
95
110
  version: '0'
96
111
  requirements: []
97
- rubyforge_project:
98
- rubygems_version: 2.7.6
99
- signing_key:
112
+ rubygems_version: 3.2.22
113
+ signing_key:
100
114
  specification_version: 4
101
115
  summary: A sensible interface to the monotonic clock
102
116
  test_files: []
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.4.6
7
- - 2.5.5
8
- - 2.6.3
9
- - jruby-9.2.7.0
10
- before_install: gem install bundler -v "~> 2"