dayset 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/README.md ADDED
@@ -0,0 +1,58 @@
1
+ DaySet
2
+ ======
3
+
4
+ With this gem you can generate a set of any number of days for a month
5
+ or year, is useful for example when you have to divide a month
6
+ in a fixed number of days, to create table partitions based on a date:
7
+
8
+
9
+ Generating sets of 2 days January of 2012
10
+ --------------------------------------
11
+
12
+ gem install dayset
13
+
14
+ require 'day_set'
15
+
16
+ DaySet.new(:date => Date.new(2012, 1), :group_number => 2).sets.first
17
+
18
+ #=> [#<Date: 2012-01-01 ((2455928j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-02 ((2455929j,0s,0n),+0s,2299161j)>]
19
+
20
+ Generating sets of 6 days January of 2012
21
+ --------------------------------------
22
+
23
+ require 'day_set'
24
+
25
+ DaySet.new(:date => Date.new(2012, 1), :group_number => 6).sets.last
26
+
27
+ # The last set has only one day because January has 31 days
28
+ # 31 % 6 is 1, I have named this set "residue set"
29
+
30
+ => [#<Date: 2012-01-31 ((2455958j,0s,0n),+0s,2299161j)>]
31
+
32
+ # It generates set of 6 days but if there is a 'residue set' with
33
+ # a number of days lower than group_number / 2 it will be moved to
34
+ # the previous set.
35
+
36
+ # Take a look that Date: 2012-01-31 was moved.
37
+
38
+ DaySet.new(:date => Date.new(2012, 1), :group_number => 6,
39
+ :move_residue => true).sets.last
40
+
41
+ => [#<Date: 2012-01-25 ((2455952j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-26 ((2455953j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-27 ((2455954j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-28 ((2455955j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-29 ((2455956j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-30 ((2455957j,0s,0n),+0s,2299161j)>, #<Date: 2012-01-31 ((2455958j,0s,0n),+0s,2299161j)>]
42
+
43
+
44
+ Generating labels of 6 days for year 2012
45
+ --------------------------------------
46
+
47
+ # it will generate an array of labels with this format:
48
+ # YYYY-MM--(first_day_of_the_set)-(last_day_of_the_set)
49
+
50
+ @args = { :group_number => 6, :move_residue => true }
51
+
52
+ labels = DaySet.gen_for_year(2012, @args).map do |s|
53
+ date = s.first
54
+ "#{date.year}-#{date.month}--#{date.day}-#{s.last.day}"
55
+ end
56
+
57
+ ["2012-1--1-6", "2012-1--7-12", "2012-1--13-18", "2012-1--19-24", "2012-1--25-31", "2012-2--1-6", "2012-2--7-12", "2012-2--13-18", "2012-2--19-24", "2012-2--25-29", "2012-3--1-6", "2012-3--7-12", "2012-3--13-18", "2012-3--19-24", "2012-3--25-31", "2012-4--1-6", "2012-4--7-12", "2012-4--13-18", "2012-4--19-24", "2012-4--25-30", "2012-5--1-6", "2012-5--7-12", "2012-5--13-18", "2012-5--19-24", "2012-5--25-31", "2012-6--1-6", "2012-6--7-12", "2012-6--13-18", "2012-6--19-24", "2012-6--25-30", "2012-7--1-6", "2012-7--7-12", "2012-7--13-18", "2012-7--19-24", "2012-7--25-31", "2012-8--1-6", "2012-8--7-12", "2012-8--13-18", "2012-8--19-24", "2012-8--25-31", "2012-9--1-6", "2012-9--7-12", "2012-9--13-18", "2012-9--19-24", "2012-9--25-30", "2012-10--1-6", "2012-10--7-12", "2012-10--13-18", "2012-10--19-24", "2012-10--25-31", "2012-11--1-6", "2012-11--7-12", "2012-11--13-18", "2012-11--19-24", "2012-11--25-30", "2012-12--1-6", "2012-12--7-12", "2012-12--13-18", "2012-12--19-24", "2012-12--25-31"]
58
+
data/dayset.gemspec ADDED
@@ -0,0 +1,15 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'dayset'
3
+ s.version = "0.0.1"
4
+ s.date = Date.today.to_s
5
+ s.summary = "With this gem you can generate a set of any number of days for a month or for a year."
6
+ s.description = "With this gem you can generate a set of any number of days for a month or for a year, is useful for example when you have to divide a month in a fixed number of days, to create table partitions based on a date."
7
+ s.authors = ["Gastón Ramos"]
8
+ s.email = 'ramos.gaston@gmail.com'
9
+ s.files = Dir.glob("**/*").delete_if do |item|
10
+ item.include?("~") or item =~ /\.log$/ or
11
+ item =~ /~$/
12
+ end
13
+ s.required_ruby_version = '>= 1.9.3'
14
+ s.homepage = "https://github.com/gramos/dayset"
15
+ end
data/lib/day_set.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'date'
2
+ class DaySet < Array
3
+
4
+ attr_reader :sets
5
+
6
+ def last_day_of_the_month
7
+ d = Date.new @date.year, @date.month
8
+ d += 42
9
+ last_d = Date.new(d.year, d.month) - 1
10
+ last_d.day
11
+ end
12
+
13
+ def initialize(args)
14
+ @date = args[:date]
15
+ @group_number = args[:group_number]
16
+ @move_residue = args[:move_residue]
17
+ @sets = gen_range!.each_slice(@group_number).to_a
18
+ move_residue! if @move_residue
19
+ end
20
+
21
+ def self.gen_for_year(year, options)
22
+ sets = []
23
+
24
+ (1..12).each do |month|
25
+ date = Date.new year, month
26
+ self.new(options.merge(:date => date)).sets.each do |s|
27
+ sets << s
28
+ end
29
+ end
30
+
31
+ sets
32
+ end
33
+
34
+ private
35
+
36
+ def gen_range!
37
+ last_day = last_day_of_the_month
38
+ low_limit = Date.new @date.year, @date.month, 1
39
+ high_limit = Date.new @date.year, @date.month, last_day
40
+ low_limit..high_limit
41
+ end
42
+
43
+ def move_residue!
44
+ if @sets.last.size < (@group_number / 2)
45
+ last = @sets.pop
46
+ @sets.last << last.first
47
+ end
48
+
49
+ end
50
+
51
+
52
+ end
@@ -0,0 +1,48 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
3
+ require 'day_set'
4
+ require 'date'
5
+
6
+ describe "DaySet group in set of 7 days" do
7
+
8
+ before do
9
+ @date = Date.new(2012, 1)
10
+ @args = { :date => @date, :group_number => 7 }
11
+ end
12
+
13
+ it "should get first set of 7 days" do
14
+ expected = (Date.new(2012, 1, 1)..Date.new(2012, 1, 7)).to_a
15
+
16
+ DaySet.new(@args).sets[0].must_equal expected
17
+ end
18
+
19
+ it "should get the second set of 7 days" do
20
+ expected = (Date.new(2012, 1, 8)..Date.new(2012, 1, 14)).to_a
21
+
22
+ DaySet.new(@args).sets[1].must_equal expected
23
+ end
24
+
25
+ end
26
+
27
+ describe "DaySet group in set of 6 days" do
28
+
29
+ before do
30
+ @date = Date.new(2012, 1)
31
+ @args = { :date => @date, :group_number => 6,
32
+ :move_residue => true }
33
+ end
34
+
35
+ it "should move the residue to the previous week" do
36
+ expected = (Date.new(2012, 1, 25)..Date.new(2012, 1, 31)).to_a
37
+
38
+ DaySet.new(@args).sets.last.must_equal expected
39
+ end
40
+
41
+ it "should generate set of days for a year" do
42
+ @args.delete(:date)
43
+ expected = (Date.new(2012, 12, 25)..Date.new(2012, 12, 31)).to_a
44
+
45
+ DaySet.gen_for_year(2012, @args).last.must_equal expected
46
+ end
47
+
48
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dayset
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gastón Ramos
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-26 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: With this gem you can generate a set of any number of days for a month
15
+ or for a year, is useful for example when you have to divide a month in a fixed
16
+ number of days, to create table partitions based on a date.
17
+ email: ramos.gaston@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - spec/day_set_spec.rb
23
+ - dayset.gemspec
24
+ - README.md
25
+ - lib/day_set.rb
26
+ homepage: https://github.com/gramos/dayset
27
+ licenses: []
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.9.3
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 1.8.23
47
+ signing_key:
48
+ specification_version: 3
49
+ summary: With this gem you can generate a set of any number of days for a month or
50
+ for a year.
51
+ test_files: []
52
+ has_rdoc: