activesupport-duration-human_string 0.1.0 → 1.0.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 +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 [](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'
|