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.
@@ -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
@@ -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
@@ -0,0 +1,2 @@
1
+ require 'rake'
2
+ require 'thor'
@@ -0,0 +1,3 @@
1
+ module WarpCore
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'puma'
2
+ require 'foreman'
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: []