calendar_walker 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 003a33ba43ba171b8eae1071e3cf3f80ff32a070
4
- data.tar.gz: 4a4ede33d716c660902684ba43dd407945c172f6
3
+ metadata.gz: 9c40117316ae496c869335bdbf0dfcd7d92ed62d
4
+ data.tar.gz: e264d50a4d896a600be0a7789fb7e87accba5c49
5
5
  SHA512:
6
- metadata.gz: 7898dff4e5005a09e26f335cbf3098b80e4fde04c91f921fb307913e6326fe1cc771e24b4db9cdbdb6f70593112cf9e20a99eb6bec67fcf2f8d187630acca0ca
7
- data.tar.gz: afd688c50c15933f40b3d8150851bfc1f8fc9c6d1432f1927d052d0053ef760f2a20f9cdd0cfac5c3850f36f2187977b711fca42f311af4a99e55e338d82b750
6
+ metadata.gz: d87c7a4aaa81d7f0ef0a18ce47b7023faa286bdc6da9138b08beeb3321eee123553dae0c12ee529eb86ad1ffb4d2ca8a6b7e4693ef33f51cc1bddd51578c51ff
7
+ data.tar.gz: 64c4b38c281cd0ace514ef8d9df9db8826ccafa31ea3a8241af867b93cdc7d685780e4ba452772fb1f699bb1f6e362b6cb1f407f07071625f1cc64bd64b08745
data/.travis.yml CHANGED
@@ -1,8 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.1
3
+ - ruby-1.9.3
4
+ - ruby-2.0.0
5
+ - ruby-2.1.1
6
6
  - ruby-head
7
+ - jruby-1.7.12
8
+ - jruby-head
9
+ - rbx-2.2.6
7
10
  script:
8
11
  - bundle exec rspec
data/README.md CHANGED
@@ -4,7 +4,14 @@
4
4
 
5
5
  <https://github.com/violarium/calendar_walker>
6
6
 
7
- A simple gem to get calendars in correct order and walk through them as you want.
7
+ A simple gem to work with month dates in correct order and objects attached to them.
8
+
9
+ It supports:
10
+
11
+ 1. Walking through dates of month (2d array) in correct order.
12
+ 2. Choosing the firsdt day of week: Sunday, Monday or whatever.
13
+ 3. Adding objects collections which will be automatically attached to appropriate dates.
14
+
8
15
 
9
16
  ## Installation
10
17
 
@@ -20,15 +27,62 @@ Or install it yourself as:
20
27
 
21
28
  $ gem install calendar_walker
22
29
 
30
+
31
+
23
32
  ## Usage
24
33
 
25
- require 'calendar_walker'
34
+ ### Basic usage of CalendarWalker
26
35
 
36
+ require 'calendar_walker'
37
+
38
+ events = [event1, event2, event3]
39
+ dates = [date1, date2, date3, date4]
40
+
41
+ walker = CalendarWalker.month_walker_for(
42
+ Date.new(2014, 1), # Date object to find a current month. Could be also Time or DateTime object
43
+ 1, # first day if week - Monday
44
+ { events: {collection: events, date_method: :event_date }, # collection "event", :event_date - method in objects to get dates
45
+ dates: { collection: dates } } # collection "dates", by default, date_method is #date
46
+ )
47
+
48
+ Next code will go through all dates in received month. Each row is week. Row contains elements. Element contains date and objects.
49
+
50
+ walker.each do |row|
51
+ row.each do |row_element|
52
+ row_element.date # current date
53
+ row_element.objects[:events] # list of events at this date
54
+ row_element.objects[:dates] # list of dates at this date
55
+ end
56
+ end
57
+
58
+
59
+ ### Going deeper
60
+
61
+ #### CalendarWalker::MonthGrid
62
+
63
+ When **CalendarWalker#month_walker_for** is called, objects of this class are used by default to manage grid of dates in month. You can use it itself for your own aims.
64
+
27
65
  CalendarWalker::Walker.new(Date.new(2014, 1, 1)).wday_list # => [0, 1, 2, 3, 4, 5, 6]
28
-
66
+
29
67
  walker = CalendarWalker::Walker.new(Date.new(2014, 5, 5), 6)
30
68
  walker.wday_list # => [6, 0, 1, 2, 3, 4, 5]
31
69
  walker.days_matrix # => [[Date.new(2014, 4, 28), Date.new(2014, 4, 29), ...], ..., [..., Date.new(2014, 6, 1)]]
70
+
71
+
72
+ #### CalendarWalker::MonthWalker
73
+
74
+ Method **CalendarWalker#month_walker_for** returns an object of class CalendarWalker::MonthWalker and encapsulates a proccess of configuring it. You can do it manually:
75
+
76
+ walker = CalendarWalker::MonthWalker.new(month_grid)
77
+ walker.add_objects(:events, events, :event_date)
78
+ walker.add_objects(:dates, dates)
79
+
80
+
81
+ ## Roadmap
82
+
83
+ 1. Walking through the month in vertical way
84
+ 2. Simplier interface to manage single collection of objects
85
+
32
86
 
33
87
  ## Contributing
34
88
 
@@ -1,19 +1,19 @@
1
- require 'date'
2
-
3
1
  module CalendarWalker
4
- # Class to walk through month in calendar
5
- class Walker
2
+ # Class to work with grid of month days
3
+ class MonthGrid
6
4
  attr_reader :current_date, :first_wday
7
5
 
8
- # Create a new walker to walk through month in proper order.
6
+ # Create a new month grid
9
7
  # Arguments:
10
8
  # current date (date, datetime or time)
11
9
  # number of start week day between 0 and 6. 0 - Sunday, 6 - Monday.
12
10
  # Examples:
13
- # CalendarWalker::Walker.new(Date.new(2014, 1, 1))
14
- # CalendarWalker::Walker.new(Time.now)
11
+ # CalendarWalker::MonthGrid.new(Date.new(2014, 1, 1))
12
+ # CalendarWalker::MonthGrid.new(Time.now)
15
13
  def initialize(date, first_wday = 0)
16
- raise IncorrectWDay, 'Weekday should have value between 0 and 6' unless 0 <= first_wday and first_wday <= 6
14
+ unless first_wday.is_a? Fixnum and 0 <= first_wday and first_wday <= 6
15
+ raise IncorrectWDay, 'Weekday should have Fixnum value between 0 and 6'
16
+ end
17
17
 
18
18
  @current_date = date
19
19
  @first_wday = first_wday
@@ -0,0 +1,16 @@
1
+ module CalendarWalker
2
+ class MonthWalker
3
+ # Special class which represent element in month walker.
4
+ # It contains date and hash of appropriate objects
5
+ class RowElement
6
+ attr_reader :date
7
+ attr_reader :objects
8
+
9
+ # Create an row element for month walker
10
+ def initialize(date, objects)
11
+ @date = date
12
+ @objects = objects
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,65 @@
1
+ module CalendarWalker
2
+ # Class to walk through dates in months with attached to them appropriate objects
3
+ class MonthWalker
4
+ attr_reader :month_grid
5
+
6
+ # Create a new walker with month grid
7
+ # Arguments:
8
+ # month_grid - instance of the class CalendarWalker::MonthGrid or something with same functionality
9
+ # Examples:
10
+ # month_grid = CalendarWalker::MonthGrid.new(Date.new(2014, 1, 1))
11
+ # month_walker = CalendarWalker::MonthWalker.new(month_grid)
12
+ def initialize(month_grid)
13
+ @month_grid = month_grid
14
+ @objects = {}
15
+ end
16
+
17
+ # Add collection of objects with dates
18
+ # Arguments:
19
+ # key - key to identify each collection
20
+ # objects - collection of objects
21
+ # date_method - method to get date from each object in collection
22
+ # Examples:
23
+ # month_walker.add_objects[:dates, [..., ..., ...]]
24
+ # month_walker.add_objects[:events, [..., ..., ...], :event_time]
25
+ def add_objects(key, objects, date_method = :date)
26
+ @objects[key] = {}
27
+ objects.each do |object|
28
+ date_key = object.send(date_method).to_date
29
+ @objects[key][date_key] ||= []
30
+ @objects[key][date_key].push object
31
+ end
32
+ end
33
+
34
+ # Remove object collection by key
35
+ # Arguments:
36
+ # key - key to identify existing object collection
37
+ # Examples:
38
+ # month_walker.remove_objects(:events)
39
+ def remove_objects(key)
40
+ @objects.delete(key)
41
+ end
42
+
43
+ # Walk through all date matrix with attached objects from added collections
44
+ # Examples:
45
+ # month_walker.each do |row|
46
+ # row.each do |row_element|
47
+ # row_element.date # => Date.new(2014, 5, 8)
48
+ # row_element.objects # => { events: [..., ...], dates: [] }
49
+ # end
50
+ # end
51
+ def each(&block)
52
+ @month_grid.days_matrix.each do |day_row|
53
+ row = []
54
+ day_row.each do |date|
55
+ row_elements_object = {}
56
+ @objects.each do |object_key, objects_list|
57
+ row_elements_object[object_key] = objects_list[date].nil? ? [] : objects_list[date]
58
+ end
59
+ row.push RowElement.new(date, row_elements_object)
60
+ end
61
+ block.call(row)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module CalendarWalker
2
- VERSION = '0.0.3'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -1,5 +1,29 @@
1
1
  require 'calendar_walker/version'
2
- require 'calendar_walker/walker'
2
+ require 'date'
3
+ require 'calendar_walker/month_grid'
4
+ require 'calendar_walker/month_walker'
5
+ require 'calendar_walker/month_walker/row_element'
3
6
 
4
7
  module CalendarWalker
8
+ # Create month walker with objects
9
+ # Arguments:
10
+ # date - date to get the month
11
+ # first_wday - first day of week: from 0 to 6
12
+ # objects - object collections with dates
13
+ # Examples:
14
+ # CalendarWalker.month_walker_for(
15
+ # Date.new(2014, 1, 1),
16
+ # 1,
17
+ # { events: { collection: events, date_method: :event_date },
18
+ # dates: { collection: dates } } # date_method is :date by default
19
+ # )
20
+ def self.month_walker_for(date, first_wday, objects = {})
21
+ walker = CalendarWalker::MonthWalker.new(CalendarWalker::MonthGrid.new(date, first_wday))
22
+ objects.each do |key, obj_container|
23
+ arguments = [key, obj_container[:collection]]
24
+ arguments.push obj_container[:date_method] unless obj_container[:date_method].nil?
25
+ walker.add_objects(*arguments)
26
+ end
27
+ walker
28
+ end
5
29
  end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe CalendarWalker::MonthGrid do
4
+ let(:current_date) { ::DateTime.new(2014, 5, 5) }
5
+
6
+ describe '#current_date' do
7
+ it 'should return same current date' do
8
+ grid = CalendarWalker::MonthGrid.new(current_date)
9
+ grid.current_date.should eq current_date
10
+ end
11
+ end
12
+
13
+ describe '#first_wday' do
14
+ it 'should return received wday number' do
15
+ CalendarWalker::MonthGrid.new(current_date, 4).first_wday.should eq 4
16
+ end
17
+
18
+ describe 'incorrect values' do
19
+ [-1, 7, 'hello', nil].each do |incorrect_value|
20
+ output_value = incorrect_value.nil? ? '`nil`' : incorrect_value.to_s
21
+ it output_value + ' as a first week day should throw an error' do
22
+ expect do
23
+ CalendarWalker::MonthGrid.new(current_date, incorrect_value)
24
+ end.to raise_error CalendarWalker::IncorrectWDay
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#days_matrix' do
31
+ {
32
+ 0 => { from: Date.new(2014, 4, 27), to: Date.new(2014, 5, 31) },
33
+ 1 => { from: Date.new(2014, 4, 28), to: Date.new(2014, 6, 1) },
34
+ 2 => { from: Date.new(2014, 4, 29), to: Date.new(2014, 6, 2) },
35
+ 3 => { from: Date.new(2014, 4, 30), to: Date.new(2014, 6, 3) },
36
+ 4 => { from: Date.new(2014, 5, 1), to: Date.new(2014, 6, 4) },
37
+ 5 => { from: Date.new(2014, 4, 25), to: Date.new(2014, 6, 5) },
38
+ 6 => { from: Date.new(2014, 4, 26), to: Date.new(2014, 6, 6) },
39
+ }.each do |first_wday, date_range|
40
+ it 'should return correct matrix when first week day is ' + Date::DAYNAMES[first_wday] do
41
+ grid = CalendarWalker::MonthGrid.new(current_date, first_wday)
42
+ grid.days_matrix.should eq week_grid(date_range[:from], date_range[:to])
43
+ end
44
+ end
45
+ end
46
+
47
+ describe '#wday_list' do
48
+ [
49
+ (0..6).to_a,
50
+ (1..6).to_a + [0],
51
+ (2..6).to_a + (0..1).to_a,
52
+ (3..6).to_a + (0..2).to_a,
53
+ (4..6).to_a + (0..3).to_a,
54
+ (5..6).to_a + (0..4).to_a,
55
+ [6] + (0..5).to_a
56
+ ].each_with_index do |expect, first_wday|
57
+ it 'should print week days in proper order when first week day is ' + Date::DAYNAMES[first_wday] do
58
+ CalendarWalker::MonthGrid.new(current_date, first_wday).wday_list.should eq expect
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe CalendarWalker::MonthWalker::RowElement do
4
+ before do
5
+ @row_element = CalendarWalker::MonthWalker::RowElement.new('row_date', {a: [1, 2]})
6
+ end
7
+
8
+ describe '#date' do
9
+ it 'should return correct date' do
10
+ @row_element.date.should eq 'row_date'
11
+ end
12
+ end
13
+
14
+ describe '#objects' do
15
+ it 'should return correct objects' do
16
+ @row_element.objects.should eq ({a: [1, 2]})
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+
3
+ describe CalendarWalker::MonthWalker do
4
+
5
+ describe 'functional' do
6
+
7
+ let(:month_grid) { CalendarWalker::MonthGrid.new(Date.new(2014, 5, 9)) }
8
+ let(:calendar_walker) { CalendarWalker::MonthWalker.new(month_grid) }
9
+
10
+ describe '#month_grid' do
11
+ it 'should return received later month grid' do
12
+ calendar_walker.month_grid.should eq month_grid
13
+ end
14
+ end
15
+
16
+ describe '#each' do
17
+
18
+ it 'should walk through all dates in month grid' do
19
+ walk_result = []
20
+ calendar_walker.each do |row|
21
+ row_result = []
22
+ row.each do |row_element|
23
+ row_result.push row_element.date
24
+ end
25
+ walk_result.push row_result
26
+ end
27
+
28
+ walk_result.should eq month_grid.days_matrix
29
+ end
30
+
31
+ describe 'managing objects' do
32
+
33
+ let(:a_objects) do
34
+ [
35
+ double('a1', date: Date.new(2014, 5, 8)),
36
+ double('a2', date: Date.new(2014, 5, 8)),
37
+ double('a3', date: Date.new(2014, 4, 30)),
38
+ double('a4', date: Date.new(2014, 1, 1)),
39
+ ]
40
+ end
41
+
42
+ let(:b_objects) do
43
+ [
44
+ double('b1', date_time: ::DateTime.new(2014, 5, 1, 12, 1, 1)),
45
+ double('b1', date_time: ::DateTime.new(2014, 5, 2, 23, 2, 2)),
46
+ ]
47
+ end
48
+
49
+ describe 'with added objects' do
50
+ before do
51
+ calendar_walker.add_objects(:a, a_objects)
52
+ calendar_walker.add_objects(:b, b_objects, :date_time)
53
+
54
+ @result = {}
55
+ calendar_walker.each do |row|
56
+ row.each do |row_element|
57
+ @result[row_element.date] = row_element.objects
58
+ end
59
+ end
60
+ end
61
+
62
+ it 'should not go through dates which a not in range' do
63
+ expect(@result[Date.new(2014, 1, 1)]).to be_nil
64
+ end
65
+
66
+ it 'should get objects in lists, attached to appropriate dates' do
67
+ expect(@result[Date.new(2014, 5, 8)][:a]).to include(a_objects[0], a_objects[1])
68
+ expect(@result[Date.new(2014, 4, 30)][:a]).to include(a_objects[2])
69
+
70
+ expect(@result[Date.new(2014, 5, 1)][:b]).to include(b_objects[0])
71
+ expect(@result[Date.new(2014, 5, 2)][:b]).to include(b_objects[1])
72
+ end
73
+
74
+ it 'should get empty list when there is no appropriate objects' do
75
+ expect(@result[Date.new(2014, 5, 12)][:a]).to eq []
76
+ expect(@result[Date.new(2014, 5, 12)][:b]).to eq []
77
+ end
78
+
79
+ it 'should not get another objects (which were not added)' do
80
+ expect(@result[Date.new(2014, 5, 1)][:c]).to be_nil
81
+ end
82
+ end
83
+
84
+
85
+ describe 'with added and deleted objects' do
86
+ before do
87
+ calendar_walker.add_objects(:a, a_objects)
88
+ calendar_walker.add_objects(:b, b_objects, :date_time)
89
+ calendar_walker.remove_objects(:a)
90
+
91
+ @result = {}
92
+ calendar_walker.each do |row|
93
+ row.each do |row_element|
94
+ @result[row_element.date] = row_element.objects
95
+ end
96
+ end
97
+ end
98
+
99
+ it 'should not contain deleted objects' do
100
+ expect(@result[Date.new(2014, 5, 8)][:a]).to be_nil
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+
108
+ describe 'unit' do
109
+ let(:month_grid) { double('month_grid', days_matrix: [[1, 2], [3, 4]]) }
110
+ let(:month_walker) { CalendarWalker::MonthWalker.new(month_grid) }
111
+
112
+ describe '#each' do
113
+ it 'should create a special object for each date in day matrix with empty object hash' do
114
+ [1, 2, 3, 4].each do |e|
115
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(e, {}).once
116
+ end
117
+ month_walker.each { }
118
+ end
119
+
120
+ it 'should pass to block arrays of special objects for each row of day matrix' do
121
+ row_elements = []
122
+ [1, 2, 3, 4].each do |e|
123
+ row_element = "row_#{e}"
124
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(e, {}).and_return(row_element)
125
+ row_elements.push row_element
126
+ end
127
+
128
+ row_array = []
129
+ month_walker.each do |row|
130
+ row_array.push row
131
+ end
132
+
133
+ expect(row_array[0]).to eq [row_elements[0], row_elements[1]]
134
+ expect(row_array[1]).to eq [row_elements[2], row_elements[3]]
135
+ end
136
+
137
+
138
+ describe 'with added objects' do
139
+ let(:a_objects) do
140
+ [
141
+ double('a1', m: double('a1_date', to_date: 1)),
142
+ double('a2', m: double('a2_date', to_date: 1)),
143
+ double('a3', m: double('a3_date', to_date: 3)),
144
+ double('a4', m: double('a4_date', to_date: 10))
145
+ ]
146
+ end
147
+
148
+ let(:b_objects) { [double('b1', x: double('b1_date', to_date: 1))] }
149
+
150
+ before do
151
+ month_walker.add_objects(:a, a_objects, :m)
152
+ month_walker.add_objects(:b, b_objects, :x)
153
+ end
154
+
155
+ it 'should create a special object for each date in day matrix with appropriate object hash' do
156
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(1, {a: [a_objects[0], a_objects[1]], b: [b_objects[0]]}).once
157
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(2, {a: [], b: []}).once
158
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(3, {a: [a_objects[2]], b: []}).once
159
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(4, {a: [], b: []}).once
160
+ month_walker.each { }
161
+ end
162
+
163
+ it 'should not create special objects which are out of date range' do
164
+ CalendarWalker::MonthWalker::RowElement.should_receive(:new).with(10, anything).never
165
+ month_walker.each { }
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe CalendarWalker do
4
+
5
+ describe '#month_walker_for' do
6
+ it 'should create and return CalendarWalker::MonthWalker with correct month grid' do
7
+ month_grid = double('month_grid')
8
+ CalendarWalker::MonthGrid.should_receive(:new).with(Date.new(2014, 1, 1), 2).and_return(month_grid)
9
+
10
+ walker = double('month_walker')
11
+ CalendarWalker::MonthWalker.should_receive(:new).with(month_grid).and_return(walker)
12
+
13
+ CalendarWalker.month_walker_for(Date.new(2014, 1, 1), 2).should eq walker
14
+ end
15
+
16
+
17
+ it 'should fill CalendarWalker::MonthWalker object with received collections' do
18
+ walker = double('month_walker')
19
+ CalendarWalker::MonthWalker.should_receive(:new).and_return(walker)
20
+
21
+ walker.should_receive(:add_objects).with(:events, [1, 2, 3], :event_date).once
22
+ walker.should_receive(:add_objects).with(:dates, [6, 7])
23
+
24
+ CalendarWalker.month_walker_for(
25
+ Date.new(2014, 1, 1),
26
+ 2,
27
+ { events: {collection: [1, 2, 3], date_method: :event_date}, dates: { collection: [6, 7] } }
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ require 'calendar_walker'
2
+
3
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
4
+
5
+ RSpec.configure do |config|
6
+ config.order = 'random'
7
+ end
@@ -0,0 +1,5 @@
1
+ # Get week grid for range of dates
2
+ # Each row is an array with 7 elements
3
+ def week_grid(date_from, date_to)
4
+ (date_from..date_to).to_a.each_slice(7).to_a
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calendar_walker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Makarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-06 00:00:00.000000000 Z
11
+ date: 2014-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,9 +69,16 @@ files:
69
69
  - Rakefile
70
70
  - calendar_walker.gemspec
71
71
  - lib/calendar_walker.rb
72
+ - lib/calendar_walker/month_grid.rb
73
+ - lib/calendar_walker/month_walker.rb
74
+ - lib/calendar_walker/month_walker/row_element.rb
72
75
  - lib/calendar_walker/version.rb
73
- - lib/calendar_walker/walker.rb
74
- - spec/calendar_walker/walker_spec.rb
76
+ - spec/calendar_walker/month_grid_spec.rb
77
+ - spec/calendar_walker/month_walker/row_element_spec.rb
78
+ - spec/calendar_walker/month_walker_spec.rb
79
+ - spec/calendar_walker_spec.rb
80
+ - spec/spec_helper.rb
81
+ - spec/support/grid_support.rb
75
82
  homepage: https://github.com/violarium/calendar_walker
76
83
  licenses:
77
84
  - MIT
@@ -97,4 +104,9 @@ signing_key:
97
104
  specification_version: 4
98
105
  summary: Simple gem to walk through calendar months.
99
106
  test_files:
100
- - spec/calendar_walker/walker_spec.rb
107
+ - spec/calendar_walker/month_grid_spec.rb
108
+ - spec/calendar_walker/month_walker/row_element_spec.rb
109
+ - spec/calendar_walker/month_walker_spec.rb
110
+ - spec/calendar_walker_spec.rb
111
+ - spec/spec_helper.rb
112
+ - spec/support/grid_support.rb
@@ -1,57 +0,0 @@
1
- require 'calendar_walker'
2
-
3
- describe CalendarWalker::Walker do
4
- let(:current_date) { DateTime.new(2014, 5, 5) }
5
-
6
- describe '#current_date' do
7
- it 'should return same current date' do
8
- walker = CalendarWalker::Walker.new(current_date)
9
- walker.current_date.should eq current_date
10
- end
11
- end
12
-
13
- describe '#first_wday' do
14
- it 'should be Sunday by default' do
15
- CalendarWalker::Walker.new(current_date).first_wday.should eq 0
16
- end
17
- it 'should return received wday number' do
18
- CalendarWalker::Walker.new(current_date, 4).first_wday.should eq 4
19
- end
20
- it 'should throw an error when week day is incorrect' do
21
- expect do
22
- CalendarWalker::Walker.new(current_date, -1)
23
- end.to raise_error CalendarWalker::IncorrectWDay
24
- end
25
- end
26
-
27
- describe '#days_matrix' do
28
- context 'first wday is Sunday' do
29
- let(:walker) { CalendarWalker::Walker.new(current_date) }
30
- it 'should print days in proper order' do
31
- walker.days_matrix.should eq (Date.new(2014, 4, 27)..Date.new(2014, 5, 31)).to_a.each_slice(7).to_a
32
- end
33
- end
34
-
35
- context 'first day is Monday' do
36
- let(:walker) { CalendarWalker::Walker.new(current_date, 1) }
37
- it 'should print days in proper order' do
38
- walker.days_matrix.should eq (Date.new(2014, 4, 28)..Date.new(2014, 6, 1)).to_a.each_slice(7).to_a
39
- end
40
- end
41
- end
42
-
43
-
44
- describe '#wday_list' do
45
- context 'first wday is Sunday' do
46
- it 'should print week days in proper order' do
47
- CalendarWalker::Walker.new(current_date).wday_list.should eq [0, 1, 2, 3, 4, 5, 6]
48
- end
49
- end
50
-
51
- context 'first day is Monday' do
52
- it 'should print week days in proper order' do
53
- CalendarWalker::Walker.new(current_date, 1).wday_list.should eq [1, 2, 3, 4, 5, 6, 0]
54
- end
55
- end
56
- end
57
- end