intervals_for_humans 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fa33f4d1dc184d40db9d8d0159dcddd952ed2a54
4
+ data.tar.gz: 1412c1246c6e4953570f481d6b1cd0c375b6a662
5
+ SHA512:
6
+ metadata.gz: 45c5959e68a72f9df5d7ed5c5bbd2804df6a74a7d40dede310e1d3e13cd7e346be2775510f425db74ca29c421457b9cd563f245077b9db5af2e1436cbe2457cb
7
+ data.tar.gz: 8fcb253ea4e00946082a809c3058670b38cc1084ceb45b17423b6a0c1b48620b8c4900cbb0580bc24f8fc372251001c23c1771b0e358163ad7374db903331bff
@@ -0,0 +1,3 @@
1
+ module IntervalsForHumans; end
2
+
3
+ require "intervals_for_humans/interval"
@@ -0,0 +1,64 @@
1
+ class IntervalsForHumans::Interval
2
+ def initialize(start_date, end_date)
3
+ @start_date = start_date
4
+ @end_date = end_date
5
+ @date_counter = start_date
6
+ end
7
+
8
+ def components
9
+ @components ||= {
10
+ year: advance_years!,
11
+ month: advance_months!,
12
+ day: advance_days!,
13
+ }
14
+ end
15
+
16
+ def to_s
17
+ @to_s ||= begin
18
+ components
19
+ .each_pair
20
+ .select { |(_key, value)| value.positive? }
21
+ .map { |(key, value)| "#{value} #{key}#{'s' if value > 1}" }
22
+ .join(", ")
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def advance_years!
29
+ advance! do |date, years|
30
+ date >> years * 12
31
+ end
32
+ end
33
+
34
+ def advance_months!
35
+ advance! do |date, months|
36
+ date >> months
37
+ end
38
+ end
39
+
40
+ def advance_days!
41
+ advance! do |date, days|
42
+ date + days
43
+ end
44
+ end
45
+
46
+ def advance!
47
+ initial_date = @date_counter
48
+ advance_value = 0
49
+
50
+ loop do
51
+ previous_date = @date_counter
52
+ @date_counter = yield(initial_date, advance_value + 1)
53
+
54
+ if @date_counter > @end_date
55
+ @date_counter = previous_date
56
+ break
57
+ end
58
+
59
+ advance_value += 1
60
+ end
61
+
62
+ advance_value
63
+ end
64
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: intervals_for_humans
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alec Gibson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-12-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '12.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '12.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.11'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.11'
55
+ description: A gem for parsing date intervals into human-readable text
56
+ email: aleckgibson@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/intervals_for_humans.rb
62
+ - lib/intervals_for_humans/interval.rb
63
+ homepage: http://rubygems.org/gems/intervals_for_humans
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.6.13
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Intervals for humans
87
+ test_files: []