superbolt 0.4.1 → 0.5.0
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/superbolt.rb +5 -0
- data/lib/superbolt/facade.rb +8 -3
- data/lib/superbolt/file_manager.rb +24 -0
- data/lib/superbolt/file_packer.rb +7 -0
- data/lib/superbolt/file_unpacker.rb +7 -0
- data/lib/superbolt/incoming_message.rb +9 -3
- data/lib/superbolt/messenger.rb +9 -0
- data/lib/superbolt/version.rb +1 -1
- data/spec/file_packer_spec.rb +27 -0
- data/spec/file_unpacker_spec.rb +26 -0
- data/spec/incoming_message_spec.rb +58 -0
- data/spec/messenger_spec.rb +11 -0
- data/spec/support/commodore.jpg +0 -0
- data/superbolt.gemspec +1 -0
- metadata +27 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28f631baf4151d4a8a1cc90a04c4605720fe7add
|
4
|
+
data.tar.gz: 512314e5212d36fcdba03dddd0cf8238460752dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b52d7077b9d04ab8d8c0e262bd8f2bb9c88a189a8e7672c5e5d73a58137c769b3a4549bcfb7febce1433910f5314d3fe0ce294563278c1b4a3d36ee9f30c3fb6
|
7
|
+
data.tar.gz: 0c8e4857cc0874d2acb2e6f4b1eefb0d39b4fa3e41e4025288d3bfbbe84a0c988a13ddceb1a1ed9e1eb7d3711c3c3d58e0d37b39d80349a7845ba30a506a5f01
|
data/lib/superbolt.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
|
+
require 'file_marshal'
|
3
4
|
require 'bunny'
|
4
5
|
require 'amqp'
|
5
6
|
require 'eventmachine'
|
@@ -31,6 +32,10 @@ require "superbolt/app"
|
|
31
32
|
require "superbolt/processor"
|
32
33
|
require "superbolt/facade"
|
33
34
|
require "superbolt/messenger"
|
35
|
+
require "superbolt/file_manager"
|
36
|
+
require "superbolt/file_unpacker"
|
37
|
+
require "superbolt/file_packer"
|
38
|
+
|
34
39
|
require "superbolt/spec_helpers"
|
35
40
|
|
36
41
|
require "superbolt/router"
|
data/lib/superbolt/facade.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module Superbolt
|
2
|
-
|
2
|
+
|
3
3
|
def self.config=(options)
|
4
4
|
@config = Config.new({
|
5
5
|
env: env,
|
6
|
-
app_name: app_name
|
6
|
+
app_name: app_name,
|
7
|
+
file_matcher: file_matcher
|
7
8
|
}.merge(options))
|
8
9
|
end
|
9
10
|
|
@@ -16,7 +17,7 @@ module Superbolt
|
|
16
17
|
end
|
17
18
|
|
18
19
|
class << self
|
19
|
-
attr_writer :env
|
20
|
+
attr_writer :env, :file_matcher
|
20
21
|
attr_accessor :app_name
|
21
22
|
end
|
22
23
|
|
@@ -24,6 +25,10 @@ module Superbolt
|
|
24
25
|
@env || 'development'
|
25
26
|
end
|
26
27
|
|
28
|
+
def self.file_matcher
|
29
|
+
@file_matcher || /_file$/
|
30
|
+
end
|
31
|
+
|
27
32
|
def self.message(args={})
|
28
33
|
Superbolt::Messenger.new(args)
|
29
34
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Superbolt
|
2
|
+
class FileManager
|
3
|
+
attr_reader :hash
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
@hash = hash
|
7
|
+
end
|
8
|
+
|
9
|
+
def perform
|
10
|
+
file_keys.each do |key|
|
11
|
+
hash[key] = process_file(hash[key])
|
12
|
+
end
|
13
|
+
hash
|
14
|
+
end
|
15
|
+
|
16
|
+
def file_keys
|
17
|
+
@file_keys ||= hash.keys.find_all { |key| key.to_s.match(Superbolt.file_matcher) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def process_file(arg)
|
21
|
+
raise NotImplementedError
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -9,7 +9,8 @@ module Superbolt
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def parse
|
12
|
-
JSON.parse(payload)
|
12
|
+
hash = JSON.parse(payload)
|
13
|
+
unpack_files(hash)
|
13
14
|
rescue JSON::ParserError
|
14
15
|
payload
|
15
16
|
end
|
@@ -21,6 +22,11 @@ module Superbolt
|
|
21
22
|
def ack
|
22
23
|
channel.acknowledge(tag)
|
23
24
|
end
|
24
|
-
end
|
25
|
-
end
|
26
25
|
|
26
|
+
def unpack_files(hash)
|
27
|
+
return hash unless hash.is_a?(Hash) && hash["arguments"].is_a?(Hash)
|
28
|
+
hash['arguments'] = FileUnpacker.new(hash["arguments"]).perform
|
29
|
+
hash
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/superbolt/messenger.rb
CHANGED
@@ -47,9 +47,18 @@ module Superbolt
|
|
47
47
|
|
48
48
|
def send!(args=nil)
|
49
49
|
self.arguments = args if args
|
50
|
+
pack_files
|
50
51
|
queue.push(message)
|
51
52
|
end
|
52
53
|
|
54
|
+
def pack_files
|
55
|
+
return unless arguments.is_a?(Hash)
|
56
|
+
file_keys = arguments.keys.find_all { |key| key.to_s.match(Superbolt.file_matcher) }
|
57
|
+
file_keys.each do |key|
|
58
|
+
arguments[key] = FileMarshal::Dumper.new(arguments[key]).to_hash
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
53
62
|
def queue
|
54
63
|
unless name
|
55
64
|
raise "no destination app name defined, please pass one in"
|
data/lib/superbolt/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Superbolt::FilePacker do
|
4
|
+
let(:packer) { Superbolt::FilePacker.new(hash) }
|
5
|
+
|
6
|
+
let(:hash) {
|
7
|
+
{
|
8
|
+
my_file: file,
|
9
|
+
foo: 'bar'
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
let(:dumper) { double('dumper', to_hash: {}) }
|
14
|
+
|
15
|
+
let(:file) { double('file') }
|
16
|
+
|
17
|
+
describe '#perform' do
|
18
|
+
it "makes matching keys into a file hash via FileMarshal" do
|
19
|
+
FileMarshal::Dumper.should_receive(:new).with(file).and_return(dumper)
|
20
|
+
dumper.should_receive(:to_hash)
|
21
|
+
packer.perform.should == {
|
22
|
+
foo: 'bar',
|
23
|
+
my_file: {}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Superbolt::FileUnpacker do
|
4
|
+
let(:unpacker){ Superbolt::FileUnpacker.new(hash) }
|
5
|
+
let(:file) { File.open(File.dirname(__FILE__) + '/support/commodore.jpg')}
|
6
|
+
let(:file_hash) {
|
7
|
+
# back and forth in JSON required due to Time.parse issues
|
8
|
+
JSON.parse(FileMarshal::Dumper.new(file).to_hash.to_json)
|
9
|
+
}
|
10
|
+
let(:hash) {
|
11
|
+
{
|
12
|
+
my_file: file_hash,
|
13
|
+
foo: 'bar'
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
describe "#perform" do
|
18
|
+
it "makes the keys matching the Superbolt.file_matcher" do
|
19
|
+
unpacker.perform[:my_file].should be_a Tempfile
|
20
|
+
end
|
21
|
+
|
22
|
+
it "leaves everything else alone" do
|
23
|
+
unpacker.perform[:foo].should == "bar"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Superbolt::IncomingMessage do
|
4
|
+
let(:message){ Superbolt::IncomingMessage.new(delivery_info, payload, channel) }
|
5
|
+
let(:payload){ { some: "message" }.to_json }
|
6
|
+
let(:delivery_info) { double("info", delivery_tag: "tag") }
|
7
|
+
let(:channel) { double("channel") }
|
8
|
+
|
9
|
+
describe '#parse' do
|
10
|
+
context 'payload is not json' do
|
11
|
+
let(:payload) { 'foo' }
|
12
|
+
|
13
|
+
it 'just returns the payload' do
|
14
|
+
message.parse.should == payload
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'payload is json' do
|
19
|
+
it "parses it to a hash" do
|
20
|
+
message.parse.should == {'some' => 'message'}
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'payload has a file' do
|
24
|
+
let(:payload) { { 'arguments' => {'some_file' => {'file_hash' => 'yup'}} }.to_json }
|
25
|
+
let(:packer) { double('packer', perform: {'some_file' => 'some_file'} ) }
|
26
|
+
|
27
|
+
it "uses FilePacker to rewrite files into a hash" do
|
28
|
+
Superbolt::FileUnpacker.should_receive(:new)
|
29
|
+
.with({'some_file' => {'file_hash' => 'yup'}})
|
30
|
+
.and_return(packer)
|
31
|
+
message.parse.should == {'arguments' => packer.perform}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#reject' do
|
38
|
+
it "calls reject on the channel with the appropritate data and options" do
|
39
|
+
channel.should_receive(:reject).with('tag', true)
|
40
|
+
|
41
|
+
message.reject
|
42
|
+
end
|
43
|
+
|
44
|
+
it "can reject without requeuing" do
|
45
|
+
channel.should_receive(:reject).with('tag', false)
|
46
|
+
|
47
|
+
message.reject(false)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#ack" do
|
52
|
+
it "calls acknowledge on the channel" do
|
53
|
+
channel.should_receive(:acknowledge).with('tag')
|
54
|
+
|
55
|
+
message.ack
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/spec/messenger_spec.rb
CHANGED
@@ -82,6 +82,8 @@ describe Superbolt::Messenger do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
describe 'send!' do
|
85
|
+
let(:image_file) { File.open(File.dirname(__FILE__) + '/support/commodore.jpg')}
|
86
|
+
|
85
87
|
before do
|
86
88
|
messenger
|
87
89
|
.to(name)
|
@@ -97,5 +99,14 @@ describe Superbolt::Messenger do
|
|
97
99
|
'arguments' => 'none'
|
98
100
|
}
|
99
101
|
end
|
102
|
+
|
103
|
+
it "converts any values that have key ending in '_file' with FileMarshal" do
|
104
|
+
messenger.send!({
|
105
|
+
image_file: image_file
|
106
|
+
})
|
107
|
+
|
108
|
+
message = queue.pop
|
109
|
+
message['arguments']['image_file'].should be_a(Tempfile)
|
110
|
+
end
|
100
111
|
end
|
101
112
|
end
|
Binary file
|
data/superbolt.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency "amqp"
|
23
23
|
spec.add_dependency "bunny"
|
24
24
|
spec.add_dependency 'eventmachine'
|
25
|
+
spec.add_dependency 'file_marshal'
|
25
26
|
|
26
27
|
spec.add_development_dependency "bundler", "~> 1.3"
|
27
28
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: superbolt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- socialchorus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: file_marshal
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,6 +145,9 @@ files:
|
|
131
145
|
- lib/superbolt/connection/base.rb
|
132
146
|
- lib/superbolt/connection/queue.rb
|
133
147
|
- lib/superbolt/facade.rb
|
148
|
+
- lib/superbolt/file_manager.rb
|
149
|
+
- lib/superbolt/file_packer.rb
|
150
|
+
- lib/superbolt/file_unpacker.rb
|
134
151
|
- lib/superbolt/incoming_message.rb
|
135
152
|
- lib/superbolt/message_handler.rb
|
136
153
|
- lib/superbolt/messenger.rb
|
@@ -150,11 +167,15 @@ files:
|
|
150
167
|
- spec/app_spec.rb
|
151
168
|
- spec/config_spec.rb
|
152
169
|
- spec/connection_spec.rb
|
170
|
+
- spec/file_packer_spec.rb
|
171
|
+
- spec/file_unpacker_spec.rb
|
172
|
+
- spec/incoming_message_spec.rb
|
153
173
|
- spec/messenger_spec.rb
|
154
174
|
- spec/queue_spec.rb
|
155
175
|
- spec/router_spec.rb
|
156
176
|
- spec/spec_helper.rb
|
157
177
|
- spec/superbolt_spec.rb
|
178
|
+
- spec/support/commodore.jpg
|
158
179
|
- spec/support/queue_helpers.rb
|
159
180
|
- superbolt.gemspec
|
160
181
|
homepage: ''
|
@@ -185,9 +206,13 @@ test_files:
|
|
185
206
|
- spec/app_spec.rb
|
186
207
|
- spec/config_spec.rb
|
187
208
|
- spec/connection_spec.rb
|
209
|
+
- spec/file_packer_spec.rb
|
210
|
+
- spec/file_unpacker_spec.rb
|
211
|
+
- spec/incoming_message_spec.rb
|
188
212
|
- spec/messenger_spec.rb
|
189
213
|
- spec/queue_spec.rb
|
190
214
|
- spec/router_spec.rb
|
191
215
|
- spec/spec_helper.rb
|
192
216
|
- spec/superbolt_spec.rb
|
217
|
+
- spec/support/commodore.jpg
|
193
218
|
- spec/support/queue_helpers.rb
|