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.
@@ -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