acts_as_working_days 0.0.4 → 0.0.6
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.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:
|