schedulable 0.0.7 → 0.0.8
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 +4 -4
- data/README.md +174 -42
- data/Rakefile +3 -0
- data/config/locales/de.yml +29 -0
- data/{lib/generators/schedulable/templates/locale/schedulable.en.yml → config/locales/en.yml} +2 -2
- data/lib/generators/schedulable/locale_generator.rb +1 -1
- data/lib/generators/schedulable/templates/config/schedulable.rb +5 -2
- data/lib/generators/schedulable/templates/inputs/schedule_input.rb +81 -51
- data/lib/generators/schedulable/templates/migrations/create_schedules.rb +2 -2
- data/lib/generators/schedulable/templates/models/schedule.rb +1 -12
- data/lib/locales/en.yml +29 -0
- data/lib/{generators/schedulable/templates/locale → locales}/schedulable.de.yml +0 -0
- data/lib/schedulable.rb +7 -5
- data/lib/schedulable/acts_as_schedulable.rb +66 -59
- data/lib/schedulable/form_helper.rb +228 -0
- data/lib/schedulable/railtie.rb +21 -0
- data/lib/schedulable/schedule.rb +115 -0
- data/lib/schedulable/schedule_support.rb +1 -60
- data/lib/schedulable/version.rb +1 -1
- data/lib/tasks/schedulable_tasks.rake +1 -1
- metadata +8 -4
data/lib/schedulable/railtie.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'rails'
|
2
|
+
require 'i18n'
|
2
3
|
module Schedulable
|
3
4
|
class Railtie < ::Rails::Railtie
|
4
5
|
|
5
6
|
railtie_name :schedulable
|
6
7
|
|
8
|
+
# requires all dependencies
|
9
|
+
Gem.loaded_specs['schedulable'].dependencies.each do |d|
|
10
|
+
require d.name
|
11
|
+
end
|
12
|
+
|
7
13
|
# application configuration initializer
|
8
14
|
config.schedulable = ActiveSupport::OrderedOptions.new # enable namespaced configuration in Rails environments
|
9
15
|
|
@@ -11,11 +17,26 @@ module Schedulable
|
|
11
17
|
Schedulable.configure do |config|
|
12
18
|
|
13
19
|
# copy parameters from application configuration
|
20
|
+
config.form_helper = app.config.schedulable[:form_helper]
|
14
21
|
config.max_build_count = app.config.schedulable[:max_build_count]
|
15
22
|
config.max_build_period = app.config.schedulable[:max_build_period]
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
initializer "schedulable.view" do
|
28
|
+
ActiveSupport.on_load :action_view do
|
29
|
+
include Schedulable::FormHelper
|
16
30
|
end
|
17
31
|
end
|
18
32
|
|
33
|
+
initializer "schedulable.locales" do
|
34
|
+
|
35
|
+
Dir[File.join("#{File.dirname(__FILE__)}/../../config/locales/*.yml")].each do |locale|
|
36
|
+
I18n.load_path.unshift(locale)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
19
40
|
|
20
41
|
# rake tasks
|
21
42
|
rake_tasks do
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module Schedulable
|
2
|
+
module Model
|
3
|
+
class Schedule < ActiveRecord::Base
|
4
|
+
|
5
|
+
serialize :day
|
6
|
+
serialize :day_of_week, Hash
|
7
|
+
|
8
|
+
belongs_to :schedulable, polymorphic: true
|
9
|
+
|
10
|
+
after_initialize :init_schedule
|
11
|
+
before_save :update_schedule
|
12
|
+
|
13
|
+
validates_presence_of :rule
|
14
|
+
validates_presence_of :time
|
15
|
+
validates_presence_of :date, if: Proc.new { |schedule| schedule.rule == 'singular' }
|
16
|
+
validate :validate_day, if: Proc.new { |schedule| schedule.rule == 'weekly' }
|
17
|
+
validate :validate_day_of_week, if: Proc.new { |schedule| schedule.rule == 'monthly' }
|
18
|
+
|
19
|
+
def to_icecube
|
20
|
+
return @schedule
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
return @schedule.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def method_missing(meth, *args, &block)
|
28
|
+
if @schedule
|
29
|
+
@schedule.send(meth, *args, &block)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.param_names
|
34
|
+
[:id, :date, :time, :rule, :until, :count, :interval, day: [], day_of_week: [monday: [], tuesday: [], wednesday: [], thursday: [], friday: [], saturday: [], sunday: []]]
|
35
|
+
end
|
36
|
+
|
37
|
+
def update_schedule()
|
38
|
+
|
39
|
+
date = self.date ? self.date.to_time : Time.now
|
40
|
+
if self.time
|
41
|
+
date = date.change({hour: self.time.hour, min: self.time.min})
|
42
|
+
end
|
43
|
+
|
44
|
+
@schedule = IceCube::Schedule.new(date)
|
45
|
+
|
46
|
+
if self.rule && self.rule != 'singular'
|
47
|
+
|
48
|
+
self.interval = self.interval.present? ? self.interval.to_i : 1
|
49
|
+
|
50
|
+
rule = IceCube::Rule.send("#{self.rule}", self.interval)
|
51
|
+
|
52
|
+
if self.until
|
53
|
+
rule.until(self.until)
|
54
|
+
end
|
55
|
+
|
56
|
+
if self.count && self.count.to_i > 0
|
57
|
+
rule.count(self.count.to_i)
|
58
|
+
end
|
59
|
+
|
60
|
+
if self.day
|
61
|
+
days = self.day.reject(&:empty?)
|
62
|
+
if self.rule == 'weekly'
|
63
|
+
days.each do |day|
|
64
|
+
rule.day(day.to_sym)
|
65
|
+
end
|
66
|
+
elsif self.rule == 'monthly'
|
67
|
+
days = {}
|
68
|
+
day_of_week.each do |weekday, value|
|
69
|
+
days[weekday.to_sym] = value.reject(&:empty?).map { |x| x.to_i }
|
70
|
+
end
|
71
|
+
rule.day_of_week(days)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
@schedule.add_recurrence_rule(rule)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def validate_day
|
82
|
+
day.reject! { |c| c.empty? }
|
83
|
+
if !day.any?
|
84
|
+
errors.add(:day, :empty)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def validate_day_of_week
|
89
|
+
any = false
|
90
|
+
day_of_week.each { |key, value|
|
91
|
+
value.reject! { |c| c.empty? }
|
92
|
+
if value.length > 0
|
93
|
+
any = true
|
94
|
+
break
|
95
|
+
end
|
96
|
+
}
|
97
|
+
if !any
|
98
|
+
errors.add(:day_of_week, :empty)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
def init_schedule()
|
104
|
+
|
105
|
+
self.rule||= "singular"
|
106
|
+
self.interval||= 1
|
107
|
+
self.count||= 0
|
108
|
+
|
109
|
+
@schedule = IceCube::Schedule.new(date)
|
110
|
+
|
111
|
+
self.update_schedule()
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -2,68 +2,9 @@ module Schedulable
|
|
2
2
|
|
3
3
|
module ScheduleSupport
|
4
4
|
|
5
|
-
def to_icecube
|
6
|
-
return @schedule
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_s
|
10
|
-
return @schedule.to_s
|
11
|
-
end
|
12
|
-
|
13
|
-
def method_missing(meth, *args, &block)
|
14
|
-
if @schedule
|
15
|
-
@schedule.send(meth, *args, &block)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
5
|
def self.param_names
|
20
|
-
[:id, :date, :time, :rule, :until, :count, :interval,
|
6
|
+
[:id, :date, :time, :rule, :until, :count, :interval, day: [], day_of_week: [monday: [], tuesday: [], wednesday: [], thursday: [], friday: [], saturday: [], sunday: []]]
|
21
7
|
end
|
22
|
-
|
23
|
-
private
|
24
8
|
|
25
|
-
def init_schedule()
|
26
|
-
|
27
|
-
self.rule||= "singular"
|
28
|
-
self.interval||= 1
|
29
|
-
|
30
|
-
date = self.date ? self.date.to_time : Time.now
|
31
|
-
if self.time
|
32
|
-
date = date.change({hour: self.time.hour, min: self.time.min})
|
33
|
-
end
|
34
|
-
|
35
|
-
@schedule = IceCube::Schedule.new(date)
|
36
|
-
|
37
|
-
if self.rule && self.rule != 'singular'
|
38
|
-
|
39
|
-
self.interval = self.interval.present? ? self.interval.to_i : 1
|
40
|
-
|
41
|
-
rule = IceCube::Rule.send("#{self.rule}", self.interval)
|
42
|
-
|
43
|
-
if self.until
|
44
|
-
rule.until(self.until)
|
45
|
-
end
|
46
|
-
|
47
|
-
if self.count && self.count.to_i > 0
|
48
|
-
rule.count(self.count.to_i)
|
49
|
-
end
|
50
|
-
|
51
|
-
if self.days
|
52
|
-
days = self.days.reject(&:empty?)
|
53
|
-
if self.rule == 'weekly'
|
54
|
-
days.each do |day|
|
55
|
-
rule.day(day.to_sym)
|
56
|
-
end
|
57
|
-
elsif self.rule == 'monthly'
|
58
|
-
days = {}
|
59
|
-
day_of_week.each do |weekday, value|
|
60
|
-
days[weekday.to_sym] = value.reject(&:empty?).map { |x| x.to_i }
|
61
|
-
end
|
62
|
-
rule.day_of_week(days)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
@schedule.add_recurrence_rule(rule)
|
66
|
-
end
|
67
|
-
end
|
68
9
|
end
|
69
10
|
end
|
data/lib/schedulable/version.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rake'
|
|
2
2
|
desc 'builds occurrences for schedulable models'
|
3
3
|
namespace :schedulable do
|
4
4
|
task :build_occurrences => :environment do
|
5
|
-
Schedule.
|
5
|
+
Schedule.group(:schedulable_type).each do |schedule|
|
6
6
|
clazz = schedule.schedulable.class
|
7
7
|
occurrences_associations = Schedulable::ActsAsSchedulable.occurrences_associations_for(clazz)
|
8
8
|
occurrences_associations.each do |association|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schedulable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Nowrotek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -48,6 +48,8 @@ files:
|
|
48
48
|
- MIT-LICENSE
|
49
49
|
- README.md
|
50
50
|
- Rakefile
|
51
|
+
- config/locales/de.yml
|
52
|
+
- config/locales/en.yml
|
51
53
|
- lib/generators/schedulable/config_generator.rb
|
52
54
|
- lib/generators/schedulable/install_generator.rb
|
53
55
|
- lib/generators/schedulable/locale_generator.rb
|
@@ -55,15 +57,17 @@ files:
|
|
55
57
|
- lib/generators/schedulable/simple_form_generator.rb
|
56
58
|
- lib/generators/schedulable/templates/config/schedulable.rb
|
57
59
|
- lib/generators/schedulable/templates/inputs/schedule_input.rb
|
58
|
-
- lib/generators/schedulable/templates/locale/schedulable.de.yml
|
59
|
-
- lib/generators/schedulable/templates/locale/schedulable.en.yml
|
60
60
|
- lib/generators/schedulable/templates/migrations/create_occurrences.erb
|
61
61
|
- lib/generators/schedulable/templates/migrations/create_schedules.rb
|
62
62
|
- lib/generators/schedulable/templates/models/occurrence.erb
|
63
63
|
- lib/generators/schedulable/templates/models/schedule.rb
|
64
|
+
- lib/locales/en.yml
|
65
|
+
- lib/locales/schedulable.de.yml
|
64
66
|
- lib/schedulable.rb
|
65
67
|
- lib/schedulable/acts_as_schedulable.rb
|
68
|
+
- lib/schedulable/form_helper.rb
|
66
69
|
- lib/schedulable/railtie.rb
|
70
|
+
- lib/schedulable/schedule.rb
|
67
71
|
- lib/schedulable/schedule_support.rb
|
68
72
|
- lib/schedulable/version.rb
|
69
73
|
- lib/tasks/schedulable_tasks.rake
|