warpcore 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []