warpcore 0.1.4 → 0.1.5
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.
- checksums.yaml +4 -4
- data/lib/warpcore.rb +1 -0
- data/lib/warpcore/cache.rb +3 -1
- data/lib/warpcore/config.rb +32 -0
- data/lib/warpcore/dispatch.rb +12 -3
- data/lib/warpcore/parse_stack.rb +8 -1
- data/lib/warpcore/sidekiq.rb +25 -7
- data/lib/warpcore/version.rb +4 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49d5997abb7a9c1c8329fec10bf2d19aa6aeae4b
|
4
|
+
data.tar.gz: 6e08ceef2a0f355be9cac56c68174146a3863afb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45ab49dbaf5614ff6bbbb6ece565b256066c895aad4f4fb083f293795f459b3eb5bcd1cc5ddb44cae3774cb06763cf11d0bd0ca5d5c2e1717a58cd30d5dce5ba
|
7
|
+
data.tar.gz: 00a4006ed3ce3eddac21f199ad3d26f428aaf1d4c0d5d1e02b872aa022c01f76b55a01dda3c185cc8c795e60c36fcf2c563a0e8239ccff07f74a2256b0c26955
|
data/lib/warpcore.rb
CHANGED
data/lib/warpcore/cache.rb
CHANGED
@@ -3,7 +3,7 @@ require 'active_support'
|
|
3
3
|
require 'active_support/core_ext'
|
4
4
|
|
5
5
|
module WarpCore
|
6
|
-
|
6
|
+
|
7
7
|
def self.cache(key,opts = {})
|
8
8
|
if block_given?
|
9
9
|
WarpCore::Cache.get( key, opts, Proc.new )
|
@@ -12,6 +12,8 @@ module WarpCore
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
# A class helper to manage a Moneta cache store that can be used throughout the
|
16
|
+
# system.
|
15
17
|
class Cache
|
16
18
|
class << self
|
17
19
|
attr_accessor :store
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
|
5
|
+
module WarpCore
|
6
|
+
# Class provides a helper method to load
|
7
|
+
class Env
|
8
|
+
# Applies a remote JSON hash containing the ENV keys and values from a remote
|
9
|
+
# URL. Values from the JSON hash are only applied to the current ENV hash ONLY if
|
10
|
+
# it does not already have a value. Therefore local ENV values will take precedence
|
11
|
+
# over remote ones. By default, it uses the url in value in ENV['ENV_URL'].
|
12
|
+
# @param url [String] the remote url that responds with the JSON body.
|
13
|
+
# @return [Boolean] true if the JSON hash was found and applied successfully.
|
14
|
+
def self.load_url!(url = nil)
|
15
|
+
url ||= ENV["ENV_URL"]
|
16
|
+
if url.present?
|
17
|
+
begin
|
18
|
+
remote_config = JSON.load open( url )
|
19
|
+
remote_config.each do |key,value|
|
20
|
+
k = key.upcase
|
21
|
+
ENV[k] ||= value.to_s
|
22
|
+
end
|
23
|
+
return true
|
24
|
+
rescue => e
|
25
|
+
warn "[WarpCore::Config] Error loading config: #{url} (#{e})"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/warpcore/dispatch.rb
CHANGED
@@ -3,24 +3,29 @@ require 'active_support'
|
|
3
3
|
require 'active_support/core_ext'
|
4
4
|
|
5
5
|
module WarpCore
|
6
|
-
|
6
|
+
# A class to support running blocks in a serial queue on a background thread.
|
7
7
|
class SerialDispatchQueue
|
8
8
|
include SuckerPunch::Job
|
9
9
|
workers 1 # serial queue
|
10
|
-
|
10
|
+
# @!visibility private
|
11
11
|
def perform(block = nil)
|
12
12
|
block.call() if block.respond_to?(:call)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
# A class to support running blocks in concurrent queue on a background thread.
|
16
17
|
class ParallelDispatchQueue
|
17
18
|
include SuckerPunch::Job
|
18
|
-
|
19
|
+
# @!visibility private
|
19
20
|
def perform(block = nil)
|
20
21
|
block.call() if block.respond_to?(:call)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
25
|
+
# Helper method to run a block on a background thread.
|
26
|
+
# @param type [Symbol] the queue to use when dispatching the block.
|
27
|
+
# * :serial - use the {SerialDispatchQueue}
|
28
|
+
# * :parallel - use the {ParallelDispatchQueue}
|
24
29
|
def self.async(type = :serial)
|
25
30
|
raise "You need to pass a block to async." unless block_given?
|
26
31
|
if type == :parallel
|
@@ -30,6 +35,10 @@ module WarpCore
|
|
30
35
|
end
|
31
36
|
end
|
32
37
|
|
38
|
+
# Helper method to run a block on a background thread.
|
39
|
+
# @param type (see WarpCore.async)
|
40
|
+
# * :serial - use the {SerialDispatchQueue}
|
41
|
+
# * :parallel - use the {ParallelDispatchQueue}
|
33
42
|
def self.delay_by(seconds, type = :serial)
|
34
43
|
raise "You need to pass a block to delay_by." unless block_given?
|
35
44
|
if type == :parallel
|
data/lib/warpcore/parse_stack.rb
CHANGED
@@ -3,7 +3,9 @@ require_relative 'dispatch'
|
|
3
3
|
|
4
4
|
module Parse
|
5
5
|
class Object
|
6
|
-
|
6
|
+
# Adds support for saving a Parse::Object instance in the background.
|
7
|
+
# If an exception is thrown, it is handled silently.
|
8
|
+
# @yield A block to call after the save has completed successfully
|
7
9
|
def save_eventually
|
8
10
|
block = block_given? ? Proc.new : nil
|
9
11
|
WarpCore.async do
|
@@ -16,6 +18,11 @@ module Parse
|
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
21
|
+
# Same as {save_eventually}, but calls `save` on an object in the if it is
|
22
|
+
# new, otherwise it calls `update!`.
|
23
|
+
# If an exception is thrown, it is handled silently.
|
24
|
+
# @yield (see Parse::Object#save_eventually)
|
25
|
+
# @see #save_eventually
|
19
26
|
def save_eventually!
|
20
27
|
WarpCore.async do
|
21
28
|
begin
|
data/lib/warpcore/sidekiq.rb
CHANGED
@@ -5,10 +5,17 @@ require 'active_support/core_ext'
|
|
5
5
|
|
6
6
|
module WarpCore
|
7
7
|
|
8
|
+
# @return [RedisPoolInstance] a usable redis instance shared by Sidekiq.
|
8
9
|
def self.redis
|
9
10
|
WarpCore::RedisPoolInstance.new
|
10
11
|
end
|
11
12
|
|
13
|
+
# Asynchronously dispatch a Sidekiq worker with the provided arguments. This
|
14
|
+
# is equivalent to calling the worker directly with `perform_async`.
|
15
|
+
# @example
|
16
|
+
# WarpCore.dispatch 'Workers::MyWorker', argument1, argument2.....
|
17
|
+
# @param worker_name [String] the full class path of the worker (ex. `Workers::MyWorker`)
|
18
|
+
# @param args [Array] the arguments to pass to the worker.
|
12
19
|
def self.dispatch(worker_name, *args)
|
13
20
|
klass = worker_name.constantize
|
14
21
|
if klass.respond_to?(:perform_async)
|
@@ -23,6 +30,13 @@ module WarpCore
|
|
23
30
|
nil
|
24
31
|
end
|
25
32
|
|
33
|
+
# Asynchronously dispatch a Sidekiq worker at a later time with the provided
|
34
|
+
# arguments. This is equivalent to calling the worker directly with `perform_in`.
|
35
|
+
# @example
|
36
|
+
# WarpCore.dispatch_in 'Workers::MyWorker', 10.seconds, argument1, argument2.....
|
37
|
+
# @param worker_name (see WarpCore.dispatch)
|
38
|
+
# @param args [Array] the arguments to pass to the worker. The first argument
|
39
|
+
# should be the amount of time to wait before dispatching the worker.
|
26
40
|
def self.dispatch_in(worker_name, *args)
|
27
41
|
klass = worker_name.constantize
|
28
42
|
if klass.respond_to?(:perform_async)
|
@@ -37,6 +51,13 @@ module WarpCore
|
|
37
51
|
nil
|
38
52
|
end
|
39
53
|
|
54
|
+
# Synchronously dispatch a Sidekiq worker with the provided
|
55
|
+
# arguments. This is equivalent to instantiating the worker instance directly
|
56
|
+
# and calling `perform` on it.
|
57
|
+
# @example
|
58
|
+
# WarpCore.dispatch_sync 'Workers::MyWorker', argument1, argument2.....
|
59
|
+
# @param worker_name (see WarpCore.dispatch)
|
60
|
+
# @param args [Array] the arguments to pass to the worker.
|
40
61
|
def self.dispatch_sync(worker_name, *args)
|
41
62
|
klass = worker_name.constantize
|
42
63
|
object = klass.new
|
@@ -52,19 +73,16 @@ module WarpCore
|
|
52
73
|
nil
|
53
74
|
end
|
54
75
|
|
55
|
-
#
|
56
|
-
#
|
57
|
-
# This class simply delegates every method call to
|
58
|
-
# the Sidekiq connection.
|
59
|
-
# use RedisPoolInstance.new to get a shared redis connection
|
76
|
+
# This class simply delegates every method call to the Sidekiq redis connection.
|
77
|
+
# Use RedisPoolInstance.new to get a shared redis connection.
|
60
78
|
class RedisPoolInstance
|
61
|
-
|
79
|
+
# @!visibility private
|
62
80
|
def method_missing(meth, *args, &block)
|
63
81
|
Sidekiq.redis do |connection|
|
64
82
|
connection.send(meth, *args, &block)
|
65
83
|
end
|
66
84
|
end
|
67
|
-
|
85
|
+
# @!visibility private
|
68
86
|
def respond_to_missing?(meth)
|
69
87
|
Sidekiq.redis do |connection|
|
70
88
|
connection.respond_to?(meth)
|
data/lib/warpcore/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warpcore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Persaud
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -200,6 +200,7 @@ extra_rdoc_files: []
|
|
200
200
|
files:
|
201
201
|
- lib/warpcore.rb
|
202
202
|
- lib/warpcore/cache.rb
|
203
|
+
- lib/warpcore/config.rb
|
203
204
|
- lib/warpcore/dispatch.rb
|
204
205
|
- lib/warpcore/parse_stack.rb
|
205
206
|
- lib/warpcore/sidekiq.rb
|