bin_script 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bin_script (0.1.2)
4
+ bin_script (0.1.3)
5
5
  activesupport (>= 2.3.2)
6
6
 
7
7
  GEM
data/README.markdown CHANGED
@@ -21,10 +21,11 @@ gem 'bin_script'
21
21
 
22
22
  Call like:
23
23
 
24
- $ cd project && ./bin/bla.rb -e production -a -b -c -d "asdf"
24
+ $ cd project && ./bin/bla.rb -e production -t -d "2012-04-07" -u "asdf"
25
25
 
26
- Examples (default features):
26
+ Features by default:
27
27
 
28
+ $ ./bin/bla.rb -h
28
29
  $ ./bin/bla.rb -e production
29
30
  $ ./bin/bla.rb -e production -L ./locks/bla.lock
30
31
  $ ./bin/bla.rb -e production -l ./log/bla.log
@@ -34,10 +35,10 @@ Examples (default features):
34
35
 
35
36
  Example Bin
36
37
  -----------
37
- app/models/bin/stuff_script.rb
38
+ app/models/bin/bla_script.rb
38
39
 
39
40
  ``` ruby
40
- class StuffScript < BinScript
41
+ class BlaScript < BinScript
41
42
  optional :u, "Update string"
42
43
  required :d, "Date in format YYYY-MM-DD or YYYY-MM"
43
44
  noarg :t, "Test run"
@@ -65,4 +66,27 @@ class BinScript
65
66
  end
66
67
  end
67
68
  ```
68
-
69
+
70
+
71
+ ### Create bin script without loading Rails Environment
72
+ add into file ./bin/bla.rb
73
+
74
+ NO_RAILS=true
75
+
76
+ example:
77
+
78
+ ``` ruby
79
+ NO_RAILS = true
80
+ load Gem.bin_path('bin_script', 'bin_helper')
81
+ ```
82
+
83
+
84
+ ### Disable lock or log
85
+
86
+ ``` ruby
87
+ class Bla < BinScript
88
+ self.log_level = Logger::DEBUG
89
+ self.enable_locking = false
90
+ self.enable_logging = false
91
+ end
92
+ ```
@@ -1,7 +1,8 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'getoptlong'
3
3
  require 'pathname'
4
- require 'rails' unless defined?(Rails)
4
+
5
+ require File.dirname(__FILE__) + '/rails_stub'
5
6
  require File.dirname(__FILE__) + '/lock_file'
6
7
  require File.dirname(__FILE__) + '/xlogger'
7
8
  require File.dirname(__FILE__) + '/class_inheritable_attributes'
@@ -19,14 +20,14 @@ class BinScript
19
20
  {:key => :L, :type => :optional, :description => "Path to lock file (default \#{Rails.root}/lock/[script_name].lock"}
20
21
  ]
21
22
 
22
- # Default log level INFO or DEBUG for test env
23
- @log_level = (Rails.env == 'development' ? XLogger::DEBUG : XLogger::INFO)
24
-
25
23
  # Enable locking by default
26
24
  @enable_locking = true
27
25
 
28
26
  # Enable logging by default
29
27
  @enable_logging = true
28
+
29
+ # Default log level INFO or DEBUG for test env
30
+ @log_level = (RailsStub.env == 'development' ? XLogger::DEBUG : XLogger::INFO)
30
31
 
31
32
  # По умолчанию мы при каждом запуске скрипта продолжаем писать в основной лог. Но можно записать сюда формат, который
32
33
  # можно скормить time.strftime(format) и результат подставится в конец имени файла лога. Таким образом можно делать
@@ -60,8 +61,8 @@ class BinScript
60
61
  # Define class level helper method
61
62
  singleton.class_eval do
62
63
  define_method :info do |message|
63
- return unless Rails.logger
64
- Rails.logger.send(method,message)
64
+ return unless RailsStub.logger
65
+ RailsStub.logger.send(method,message)
65
66
  end
66
67
  end
67
68
 
@@ -71,7 +72,7 @@ class BinScript
71
72
  @logger.send(method,message)
72
73
  end
73
74
  end
74
-
75
+
75
76
  class << self
76
77
  # Get parameter by key
77
78
  def get_parameter(key)
@@ -131,7 +132,7 @@ class BinScript
131
132
  # Run script detected by the filename of source script file
132
133
  def run_script(filename = $0)
133
134
  cfg = parse_script_file_name(Pathname.new(filename).realpath.to_s)
134
- cfg[:files].each { |f| require File.join(rails_root, f) }
135
+ cfg[:files].each { |f| require File.join(RailsStub.root, f) }
135
136
 
136
137
  # Create instance and call run! for script class
137
138
  klass = cfg[:class].constantize
@@ -165,14 +166,7 @@ class BinScript
165
166
  @parameters.each { |p| new << p if p[:key] != key }
166
167
  @parameters = new
167
168
  end
168
-
169
- # RAILS_ROOT is not availible if rails environment was not loaded. So detect application root in this case from current file path
170
- def rails_root
171
- path = Rails.root
172
- path ||= defined?(APP_ROOT) ? APP_ROOT : '.'
173
- Pathname.new(path).realpath.to_s
174
- end
175
-
169
+
176
170
  # Prepare ARGV parameters as hash
177
171
  def get_argv_values
178
172
  values = {}
@@ -215,7 +209,7 @@ class BinScript
215
209
  end
216
210
 
217
211
  def puts(*arg)
218
- return if self.class.disable_puts_for_tests && Rails.env == 'test'
212
+ return if self.class.disable_puts_for_tests && RailsStub.env == 'test'
219
213
  Kernel.puts(*arg)
220
214
  end
221
215
 
@@ -224,11 +218,11 @@ class BinScript
224
218
  begin
225
219
  @source_argv = ARGV.dup
226
220
  @overrided_parameters = {}
227
- @params_values = (Rails.env == 'test' ? {} : self.class.get_argv_values)
221
+ @params_values = (RailsStub.env == 'test' ? {} : self.class.get_argv_values)
228
222
 
229
223
  # Create logger if logging enabled
230
224
  if self.class.enable_logging
231
- @logger = XLogger.new(:file => log_filename, :dont_touch_rails_logger => (Rails.env == 'test'))
225
+ @logger = XLogger.new(:file => log_filename, :dont_touch_rails_logger => (RailsStub.env == 'test'))
232
226
  @logger.level = self.class.log_level
233
227
  end
234
228
 
@@ -257,7 +251,7 @@ class BinScript
257
251
  begin
258
252
  # Log important info and call script job
259
253
  info "Log level = #{@logger.level}" if self.class.enable_logging
260
- info "Parameters: #{@source_argv.join(', ')}"
254
+ info "Parameters: #{@params_values.inspect}"
261
255
  info "Starting script #{self.class.script_name}..."
262
256
  start = Time.now
263
257
 
@@ -277,7 +271,7 @@ class BinScript
277
271
  log_benchmarker_data
278
272
  rescue Exception => e
279
273
  # Print error info if it's not test env or exit
280
- if Rails.env != 'test' && e.class != SystemExit && e.class != Interrupt
274
+ if RailsStub.env != 'test' && e.class != SystemExit && e.class != Interrupt
281
275
  msg = self.class.prepare_exception_message(e)
282
276
  puts "\n" + msg
283
277
  fatal msg
@@ -334,12 +328,12 @@ class BinScript
334
328
 
335
329
  # Prepare filename of log file
336
330
  def lock_filename
337
- params(:L).blank? ? File.join(self.class.rails_root, 'locks', "#{self.class.script_name}.lock") : params(:L)
331
+ params(:L).blank? ? File.join(RailsStub.root, 'locks', "#{self.class.script_name}.lock") : params(:L)
338
332
  end
339
333
 
340
334
  # Prepare filename of log file
341
335
  def log_filename
342
- params(:l).blank? ? File.join(self.class.rails_root, 'log', "#{self.class.script_name}#{log_filename_time_part}.log") : params(:l)
336
+ params(:l).blank? ? File.join(RailsStub.root, 'log', "#{self.class.script_name}#{log_filename_time_part}.log") : params(:l)
343
337
  end
344
338
 
345
339
  private
@@ -0,0 +1,22 @@
1
+ begin
2
+ require 'rails' unless defined?(Rails)
3
+ rescue LoadError => e
4
+ end
5
+
6
+ module RailsStub
7
+
8
+ def self.env
9
+ defined?(Rails) ? Rails.env : ENV['RAILS_ENV']
10
+ end
11
+
12
+ def self.logger
13
+ defined?(Rails) ? Rails.logger : nil
14
+ end
15
+
16
+ def self.root
17
+ path = defined?(Rails) ? Rails.root : nil
18
+ path ||= defined?(APP_ROOT) ? APP_ROOT : '.'
19
+ Pathname.new(path).realpath.to_s
20
+ end
21
+
22
+ end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  class BinScript
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
@@ -1,5 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
-
3
2
  require 'logger'
4
3
 
5
4
  class XLogger < Logger
@@ -18,14 +17,14 @@ class XLogger < Logger
18
17
  # Don't change default logger if asked
19
18
  if hint[:dont_touch_rails_logger].blank? && defined?(ActiveRecord::Base)
20
19
  ActiveRecord::Base.logger = self
21
- def Rails.logger; ActiveRecord::Base.logger; end
22
-
23
- # This raise warning to STDOUT
24
- #Object.const_set "RAILS_DEFAULT_LOGGER", self
20
+
21
+ def Rails.logger
22
+ ActiveRecord::Base.logger
23
+ end
25
24
  end
26
25
 
27
26
  self.level = hint[:log_level] || rails_env_log_level
28
- log_sql if hint[:log_sql] || !Rails.env.production?
27
+ log_sql if hint[:log_sql] || !prod_env?
29
28
  end
30
29
 
31
30
  class Formatter < Logger::Formatter
@@ -45,16 +44,22 @@ class XLogger < Logger
45
44
  end
46
45
 
47
46
  def rails_env_log_level
48
- Rails.env.production? ? Logger::INFO : Logger::DEBUG
47
+ prod_env? ? Logger::INFO : Logger::DEBUG
48
+ end
49
+
50
+ def prod_env?
51
+ defined?(Rails) && Rails.env.production?
49
52
  end
50
53
  end
51
54
 
52
- module ActiveRecord
53
- module ConnectionAdapters
54
- class AbstractAdapter
55
- def logger=(val)
56
- @logger = val
55
+ if defined?(ActiveRecord)
56
+ module ActiveRecord
57
+ module ConnectionAdapters
58
+ class AbstractAdapter
59
+ def logger=(val)
60
+ @logger = val
61
+ end
57
62
  end
58
63
  end
59
64
  end
60
- end
65
+ end
@@ -28,15 +28,14 @@ class <%= class_name %>Script < BinScript
28
28
  # FATAL = 4
29
29
  # UNKNOWN = 5
30
30
  #
31
- # По умолчанию мы при каждом запуске скрипта продолжаем писать в основной лог. Но можно записать сюда формат, который
32
- # можно скормить time.strftime(format) и результат подставится в конец имени файла лога. Таким образом можно делать
33
- # отдельные лог-файлы для каждого запуска, для каждого дня/месяца/года/часа и т.д...
34
- # Например "_%Y-%m-%d_%H-%M-%S" - каждый запуск новый лог
35
- # "_%Y-%m-%d" - каждый день новый лог
31
+ # By default, each bin logging into main log. Possible to specify log name for date.
32
+ # Examples: "_%Y-%m-%d_%H-%M-%S" - each execute, new log
33
+ # "_%Y-%m-%d" - each day, new log
36
34
  # self.date_log_postfix = "_%Y-%m-%d"
37
35
 
38
- # Do script job!
36
+ # Execute
39
37
  def do!
40
38
  logger.info "Script <%= class_name %> works!"
41
39
  end
40
+
42
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bin_script
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-04-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &72761780 !ruby/object:Gem::Requirement
17
+ requirement: &75985330 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 2.3.2
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *72761780
25
+ version_requirements: *75985330
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec
28
- requirement: &72761580 !ruby/object:Gem::Requirement
28
+ requirement: &75985130 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *72761580
36
+ version_requirements: *75985130
37
37
  description: Easy writing and executing bins (espesually for crontab or god) in Rails
38
38
  project
39
39
  email: kostya27@gmail.com
@@ -55,6 +55,7 @@ files:
55
55
  - lib/bin_script/bin_script.rb
56
56
  - lib/bin_script/class_inheritable_attributes.rb
57
57
  - lib/bin_script/lock_file.rb
58
+ - lib/bin_script/rails_stub.rb
58
59
  - lib/bin_script/version.rb
59
60
  - lib/bin_script/xlogger.rb
60
61
  - lib/generators/bin/bin_generator.rb