schedulable 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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, days: [], day_of_week: [monday: [], tuesday: [], wednesday: [], thursday: [], friday: [], saturday: [], sunday: []]]
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
@@ -1,3 +1,3 @@
1
1
  module Schedulable
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -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.all(group: :schedulable_type).each do |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.7
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-03-29 00:00:00.000000000 Z
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