warpcore 0.1.1
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 +7 -0
- data/lib/warpcore.rb +15 -0
- data/lib/warpcore/cache.rb +48 -0
- data/lib/warpcore/dispatch.rb +26 -0
- data/lib/warpcore/sidekiq.rb +76 -0
- data/lib/warpcore/tasks.rb +2 -0
- data/lib/warpcore/version.rb +3 -0
- data/lib/warpcore/web.rb +2 -0
- metadata +246 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2e5326e8e7b35b0c8a4854b9e5ed9eb7fd0f4d6f
|
4
|
+
data.tar.gz: c9a5c2df575d9ebdf99d79baa0d85d08407ea4f5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0c520d7a9fce634ee508c1e254f8a0c07942e73f056dfa5ed331d2830a434c076ccb6beb7b44a555b2a7b21195582fd6f110ea1e31b3946fc9317ba38740657e
|
7
|
+
data.tar.gz: 9c0dfe786e67fa2aadcba8ba6f6ef79c47259ac07f99cbb3bd9ee0ef86a5ad2550995d3ccf53eea0b04654327f7ad8b0f7a6fb43e23543c6962a943d88694953
|
data/lib/warpcore.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
# Load all component sets.
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
require 'parse/stack'
|
6
|
+
require 'sucker_punch'
|
7
|
+
require 'redis'
|
8
|
+
require 'moneta'
|
9
|
+
require 'dotenv'
|
10
|
+
require_relative 'warpcore/cache'
|
11
|
+
require_relative 'warpcore/dispatch'
|
12
|
+
require_relative 'warpcore/sidekiq'
|
13
|
+
require_relative 'warpcore/tasks'
|
14
|
+
require_relative 'warpcore/version'
|
15
|
+
require_relative 'warpcore/web'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'moneta'
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
|
5
|
+
module WarpCore
|
6
|
+
# cache helper
|
7
|
+
def self.cache(key,opts = {})
|
8
|
+
if block_given?
|
9
|
+
WarpCore::Cache.get( key, opts, Proc.new )
|
10
|
+
else
|
11
|
+
WarpCore::Cache.get( key, opts )
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Cache
|
16
|
+
class << self
|
17
|
+
attr_accessor :store
|
18
|
+
|
19
|
+
def setup(moneta, opts = {})
|
20
|
+
@store = moneta
|
21
|
+
end
|
22
|
+
|
23
|
+
def get(key, opts = {}, block = nil)
|
24
|
+
block = Proc.new if block_given? && block.nil?
|
25
|
+
valid = block.respond_to?(:call)
|
26
|
+
if @store.nil?
|
27
|
+
return valid ? block.call(key) : nil
|
28
|
+
end
|
29
|
+
return @store[key] unless block.respond_to?(:call)
|
30
|
+
opts[:expires] = opts[:expires].to_i if opts[:expires].present?
|
31
|
+
@store.fetch(key, opts) do |key|
|
32
|
+
val = block.call(key)
|
33
|
+
self.set(key, val, opts)
|
34
|
+
end
|
35
|
+
rescue Exception => e
|
36
|
+
warn "[WarpCore::Cache] Fetch Error => #{e}"
|
37
|
+
block.respond_to?(:call) ? block.call(key) : nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def set(key,value, opts = {})
|
41
|
+
@store&.store(key, value, opts) || value
|
42
|
+
rescue Exception => e
|
43
|
+
warn "[WarpCore::Cache] Store Error => #{e}"
|
44
|
+
value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'sucker_punch'
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
|
5
|
+
module WarpCore
|
6
|
+
|
7
|
+
class SerialDispatchQueue
|
8
|
+
include SuckerPunch::Job
|
9
|
+
workers 1 # serial queue
|
10
|
+
|
11
|
+
def perform(block = nil)
|
12
|
+
block.call() if block.respond_to?(:call)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.async
|
17
|
+
raise "You need to pass a block to async." unless block_given?
|
18
|
+
WarpCore::SerialDispatchQueue.perform_async Proc.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.delay_by(seconds)
|
22
|
+
raise "You need to pass a block to delay_by." unless block_given?
|
23
|
+
WarpCore::SerialDispatchQueue.perform_in(seconds.to_i, Proc.new)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require 'redis'
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
|
6
|
+
module WarpCore
|
7
|
+
|
8
|
+
def self.redis
|
9
|
+
WarpCore::RedisPoolInstance.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.dispatch(worker_name, *args)
|
13
|
+
klass = worker_name.constantize
|
14
|
+
if klass.respond_to?(:perform_async)
|
15
|
+
puts "=> [Dispatch:Async] #{worker_name}"
|
16
|
+
return klass.perform_async(*args)
|
17
|
+
else
|
18
|
+
warn "Dispatched #{worker_name} not a valid Sidekiq worker."
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
rescue NameError => e
|
22
|
+
puts "Worker [#{worker_name}] not defined."
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.dispatch_in(worker_name, *args)
|
27
|
+
klass = worker_name.constantize
|
28
|
+
if klass.respond_to?(:perform_async)
|
29
|
+
puts "=> [Dispatch:Delay] #{worker_name}"
|
30
|
+
return klass.perform_in(*args)
|
31
|
+
else
|
32
|
+
warn "Dispatched #{worker_name} not a valid Sidekiq worker."
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
rescue NameError => e
|
36
|
+
puts "Worker [#{worker_name}] not defined."
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.dispatch_sync(worker_name, *args)
|
41
|
+
klass = worker_name.constantize
|
42
|
+
object = klass.new
|
43
|
+
if object.respond_to?(:perform)
|
44
|
+
puts "=> [Dispatch:Sync] #{worker_name}"
|
45
|
+
return object.perform(*args)
|
46
|
+
else
|
47
|
+
warn "Perform #{worker_name} not a valid Sidekiq worker."
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
rescue NameError => e
|
51
|
+
puts "Worker [#{worker_name}] not defined."
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
# Because +Sidekiq.redis+ requires passing a block,
|
56
|
+
# we can't pass it straight to +Redis::Semaphore+.
|
57
|
+
# This class simply delegates every method call to
|
58
|
+
# the Sidekiq connection.
|
59
|
+
# use RedisPoolInstance.new to get a shared redis connection
|
60
|
+
class RedisPoolInstance
|
61
|
+
|
62
|
+
def method_missing(meth, *args, &block)
|
63
|
+
Sidekiq.redis do |connection|
|
64
|
+
connection.send(meth, *args, &block)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def respond_to_missing?(meth)
|
69
|
+
Sidekiq.redis do |connection|
|
70
|
+
connection.respond_to?(meth)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
end
|
data/lib/warpcore/web.rb
ADDED
metadata
ADDED
@@ -0,0 +1,246 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: warpcore
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anthony Persaud
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-08-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.1
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 4.2.1
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: parse-stack
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: redis
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2'
|
54
|
+
- - "<"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '4'
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2'
|
64
|
+
- - "<"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '4'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: sucker_punch
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '2'
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '2'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: sidekiq
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '4'
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '4'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: moneta
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: dotenv
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '2'
|
116
|
+
type: :runtime
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '2'
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: thor
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
type: :runtime
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: rake
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - "~>"
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '11'
|
144
|
+
type: :runtime
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - "~>"
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '11'
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: rack
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - "~>"
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '2'
|
158
|
+
type: :runtime
|
159
|
+
prerelease: false
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - "~>"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '2'
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: puma
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '3'
|
172
|
+
type: :runtime
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '3'
|
179
|
+
- !ruby/object:Gem::Dependency
|
180
|
+
name: foreman
|
181
|
+
requirement: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - "~>"
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
type: :runtime
|
187
|
+
prerelease: false
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
189
|
+
requirements:
|
190
|
+
- - "~>"
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: bundler
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - "~>"
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '1.12'
|
200
|
+
type: :development
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - "~>"
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '1.12'
|
207
|
+
description: A set of components and classes for quickly building cloud applications
|
208
|
+
and infrastructure.
|
209
|
+
email:
|
210
|
+
- persaud@modernistik.com
|
211
|
+
executables: []
|
212
|
+
extensions: []
|
213
|
+
extra_rdoc_files: []
|
214
|
+
files:
|
215
|
+
- lib/warpcore.rb
|
216
|
+
- lib/warpcore/cache.rb
|
217
|
+
- lib/warpcore/dispatch.rb
|
218
|
+
- lib/warpcore/sidekiq.rb
|
219
|
+
- lib/warpcore/tasks.rb
|
220
|
+
- lib/warpcore/version.rb
|
221
|
+
- lib/warpcore/web.rb
|
222
|
+
homepage: http://www.modernistik.com
|
223
|
+
licenses:
|
224
|
+
- MIT
|
225
|
+
metadata: {}
|
226
|
+
post_install_message:
|
227
|
+
rdoc_options: []
|
228
|
+
require_paths:
|
229
|
+
- lib
|
230
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
231
|
+
requirements:
|
232
|
+
- - ">="
|
233
|
+
- !ruby/object:Gem::Version
|
234
|
+
version: '0'
|
235
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - ">="
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '0'
|
240
|
+
requirements: []
|
241
|
+
rubyforge_project:
|
242
|
+
rubygems_version: 2.6.6
|
243
|
+
signing_key:
|
244
|
+
specification_version: 4
|
245
|
+
summary: Components for a modern scalable api server infrastructure with Ruby.
|
246
|
+
test_files: []
|