delayed_job_azure 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f4a34c5b84f14bcbb6f4dcb3720c1887a59c1f66
4
+ data.tar.gz: 270064849ec4815b9429e5f39d0a24ff601c364a
5
+ SHA512:
6
+ metadata.gz: 16f019eec488e97f077c72a00fc4358a8ecdfc58572a349785be5edb2558a3099f77a110b87e21137a730840ad3b5c62cf9845af5ca51c98d550c0beaae071d8
7
+ data.tar.gz: 3fa750b4d0f8c5a197848ed5679eb11e959b6eb73cc7a25d87b60419173e7cb034671719450f41f00559b276dd652d106c0333c300ce4f4edab53333ab20dbab
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'azure', '~> 0.6'
4
+ gem 'delayed_job', '~> 3.0.0'
5
+
6
+ group :development do
7
+ gem "rdoc", "~> 3.12"
8
+ gem "bundler", "~> 1.0"
9
+ gem "jeweler", "~> 2.0.1"
10
+ gem "simplecov", ">= 0"
11
+ gem 'rspec', '>= 2.0'
12
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,94 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.18)
5
+ i18n (~> 0.6, >= 0.6.4)
6
+ multi_json (~> 1.0)
7
+ addressable (2.3.6)
8
+ azure (0.6.4)
9
+ json (~> 1.8)
10
+ mime-types (~> 1.0)
11
+ nokogiri (~> 1.5)
12
+ systemu (~> 2.6)
13
+ uuid (~> 2.0)
14
+ builder (3.2.2)
15
+ delayed_job (3.0.5)
16
+ activesupport (~> 3.0)
17
+ descendants_tracker (0.0.4)
18
+ thread_safe (~> 0.3, >= 0.3.1)
19
+ diff-lcs (1.2.5)
20
+ docile (1.1.3)
21
+ faraday (0.9.0)
22
+ multipart-post (>= 1.2, < 3)
23
+ git (1.2.6)
24
+ github_api (0.11.3)
25
+ addressable (~> 2.3)
26
+ descendants_tracker (~> 0.0.1)
27
+ faraday (~> 0.8, < 0.10)
28
+ hashie (>= 1.2)
29
+ multi_json (>= 1.7.5, < 2.0)
30
+ nokogiri (~> 1.6.0)
31
+ oauth2
32
+ hashie (2.1.1)
33
+ highline (1.6.21)
34
+ i18n (0.6.9)
35
+ jeweler (2.0.1)
36
+ builder
37
+ bundler (>= 1.0)
38
+ git (>= 1.2.5)
39
+ github_api
40
+ highline (>= 1.6.15)
41
+ nokogiri (>= 1.5.10)
42
+ rake
43
+ rdoc
44
+ json (1.8.1)
45
+ jwt (0.1.13)
46
+ multi_json (>= 1.5)
47
+ macaddr (1.7.1)
48
+ systemu (~> 2.6.2)
49
+ mime-types (1.25.1)
50
+ mini_portile (0.6.0)
51
+ multi_json (1.10.0)
52
+ multi_xml (0.5.5)
53
+ multipart-post (2.0.0)
54
+ nokogiri (1.6.2.1)
55
+ mini_portile (= 0.6.0)
56
+ oauth2 (0.9.3)
57
+ faraday (>= 0.8, < 0.10)
58
+ jwt (~> 0.1.8)
59
+ multi_json (~> 1.3)
60
+ multi_xml (~> 0.5)
61
+ rack (~> 1.2)
62
+ rack (1.5.2)
63
+ rake (10.3.2)
64
+ rdoc (3.12.2)
65
+ json (~> 1.4)
66
+ rspec (2.14.1)
67
+ rspec-core (~> 2.14.0)
68
+ rspec-expectations (~> 2.14.0)
69
+ rspec-mocks (~> 2.14.0)
70
+ rspec-core (2.14.8)
71
+ rspec-expectations (2.14.5)
72
+ diff-lcs (>= 1.1.3, < 2.0)
73
+ rspec-mocks (2.14.6)
74
+ simplecov (0.8.2)
75
+ docile (~> 1.1.0)
76
+ multi_json
77
+ simplecov-html (~> 0.8.0)
78
+ simplecov-html (0.8.0)
79
+ systemu (2.6.4)
80
+ thread_safe (0.3.3)
81
+ uuid (2.3.7)
82
+ macaddr (~> 1.0)
83
+
84
+ PLATFORMS
85
+ ruby
86
+
87
+ DEPENDENCIES
88
+ azure (~> 0.6)
89
+ bundler (~> 1.0)
90
+ delayed_job (~> 3.0.0)
91
+ jeweler (~> 2.0.1)
92
+ rdoc (~> 3.12)
93
+ rspec (>= 2.0)
94
+ simplecov
data/LICENSE.txt ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2014, Supportify.io
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ This is [Azure Queues](http://azure.microsoft.com/en-us/services/storage/) backend for [delayed_job](http://github.com/collectiveidea/delayed_job)
2
+
3
+ # Getting Started
4
+
5
+ ## Get credentials
6
+
7
+
8
+ To start using delayed_job_azure, will need to have your storage account setup as mentioned [here](http://azure.microsoft.com/en-us/documentation/articles/storage-ruby-how-to-use-queue-storage/#CreateAccount).
9
+
10
+ Once your account is setup, you will need to configure your access using one of the methods mentioned on https://github.com/Azure/azure-sdk-for-ruby/.
11
+
12
+ ## Installation
13
+
14
+ Add the gems to your `Gemfile:`
15
+
16
+ ```ruby
17
+ gem 'azure'
18
+ gem 'delayed_job'
19
+ gem 'delayed_job_azure'
20
+ ```
21
+
22
+ Optionally: Add an initializer (`config/initializers/delayed_job.rb`):
23
+
24
+ ```ruby
25
+ Delayed::Worker.configure do |config|
26
+ # optional params:
27
+ config.available_priorities = [-1,0,1,2] # Default is [0]. Please note, adding new priorities will slow down picking the next job from queue. Also note that these priorities must include all priorities of your Delayed Jobs.
28
+ config.queue_name = 'default' # Specify an alternative queue name
29
+ config.delay = 0 # Time to wait before message will be available on the queue
30
+ config.timeout = 5.minutes # The time in seconds to wait after message is taken off the queue, before it is put back on. Delete before :timeout to ensure it does not go back on the queue.
31
+ config.expires_in = 7.days # After this time, message will be automatically removed from the queue.
32
+ end
33
+ ```
34
+
35
+ ## Usage
36
+
37
+ That's it. Use [delayed_job as normal](http://github.com/collectiveidea/delayed_job).
38
+
39
+ Example:
40
+
41
+ ```ruby
42
+ class User
43
+ def background_stuff
44
+ puts "I run in the background"
45
+ end
46
+ end
47
+ ```
48
+
49
+ Then in one of your controllers:
50
+
51
+ ```ruby
52
+ user = User.new
53
+ user.delay.background_stuff
54
+ ```
55
+
56
+ ## Start worker process
57
+
58
+ rake jobs:work
59
+
60
+ That will start pulling jobs off the queue and processing them.
61
+
62
+ # Documentation
63
+
64
+ You can find more documentation here:
65
+
66
+ * http://azure.microsoft.com/en-us/develop/ruby/
data/Rakefile ADDED
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "delayed_job_azure"
18
+ gem.homepage = "http://github.com/supportify/delayed_job_azure"
19
+ gem.license = "BSD"
20
+ gem.summary = %Q{Azure Queue backend for delayed_job}
21
+ gem.description = %Q{Azure Queue backend for delayed_job}
22
+ gem.email = "help@supportify.io"
23
+ gem.authors = ["Jordan Yaker", "Supportify, Inc."]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core/rake_task'
29
+ RSpec::Core::RakeTask.new(:spec)
30
+
31
+ desc "Code coverage detail"
32
+ task :simplecov do
33
+ ENV['COVERAGE'] = "true"
34
+ Rake::Task['spec'].execute
35
+ end
36
+
37
+ task :default => :spec
38
+
39
+ require 'rdoc/task'
40
+ Rake::RDocTask.new do |rdoc|
41
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
42
+
43
+ rdoc.rdoc_dir = 'rdoc'
44
+ rdoc.title = "delayed_job_azure #{version}"
45
+ rdoc.rdoc_files.include('README*')
46
+ rdoc.rdoc_files.include('lib/**/*.rb')
47
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,73 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "delayed_job_azure"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jordan Yaker", "Supportify, Inc."]
12
+ s.date = "2014-05-17"
13
+ s.description = "Azure Queue backend for delayed_job"
14
+ s.email = "help@supportify.io"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "delayed_job_azure.gemspec",
28
+ "lib/delayed/backend/actions.rb",
29
+ "lib/delayed/backend/azure.rb",
30
+ "lib/delayed/backend/azure_config.rb",
31
+ "lib/delayed/backend/version.rb",
32
+ "lib/delayed/backend/worker.rb",
33
+ "lib/delayed/serialization/azure.rb",
34
+ "lib/delayed_job_azure.rb",
35
+ "spec/.gitkeep"
36
+ ]
37
+ s.homepage = "http://github.com/supportify/delayed_job_azure"
38
+ s.licenses = ["BSD"]
39
+ s.require_paths = ["lib"]
40
+ s.rubygems_version = "2.0.6"
41
+ s.summary = "Azure Queue backend for delayed_job"
42
+
43
+ if s.respond_to? :specification_version then
44
+ s.specification_version = 4
45
+
46
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
+ s.add_runtime_dependency(%q<azure>, ["~> 0.6"])
48
+ s.add_runtime_dependency(%q<delayed_job>, ["~> 3.0.0"])
49
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
50
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
51
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
52
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
53
+ s.add_development_dependency(%q<rspec>, [">= 2.0"])
54
+ else
55
+ s.add_dependency(%q<azure>, ["~> 0.6"])
56
+ s.add_dependency(%q<delayed_job>, ["~> 3.0.0"])
57
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
58
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
59
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
60
+ s.add_dependency(%q<simplecov>, [">= 0"])
61
+ s.add_dependency(%q<rspec>, [">= 2.0"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<azure>, ["~> 0.6"])
65
+ s.add_dependency(%q<delayed_job>, ["~> 3.0.0"])
66
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
67
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
68
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
69
+ s.add_dependency(%q<simplecov>, [">= 0"])
70
+ s.add_dependency(%q<rspec>, [">= 2.0"])
71
+ end
72
+ end
73
+
@@ -0,0 +1,82 @@
1
+ module Delayed
2
+ module Backend
3
+ module Azure
4
+ module Actions
5
+ def field(name, options = {})
6
+ #type = options[:type] || String
7
+ default = options[:default] || nil
8
+ define_method name do
9
+ @attributes ||= {}
10
+ @attributes[name.to_sym] || default
11
+ end
12
+ define_method "#{name}=" do |value|
13
+ @attributes ||= {}
14
+ @attributes[name.to_sym] = value
15
+ end
16
+ end
17
+
18
+ def before_fork
19
+ end
20
+
21
+ def after_fork
22
+ end
23
+
24
+ def db_time_now
25
+ Time.now.utc
26
+ end
27
+
28
+ #def self.queue_name
29
+ # Delayed::Worker.queue_name
30
+ #end
31
+
32
+ def find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
33
+ Delayed::Worker.available_priorities.each do |priority|
34
+ unless queues.include? queue_name
35
+ azure.create_queue queue_name
36
+ queues << queue_name
37
+ end
38
+
39
+ message = azure.list_messages queue_name(priority), 0
40
+ return [Delayed::Backend::Azure::Job.new(message)] if message
41
+ end
42
+ []
43
+ end
44
+
45
+ def delete_all
46
+ deleted = 0
47
+ Delayed::Worker.available_priorities.each do |priority|
48
+ loop do
49
+ msgs = azure.list_messages queue_name(priority), 0,
50
+ number_of_messages: 1000
51
+
52
+ break if msgs.blank?
53
+ msgs.each do |msg|
54
+ azure.delete_message queue_name(priority), msg.id, msg.pop_receipt
55
+ deleted += 1
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ # No need to check locks
62
+ def clear_locks!(*args)
63
+ true
64
+ end
65
+
66
+ private
67
+
68
+ def azure
69
+ ::Delayed::Worker.azure
70
+ end
71
+
72
+ def queues
73
+ ::Delayed::Worker.queues
74
+ end
75
+
76
+ def queue_name(priority)
77
+ "#{Delayed::Worker.queue_name}_#{priority || 0}"
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,135 @@
1
+
2
+ module Delayed
3
+ module Backend
4
+ module Azure
5
+ class Job
6
+ include ::DelayedJobAzure::Document
7
+ include Delayed::Backend::Base
8
+ extend Delayed::Backend::Azure::Actions
9
+
10
+ field :priority, :type => Integer, :default => 0
11
+ field :attempts, :type => Integer, :default => 0
12
+ field :handler, :type => String
13
+ field :run_at, :type => Time
14
+ field :locked_at, :type => Time
15
+ field :locked_by, :type => String
16
+ field :failed_at, :type => Time
17
+ field :last_error, :type => String
18
+ field :queue, :type => String
19
+
20
+ def initialize(data = {})
21
+ @msg = nil
22
+ if data.is_a?(::Azure::Queue::Message)
23
+ @msg = data
24
+ data = JSON.load(data.message_text)
25
+ end
26
+
27
+ data.symbolize_keys!
28
+ payload_obj = data.delete(:payload_object) || data.delete(:handler)
29
+
30
+ @queue_name = data[:queue_name] || Delayed::Worker.queue_name
31
+ @delay = data[:delay] || Delayed::Worker.delay
32
+ @timeout = data[:timeout] || Delayed::Worker.timeout
33
+ @expires_in = data[:expires_in] || Delayed::Worker.expires_in
34
+ @attributes = data
35
+ self.payload_object = payload_obj
36
+ end
37
+
38
+ def payload_object
39
+ @payload_object ||= YAML.load(self.handler)
40
+ rescue TypeError, LoadError, NameError, ArgumentError => e
41
+ raise DeserializationError,
42
+ "Job failed to load: #{e.message}. Handler: #{handler.inspect}"
43
+ end
44
+
45
+ def payload_object=(object)
46
+ if object.is_a? String
47
+ @payload_object = YAML.load(object)
48
+ self.handler = object
49
+ else
50
+ @payload_object = object
51
+ self.handler = object.to_yaml
52
+ end
53
+ end
54
+
55
+ def save
56
+ if @attributes[:handler].blank?
57
+ raise "Handler missing!"
58
+ end
59
+ payload = JSON.dump(@attributes)
60
+
61
+ destroy if @msg
62
+
63
+ unless queues.include? queue_name
64
+ azure.create_queue queue_name
65
+ queues << queue_name
66
+ end
67
+
68
+ azure.create_message queue_name, payload,
69
+ timeout: @timeout,
70
+ visibility_timeout: @delay,
71
+ message_ttl: @expires_in
72
+ true
73
+ end
74
+
75
+ def save!
76
+ save
77
+ end
78
+
79
+ def destroy
80
+ if id and pop_receipt
81
+ aure.delete_message(queue_name, id, pop_receipt)
82
+ end
83
+ end
84
+
85
+ def fail!
86
+ destroy
87
+ # v2: move to separate queue
88
+ end
89
+
90
+ def update_attributes(attributes)
91
+ attributes.symbolize_keys!
92
+ @attributes.merge attributes
93
+ save
94
+ end
95
+
96
+ # No need to check locks
97
+ def lock_exclusively!(*args)
98
+ true
99
+ end
100
+
101
+ # No need to check locks
102
+ def unlock(*args)
103
+ true
104
+ end
105
+
106
+ def reload(*args)
107
+ # reset
108
+ super
109
+ end
110
+
111
+ def id
112
+ @msg.id if @msg
113
+ end
114
+
115
+ def pop_receipt
116
+ @msg.pop_receipt if @msg
117
+ end
118
+
119
+ private
120
+
121
+ def queue_name
122
+ "#{@queue_name}_#{@attributes[:priority] || 0}"
123
+ end
124
+
125
+ def azure
126
+ ::Delayed::Worker.azure
127
+ end
128
+
129
+ def queues
130
+ ::Delayed::Worker.queues
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,5 @@
1
+ class AzureConfig
2
+ attr_accessor :token, :project_id,
3
+ :queue_name, :delay, :timeout,
4
+ :expires_in, :available_priorities
5
+ end
@@ -0,0 +1,11 @@
1
+ module Delayed
2
+ module Backend
3
+ module Azure
4
+ @@version = nil
5
+
6
+ def self.version
7
+ @@version ||= File.read(File.dirname(__FILE__) + '/../../../VERSION').strip
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ require_relative 'azure_config'
2
+
3
+ module Delayed
4
+ class Worker
5
+ class << self
6
+ attr_accessor :config, :azure, :queues
7
+ :queue_name, :delay, :timeout, :expires_in, :available_priorities
8
+
9
+ def configure
10
+ yield(config)
11
+ self.queue_name = config.queue_name || 'default'
12
+ self.delay = config.delay || 0
13
+ self.timeout = config.timeout || 5.minutes
14
+ self.expires_in = config.expires_in || 7.days
15
+
16
+ priorities = config.available_priorities || [0]
17
+ if priorities.include?(0) && priorities.all? { |p| p.is_a?(Integer) }
18
+ self.available_priorities = priorities.sort
19
+ else
20
+ raise ArgumentError, "available_priorities option has wrong format. Please provide array of Integer values, includes zero. Default is [0]."
21
+ end
22
+ end
23
+
24
+ def config
25
+ @config ||= AzureConfig.new
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+
32
+ Delayed::Worker.azure = Azure::QueueService.new
33
+ Delayed::Worker.queues = Delayed::Worker.azure.list_queues
34
+ Delayed::Worker.queues.map! { |q| q.name }
35
+
36
+ # initialize with defaults
37
+ Delayed::Worker.configure {}
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ module DelayedJobAzure
4
+ module Document
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ require 'azure'
3
+ require 'delayed_job'
4
+
5
+ require_relative 'delayed/serialization/azure'
6
+ require_relative 'delayed/backend/actions'
7
+ require_relative 'delayed/backend/azure_config'
8
+ require_relative 'delayed/backend/worker'
9
+ require_relative 'delayed/backend/version'
10
+ require_relative 'delayed/backend/azure'
11
+
12
+ Delayed::Worker.backend = :azure
data/spec/.gitkeep ADDED
File without changes
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: delayed_job_azure
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jordan Yaker
8
+ - Supportify, Inc.
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-05-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: azure
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '0.6'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '0.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: delayed_job
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 3.0.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 3.0.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: rdoc
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '3.12'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '3.12'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: jeweler
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 2.0.1
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: 2.0.1
84
+ - !ruby/object:Gem::Dependency
85
+ name: simplecov
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '2.0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '2.0'
112
+ description: Azure Queue backend for delayed_job
113
+ email: help@supportify.io
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files:
117
+ - LICENSE.txt
118
+ - README.md
119
+ files:
120
+ - .document
121
+ - Gemfile
122
+ - Gemfile.lock
123
+ - LICENSE.txt
124
+ - README.md
125
+ - Rakefile
126
+ - VERSION
127
+ - delayed_job_azure.gemspec
128
+ - lib/delayed/backend/actions.rb
129
+ - lib/delayed/backend/azure.rb
130
+ - lib/delayed/backend/azure_config.rb
131
+ - lib/delayed/backend/version.rb
132
+ - lib/delayed/backend/worker.rb
133
+ - lib/delayed/serialization/azure.rb
134
+ - lib/delayed_job_azure.rb
135
+ - spec/.gitkeep
136
+ homepage: http://github.com/supportify/delayed_job_azure
137
+ licenses:
138
+ - BSD
139
+ metadata: {}
140
+ post_install_message:
141
+ rdoc_options: []
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 2.0.6
157
+ signing_key:
158
+ specification_version: 4
159
+ summary: Azure Queue backend for delayed_job
160
+ test_files: []