datet 0.0.18 → 0.0.19

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.
Files changed (5) hide show
  1. data/VERSION +1 -1
  2. data/datet.gemspec +2 -2
  3. data/lib/datet.rb +49 -0
  4. data/spec/datet_spec.rb +13 -0
  5. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.18
1
+ 0.0.19
data/datet.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{datet}
8
- s.version = "0.0.18"
8
+ s.version = "0.0.19"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-08-26}
12
+ s.date = %q{2012-08-29}
13
13
  s.description = %q{A framework for handeling date- and time-related stuff in Ruby.}
14
14
  s.email = %q{k@spernj.org}
15
15
  s.extra_rdoc_files = [
data/lib/datet.rb CHANGED
@@ -1548,4 +1548,53 @@ class Datet
1548
1548
 
1549
1549
  return self
1550
1550
  end
1551
+
1552
+ #Returns a random Datet-object within given parameters.
1553
+ #===Examples
1554
+ # datet_rand = Datet.random(:years => 2003..2005) #=> Datet-object
1555
+ def self.random(args = {})
1556
+ #Test given arguments.
1557
+ raise "Given argument wasnt a hash: '#{args.class.name}'." if !args.is_a?(Hash)
1558
+ args.each do |key, val|
1559
+ raise "Invalid key: '#{key}'." if ![:years, :months, :days, :hours, :mins, :secs].include?(key)
1560
+ end
1561
+
1562
+ #Calculate random year.
1563
+ years = args[:years] || (1971..Time.now.year)
1564
+ year = years.to_a.sample
1565
+
1566
+ #Calculate random month.
1567
+ months = args[:months] || (1..12)
1568
+ month = months.to_a.sample
1569
+ month = 1 if month < 1
1570
+ month = 12 if month > 12
1571
+
1572
+ #Calculate random day.
1573
+ days_in_month = Datet.days_in_month(year, month)
1574
+ days = args[:days] || (1..days_in_month)
1575
+ day = days.to_a.sample
1576
+ day = days_in_month if day > days_in_month
1577
+ day = 1 if day < 1
1578
+
1579
+ #Calculate random hour.
1580
+ hours = args[:hours] || (0..23)
1581
+ hour = hours.to_a.sample
1582
+ hour = 0 if hour < 0
1583
+ hour = 23 if hour > 23
1584
+
1585
+ #Calculate random minute.
1586
+ mins = args[:mins] || (0..59)
1587
+ min = mins.to_a.sample
1588
+ min = 0 if min < 0
1589
+ min = 59 if min > 59
1590
+
1591
+ #Calculate random second.
1592
+ secs = args[:secs] || (0..59)
1593
+ sec = secs.to_a.sample
1594
+ sec = 0 if sec < 0
1595
+ sec = 59 if sec > 59
1596
+
1597
+ #Spawn object with the given random values.
1598
+ return Datet.new(year, month, day, hour, min, sec)
1599
+ end
1551
1600
  end
data/spec/datet_spec.rb CHANGED
@@ -523,4 +523,17 @@ describe "Datet" do
523
523
  res = datet.dbstr
524
524
  raise "Expected '2012-06-17 10:30:00' but got: '#{res}'." if res != "2012-06-17 10:30:00"
525
525
  end
526
+
527
+ it "should be able to generate random dates" do
528
+ #Shouldnt be possible to generate random datet's with invalid dates.
529
+ datet = Datet.random(:days => 32..35)
530
+ raise "Invalid day: '#{datet.day}'." if datet.day > 31
531
+
532
+ #It should be within the given values.
533
+ years_r = 2001..2010
534
+ 1.upto(100) do
535
+ datet = Datet.random(:years => years_r)
536
+ raise "Expected year to be within range: '#{datet.year}' '#{years_r}'." if !years_r.member?(datet.year)
537
+ end
538
+ end
526
539
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: datet
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.18
5
+ version: 0.0.19
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-08-26 00:00:00 +02:00
13
+ date: 2012-08-29 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- hash: -2763202019321149336
96
+ hash: -585524572600790953
97
97
  segments:
98
98
  - 0
99
99
  version: "0"