rails-scheduler 0.0.2 → 0.0.3
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/.gitignore +1 -1
- data/app/assets/javascripts/scheduler.js +14 -2
- data/app/helpers/scheduler_helper.rb +25 -0
- data/app/views/scheduler/_form.html.erb +9 -5
- data/config/locales/es.yml +6 -0
- data/db/migrate/20111204155637_add_scheduler.rb +1 -0
- data/lib/scheduler.rb +1 -8
- data/lib/scheduler/model.rb +43 -9
- data/lib/scheduler/version.rb +1 -1
- metadata +13 -12
data/.gitignore
CHANGED
@@ -14,9 +14,18 @@ Scheduler.form.init = function(form, startDate) {
|
|
14
14
|
});
|
15
15
|
|
16
16
|
if (startDate) {
|
17
|
+
var weekDay = (startDate.getDay() + 6) % 7; // monday is 0 in Rails
|
18
|
+
var weekDayOrder = Math.floor((startDate.getDate() - startDate.getDay() + 6) / 7);
|
19
|
+
if (weekDayOrder > 3) {
|
20
|
+
weekDayOrder = -1;
|
21
|
+
}
|
22
|
+
|
17
23
|
// check day of week
|
18
|
-
|
19
|
-
|
24
|
+
form.find('#event_week_days_' + weekDay).attr('checked','checked');
|
25
|
+
|
26
|
+
// init day of month
|
27
|
+
form.find('#event_week_day_order').val(weekDayOrder);
|
28
|
+
form.find('#event_week_day').val(weekDay);
|
20
29
|
}
|
21
30
|
}
|
22
31
|
|
@@ -24,5 +33,8 @@ Scheduler.form.showFrequency = function(value) {
|
|
24
33
|
form = Scheduler.form.current;
|
25
34
|
|
26
35
|
form.find("#scheduler-options").children("div").hide();
|
36
|
+
form.find("#scheduler-options").find("select,input").attr('disabled', 'disabled');
|
37
|
+
|
27
38
|
form.find("#scheduler-frequency-" + value ).show();
|
39
|
+
form.find("#scheduler-frequency-" + value ).find("select,input").removeAttr('disabled');
|
28
40
|
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module SchedulerHelper
|
2
|
+
def frequency_options
|
3
|
+
Scheduler::FREQUENCIES.each_with_index.map{ |value, index|
|
4
|
+
[ I18n.t("scheduler.frequency.#{ value }.form.option"), index ]
|
5
|
+
}
|
6
|
+
end
|
7
|
+
|
8
|
+
def week_day_order_options
|
9
|
+
[1, 2, 3, -1 ].map do |d|
|
10
|
+
[
|
11
|
+
t("scheduler.frequency.monthly.form.week_day_order_option.#{ d }"),
|
12
|
+
d
|
13
|
+
]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def week_day_options
|
18
|
+
7.times.map do |d|
|
19
|
+
[
|
20
|
+
l(Date.today.beginning_of_week + d, :format => "%A"),
|
21
|
+
d
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="scheduler_form">
|
2
2
|
<%= f.label :frequency %>
|
3
|
-
<%= f.select :frequency,
|
3
|
+
<%= f.select :frequency, frequency_options, {}, :class => 'scheduler-frequency' %>
|
4
4
|
|
5
5
|
<div id="scheduler-options">
|
6
6
|
<div id="scheduler-frequency-0">
|
@@ -19,16 +19,20 @@
|
|
19
19
|
|
20
20
|
<div id="scheduler-weekly-days">
|
21
21
|
<% 7.times do |d| %>
|
22
|
-
<%= check_box_tag "#{ f.object_name }[
|
22
|
+
<%= check_box_tag "#{ f.object_name }[week_days][]",
|
23
23
|
d,
|
24
|
-
f.object.
|
25
|
-
:id => "
|
24
|
+
f.object.week_days.include?(d),
|
25
|
+
:id => "event_week_days_#{ d }" %>
|
26
26
|
<span><%= I18n.l Date.today.beginning_of_week + d, :format => "%a" %></span>
|
27
27
|
<% end %>
|
28
28
|
</div>
|
29
29
|
</div>
|
30
30
|
|
31
31
|
<div id="scheduler-frequency-3">
|
32
|
-
|
32
|
+
<%= raw t('scheduler.frequency.monthly.form.week_day',
|
33
|
+
:order_field => f.select(:week_day_order, week_day_order_options),
|
34
|
+
:week_field => f.select(:week_day, week_day_options),
|
35
|
+
:interval_field => f.number_field(:interval, :size => 1))
|
36
|
+
%>
|
33
37
|
</div>
|
34
38
|
</div>
|
data/config/locales/es.yml
CHANGED
data/lib/scheduler.rb
CHANGED
@@ -1,11 +1,4 @@
|
|
1
1
|
module Scheduler
|
2
2
|
FREQUENCIES = [ :one_off, :daily, :weekly, :monthly ]
|
3
|
-
|
4
|
-
class << self
|
5
|
-
def frequency_options
|
6
|
-
FREQUENCIES.each_with_index.map{ |value, index|
|
7
|
-
[ I18n.t("scheduler.frequency.#{ value }.form.option"), index ]
|
8
|
-
}
|
9
|
-
end
|
10
|
-
end
|
3
|
+
ORDER = [ :first, :second, :third, :last ]
|
11
4
|
end
|
data/lib/scheduler/model.rb
CHANGED
@@ -12,7 +12,7 @@ module Scheduler
|
|
12
12
|
[ :weekly ].include? record.frequency_sym
|
13
13
|
}
|
14
14
|
|
15
|
-
validates_numericality_of :
|
15
|
+
validates_numericality_of :days,
|
16
16
|
:greater_than => 0,
|
17
17
|
:if => lambda { |record|
|
18
18
|
[ :weekly ].include? record.frequency_sym
|
@@ -30,24 +30,51 @@ module Scheduler
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Get [ 0, 1, 6 ] (monday, tuesday, sunday) from byte
|
33
|
-
def
|
33
|
+
def week_days
|
34
34
|
7.times.map{ |i|
|
35
|
-
|
35
|
+
days[i] > 0 ?
|
36
36
|
i :
|
37
37
|
nil
|
38
38
|
}.compact
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
|
41
|
+
def week_day
|
42
|
+
week_days.first
|
43
|
+
end
|
44
|
+
|
45
|
+
def week_days_sym
|
46
|
+
week_days.map{ |d|
|
43
47
|
Date::DAYS_INTO_WEEK.invert[d]
|
44
48
|
}
|
45
49
|
end
|
46
50
|
|
51
|
+
def week_day_sym
|
52
|
+
week_days_sym.first
|
53
|
+
end
|
54
|
+
|
47
55
|
# Convert [ 0, 1, 6 ] (monday, tuesday, sunday) to byte
|
48
|
-
def
|
49
|
-
self.
|
50
|
-
|
56
|
+
def week_days= ds
|
57
|
+
self.days =
|
58
|
+
ds.map{ |d| 2 ** d.to_i }.inject(0, &:+)
|
59
|
+
end
|
60
|
+
|
61
|
+
def week_day= day
|
62
|
+
self.week_days = Array.wrap(day)
|
63
|
+
end
|
64
|
+
|
65
|
+
def week_day_order
|
66
|
+
interval_flag
|
67
|
+
end
|
68
|
+
|
69
|
+
def week_day_order_sym
|
70
|
+
index = interval_flag
|
71
|
+
index -= 1 if index > 0
|
72
|
+
|
73
|
+
Scheduler::ORDER[index]
|
74
|
+
end
|
75
|
+
|
76
|
+
def week_day_order= order
|
77
|
+
self.interval_flag = order
|
51
78
|
end
|
52
79
|
|
53
80
|
def recurrence
|
@@ -57,7 +84,14 @@ module Scheduler
|
|
57
84
|
:starts => start_date.to_date,
|
58
85
|
:until => end_date.try(:to_date),
|
59
86
|
:interval => interval,
|
60
|
-
:on =>
|
87
|
+
:on => week_days_sym })
|
88
|
+
when :monthly
|
89
|
+
Recurrence.new({ :every => :month,
|
90
|
+
:starts => start_date.to_date,
|
91
|
+
:until => end_date.try(:to_date),
|
92
|
+
:interval => interval,
|
93
|
+
:on => week_day_order_sym,
|
94
|
+
:weekday => week_day_sym })
|
61
95
|
end
|
62
96
|
end
|
63
97
|
|
data/lib/scheduler/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &68372130 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *68372130
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: recurrence
|
27
|
-
requirement: &
|
27
|
+
requirement: &68371640 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.2.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *68371640
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mysql2
|
38
|
-
requirement: &
|
38
|
+
requirement: &68371310 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *68371310
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: factory_girl
|
49
|
-
requirement: &
|
49
|
+
requirement: &68370910 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *68370910
|
58
58
|
description: ! 'Scheduler support: daily, weekly and montly repetitions'
|
59
59
|
email:
|
60
60
|
- atapiador@dit.upm.es
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- README.rdoc
|
70
70
|
- Rakefile
|
71
71
|
- app/assets/javascripts/scheduler.js
|
72
|
+
- app/helpers/scheduler_helper.rb
|
72
73
|
- app/views/scheduler/_form.html.erb
|
73
74
|
- config/locales/es.yml
|
74
75
|
- db/migrate/20111204155637_add_scheduler.rb
|
@@ -133,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
134
|
version: '0'
|
134
135
|
segments:
|
135
136
|
- 0
|
136
|
-
hash:
|
137
|
+
hash: 530319471
|
137
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
139
|
none: false
|
139
140
|
requirements:
|
@@ -142,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
143
|
version: '0'
|
143
144
|
segments:
|
144
145
|
- 0
|
145
|
-
hash:
|
146
|
+
hash: 530319471
|
146
147
|
requirements: []
|
147
148
|
rubyforge_project:
|
148
149
|
rubygems_version: 1.8.10
|