turba_chronos 5.2.0
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/.gitignore +17 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/Guardfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +68 -0
- data/Rakefile +11 -0
- data/lib/turba_chronos.rb +31 -0
- data/lib/turba_chronos/core_ext/range.rb +5 -0
- data/lib/turba_chronos/day.rb +71 -0
- data/lib/turba_chronos/period.rb +44 -0
- data/lib/turba_chronos/period_converter.rb +69 -0
- data/lib/turba_chronos/periods.rb +43 -0
- data/lib/turba_chronos/rule.rb +52 -0
- data/lib/turba_chronos/stored_periods.rb +68 -0
- data/lib/turba_chronos/timeline.rb +139 -0
- data/lib/turba_chronos/version.rb +3 -0
- data/spec/fixtures/base_fixture.rb +31 -0
- data/spec/fixtures/disney_fixture.rb +19 -0
- data/spec/fixtures/empty_periods_fixture.rb +13 -0
- data/spec/fixtures/future_reopen_fixture.rb +19 -0
- data/spec/fixtures/lcl_fixture.rb +18 -0
- data/spec/fixtures/november_bug_fixture.rb +13 -0
- data/spec/fixtures/opened_fixture.rb +12 -0
- data/spec/lib/alt_timeline_spec.rb +48 -0
- data/spec/lib/disney_2_spec.rb +21 -0
- data/spec/lib/disney_3_spec.rb +21 -0
- data/spec/lib/disney_spec.rb +21 -0
- data/spec/lib/empty_periods_spec.rb +21 -0
- data/spec/lib/future_reopen_spec.rb +21 -0
- data/spec/lib/lcl_spec.rb +28 -0
- data/spec/lib/november_bug_spec.rb +20 -0
- data/spec/lib/opened_spec.rb +21 -0
- data/spec/lib/timeline_spec.rb +70 -0
- data/spec/spec_helper.rb +8 -0
- data/test/fixtures/base_fixture.rb +31 -0
- data/test/test_helper.rb +6 -0
- data/test/test_periods.rb +16 -0
- data/test/test_periods_converter.rb +62 -0
- data/test/test_rule.rb +33 -0
- data/test/test_timeline.rb +51 -0
- data/turba_chronos.gemspec +30 -0
- metadata +236 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/disney_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("November 02 2014, 14:30"))
|
7
|
+
from = Time.zone.parse("November 02 2014, 00:00").iso8601
|
8
|
+
to = Time.zone.parse("November 03 2014, 23:59").iso8601
|
9
|
+
@subject = TurbaChronos.load(disney.periods, from, to)
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:all) do
|
13
|
+
Timecop.return
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.days' do
|
17
|
+
it "returns the days" do
|
18
|
+
expect(@subject.days[1].timeframes[1].level).to eql(1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/empty_periods_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("November 02 2014, 14:30").iso8601)
|
7
|
+
from = Time.zone.parse("November 01 2014, 00:00").iso8601
|
8
|
+
to = Time.zone.parse("November 02 2014, 23:59").iso8601
|
9
|
+
@subject = TurbaChronos.load(empty_periods.periods, from, to)
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:all) do
|
13
|
+
Timecop.return
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.days' do
|
17
|
+
it "returns the days" do
|
18
|
+
expect(@subject.days.first.timeframes.first.timerange.to_s).to eql('0..2359')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/future_reopen_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("July 30 2014, 16:15").iso8601)
|
7
|
+
@subject = TurbaChronos.load(future_reopen.periods, Time.now.utc.iso8601, (Time.now.utc + 3.days).iso8601)
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
Timecop.return
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.reopen' do
|
15
|
+
it "returns when it's reopen" do
|
16
|
+
expect(@subject.reopen.date.to_s).to eql("2014-08-13")
|
17
|
+
expect(@subject.reopen.timeframe.timerange.to_s).to eql("800..1000")
|
18
|
+
expect(@subject.reopen.timeframe.level).to eql(2)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/lcl_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("September 23 2014, 14:30").iso8601)
|
7
|
+
@subject = TurbaChronos.load(lcl.periods, Time.now.utc.iso8601, (Time.now.utc + 3.days).iso8601)
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
Timecop.return
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.days' do
|
15
|
+
it "returns the days" do
|
16
|
+
expect(@subject.days.first.timeframes[0].level).to eql(3)
|
17
|
+
expect(@subject.days.first.timeframes[1].level).to eql(1)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.reopen' do
|
22
|
+
it "returns when it's reopen" do
|
23
|
+
expect(@subject.reopen.date.to_s).to eql("2014-09-23")
|
24
|
+
expect(@subject.reopen.timeframe.timerange).to eql(1700..1730)
|
25
|
+
expect(@subject.reopen.timeframe.level).to eql(1)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/november_bug_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("November 24 2014, 14:30").iso8601)
|
7
|
+
@subject = TurbaChronos.load(november_bug.periods, Time.now.utc.iso8601, (Time.now.utc + 3.days).iso8601)
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
Timecop.return
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.current_timeframe' do
|
15
|
+
it "returns the current_timeframe" do
|
16
|
+
expect(@subject.current_timeframe.level).to eql(1)
|
17
|
+
# expect(@subject.current_timeframe.timerange).to eql((1200..1600))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/opened_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("November 02 2014, 14:30").iso8601)
|
7
|
+
from = Time.zone.parse("November 02 2014, 00:00").iso8601
|
8
|
+
to = Time.zone.parse("November 02 2014, 23:59").iso8601
|
9
|
+
@subject = TurbaChronos.load(opened.periods, from, to)
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:all) do
|
13
|
+
Timecop.return
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.days' do
|
17
|
+
it "returns the days" do
|
18
|
+
expect(@subject.days.count).to eql(1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require_relative '../fixtures/base_fixture'
|
3
|
+
|
4
|
+
describe TurbaChronos::Timeline do
|
5
|
+
before(:all) do
|
6
|
+
Timecop.freeze(Time.zone.parse("July 30 2014, 16:15").iso8601)
|
7
|
+
@subject = TurbaChronos.load(base.periods, Time.now.utc.iso8601, (Time.now.utc + 3.days).iso8601)
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
Timecop.return
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.business_timeranges' do
|
15
|
+
it "returns the business hours timeranges for days" do
|
16
|
+
expect(@subject.business_timeranges).to eql([["08:00", "10:00"], ["10:00", "17:00"]])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.timeranges_for_days' do
|
21
|
+
it "returns the timeranges for days" do
|
22
|
+
expect(@subject.timeranges_for_days[:timeranges].to_s).to eql("[0..800, 800..1000, 1000..1700, 1700..2359]")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.current_day' do
|
27
|
+
it "returns the current day" do
|
28
|
+
day = @subject.current_day
|
29
|
+
expect(day.beginning_of_day.to_s).to eql("2014-07-30")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.current_timeframe' do
|
34
|
+
it "returns the current timeframe" do
|
35
|
+
# expect(@subject.current_timeframe.timerange).to eql((1000..1700))
|
36
|
+
expect(@subject.current_timeframe.level).to eql(1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '.opened?' do
|
41
|
+
it "returns if it's opened" do
|
42
|
+
expect(@subject.opened?).to eql(true)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '.reopen' do
|
47
|
+
it "returns next opened timeframe" do
|
48
|
+
expect(@subject.reopen.date.to_s).to eql("2014-07-31")
|
49
|
+
expect(@subject.reopen.timeframe.timerange.to_s).to eql("800..1000")
|
50
|
+
expect(@subject.reopen.timeframe.level).to eql(1)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.next' do
|
55
|
+
it "returns the three next timeframes" do
|
56
|
+
next_timeframes = @subject.next
|
57
|
+
expect(next_timeframes[0].date.to_s).to eql("2014-07-31")
|
58
|
+
expect(next_timeframes[0].timeframe.timerange.to_s).to eql("800..1000")
|
59
|
+
expect(next_timeframes[0].timeframe.level).to eql(1)
|
60
|
+
|
61
|
+
expect(next_timeframes[1].date.to_s).to eql("2014-07-31")
|
62
|
+
expect(next_timeframes[1].timeframe.timerange.to_s).to eql("1000..1700")
|
63
|
+
expect(next_timeframes[1].timeframe.level).to eql(1)
|
64
|
+
|
65
|
+
expect(next_timeframes[2].date.to_s).to eql("2014-08-01")
|
66
|
+
expect(next_timeframes[2].timeframe.timerange.to_s).to eql("800..1000")
|
67
|
+
expect(next_timeframes[2].timeframe.level).to eql(2)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
def base_fixture
|
2
|
+
crowd = OpenStruct.new
|
3
|
+
crowd.periods = [
|
4
|
+
{
|
5
|
+
dates: '01/01:31/12',
|
6
|
+
rules: [
|
7
|
+
['08:00', '10:00', 1, 2, 1, 1, 6, 6, 6],
|
8
|
+
['10:00', '17:00', 1, 1, 1, 1, 6, 6, 6]
|
9
|
+
]
|
10
|
+
},
|
11
|
+
{
|
12
|
+
dates: '18/05,19/05:20/05,21/05:21/05',
|
13
|
+
rules: [
|
14
|
+
['06:00', '15:00', 3, 3, 3, 3, 3, 3, 3]
|
15
|
+
]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
dates: '01/05,25/08:28/08',
|
19
|
+
rules: [
|
20
|
+
['08:00', '10:00', 6, 6, 6, 6, 6, 6, 6]
|
21
|
+
]
|
22
|
+
},
|
23
|
+
{
|
24
|
+
dates: 'august,vacances_toussaint,vacances_noel',
|
25
|
+
rules: [
|
26
|
+
['08:00', '10:00', 2, 2, 2, 2, 2, 2, 2]
|
27
|
+
]
|
28
|
+
}
|
29
|
+
]
|
30
|
+
crowd
|
31
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'fixtures/base_fixture'
|
3
|
+
|
4
|
+
class TestPeriods < Minitest::Test
|
5
|
+
|
6
|
+
def setup
|
7
|
+
Time.zone = "Europe/Paris"
|
8
|
+
new_time = Time.zone.local(2015, 6, 8, 12, 25, 0)
|
9
|
+
Timecop.freeze(new_time)
|
10
|
+
@periods = TurbaChronos::Periods.new(base_fixture.periods)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_raw_periods
|
14
|
+
assert_equal @periods.raw_periods.count, 10
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'fixtures/base_fixture'
|
3
|
+
|
4
|
+
if ENV['BENCH']
|
5
|
+
require 'minitest/benchmark'
|
6
|
+
|
7
|
+
class TestPeriodConverterBench < Minitest::Benchmark
|
8
|
+
def bench_parser
|
9
|
+
Time.zone = "Europe/Paris"
|
10
|
+
assert_performance_constant 0.9999 do |n|
|
11
|
+
period = TurbaChronos::PeriodConverter.new('25/08:28/08')
|
12
|
+
period.parse
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class TestPeriodConverter < Minitest::Test
|
19
|
+
def setup
|
20
|
+
Time.zone = "Europe/Paris"
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_two_dates
|
24
|
+
period = TurbaChronos::PeriodConverter.new('25/08:28/08')
|
25
|
+
assert_equal period.parse.first.from.day, 25
|
26
|
+
assert_equal period.parse.first.from.month, 8
|
27
|
+
assert_equal period.parse.first.to.day, 28
|
28
|
+
assert_equal period.parse.first.to.month, 8
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_one_date
|
32
|
+
period = TurbaChronos::PeriodConverter.new('25/08')
|
33
|
+
assert_equal period.parse.first.from.day, 25
|
34
|
+
assert_equal period.parse.first.from.month, 8
|
35
|
+
assert_equal period.parse.first.to.day, 25
|
36
|
+
assert_equal period.parse.first.to.month, 8
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_one_month
|
40
|
+
period = TurbaChronos::PeriodConverter.new('august')
|
41
|
+
assert_equal period.parse.first.from.day, 1
|
42
|
+
assert_equal period.parse.first.from.month, 8
|
43
|
+
assert_equal period.parse.first.to.day, 31
|
44
|
+
assert_equal period.parse.first.to.month, 8
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_two_months
|
48
|
+
period = TurbaChronos::PeriodConverter.new('august-october')
|
49
|
+
assert_equal period.parse.first.from.day, 1
|
50
|
+
assert_equal period.parse.first.from.month, 8
|
51
|
+
assert_equal period.parse.first.to.day, 31
|
52
|
+
assert_equal period.parse.first.to.month, 10
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_stored_dates
|
56
|
+
period = TurbaChronos::PeriodConverter.new('ponts_mai')
|
57
|
+
assert_equal period.parse.first.from.day, 1
|
58
|
+
assert_equal period.parse.first.from.month, 5
|
59
|
+
assert_equal period.parse.first.to.day, 3
|
60
|
+
assert_equal period.parse.first.to.month, 5
|
61
|
+
end
|
62
|
+
end
|
data/test/test_rule.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestRule < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@rule = TurbaChronos::Rule.new(['06:00', '15:00', 1, 3, 3, 3, 3, 3, 6])
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_min
|
9
|
+
assert_equal @rule.min, 600
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_max
|
13
|
+
assert_equal @rule.max, 1500
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_start_time
|
17
|
+
assert_equal @rule.start_time.text, "06:00"
|
18
|
+
assert_equal @rule.start_time.integer, 600
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_end_time
|
22
|
+
assert_equal @rule.end_time.text, "15:00"
|
23
|
+
assert_equal @rule.end_time.integer, 1500
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_range
|
27
|
+
assert_equal @rule.range, 600..1500
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_wdays
|
31
|
+
assert_equal @rule.wdays, [1, 3, 3, 3, 3, 3, 6]
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'fixtures/base_fixture'
|
3
|
+
|
4
|
+
class TestTimeline < Minitest::Test
|
5
|
+
def setup
|
6
|
+
Time.zone = "Europe/Paris"
|
7
|
+
new_time = Time.zone.local(2015, 6, 8, 12, 25, 0)
|
8
|
+
Timecop.freeze(new_time)
|
9
|
+
|
10
|
+
from = Time.zone.parse("June 08 2015, 00:00").iso8601
|
11
|
+
to = Time.zone.parse("June 14 2015, 23:59").iso8601
|
12
|
+
TurbaChronos.current_numeric_time = Time.now.utc.strftime("%k%M").to_i
|
13
|
+
@timeline = TurbaChronos::Timeline.new(base_fixture.periods, Time.zone.parse(from), Time.zone.parse(to))
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_current_timeframe
|
17
|
+
assert_equal @timeline.current_timeframe.timerange, (1000..1700)
|
18
|
+
assert_equal @timeline.current_timeframe.level, 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_timeranges_for_days
|
22
|
+
assert_equal @timeline.timeranges_for_days[:timeranges], [0..800, 800..1000, 1000..1700, 1700..2359]
|
23
|
+
assert_equal @timeline.timeranges_for_days[:business_timeranges], [800..1000, 1000..1700]
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def test_opened?
|
28
|
+
assert_equal @timeline.opened?, true
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def test_days
|
33
|
+
assert_equal @timeline.days.count, 7
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_next
|
37
|
+
assert_equal @timeline.next.first.timeframe.level, 2
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_levels
|
41
|
+
assert_equal @timeline.levels, [1, 2, 6]
|
42
|
+
end
|
43
|
+
|
44
|
+
# def test_current_level
|
45
|
+
# assert_equal @table.current_level, 5
|
46
|
+
# end
|
47
|
+
|
48
|
+
def teardown
|
49
|
+
Timecop.return
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'turba_chronos/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "turba_chronos"
|
8
|
+
spec.version = TurbaChronos::VERSION.dup
|
9
|
+
spec.authors = ["Joffrey JAFFEUX"]
|
10
|
+
spec.email = ["j.jaffeux@gmail.com"]
|
11
|
+
spec.description = %q{Turba Chronos : converts raw periods to full year crowd table}
|
12
|
+
spec.summary = %q{Used in leonard}
|
13
|
+
spec.homepage = "https://github.com/turba-webservices/turba_chronos"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "timecop"
|
24
|
+
spec.add_development_dependency "rspec"
|
25
|
+
spec.add_development_dependency "rspec-mocks"
|
26
|
+
spec.add_development_dependency "guard-rspec"
|
27
|
+
spec.add_development_dependency "minitest"
|
28
|
+
spec.add_development_dependency "minitest-reporters"
|
29
|
+
spec.add_dependency "activesupport"
|
30
|
+
end
|