activesupport-duration-human_string 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Changelog.md +14 -0
- data/Gemfile +2 -0
- data/Readme.md +31 -13
- data/activesupport-duration-human_string.gemspec +4 -4
- data/lib/active_support/duration/human_string/version.rb +3 -3
- data/lib/active_support/duration/human_string.rb +17 -9
- data/lib/activesupport-duration-human_string.rb +1 -0
- metadata +18 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a42d606d1f8510d965e98436ecb7232868bf0f00053da7cb7f6f430c0dd2321
|
4
|
+
data.tar.gz: c1c817cf2dcec49125adad4fc6c05f45331a255ec112b52e90926296aea1f45a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8705aed9bc654ba6667ad5b9c9ebe99931f479846c24fd2a5112ca848cee2f438b95746b8ef96296e7f5d6f50d677369d2f9d6d13f578e2f17cc2ef8b1d26d94
|
7
|
+
data.tar.gz: 29d6639d5c7131b4db0b8f7a8b48a3155c245169b53838d163c6bd308231e15e723a9630d46de119462a8315ae40f4c791403390b46f715d96419cfc6eb88a27
|
data/.gitignore
CHANGED
data/Changelog.md
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
## 1.0.0 (2024-02-16)
|
2
|
+
|
3
|
+
Fixes:
|
4
|
+
|
5
|
+
- Relax activesupport dependency version
|
6
|
+
|
7
|
+
Breaking changes:
|
8
|
+
|
9
|
+
- Extract `#change`, `#truncate`, `#round`, etc. out of this gem into the [activesupport-duration-change](https://github.com/TylerRick/activesupport-duration-change) gem
|
10
|
+
|
11
|
+
## 0.1.1 (2019-04-02)
|
12
|
+
|
13
|
+
Initial release
|
14
|
+
|
data/Gemfile
CHANGED
data/Readme.md
CHANGED
@@ -1,10 +1,21 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
Convert [ActiveSupport::Duration](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html)
|
4
|
-
|
5
|
-
|
6
|
-
- Like [
|
7
|
-
|
1
|
+
# ActiveSupport::Duration#human_string [![Gem Version](https://badge.fury.io/rb/activesupport-duration-human_string.svg)](https://badge.fury.io/rb/activesupport-duration-human_string)
|
2
|
+
|
3
|
+
Convert [ActiveSupport::Duration](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html)
|
4
|
+
objects to human-friendly strings like `'2h 30m 17s'` or `'3y 6m 4d 12h 30m 5s'`.
|
5
|
+
|
6
|
+
- Like [`distance_of_time_in_words`](https://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-distance_of_time_in_words)
|
7
|
+
helper but _exact_ rather than approximate
|
8
|
+
- `distance_of_time_in_words` is somewhat configurable but only gives an approximation (`'over 3
|
9
|
+
years'`), with no option to print the exact number of each units.
|
10
|
+
- Like [`#inspect`](https://github.com/rails/rails/blob/b9ca94caea2ca6a6cc09abaffaad67b447134079/activesupport/lib/active_support/duration.rb#L372)
|
11
|
+
but more concise and configurable.
|
12
|
+
- `#inspect` is long (`'3 years, 6 months, 4 days, 12 hours, 30 minutes, and 5 seconds'`) and not
|
13
|
+
at all configurable.
|
14
|
+
- Like [`#iso8601`](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html#method-i-iso8601)
|
15
|
+
but more human readable rather than machine readable.
|
16
|
+
- `#iso8601` is concise and machine-readable, but not very human-readable (`'P3Y6M4DT12H30M5S'`)!
|
17
|
+
- Unlike [`#to_s`](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html#method-i-to_s),
|
18
|
+
which is very concise (`'110839937'`) but not at all human-readable for large durations
|
8
19
|
|
9
20
|
## Installation
|
10
21
|
|
@@ -17,19 +28,26 @@ gem 'activesupport-duration-human_string'
|
|
17
28
|
## Usage
|
18
29
|
|
19
30
|
```ruby
|
20
|
-
duration =
|
21
|
-
duration.human_str # => '1m 5s'
|
22
|
-
duration.human_str(use_2_digit_numbers: true) # => '1m 05s'
|
23
|
-
|
24
|
-
duration = ActiveSupport::Duration.build(3500)
|
31
|
+
duration = 3500.seconds
|
25
32
|
duration.human_str # => '58m 20s'
|
26
33
|
duration.human_str(delimiter: '') # => '58m20s'
|
27
34
|
duration.human_str(separator: ' ') # => '58 m 20 s'
|
28
35
|
duration.human_str(delimiter: ', ', separator: ' ') # => '58 m, 20 s'
|
36
|
+
|
37
|
+
duration = ActiveSupport::Duration.parse "P3Y6M4DT12H30M5S"
|
38
|
+
# => 3 years, 6 months, 4 days, 12 hours, 30 minutes, and 5 seconds
|
39
|
+
|
40
|
+
duration.human_str # => "3y 6m 4d 12h 30m 5s"
|
41
|
+
(duration - 4.days).human_str # => "3y 6m 12h 30m 5s"
|
42
|
+
duration.human_str(delimiter: ', ') # => "3y, 6m, 4d, 12h, 30m, 5s"
|
29
43
|
```
|
30
44
|
|
31
45
|
Also aliased as `human_string`, `to_human_s`.
|
32
46
|
|
47
|
+
## See also
|
48
|
+
|
49
|
+
- [activesupport-duration-change](https://github.com/TylerRick/activesupport-duration-change), which adds methods such as `#change`, `#truncate`, `#round` to `Duration`
|
50
|
+
|
33
51
|
## Development
|
34
52
|
|
35
53
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -40,7 +58,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
40
58
|
|
41
59
|
Bug reports and pull requests are welcome on GitHub at https://github.com/TylerRick/activesupport-duration-human_string.
|
42
60
|
|
43
|
-
##
|
61
|
+
## Not really related
|
44
62
|
|
45
63
|
- https://github.com/josedonizetti/ruby-duration
|
46
64
|
- https://github.com/janko/as-duration
|
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.required_ruby_version = ">= 2.3.0"
|
33
|
-
spec.add_dependency "activesupport", [">=
|
33
|
+
spec.add_dependency "activesupport", [">= 5.2"]
|
34
34
|
|
35
|
-
spec.add_development_dependency "bundler"
|
36
|
-
spec.add_development_dependency "rake"
|
37
|
-
spec.add_development_dependency "rspec"
|
35
|
+
spec.add_development_dependency "bundler"
|
36
|
+
spec.add_development_dependency "rake"
|
37
|
+
spec.add_development_dependency "rspec"
|
38
38
|
end
|
@@ -1,27 +1,35 @@
|
|
1
|
+
require 'active_support'
|
1
2
|
require 'active_support/duration'
|
2
3
|
require 'active_support/duration/iso8601_serializer'
|
3
4
|
|
4
5
|
module ActiveSupport
|
5
6
|
class Duration
|
6
|
-
# Convert [ActiveSupport::Duration](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html)
|
7
|
+
# Convert [ActiveSupport::Duration](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html)
|
8
|
+
# objects to human-friendly strings like `'2h 30m 17s'` or `'3y 6m 4d 12h 30m 5s'`.
|
7
9
|
#
|
8
|
-
# Like [`distance_of_time_in_words`](https://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html) helper but _exact_ rather than approximate.
|
9
|
-
#
|
10
|
+
# - Like [`distance_of_time_in_words`](https://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html) helper but _exact_ rather than approximate.
|
11
|
+
# - Like [`#inspect`](https://github.com/rails/rails/blob/b9ca94caea2ca6a6cc09abaffaad67b447134079/activesupport/lib/active_support/duration.rb#L372) but more concise and configurable.
|
12
|
+
# - Like [`#iso8601`](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html#method-i-iso8601) but more human readable rather than machine readable.
|
10
13
|
#
|
11
14
|
# Note that the unit 'm' is used for both months and minutes.
|
12
15
|
#
|
13
16
|
# ## Examples
|
14
17
|
#
|
15
|
-
#
|
16
|
-
# duration
|
17
|
-
# duration.human_str(use_2_digit_numbers: true) # => '1m 05s'
|
18
|
-
#
|
19
|
-
# duration = ActiveSupport::Duration.build(3500)
|
18
|
+
# ```ruby
|
19
|
+
# duration = 3500.seconds
|
20
20
|
# duration.human_str # => '58m 20s'
|
21
21
|
# duration.human_str(delimiter: '') # => '58m20s'
|
22
22
|
# duration.human_str(separator: ' ') # => '58 m 20 s'
|
23
23
|
# duration.human_str(delimiter: ', ', separator: ' ') # => '58 m, 20 s'
|
24
24
|
#
|
25
|
+
# duration = ActiveSupport::Duration.parse "P3Y6M4DT12H30M5S"
|
26
|
+
# # => 3 years, 6 months, 4 days, 12 hours, 30 minutes, and 5 seconds
|
27
|
+
#
|
28
|
+
# duration.human_str # => "3y 6m 4d 12h 30m 5s"
|
29
|
+
# (duration - 4.days).human_str # => "3y 6m 12h 30m 5s"
|
30
|
+
# duration.human_str(delimiter: ', ') # => "3y, 6m, 4d, 12h, 30m, 5s"
|
31
|
+
# ```
|
32
|
+
#
|
25
33
|
# ## Options
|
26
34
|
#
|
27
35
|
# `:precision`: Precision of seconds (defaults to nil, which is no digits after decimal).
|
@@ -35,7 +43,7 @@ module ActiveSupport
|
|
35
43
|
#
|
36
44
|
def human_str(precision: nil, separator: '', delimiter: ' ', use_2_digit_numbers: false)
|
37
45
|
HumanStringSerializer.new(
|
38
|
-
self,
|
46
|
+
self.class.build(value),
|
39
47
|
precision: precision,
|
40
48
|
separator: separator,
|
41
49
|
delimiter: delimiter,
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'active_support/duration/human_string'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activesupport-duration-human_string
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Rick
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,62 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '5.3'
|
19
|
+
version: '5.2'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
30
|
-
- - "<"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '5.3'
|
26
|
+
version: '5.2'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: bundler
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
31
|
+
- - ">="
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
33
|
+
version: '0'
|
40
34
|
type: :development
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- - "
|
38
|
+
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
40
|
+
version: '0'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: rake
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
|
-
- - "
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
47
|
+
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
|
-
- - "
|
52
|
+
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
54
|
+
version: '0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: rspec
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "
|
59
|
+
- - ">="
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
61
|
+
version: '0'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- - "
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
68
|
+
version: '0'
|
75
69
|
description: 'Convert ActiveSupport::Duration objects to human-friendly strings like
|
76
70
|
''2h 30m 17s''. '
|
77
71
|
email:
|
@@ -93,6 +87,7 @@ files:
|
|
93
87
|
- bin/setup
|
94
88
|
- lib/active_support/duration/human_string.rb
|
95
89
|
- lib/active_support/duration/human_string/version.rb
|
90
|
+
- lib/activesupport-duration-human_string.rb
|
96
91
|
homepage: https://github.com/TylerRick/activesupport-duration-human_string
|
97
92
|
licenses:
|
98
93
|
- MIT
|
@@ -115,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
110
|
- !ruby/object:Gem::Version
|
116
111
|
version: '0'
|
117
112
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
113
|
+
rubygems_version: 3.5.1
|
119
114
|
signing_key:
|
120
115
|
specification_version: 4
|
121
116
|
summary: Convert Duration objects to human-friendly strings like '2h 30m 17s'
|