Module: Dalliance

Extended by:
ActiveSupport::Concern
Defined in:
lib/dalliance.rb,
lib/dalliance/schema.rb,
lib/dalliance/railtie.rb,
lib/dalliance/version.rb,
lib/dalliance/workers.rb,
lib/dalliance/progress_meter.rb,
lib/dalliance/workers/resque.rb,
lib/dalliance/workers/delayed_job.rb,
lib/generators/dalliance/update/update_generator.rb,
lib/generators/dalliance/progress_meter/progress_meter_generator.rb

Defined Under Namespace

Modules: ClassMethods, Glue, Schema, VERSION, Workers Classes: ProgressMeter, ProgressMeterGenerator, Railtie, UpdateGenerator

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.background_processing=(value) ⇒ Object



28
29
30
# File 'lib/dalliance.rb', line 28

def background_processing=(value)
  options[:background_processing] = value
end

.background_processing?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/dalliance.rb', line 24

def background_processing?
  options[:background_processing]
end

.configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Dalliance)

    the object that the method was called on



32
33
34
# File 'lib/dalliance.rb', line 32

def configure
  yield(self) if block_given?
end

.detect_worker_classObject



36
37
38
39
# File 'lib/dalliance.rb', line 36

def detect_worker_class
  return Dalliance::Workers::DelayedJob if defined? ::Delayed::Job
  return Dalliance::Workers::Resque     if defined? ::Resque
end

.optionsObject



16
17
18
19
20
21
22
# File 'lib/dalliance.rb', line 16

def options
  @options ||= {
    :background_processing => (defined?(Rails) ? Rails.env.production? : true),
    :dalliance_progress_meter_total_count_method => :dalliance_progress_meter_total_count,
    :worker_class => detect_worker_class
  }
end

Instance Method Details

#calculate_dalliance_progress_meter_total_countObject

If the progress_meter_total_count_method is not implemented just use 1…



141
142
143
144
145
146
147
# File 'lib/dalliance.rb', line 141

def calculate_dalliance_progress_meter_total_count
  if respond_to?(self.class.dalliance_options[:dalliance_progress_meter_total_count_method])
    self.send(self.class.dalliance_options[:dalliance_progress_meter_total_count_method])
  else
    1
  end
end

#dalliance_background_process(backgound_processing = nil) ⇒ Object

Force backgound_processing w/ true



93
94
95
96
97
98
99
# File 'lib/dalliance.rb', line 93

def dalliance_background_process(backgound_processing = nil)
  if backgound_processing || (backgound_processing.nil? && Dalliance.background_processing?)
    self.class.dalliance_options[:worker_class].enqueue(self)
  else
    dalliance_process(false)
  end
end

#dalliance_process(backgound_processing = false) ⇒ Object

backgound_processing == false will re-raise any exceptions



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/dalliance.rb', line 102

def dalliance_process(backgound_processing = false)
  begin
    start_dalliance!

    build_dalliance_progress_meter(:total_count => calculate_dalliance_progress_meter_total_count).save!

    self.send(self.class.dalliance_options[:dalliance_method])

    finish_dalliance!
  rescue StandardError => e
    #Save the error for future analysis...
    self.dalliance_error_hash = {:error => e.class.name, :message => e.message, :backtrace => e.backtrace}

    error_dalliance!

    #Don't raise the error if we're backgound_processing...
    raise e unless backgound_processing
  ensure
    if dalliance_progress_meter
      #Works with optimistic locking...
      Dalliance::ProgressMeter.delete(dalliance_progress_meter.id)
      self.dalliance_progress_meter = nil
    end
  end
end

#dalliance_progressObject



128
129
130
131
132
133
134
135
136
137
138
# File 'lib/dalliance.rb', line 128

def dalliance_progress
  if completed?
    100
  else
    if dalliance_progress_meter
      dalliance_progress_meter.progress
    else
      0
    end
  end
end

#error_or_completed?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/dalliance.rb', line 84

def error_or_completed?
  processing_error? || completed?
end

#pending_or_processing?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/dalliance.rb', line 88

def pending_or_processing?
  pending? || processing?
end