cowtech-rails 2.5.1.0 → 2.6.0.0

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.
@@ -12,7 +12,6 @@ module Cowtech
12
12
  rv = YAML.load_file(file || (Rails.root + "config/email.yml"))
13
13
 
14
14
  ActionMailer::Base.raise_delivery_errors = true
15
- ActionMailer::Base.charset = "utf-8"
16
15
  ActionMailer::Base.delivery_method = method
17
16
 
18
17
  case method
@@ -0,0 +1,122 @@
1
+ # encoding: utf-8
2
+ #
3
+ # This file is part of the cowtech-rails gem. Copyright (C) 2011 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+
7
+ module Cowtech
8
+ module RubyOnRails
9
+ class Scheduler
10
+ attr_accessor :application
11
+ attr_accessor :logger
12
+ attr_accessor :pid
13
+ attr_accessor :definitions
14
+ attr_accessor :scheduler
15
+
16
+ def self.start(application_class, log_file, pid_file, &definitions)
17
+ self.new(application_class, log_file, pid_file, definitions).execute
18
+ end
19
+
20
+ def self.log(msg)
21
+ puts msg
22
+ #@@class_logger ||= Logger.new(Rails.root.to_s + "/log/scheduler.log")
23
+ #@@class_logger.debug(msg)
24
+ end
25
+
26
+ def initialize(application_class, log_file, pid_file, block = nil, &definitions)
27
+ @application = application_class
28
+ @logger = Logger.new(log_file)
29
+ @pid = pid_file.to_s
30
+ @definitions = block || definitions
31
+ @scheduler = Rufus::Scheduler.start_new
32
+ @rake_loaded = false
33
+ end
34
+
35
+ def log_string(message, options = {})
36
+ rv = ""
37
+
38
+ rv += "[#{Time.now.strftime("%Y-%m-%d %T")}] " if !options[:no_time]
39
+ rv += options[:prefix].ensure_array.collect {|p| "[" + p.center(6, " ") + "]" }.join(" ") + " " if options[:prefix].present?
40
+ rv += message
41
+
42
+ rv
43
+ end
44
+
45
+ def log(message, options = {})
46
+ msg = self.log_string(message, options)
47
+ type = options[:type] || :info
48
+ (options[:logger] || @logger).send(type, msg)
49
+ end
50
+
51
+ def execute_rake_task(label, name, args)
52
+ begin
53
+ args = args.symbolize_keys
54
+ args_string = args.present? ? " with arguments #{args.to_json}" : ""
55
+
56
+ task = Rake::Task[name]
57
+ values = task.arg_names.collect {|a| args[a.to_sym] }
58
+
59
+ self.log(label + args_string + " ...", {:prefix => ["RAKE", "START", name]})
60
+ task.reenable
61
+ task.invoke(*values)
62
+ self.log("Rake task ended.", {:prefix => ["RAKE", "END", name]})
63
+ rescue Exception => e
64
+ self.log("Rake task failed with exception: [#{e.class.to_s}] #{e.to_s}.", {:prefix => ["RAKE", "ERROR", name]})
65
+ end
66
+ end
67
+
68
+ def execute_inline_task(label, name)
69
+ begin
70
+ self.log(label + " ...", {:prefix => ["INLINE", "START", name]})
71
+ yield if block_given?
72
+ self.log("Inline task ended.", {:prefix => ["INLINE", "END", name]})
73
+ rescue Exception => e
74
+ self.log("Inline task failed with exception: [#{e.class.to_s}] #{e.to_s}.", {:prefix => ["RAKE", "ERROR", name]})
75
+ end
76
+ end
77
+
78
+ def execute
79
+ self.log("Scheduler started.", {:prefix => "MAIN"})
80
+ self.handle_plain
81
+ end
82
+
83
+ def handle_phusion_passenger
84
+ if defined?(PhusionPassenger) then
85
+ File.delete(@pid) if FileTest.exists?(@pid)
86
+
87
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
88
+ if forked && !FileTest.exists?(@pid) then
89
+ self.log("Starting process with PID #{$$}", {:prefix => ["WORKER", "START"]})
90
+ File.open(@pid, "w") {|f| f.write($$) }
91
+ self.handle_plain
92
+ end
93
+ end
94
+
95
+ PhusionPassenger.on_event(:stopping_worker_process) do
96
+ if FileTest.exists?(@pid) then
97
+ if File.open(@pid, "r") {|f| pid = f.read.to_i} == $$ then
98
+ self.log("Stopped process with PID #{$$}", {:prefix => ["WORKER", "STOP"]})
99
+ File.delete(@pid)
100
+ end
101
+ end
102
+ end
103
+ else
104
+ self.handle_plain
105
+ end
106
+ end
107
+
108
+ def handle_plain
109
+ if !@rake_loaded then
110
+ @application.load_tasks
111
+ @rake_loaded = true
112
+ end
113
+
114
+ @definitions.call(self)
115
+ end
116
+
117
+ def method_missing(method, *args, &block)
118
+ self.scheduler.send(method, *args, &block)
119
+ end
120
+ end
121
+ end
122
+ end
@@ -8,8 +8,8 @@ module Cowtech
8
8
  module Rails
9
9
  module Version
10
10
  MAJOR = 2
11
- MINOR = 5
12
- PATCH = 1
11
+ MINOR = 6
12
+ PATCH = 0
13
13
  BUILD = 0
14
14
 
15
15
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
data/lib/cowtech.rb CHANGED
@@ -10,8 +10,7 @@ require 'rake'
10
10
  require 'cowtech-extensions'
11
11
  require 'cowtech/extensions'
12
12
  require 'cowtech/monkey_patches'
13
- #require dir + '/../app/models/e_mail'
14
- #require dir + '/../app/models/model_base'
13
+ require 'cowtech/scheduler'
15
14
 
16
15
  module Cowtech
17
16
  class Engine < Rails::Engine
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cowtech-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1.0
4
+ version: 2.6.0.0
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-18 00:00:00.000000000Z
12
+ date: 2011-12-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cowtech-extensions
16
- requirement: &70180249711500 !ruby/object:Gem::Requirement
16
+ requirement: &70262008252160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70180249711500
24
+ version_requirements: *70262008252160
25
25
  description: A general purpose Rails utility plugin.
26
26
  email: shogun_panda@me.com
27
27
  executables: []
@@ -40,10 +40,10 @@ files:
40
40
  - app/models/cowtech/ruby_on_rails/models/mongoid/cowtech.rb
41
41
  - app/models/cowtech/ruby_on_rails/models/mongoid/logging.rb
42
42
  - app/models/cowtech/ruby_on_rails/models/mongoid/sequence.rb
43
- - app/models/cowtech/ruby_on_rails/models/scheduler.rb
44
43
  - lib/cowtech.rb
45
44
  - lib/cowtech/extensions.rb
46
45
  - lib/cowtech/monkey_patches.rb
46
+ - lib/cowtech/scheduler.rb
47
47
  - lib/cowtech/tasks/app.rake
48
48
  - lib/cowtech/tasks/log.rake
49
49
  - lib/cowtech/tasks/mongodb.rake
@@ -1,124 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- # This file is part of the cowtech-rails gem. Copyright (C) 2011 and above Shogun <shogun_panda@me.com>.
4
- # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
- #
6
-
7
- module Cowtech
8
- module RubyOnRails
9
- module Models
10
- class Scheduler
11
- attr_accessor :application
12
- attr_accessor :logger
13
- attr_accessor :pid
14
- attr_accessor :definitions
15
- attr_accessor :scheduler
16
-
17
- def self.start(application_class, log_file, pid_file, &definitions)
18
- self.new(application_class, log_file, pid_file, definitions).execute
19
- end
20
-
21
- def self.log(msg)
22
- puts msg
23
- #@@class_logger ||= Logger.new(Rails.root.to_s + "/log/scheduler.log")
24
- #@@class_logger.debug(msg)
25
- end
26
-
27
- def initialize(application_class, log_file, pid_file, block = nil, &definitions)
28
- @application = application_class
29
- @logger = Logger.new(log_file)
30
- @pid = pid_file.to_s
31
- @definitions = block || definitions
32
- @scheduler = Rufus::Scheduler.start_new
33
- @rake_loaded = false
34
- end
35
-
36
- def log_string(message, options = {})
37
- rv = ""
38
-
39
- rv += "[#{Time.now.strftime("%Y-%m-%d %T")}] " if !options[:no_time]
40
- rv += options[:prefix].ensure_array.collect {|p| "[" + p.center(6, " ") + "]" }.join(" ") + " " if options[:prefix].present?
41
- rv += message
42
-
43
- rv
44
- end
45
-
46
- def log(message, options = {})
47
- msg = self.log_string(message, options)
48
- type = options[:type] || :info
49
- (options[:logger] || @logger).send(type, msg)
50
- end
51
-
52
- def execute_rake_task(label, name, args)
53
- begin
54
- args = args.symbolize_keys
55
- args_string = args.present? ? " with arguments #{args.to_json}" : ""
56
-
57
- task = Rake::Task[name]
58
- values = task.arg_names.collect {|a| args[a.to_sym] }
59
-
60
- self.log(label + args_string + " ...", {:prefix => ["RAKE", "START", name]})
61
- task.reenable
62
- task.invoke(*values)
63
- self.log("Rake task ended.", {:prefix => ["RAKE", "END", name]})
64
- rescue Exception => e
65
- self.log("Rake task failed with exception: [#{e.class.to_s}] #{e.to_s}.", {:prefix => ["RAKE", "ERROR", name]})
66
- end
67
- end
68
-
69
- def execute_inline_task(label, name)
70
- begin
71
- self.log(label + " ...", {:prefix => ["INLINE", "START", name]})
72
- yield if block_given?
73
- self.log("Inline task ended.", {:prefix => ["INLINE", "END", name]})
74
- rescue Exception => e
75
- self.log("Inline task failed with exception: [#{e.class.to_s}] #{e.to_s}.", {:prefix => ["RAKE", "ERROR", name]})
76
- end
77
- end
78
-
79
- def execute
80
- self.log("Scheduler started.", {:prefix => "MAIN"})
81
- self.handle_plain
82
- end
83
-
84
- def handle_phusion_passenger
85
- if defined?(PhusionPassenger) then
86
- File.delete(@pid) if FileTest.exists?(@pid)
87
-
88
- PhusionPassenger.on_event(:starting_worker_process) do |forked|
89
- if forked && !FileTest.exists?(@pid) then
90
- self.log("Starting process with PID #{$$}", {:prefix => ["WORKER", "START"]})
91
- File.open(@pid, "w") {|f| f.write($$) }
92
- self.handle_plain
93
- end
94
- end
95
-
96
- PhusionPassenger.on_event(:stopping_worker_process) do
97
- if FileTest.exists?(@pid) then
98
- if File.open(@pid, "r") {|f| pid = f.read.to_i} == $$ then
99
- self.log("Stopped process with PID #{$$}", {:prefix => ["WORKER", "STOP"]})
100
- File.delete(@pid)
101
- end
102
- end
103
- end
104
- else
105
- self.handle_plain
106
- end
107
- end
108
-
109
- def handle_plain
110
- if !@rake_loaded then
111
- @application.load_tasks
112
- @rake_loaded = true
113
- end
114
-
115
- @definitions.call(self)
116
- end
117
-
118
- def method_missing(method, *args, &block)
119
- self.scheduler.send(method, *args, &block)
120
- end
121
- end
122
- end
123
- end
124
- end