DateSetter 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Szymon Rut"]
6
+ gem.email = ["rut.szymon@gmail.com"]
7
+ gem.summary = %q{It sets a random date in given range}
8
+ gem.homepage = "https://github.com/RutSzymon/DateSetter"
9
+
10
+ gem.files = `git ls-files`.split($\)
11
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.name = "DateSetter"
14
+ gem.require_paths = ["lib"]
15
+ gem.version = DateSetter::VERSION
16
+
17
+ gem.add_development_dependency("activesupport")
18
+ end
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in DateSetter.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Szymon Rut
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # DateSetter
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'DateSetter'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install DateSetter
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << "lib" << "test"
7
+ test.pattern = "test/**/*_test.rb"
8
+ test.verbose = true
9
+ end
10
+
11
+ task default: :test
data/lib/DateSetter.rb ADDED
@@ -0,0 +1,54 @@
1
+ class DateSetter
2
+ Infinity = 1.0 / 0.0
3
+ attr_accessor :reference_date, :min_date, :max_date, :result, :range, :min_hour, :max_hour
4
+
5
+ def valid?
6
+ return unless reference_date || range || !valid_ranges?
7
+ (min_date.to_f..max_date.to_f).cover?(reference_date.to_f)
8
+ end
9
+
10
+ def invalid?
11
+ !valid?
12
+ end
13
+
14
+ def min_date
15
+ @min_date ||= -Infinity
16
+ end
17
+
18
+ def max_date
19
+ @max_date ||= Infinity
20
+ end
21
+
22
+ def result
23
+ rand(min_date_in_range..max_date_in_range) + rand(min_hour..max_hour) if valid?
24
+ end
25
+
26
+ def min_hour
27
+ @min_hour ||= 0.hours
28
+ end
29
+
30
+ def max_hour
31
+ @max_hour ||= 24.hours - 1.second
32
+ end
33
+
34
+ private
35
+ def valid_ranges?
36
+ min_date.to_f < max_date.to_f || min_hour.to_f < max_hour.to_f
37
+ end
38
+
39
+ def min_date_in_range
40
+ if (reference_date - range).to_f < min_date.to_f
41
+ min_date.to_date
42
+ else
43
+ (reference_date - range).to_date
44
+ end
45
+ end
46
+
47
+ def max_date_in_range
48
+ if (reference_date + range).to_f > max_date.to_f
49
+ max_date.to_date
50
+ else
51
+ (reference_date + range).to_date
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,115 @@
1
+ require "test_helper"
2
+
3
+ class DateSetterTest < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ @date_setter = DateSetter.new
7
+ @date_setter.range = 0.days
8
+ end
9
+
10
+ def test_setup_is_valid
11
+ assert @date_setter.valid?
12
+ end
13
+
14
+ def test_is_invalid_when_reference_date_is_smaller_than_min
15
+ @date_setter.reference_date = 3.days.ago
16
+ @date_setter.min_date = 2.days.ago
17
+
18
+ assert @date_setter.invalid?
19
+ end
20
+
21
+ def test_is_invalid_when_reference_date_is_bigger_than_max
22
+ @date_setter.reference_date = 3.days.from_now
23
+ @date_setter.max_date = 2.days.from_now
24
+
25
+ assert @date_setter.invalid?
26
+ end
27
+
28
+ def test_is_invalid_when_reference_date_is_bigger_than_min_and_max
29
+ @date_setter.reference_date = 3.days.from_now
30
+ @date_setter.min_date = 2.days.ago
31
+ @date_setter.max_date = 2.days.from_now
32
+
33
+ assert @date_setter.invalid?
34
+ end
35
+
36
+ def test_is_invalid_when_reference_date_is_smaller_than_min_and_max
37
+ @date_setter.reference_date = 3.days.ago
38
+ @date_setter.min_date = 2.days.ago
39
+ @date_setter.max_date = 2.days.from_now
40
+
41
+ assert @date_setter.invalid?
42
+ end
43
+
44
+ def test_is_invalid_when_reference_date_is_bigger_than_max_and_min
45
+ @date_setter.reference_date = 3.days.from_now
46
+ @date_setter.max_date = 2.days.ago
47
+ @date_setter.min_date = 2.days.from_now
48
+
49
+ assert @date_setter.invalid?
50
+ end
51
+
52
+ def test_is_invalid_when_reference_date_is_smaller_than_max_and_min
53
+ @date_setter.reference_date = 3.days.ago
54
+ @date_setter.max_date = 2.days.ago
55
+ @date_setter.min_date = 2.days.from_now
56
+
57
+ assert @date_setter.invalid?
58
+ end
59
+
60
+ def test_is_invalid_without_reference_date
61
+ @date_setter.min_date = 2.days.ago
62
+ @date_setter.max_date = 2.days.from_now
63
+
64
+ assert @date_setter.invalid?
65
+ end
66
+
67
+ def test_is_valid_when_reference_date_is_bigger_than_min
68
+ @date_setter.reference_date = 1.days.ago
69
+ @date_setter.min_date = 2.days.ago
70
+
71
+ assert @date_setter.valid?
72
+ end
73
+
74
+ def test_is_valid_when_reference_date_is_smaller_than_max
75
+ @date_setter.reference_date = 1.days.from_now
76
+ @date_setter.max_date = 2.days.from_now
77
+
78
+ assert @date_setter.valid?
79
+ end
80
+
81
+ def test_is_valid_when_reference_date_is_between_min_and_max
82
+ @date_setter.reference_date = 1.days.from_now
83
+ @date_setter.min_date = 2.days.ago
84
+ @date_setter.max_date = 2.days.from_now
85
+
86
+ assert @date_setter.valid?
87
+ end
88
+
89
+ def test_is_valid_when_reference_date_is_equal_to_min
90
+ @date_setter.reference_date = @date_setter.min_date = 2.days.ago
91
+
92
+ assert @date_setter.valid?
93
+ end
94
+
95
+ def test_is_valid_when_reference_date_is_equal_to_max
96
+ @date_setter.reference_date = @date_setter.max_date = 2.days.from_now
97
+
98
+ assert @date_setter.valid?
99
+ end
100
+
101
+ def test_should_always_return_result_which_is_between_min_date_and_max_date
102
+ @date_setter.reference_date = @date_setter.min_date = @date_setter.max_date = 0.days.ago
103
+ @date_setter.range = 5.days
104
+
105
+ assert (0.days.ago.at_midnight..1.days.from_now.at_midnight).cover?(@date_setter.result)
106
+ end
107
+
108
+ def test_should_always_return_result_which_is_between_min_hour_and_max_hour
109
+ @date_setter.reference_date = 0.days.ago
110
+ @date_setter.min_hour = 8.hours
111
+ @date_setter.max_hour = 9.hours
112
+
113
+ assert (8..9).cover?(@date_setter.result.hour)
114
+ end
115
+ end
@@ -0,0 +1,4 @@
1
+ require "minitest/unit"
2
+ require "minitest/autorun"
3
+ require "DateSetter"
4
+ require "active_support/all"
data/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ class DateSetter
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: DateSetter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Szymon Rut
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description:
31
+ email:
32
+ - rut.szymon@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - DateSetter.gemspec
39
+ - Gemfile
40
+ - LICENSE
41
+ - README.md
42
+ - Rakefile
43
+ - lib/DateSetter.rb
44
+ - test/date_setter_test.rb
45
+ - test/test_helper.rb
46
+ - version.rb
47
+ homepage: https://github.com/RutSzymon/DateSetter
48
+ licenses: []
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 1.8.24
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: It sets a random date in given range
71
+ test_files:
72
+ - test/date_setter_test.rb
73
+ - test/test_helper.rb
74
+ has_rdoc: