metaforce 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/metaforce.rb CHANGED
@@ -23,6 +23,7 @@ module Metaforce
23
23
 
24
24
  # Performs a login and retrurns the session
25
25
  def login(options={})
26
+ options = HashWithIndifferentAccess.new(options)
26
27
  username = options.fetch(:username, ENV['SALESFORCE_USERNAME'])
27
28
  password = options.fetch(:password, ENV['SALESFORCE_PASSWORD'])
28
29
  security_token = options.fetch(:security_token, ENV['SALESFORCE_SECURITY_TOKEN'])
data/lib/metaforce/cli.rb CHANGED
@@ -2,8 +2,10 @@ require 'listen'
2
2
  require 'thor'
3
3
  require 'metaforce/reporters'
4
4
 
5
- Metaforce.configuration.log = false
6
- Metaforce::Job.disable_threading!
5
+ Metaforce.configure do |config|
6
+ config.log = false
7
+ config.threading = false
8
+ end
7
9
 
8
10
  module Metaforce
9
11
  class CLI < Thor
@@ -47,6 +47,14 @@ module Metaforce
47
47
  # options. The block should set the options to a hash containing a valid
48
48
  # session_id and service urls.
49
49
  attr_accessor :authentication_handler
50
+ # Enables or disables threading when polling for job status. If disabled,
51
+ # calling .perform on a job will block until completion and all callbacks
52
+ # have run. (default: true).
53
+ attr_accessor :threading
54
+
55
+ def initialize
56
+ @threading = false
57
+ end
50
58
 
51
59
  def api_version
52
60
  @api_version ||= '26.0'
data/lib/metaforce/job.rb CHANGED
@@ -142,23 +142,11 @@ module Metaforce
142
142
  "#<#{self.class} @id=#{@id.inspect}>"
143
143
  end
144
144
 
145
- class << self
146
-
147
- # Internal: Disable threading in tests.
148
- def disable_threading!
149
- self.class_eval do
150
- def start_heart_beat
151
- delay = DELAY_START
152
- loop do
153
- @status = nil
154
- wait (delay = delay * DELAY_MULTIPLIER)
155
- trigger_poll_callbacks
156
- trigger_callbacks && break if completed? || error?
157
- end
158
- end
159
- end
160
- end
161
-
145
+ def self.disable_threading!
146
+ ActiveSupport::Deprecation.warn <<-WARNING.strip_heredoc
147
+ Metaforce::Job.disable_threading! is deprecated. Use Metaforce.configuration.threading = false instead.
148
+ WARNING
149
+ Metaforce.configuration.threading = false
162
150
  end
163
151
 
164
152
  private
@@ -167,30 +155,34 @@ module Metaforce
167
155
  # Internal: Starts a heart beat in a thread, which polls the job status
168
156
  # until it has completed or timed out.
169
157
  def start_heart_beat
170
- Thread.abort_on_exception = true
171
- @heart_beat ||= Thread.new do
158
+ if threading?
159
+ Thread.abort_on_exception = true
160
+ @heart_beat ||= Thread.new &run_loop
161
+ else
162
+ run_loop.call
163
+ end
164
+ end
165
+
166
+ # Internal: Starts the run loop, and blocks until the job has completed or
167
+ # failed.
168
+ def run_loop
169
+ proc {
172
170
  delay = DELAY_START
173
171
  loop do
174
172
  @status = nil
175
- wait (delay = delay * DELAY_MULTIPLIER)
176
- trigger_poll_callbacks
177
- trigger_callbacks && Thread.stop if completed? || error?
173
+ sleep (delay = delay * DELAY_MULTIPLIER)
174
+ trigger :on_poll
175
+ if completed? || error?
176
+ trigger callback_type
177
+ Thread.stop if threading?
178
+ break
179
+ end
178
180
  end
179
- end
181
+ }
180
182
  end
181
183
 
182
- def trigger_poll_callbacks
183
- @_callbacks[:on_poll].each do |block|
184
- block.call(self)
185
- end
186
- end
187
-
188
- def wait(duration)
189
- sleep duration
190
- end
191
-
192
- def trigger_callbacks
193
- @_callbacks[callback_type].each do |block|
184
+ def trigger(type)
185
+ @_callbacks[type].each do |block|
194
186
  block.call(self)
195
187
  end
196
188
  end
@@ -203,5 +195,9 @@ module Metaforce
203
195
  end
204
196
  end
205
197
 
198
+ def threading?
199
+ Metaforce.configuration.threading
200
+ end
201
+
206
202
  end
207
203
  end
@@ -1,3 +1,3 @@
1
1
  module Metaforce
2
- VERSION = '1.0.4'
2
+ VERSION = '1.0.5'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -10,8 +10,8 @@ RSpec.configure do |config|
10
10
  config.include Savon::Spec::Macros
11
11
 
12
12
  config.before(:each) do
13
- Metaforce::Job.disable_threading!
14
- Metaforce::Job.any_instance.stub(:wait)
13
+ Metaforce.configuration.threading = false
14
+ Metaforce::Job.any_instance.stub(:sleep)
15
15
  end
16
16
  end
17
17
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metaforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-12-31 00:00:00.000000000 Z
13
+ date: 2013-01-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: savon