acts_as_working_days 0.0.4 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +73 -25
- data/acts_as_working_days-0.0.4.gem +0 -0
- data/acts_as_working_days-0.0.5.gem +0 -0
- data/acts_as_working_days.gemspec +4 -3
- data/app/models/working_day.rb +27 -0
- data/generators/acts_as_working_days_migration/templates/migration.rb +4 -4
- data/lib/acts_as_working_days.rb +22 -12
- data/lib/generators/acts_as_working_days/migration/templates/active_record/migration.rb +4 -4
- data/test/acts_as_working_days_test.rb +52 -37
- data/test/working_day_test.rb +15 -0
- metadata +8 -5
data/README.rdoc
CHANGED
@@ -4,33 +4,81 @@ acts_as_working_days is a Rails plugin to add working days on models
|
|
4
4
|
|
5
5
|
== Usage
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
acts_as_working_days
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
#Sample test code
|
14
|
-
def test_working_day
|
15
|
-
|
16
|
-
kwik_e_mart = Company.new(:name => 'Kwik-E-Mart')
|
17
|
-
|
18
|
-
#1 is Monday - Apu Kwik-E-Mart is only opened on Mondays, start 8h30, end 18h45
|
19
|
-
kwik_e_mart.put_working_day(:week_day => 1, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
7
|
+
#app/models/company.rb
|
8
|
+
class Company < ActiveRecord::Base
|
20
9
|
|
21
|
-
|
22
|
-
kwik_e_mart.save
|
10
|
+
acts_as_working_days
|
23
11
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
12
|
+
end
|
13
|
+
|
14
|
+
#Sample test code
|
15
|
+
def test_working_day
|
16
|
+
|
17
|
+
kwik_e_mart = Company.new(:name => 'Kwik-E-Mart')
|
18
|
+
|
19
|
+
#1 is Monday, Apu Kwik-E-Mart is only opened on Mondays, start 8h30, end 18h45
|
20
|
+
kwik_e_mart.working_days.build(:week_day => 1, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
21
|
+
|
22
|
+
#Save model and working day
|
23
|
+
kwik_e_mart.save
|
24
|
+
|
25
|
+
#0 is Sunday, 12h45 is closed
|
26
|
+
assert_equal false, kwik_e_mart.working_day?(:week_day => 0, :hour => 12, :min => 0)
|
27
|
+
|
28
|
+
#1 is Monday, 21h00 is closed
|
29
|
+
assert_equal false, kwik_e_mart.working_day?(:week_day => 1, :hour => 21)
|
30
|
+
|
31
|
+
#1 is Monday, 12h15 is opened
|
32
|
+
assert_equal true, kwik_e_mart.working_day?(:week_day => 1, :hour => 12, :min => 15)
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
#app/views/company/new.html.erb
|
37
|
+
<% form_for @company do |f| %>
|
38
|
+
<%= f.error_messages %>
|
39
|
+
<h2>Company fields</h2>
|
40
|
+
<p>
|
41
|
+
<%= f.label :name, 'Company name' %><br/>
|
42
|
+
<%= f.text_field :name %>
|
43
|
+
</p>
|
44
|
+
<h2>Workings days</h2>
|
45
|
+
<table id="table-working-days">
|
46
|
+
<thead>
|
47
|
+
<tr>
|
48
|
+
<th>Day</th>
|
49
|
+
<th>Open</th>
|
50
|
+
<th>Close</th>
|
51
|
+
</tr>
|
52
|
+
</thead>
|
53
|
+
<tbody>
|
54
|
+
<% f.fields_for :working_days, @address.working_days_defaults do | working_day_form | %>
|
55
|
+
<tr>
|
56
|
+
<!-- I18n week_day.day_0...day_6, Sunday..Saturday -->
|
57
|
+
<td><%= t "week_day.day_#{working_day_form.object.week_day}" %></td>
|
58
|
+
<td>
|
59
|
+
<%= working_day_form.hidden_field :week_day %>
|
60
|
+
<%= working_day_form.select :start_hour, 0..23, {}, {:class => 'select'} %>
|
61
|
+
<%= working_day_form.select :start_min, 0..59, {}, {:class => 'select'} %>
|
62
|
+
</td>
|
63
|
+
<td>
|
64
|
+
<%= working_day_form.select :end_hour, 0..23, {}, {:class => 'select'} %>
|
65
|
+
<%= working_day_form.select :end_min, 0..59, {}, {:class => 'select'} %>
|
66
|
+
</td>
|
67
|
+
</tr>
|
68
|
+
<% end %>
|
69
|
+
</tbody>
|
70
|
+
<table>
|
71
|
+
<% end %>
|
72
|
+
|
73
|
+
#config/locales/en.yml
|
74
|
+
week_day:
|
75
|
+
day_0: Sunday
|
76
|
+
day_1: Monday
|
77
|
+
day_2: Tuesday
|
78
|
+
day_3: Wednesday
|
79
|
+
day_4: Thursday
|
80
|
+
day_5: Friday
|
81
|
+
day_6: Saturday
|
34
82
|
|
35
83
|
|
36
84
|
== Installation
|
Binary file
|
Binary file
|
@@ -9,15 +9,16 @@ PKG_FILES = FileList[
|
|
9
9
|
'lib/**/*',
|
10
10
|
'rails/**/*',
|
11
11
|
'tasks/**/*',
|
12
|
-
'test/**/*'
|
12
|
+
'test/**/*',
|
13
|
+
'app/**/*'
|
13
14
|
]
|
14
15
|
|
15
16
|
spec = Gem::Specification.new do |s|
|
16
17
|
s.name = "acts_as_working_days"
|
17
|
-
s.version = "0.0.
|
18
|
+
s.version = "0.0.6"
|
18
19
|
s.author = "Pablo Cantero"
|
19
20
|
s.email = "pablo@pablocantero.com"
|
20
|
-
s.homepage = "
|
21
|
+
s.homepage = "https://github.com/phstc/acts_as_working_days"
|
21
22
|
s.platform = Gem::Platform::RUBY
|
22
23
|
s.summary = "acts_as_working_days is a Rails plugin to add working days on models"
|
23
24
|
s.files = PKG_FILES.to_a
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class WorkingDay < ActiveRecord::Base
|
2
|
+
|
3
|
+
validates_inclusion_of :week_day, :in => 0..6
|
4
|
+
validates_inclusion_of :start_hour, :in => 0..23
|
5
|
+
validates_inclusion_of :start_min, :in => 0..59
|
6
|
+
validates_inclusion_of :end_hour, :in => 0..23
|
7
|
+
validates_inclusion_of :end_min, :in => 0..59
|
8
|
+
|
9
|
+
validate :end_bigger_than_start
|
10
|
+
|
11
|
+
belongs_to :workable, :polymorphic => true
|
12
|
+
|
13
|
+
validates_associated :workable
|
14
|
+
|
15
|
+
validates_uniqueness_of :week_day, :scope => [:workable_id, :workable_type]
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def end_bigger_than_start
|
20
|
+
if end_hour < start_hour
|
21
|
+
errors.add :end_hour, "can't be lower than start_hour"
|
22
|
+
elsif end_hour == start_hour && end_min < start_min
|
23
|
+
errors.add :end_min, "can't be lower than start_min"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -4,10 +4,10 @@ class ActsAsWorkingDaysMigration < ActiveRecord::Migration
|
|
4
4
|
create_table :working_days, :force => true do |t|
|
5
5
|
#Date time columns
|
6
6
|
t.integer :week_day
|
7
|
-
t.integer :start_hour
|
8
|
-
t.integer :start_min
|
9
|
-
t.integer :end_hour
|
10
|
-
t.integer :end_min
|
7
|
+
t.integer :start_hour, :default => 0
|
8
|
+
t.integer :start_min, :default => 0
|
9
|
+
t.integer :end_hour, :default => 23
|
10
|
+
t.integer :end_min, :default => 59
|
11
11
|
#Polymorphic columns
|
12
12
|
t.integer :workable_id
|
13
13
|
t.string :workable_type
|
data/lib/acts_as_working_days.rb
CHANGED
@@ -8,6 +8,7 @@ module ActsAsWorkingDays
|
|
8
8
|
def acts_as_working_days
|
9
9
|
# adding relationship to self class
|
10
10
|
has_many :working_days, :as => :workable
|
11
|
+
accepts_nested_attributes_for :working_days, :allow_destroy => true
|
11
12
|
send :include, InstanceMethods
|
12
13
|
end
|
13
14
|
end
|
@@ -28,20 +29,29 @@ module ActsAsWorkingDays
|
|
28
29
|
return !result.empty?
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
working_day = wd
|
36
|
-
break
|
37
|
-
end
|
38
|
-
end
|
39
|
-
if working_day.nil?
|
40
|
-
working_days.build(params)
|
41
|
-
else
|
42
|
-
working_day.update_attributes(params)
|
32
|
+
def working_days_defaults
|
33
|
+
defaults = []
|
34
|
+
7.times do | wday |
|
35
|
+
defaults << (working_days.find_by_week_day(wday, :order => 'week_day ASC') || WorkingDay.new(:week_day => wday))
|
43
36
|
end
|
37
|
+
return defaults
|
44
38
|
end
|
39
|
+
|
40
|
+
# def put_working_day(params = {:week_day => Time.now.wday, :start_hour => 0, :start_min => 0, :end_hour => 23, :end_min => 59})
|
41
|
+
# working_day = nil
|
42
|
+
# working_days.each do | wd |
|
43
|
+
# if wd.week_day == params[:week_day]
|
44
|
+
# working_day = wd
|
45
|
+
# break
|
46
|
+
# end
|
47
|
+
# end
|
48
|
+
# if working_day.nil?
|
49
|
+
# working_days.build(params)
|
50
|
+
# else
|
51
|
+
# working_day.update_attributes(params)
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
@@ -4,10 +4,10 @@ class ActsAsWorkingDaysMigration < ActiveRecord::Migration
|
|
4
4
|
create_table :working_days, :force => true do |t|
|
5
5
|
#Date time columns
|
6
6
|
t.integer :week_day
|
7
|
-
t.integer :start_hour
|
8
|
-
t.integer :start_min
|
9
|
-
t.integer :end_hour
|
10
|
-
t.integer :end_min
|
7
|
+
t.integer :start_hour, :default => 0
|
8
|
+
t.integer :start_min, :default => 0
|
9
|
+
t.integer :end_hour, :default => 23
|
10
|
+
t.integer :end_min, :default => 59
|
11
11
|
#Polymorphic columns
|
12
12
|
t.integer :workable_id
|
13
13
|
t.string :workable_type
|
@@ -18,55 +18,70 @@ class ActsAsWorkingDaysTest < Test::Unit::TestCase
|
|
18
18
|
assert_equal [], Company.all
|
19
19
|
end
|
20
20
|
|
21
|
-
def test_put_working_day
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
21
|
+
# def test_put_working_day
|
22
|
+
# the_leftorium = Company.new(:name => 'The Leftorium')
|
23
|
+
# assert_equal [], the_leftorium.working_days
|
24
|
+
# working_day = the_leftorium.put_working_day(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
25
|
+
# the_leftorium.save
|
26
|
+
# assert_equal [working_day], the_leftorium.working_days
|
27
|
+
# assert_equal 0, working_day.week_day
|
28
|
+
# assert_equal 8, working_day.start_hour
|
29
|
+
# assert_equal 30, working_day.start_min
|
30
|
+
# assert_equal 18, working_day.end_hour
|
31
|
+
# assert_equal 45, working_day.end_min
|
32
|
+
# end
|
33
33
|
|
34
|
-
def test_put_updating_a_working_day
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
34
|
+
# def test_put_updating_a_working_day
|
35
|
+
# moes_tavern = Company.new(:name => 'Moes Tavern')
|
36
|
+
# working_day = moes_tavern.put_working_day(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
37
|
+
# moes_tavern.save
|
38
|
+
# #Updating working day
|
39
|
+
# moes_tavern.put_working_day(:week_day => 0, :start_hour => 10, :start_min => 13, :end_hour => 19, :end_min => 23)
|
40
|
+
# moes_tavern.save
|
41
|
+
# working_day = moes_tavern.working_days.first
|
42
|
+
# assert_equal 0, working_day.week_day
|
43
|
+
# assert_equal 10, working_day.start_hour
|
44
|
+
# assert_equal 13, working_day.start_min
|
45
|
+
# assert_equal 19, working_day.end_hour
|
46
|
+
# assert_equal 23, working_day.end_min
|
47
|
+
# end
|
48
48
|
|
49
49
|
def test_true_working_day
|
50
50
|
moes_tavern = Company.new(:name => 'Moes Tavern')
|
51
|
-
moes_tavern.put_working_day(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
51
|
+
#moes_tavern.put_working_day(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
52
|
+
moes_tavern.working_days.build(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
52
53
|
moes_tavern.save
|
53
54
|
assert_equal true, moes_tavern.working_day?(:week_day => 0, :hour => 12, :minute => 0)
|
54
55
|
end
|
55
56
|
|
56
|
-
def test_uniqueness_week_day_per_model
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
57
|
+
# def test_uniqueness_week_day_per_model
|
58
|
+
# nuclear_power_plant = Company.new(:name => 'Springfield Nuclear Power Plant')
|
59
|
+
# working_day = nuclear_power_plant.put_working_day(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
60
|
+
# nuclear_power_plant.put_working_day(:week_day => 0, :start_hour => 9, :start_min => 15, :end_hour => 19, :end_min => 30)
|
61
|
+
# nuclear_power_plant.save
|
62
|
+
# assert_equal [working_day], nuclear_power_plant.working_days
|
63
|
+
# nuclear_power_plant.put_working_day(:week_day => 0, :start_hour => 6, :start_min => 0, :end_hour => 16, :end_min => 15)
|
64
|
+
# nuclear_power_plant.save
|
65
|
+
# assert_equal [working_day], nuclear_power_plant.working_days
|
66
|
+
# end
|
67
|
+
|
68
|
+
def test_working_days_defaults
|
69
|
+
kwik_e_mart = Company.new(:name => 'Kwik-E-Mart')
|
70
|
+
assert_equal 7, kwik_e_mart.working_days_defaults.size
|
71
|
+
assert_equal nil, kwik_e_mart.working_days_defaults.first.id
|
72
|
+
#working_day = kwik_e_mart.put_working_day(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
73
|
+
working_day = kwik_e_mart.working_days.build(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
74
|
+
kwik_e_mart.save
|
75
|
+
assert_equal working_day, kwik_e_mart.working_days_defaults.first
|
76
|
+
7.times do | wday |
|
77
|
+
assert_equal wday, kwik_e_mart.working_days_defaults[wday].week_day
|
78
|
+
end
|
65
79
|
end
|
66
80
|
|
67
81
|
def test_false_working_day
|
68
82
|
kwik_e_mart = Company.new(:name => 'Kwik-E-Mart')
|
69
|
-
kwik_e_mart.put_working_day(:week_day => 1, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
83
|
+
#kwik_e_mart.put_working_day(:week_day => 1, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
84
|
+
kwik_e_mart.working_days.build(:week_day => 1, :start_hour => 8, :start_min => 30, :end_hour => 18, :end_min => 45)
|
70
85
|
kwik_e_mart.save
|
71
86
|
assert_equal false, kwik_e_mart.working_day?(:week_day => 0, :hour => 12, :min => 0)
|
72
87
|
assert_equal false, kwik_e_mart.working_day?(:week_day => 1, :hour => 21)
|
data/test/working_day_test.rb
CHANGED
@@ -6,4 +6,19 @@ class WorkingDayTest < Test::Unit::TestCase
|
|
6
6
|
def test_working_day
|
7
7
|
assert_kind_of WorkingDay, WorkingDay.new
|
8
8
|
end
|
9
|
+
|
10
|
+
def test_end_hour_lower_than_start_hour
|
11
|
+
working_day = WorkingDay.new(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 7, :end_min => 45)
|
12
|
+
assert !working_day.valid?
|
13
|
+
working_day.end_hour = 10
|
14
|
+
assert working_day.valid?
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_end_min_lower_than_start_min
|
18
|
+
working_day = WorkingDay.new(:week_day => 0, :start_hour => 8, :start_min => 30, :end_hour => 8, :end_min => 15)
|
19
|
+
assert !working_day.valid?
|
20
|
+
working_day.end_min = 45
|
21
|
+
assert working_day.valid?
|
22
|
+
end
|
23
|
+
|
9
24
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_working_days
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Pablo Cantero
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-20 00:00:00 -02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -30,6 +30,8 @@ extra_rdoc_files:
|
|
30
30
|
files:
|
31
31
|
- acts_as_working_days-0.0.1.gem
|
32
32
|
- acts_as_working_days-0.0.3.gem
|
33
|
+
- acts_as_working_days-0.0.4.gem
|
34
|
+
- acts_as_working_days-0.0.5.gem
|
33
35
|
- acts_as_working_days.gemspec
|
34
36
|
- init.rb
|
35
37
|
- install.rb
|
@@ -49,8 +51,9 @@ files:
|
|
49
51
|
- test/schema.rb
|
50
52
|
- test/test_helper.rb
|
51
53
|
- test/working_day_test.rb
|
54
|
+
- app/models/working_day.rb
|
52
55
|
has_rdoc: true
|
53
|
-
homepage:
|
56
|
+
homepage: https://github.com/phstc/acts_as_working_days
|
54
57
|
licenses: []
|
55
58
|
|
56
59
|
post_install_message:
|