banking_date_tools 0.0.3 → 0.0.4
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/benchmarks/benchmarks.rb +43 -0
- data/date_tools.gemspec +5 -4
- data/lib/banking_date_tools/banking_date_tools.rb +18 -32
- data/lib/banking_date_tools/extend_ruby.rb +1 -20
- data/lib/banking_date_tools/version.rb +1 -1
- data/spec/lib/banking_date_tools_spec.rb +4 -4
- metadata +53 -21
- data/.autotest +0 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7088815698b42f5165008ef463a5c5853ab4c792
|
4
|
+
data.tar.gz: 0e15c2ce342ef31173ca5e56450ecf76640e55b2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d87770534bf4d4c8a651be64217f31212c3b5574dae172b0c2c24830bda22b1bc03bfc0ce2a9b6238c267a5420ce29a44d05eccc9a062fe14514585a998e1c0a
|
7
|
+
data.tar.gz: 2544b1aaf60175b02569d09cbe4a49e1bec0df0c019b59ca0d16023474a3cdeafe135e1baa9058d127e8119c8c4eb1489ff1e74f5a9c39be803d85193a1a6acb
|
@@ -0,0 +1,43 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'benchmark/ips'
|
3
|
+
require 'banking_date_tools'
|
4
|
+
require 'rails'
|
5
|
+
puts `ruby -v`
|
6
|
+
|
7
|
+
|
8
|
+
# HotTub uses persisted blocks in several places.
|
9
|
+
|
10
|
+
# Tests performance of passing a known block to block call or yield.
|
11
|
+
|
12
|
+
class TestDates
|
13
|
+
include BankingDateTools
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
Benchmark.ips do |x|
|
18
|
+
date = "2015-12-25".to_date
|
19
|
+
holidays = ["2015-12-25".to_date]
|
20
|
+
options = {
|
21
|
+
:no_weekends => true,
|
22
|
+
:no_holidays => true,
|
23
|
+
:holidays => holidays
|
24
|
+
}
|
25
|
+
|
26
|
+
x.report("get_banking_day") do
|
27
|
+
TestDates.get_banking_day(date,options)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
# V-0.0.3
|
32
|
+
# ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
|
33
|
+
# Calculating -------------------------------------
|
34
|
+
# get_banking_day 7.874k i/100ms
|
35
|
+
# -------------------------------------------------
|
36
|
+
# get_banking_day 87.720k (± 1.6%) i/s - 440.944k
|
37
|
+
|
38
|
+
# V-0.0.4
|
39
|
+
# ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
|
40
|
+
# Calculating -------------------------------------
|
41
|
+
# get_banking_day 15.260k i/100ms
|
42
|
+
# -------------------------------------------------
|
43
|
+
# get_banking_day 179.441k (± 3.1%) i/s - 900.340k
|
data/date_tools.gemspec
CHANGED
@@ -11,10 +11,11 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = ""
|
12
12
|
s.summary = %q{Banking Date Tools}
|
13
13
|
s.description = %q{Banking Date Tools}
|
14
|
-
|
15
|
-
s.add_development_dependency
|
16
|
-
s.add_development_dependency
|
17
|
-
s.
|
14
|
+
|
15
|
+
s.add_development_dependency "rspec"
|
16
|
+
s.add_development_dependency "rspec-autotest"
|
17
|
+
s.add_development_dependency "autotest"
|
18
|
+
s.add_development_dependency "mocha"
|
18
19
|
|
19
20
|
s.files = `git ls-files`.split("\n")
|
20
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -1,16 +1,13 @@
|
|
1
1
|
require 'date'
|
2
2
|
module BankingDateTools
|
3
3
|
|
4
|
-
def banking_day?(date=Date.today, options={})
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
unless options[:force_allow_days].include?(date)
|
13
|
-
return false if options[:no_holidays] && options[:holidays].include?(date)
|
4
|
+
def banking_day?(date=Date.today, options={})
|
5
|
+
# defaults
|
6
|
+
holidays = options[:holidays] || []
|
7
|
+
force_allow_days = options[:force_allow_days] || []
|
8
|
+
|
9
|
+
unless force_allow_days.include?(date)
|
10
|
+
return false if options[:no_holidays] && holidays.include?(date)
|
14
11
|
if options[:no_weekends]
|
15
12
|
return false if (date.saturday? || date.sunday?)
|
16
13
|
else
|
@@ -21,26 +18,30 @@ module BankingDateTools
|
|
21
18
|
true
|
22
19
|
end
|
23
20
|
|
24
|
-
def get_banking_day(date, options={})
|
25
|
-
|
26
|
-
adjusted_padding = (
|
21
|
+
def get_banking_day(date, options={})
|
22
|
+
padding = options[:padding] || 0
|
23
|
+
adjusted_padding = (padding.abs + 1)
|
24
|
+
|
27
25
|
increment = (options[:previous] ? -1 : 1)
|
26
|
+
|
28
27
|
adjusted_padding.times do |p|
|
29
|
-
date = (
|
28
|
+
date = date.next_day(increment) if p != 0
|
30
29
|
while !banking_day?(date, options)
|
31
|
-
date = (
|
30
|
+
date = date.next_day(increment)
|
32
31
|
end
|
33
32
|
end
|
34
33
|
date
|
35
34
|
end
|
36
35
|
|
37
36
|
def get_next_banking_day(date, options={})
|
38
|
-
options
|
37
|
+
options[:padding] ||= 1
|
38
|
+
options[:previous] = false
|
39
39
|
get_banking_day(date, options)
|
40
40
|
end
|
41
41
|
|
42
42
|
def get_previous_banking_day(date, options={})
|
43
|
-
options
|
43
|
+
options[:padding] ||= 1
|
44
|
+
options[:previous] = true
|
44
45
|
get_banking_day(date, options)
|
45
46
|
end
|
46
47
|
|
@@ -48,21 +49,6 @@ module BankingDateTools
|
|
48
49
|
if date.blank?
|
49
50
|
return Date.today
|
50
51
|
end
|
51
|
-
# if date.class == String
|
52
|
-
# if date.include?("/") || date.include?("-")
|
53
|
-
# split = date.split("/") if date.include?("/")
|
54
|
-
# split = date.split("-") if date.include?("-")
|
55
|
-
# time = ""
|
56
|
-
# if split[2] && split[2].include?(":")
|
57
|
-
# year_time = split[2].split(" ")
|
58
|
-
# split[2] = year_time[0]
|
59
|
-
# time = year_time[1]
|
60
|
-
# end
|
61
|
-
# safe = "#{split[2]}-#{split[0]}-#{split[1]}"
|
62
|
-
# safe << " #{time}" unless time.blank?
|
63
|
-
# return safe if split.length == 3 && split[2].length == 4
|
64
|
-
# end
|
65
|
-
# end
|
66
52
|
date.to_date
|
67
53
|
end
|
68
54
|
|
@@ -3,23 +3,4 @@ Time.class_eval do
|
|
3
3
|
def tick
|
4
4
|
((self.to_f) *1000).to_i
|
5
5
|
end
|
6
|
-
end
|
7
|
-
|
8
|
-
String.class_eval do
|
9
|
-
def to_date
|
10
|
-
if self.include?("/") || self.include?("-")
|
11
|
-
split = self.split("/") if self.include?("/")
|
12
|
-
split = self.split("-") if self.include?("-")
|
13
|
-
time = ""
|
14
|
-
if split[2] && split[2].include?(":")
|
15
|
-
year_time = split[2].split(" ")
|
16
|
-
split[2] = year_time[0]
|
17
|
-
time = year_time[1]
|
18
|
-
end
|
19
|
-
safe = "#{split[2]}-#{split[0]}-#{split[1]}"
|
20
|
-
safe << " #{time}" unless time.blank?
|
21
|
-
return Date.parse(safe) if split.length == 3 && split[2].length == 4
|
22
|
-
end
|
23
|
-
Date.parse(self)
|
24
|
-
end
|
25
|
-
end
|
6
|
+
end
|
@@ -16,21 +16,21 @@ describe BankingDateTools, "get_banking_day" do
|
|
16
16
|
context "previous == true" do
|
17
17
|
it "should role date to previous banking day if on weekend and no_weekends are true" do
|
18
18
|
options = {:previous => true, :padding => 0, :no_weekends => true}
|
19
|
-
|
19
|
+
get_banking_day(Date.parse("2012-03-31"),options).should eql(Date.parse("2012-03-30"))
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should role date to previous banking day if on weekend and no_weekends are true" do
|
23
23
|
options = {:previous => true,:padding => 0, :no_weekends => true, :no_holidays => true, :holidays => [Date.parse("2012-03-30")]}
|
24
|
-
|
24
|
+
get_banking_day(Date.parse("2012-03-31"),options).should eql(Date.parse("2012-03-29"))
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should role date to previous banking day if padding = 1" do
|
28
28
|
options = {:previous => true,:padding => 1}
|
29
|
-
|
29
|
+
get_banking_day(Date.parse("2012-03-27"),options).should eql(Date.parse("2012-03-26"))
|
30
30
|
end
|
31
31
|
it "should role date to 2 banking days ago padding = 2" do
|
32
32
|
options = {:previous => true,:padding => 2}
|
33
|
-
|
33
|
+
get_banking_day(Date.parse("2012-03-27"),options).should eql(Date.parse("2012-03-25"))
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
metadata
CHANGED
@@ -1,38 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: banking_date_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Joshua T Mckinney
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-12-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec-autotest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: autotest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
25
55
|
- !ruby/object:Gem::Dependency
|
26
56
|
name: mocha
|
27
|
-
requirement:
|
28
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
29
58
|
requirements:
|
30
|
-
- -
|
59
|
+
- - ">="
|
31
60
|
- !ruby/object:Gem::Version
|
32
61
|
version: '0'
|
33
62
|
type: :development
|
34
63
|
prerelease: false
|
35
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
36
69
|
description: Banking Date Tools
|
37
70
|
email:
|
38
71
|
- joshmckin@gmail.com
|
@@ -40,12 +73,12 @@ executables: []
|
|
40
73
|
extensions: []
|
41
74
|
extra_rdoc_files: []
|
42
75
|
files:
|
43
|
-
- .
|
44
|
-
- .
|
45
|
-
- .rspec
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
46
78
|
- Gemfile
|
47
79
|
- README
|
48
80
|
- Rakefile
|
81
|
+
- benchmarks/benchmarks.rb
|
49
82
|
- date_tools.gemspec
|
50
83
|
- lib/banking_date_tools.rb
|
51
84
|
- lib/banking_date_tools/banking_date_tools.rb
|
@@ -56,27 +89,26 @@ files:
|
|
56
89
|
- spec/spec_helper.rb
|
57
90
|
homepage: ''
|
58
91
|
licenses: []
|
92
|
+
metadata: {}
|
59
93
|
post_install_message:
|
60
94
|
rdoc_options: []
|
61
95
|
require_paths:
|
62
96
|
- lib
|
63
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
98
|
requirements:
|
66
|
-
- -
|
99
|
+
- - ">="
|
67
100
|
- !ruby/object:Gem::Version
|
68
101
|
version: '0'
|
69
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
-
none: false
|
71
103
|
requirements:
|
72
|
-
- -
|
104
|
+
- - ">="
|
73
105
|
- !ruby/object:Gem::Version
|
74
106
|
version: '0'
|
75
107
|
requirements: []
|
76
|
-
rubyforge_project:
|
77
|
-
rubygems_version:
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 2.4.5.1
|
78
110
|
signing_key:
|
79
|
-
specification_version:
|
111
|
+
specification_version: 4
|
80
112
|
summary: Banking Date Tools
|
81
113
|
test_files:
|
82
114
|
- spec/lib/banking_date_tools_spec.rb
|