nuvaring 0.2.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 +7 -0
- data/README.md +0 -0
- data/lib/nuvaring_calendar.rb +24 -0
- data/lib/nuvaring_calendar/calculator.rb +77 -0
- data/lib/nuvaring_calendar/version.rb +3 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0c57d2a2c73e0dad8c46dd05b63f7d483a01baf1
|
4
|
+
data.tar.gz: 18491acb8f10071f0c8bd8272555c4e544781e87
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 240e8f2ecc5903779ae84f9f4de4c4126b597544a47b297d477d0fd60abc21436212d90bbd35880b11c754a1e7f428ebe2787b1338976719f842db27b1b0325d
|
7
|
+
data.tar.gz: eda8d3578bd9dea30d92cad8f102dc4aa0f06e3da6275ca1c510f68fcc1cacfb45cfaf4e42d7fe25afbc38f846ecd55270707c030aabadd9c7419cfe5d8c265c
|
data/README.md
ADDED
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class NuvaringCalendar
|
2
|
+
def initialize(default_insertion_date,options={})
|
3
|
+
@default_insertion_date = default_insertion_date
|
4
|
+
@calculator = NuvaringCalendar::Calculator.new @default_insertion_date, options
|
5
|
+
end
|
6
|
+
|
7
|
+
def insertion_dates
|
8
|
+
@calculator.insertion_dates.map(&:to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
def removal_dates
|
12
|
+
@calculator.removal_dates.map(&:to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
def swap_dates
|
16
|
+
@calculator.swap_dates.map(&:to_s)
|
17
|
+
end
|
18
|
+
|
19
|
+
def timeline
|
20
|
+
@calculator.timeline
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'nuvaring_calendar/calculator'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'date'
|
2
|
+
class NuvaringCalendar
|
3
|
+
class Calculator
|
4
|
+
|
5
|
+
# Returns an [Array] containing all future insertion dates
|
6
|
+
attr_reader :insertion_dates
|
7
|
+
# Returns an [Array] containing all future removal dates
|
8
|
+
attr_reader :removal_dates
|
9
|
+
# Returns an [Array] containing all future swap dates
|
10
|
+
attr_reader :swap_dates
|
11
|
+
|
12
|
+
# @param default_insertion_date [Date || String] First date nuva ring was inserted
|
13
|
+
# @option options [Fixnum] :insertion_days Number of days to insert the nuva ring. Default 21.
|
14
|
+
# @option options [Fixnum] :wait_days Number of days to wait after removing the nuva ring. Default 7.
|
15
|
+
# @option options [Fixnum] :swap_times Number of times to keep replacing nuvaring with a new one before :wait_days. 1 swap time period == 1 x :insertion_days. Default 0.
|
16
|
+
# @option options [Fixnum] :limit For how many days into the future beyond default_insertion_date should we compute? Default 365.
|
17
|
+
def initialize(default_insertion_date, options={})
|
18
|
+
@default_insertion_date = parse_date default_insertion_date
|
19
|
+
@insertion_dates = []
|
20
|
+
@insertion_dates << @default_insertion_date
|
21
|
+
@removal_dates = []
|
22
|
+
@swap_dates = []
|
23
|
+
@insertion_days = options[:insertion_days] || 21
|
24
|
+
@wait_days = options[:wait_days] || 7
|
25
|
+
@limit = options[:limit] || 365
|
26
|
+
@swap_times = options[:swap_times] || 0
|
27
|
+
compute
|
28
|
+
end
|
29
|
+
|
30
|
+
def timeline
|
31
|
+
insertion_hash = Hash.new { |hash, key| hash[key] = :insert }
|
32
|
+
removal_hash = Hash.new { |hash, key| hash[key] = :remove }
|
33
|
+
swap_hash = Hash.new { |hash, key| hash[key] = :swap }
|
34
|
+
|
35
|
+
@insertion_dates.each do |d|
|
36
|
+
insertion_hash[d]
|
37
|
+
end
|
38
|
+
@removal_dates.each do |d|
|
39
|
+
removal_hash[d]
|
40
|
+
end
|
41
|
+
@swap_dates.each do |d|
|
42
|
+
swap_hash[d]
|
43
|
+
end
|
44
|
+
array = (((insertion_hash.merge(removal_hash).merge(swap_hash)).sort).map { |element| element.map { |inner_element| inner_element.to_s}})
|
45
|
+
Hash[array]
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# calculates all future dates
|
51
|
+
def compute
|
52
|
+
current_date = @default_insertion_date
|
53
|
+
max = current_date + @limit - @insertion_days
|
54
|
+
begin
|
55
|
+
current_date += @insertion_days
|
56
|
+
@swap_times.times do
|
57
|
+
@swap_dates << current_date
|
58
|
+
current_date += @insertion_days
|
59
|
+
end
|
60
|
+
@removal_dates << current_date
|
61
|
+
current_date += @wait_days
|
62
|
+
@insertion_dates << current_date
|
63
|
+
end while current_date <= max
|
64
|
+
end
|
65
|
+
|
66
|
+
def parse_date(date)
|
67
|
+
if date.is_a? Date
|
68
|
+
date
|
69
|
+
elsif date.is_a? String
|
70
|
+
Date.parse date
|
71
|
+
else
|
72
|
+
raise "Invalid insertion date, expecting Date or String"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nuvaring
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Wale Olaleye
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.5'
|
27
|
+
description: Provides insertion and removal dates for nuvaring birth control.
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- README.md
|
34
|
+
- lib/nuvaring_calendar.rb
|
35
|
+
- lib/nuvaring_calendar/calculator.rb
|
36
|
+
- lib/nuvaring_calendar/version.rb
|
37
|
+
homepage: https://github.com/waleo/nuvaring
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.2.2
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Nuvaring Planning Calendar
|
61
|
+
test_files: []
|
62
|
+
has_rdoc:
|