intervals_for_humans 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []