rflow-components-http 0.0.6 → 0.0.7
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.
- data/Gemfile +0 -3
- data/lib/rflow/components/http.rb +3 -3
- data/lib/rflow/components/http/extensions.rb +3 -3
- data/lib/rflow/components/http/server.rb +14 -13
- data/lib/rflow/components/http/version.rb +1 -1
- data/rflow-components-http.gemspec +2 -2
- data/spec/extensions_spec.rb +3 -3
- data/spec/schema_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- metadata +3 -3
data/Gemfile
CHANGED
@@ -6,12 +6,12 @@ class RFlow
|
|
6
6
|
module HTTP
|
7
7
|
# Load the schemas
|
8
8
|
SCHEMA_DIRECTORY = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..', '..', '..', 'schema'))
|
9
|
-
|
9
|
+
|
10
10
|
SCHEMA_FILES = {
|
11
11
|
'http_response.avsc' => 'RFlow::Message::Data::HTTP::Response',
|
12
12
|
'http_request.avsc' => 'RFlow::Message::Data::HTTP::Request',
|
13
13
|
}
|
14
|
-
|
14
|
+
|
15
15
|
SCHEMA_FILES.each do |file_name, data_type_name|
|
16
16
|
schema_string = ::File.read(::File.join(SCHEMA_DIRECTORY, file_name))
|
17
17
|
RFlow::Configuration.add_available_data_type data_type_name, 'avro', schema_string
|
@@ -23,7 +23,7 @@ class RFlow
|
|
23
23
|
RFlow::Configuration.add_available_data_extension('RFlow::Message::Data::HTTP::Request',
|
24
24
|
RFlow::Components::HTTP::Extensions::HTTPRequestExtension)
|
25
25
|
|
26
|
-
|
26
|
+
|
27
27
|
RFlow::Configuration.add_available_data_extension('RFlow::Message::Data::HTTP::Response',
|
28
28
|
RFlow::Components::HTTP::Extensions::IPConnectionExtension)
|
29
29
|
RFlow::Configuration.add_available_data_extension('RFlow::Message::Data::HTTP::Response',
|
@@ -17,7 +17,7 @@ class RFlow
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
# Need to be careful when extending to not clobber data already in data_object
|
22
22
|
module HTTPRequestExtension
|
23
23
|
def self.extended(base_data)
|
@@ -34,7 +34,7 @@ class RFlow
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
# Need to be careful when extending to not clobber data already in data_object
|
39
39
|
module HTTPResponseExtension
|
40
40
|
def self.extended(base_data)
|
@@ -59,7 +59,7 @@ class RFlow
|
|
59
59
|
data_object[name] = args.first.to_i
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
end
|
64
64
|
|
65
65
|
end
|
@@ -10,9 +10,9 @@ class RFlow
|
|
10
10
|
class Server < RFlow::Component
|
11
11
|
input_port :response_port
|
12
12
|
output_port :request_port
|
13
|
-
|
13
|
+
|
14
14
|
attr_accessor :port, :listen, :server_signature, :connections
|
15
|
-
|
15
|
+
|
16
16
|
def configure!(config)
|
17
17
|
@listen = config['listen'] ? config['listen'] : '127.0.0.1'
|
18
18
|
@port = config['port'] ? config['port'].to_i : 8000
|
@@ -43,7 +43,7 @@ class RFlow
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
class Connection < EventMachine::Connection
|
48
48
|
include EventMachine::HttpServer
|
49
49
|
|
@@ -58,16 +58,16 @@ class RFlow
|
|
58
58
|
no_environment_strings
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
|
62
62
|
def receive_data(data)
|
63
63
|
RFlow.logger.debug { "#{self.class.name}: Received #{data.bytesize} bytes of data from #{client_ip}:#{client_port} to #{@server_ip}:#{@server_port}" }
|
64
64
|
super
|
65
65
|
end
|
66
|
-
|
67
|
-
|
66
|
+
|
67
|
+
|
68
68
|
def process_http_request
|
69
69
|
RFlow.logger.debug { "#{self.class.name}: Received HTTP request from #{client_ip}:#{client_port} to #{@server_ip}:#{@server_port} for #{@http_request_uri}" }
|
70
|
-
|
70
|
+
|
71
71
|
processing_event = RFlow::Message::ProcessingEvent.new(server.instance_uuid, Time.now.utc)
|
72
72
|
|
73
73
|
request_message = RFlow::Message.new('RFlow::Message::Data::HTTP::Request')
|
@@ -83,12 +83,12 @@ class RFlow
|
|
83
83
|
request_message.data.protocol = @http_protocol
|
84
84
|
request_message.data.content = @http_post_content
|
85
85
|
request_message.data.headers = {}
|
86
|
-
|
86
|
+
|
87
87
|
@http_headers.split(/\0/).each do |header|
|
88
88
|
name, val = header.split(/:\s*/, 2)
|
89
89
|
request_message.data.headers[name] = val
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
processing_event.context = signature.to_s
|
93
93
|
processing_event.completed_at = Time.now.utc
|
94
94
|
request_message.provenance << processing_event
|
@@ -96,7 +96,7 @@ class RFlow
|
|
96
96
|
server.request_port.send_message request_message
|
97
97
|
end
|
98
98
|
|
99
|
-
|
99
|
+
|
100
100
|
def send_http_response(response_message=nil)
|
101
101
|
resp = EventMachine::DelegatedHttpResponse.new(self)
|
102
102
|
|
@@ -105,7 +105,7 @@ class RFlow
|
|
105
105
|
resp.content = ""
|
106
106
|
resp.headers["Content-Type"] = "text/html"
|
107
107
|
resp.headers["Server"] = "Apache"
|
108
|
-
|
108
|
+
|
109
109
|
if response_message
|
110
110
|
resp.status = response_message.data.status_code
|
111
111
|
resp.content = response_message.data.content
|
@@ -115,17 +115,18 @@ class RFlow
|
|
115
115
|
end
|
116
116
|
|
117
117
|
RFlow.logger.debug { "#{self.class.name}: Sending a HTTP response #{resp.status} to #{client_ip}:#{client_port}" }
|
118
|
-
|
118
|
+
|
119
119
|
resp.send_response
|
120
120
|
close_connection_after_writing
|
121
121
|
end
|
122
122
|
|
123
|
-
|
123
|
+
|
124
124
|
# Called when a connection is torn down for whatever reason.
|
125
125
|
# Remove this connection from the server's list
|
126
126
|
def unbind(reason=nil)
|
127
127
|
RFlow.logger.debug { "#{self.class.name}: Disconnected from HTTP client #{client_ip}:#{client_port}#{reason.nil? ? '' : " due to '#{reason}'"}" }
|
128
128
|
server.connections.delete(self.signature.to_s)
|
129
|
+
super()
|
129
130
|
end
|
130
131
|
end
|
131
132
|
end
|
@@ -6,10 +6,10 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "rflow-components-http"
|
7
7
|
s.version = RFlow::Components::HTTP::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.required_ruby_version = '
|
9
|
+
s.required_ruby_version = '>= 1.9'
|
10
10
|
s.authors = ["Michael L. Artz"]
|
11
11
|
s.email = ["michael.artz@redjack.com"]
|
12
|
-
s.homepage = ""
|
12
|
+
s.homepage = "https://github.com/redjack/rflow-components-http"
|
13
13
|
s.summary = %q{HTTP client and server components for the RFlow FBP framework}
|
14
14
|
s.description = %q{HTTP client and server components for the RFlow FBP framework. Also includes the necessary HTTP::Request and HTTP::Response message types}
|
15
15
|
|
data/spec/extensions_spec.rb
CHANGED
@@ -18,7 +18,7 @@ describe RFlow::Components::HTTP::Extensions::HTTPRequestExtension do
|
|
18
18
|
request.data.uri = 'POST'
|
19
19
|
request.data.uri.should == 'POST'
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
end
|
23
23
|
|
24
24
|
describe RFlow::Components::HTTP::Extensions::HTTPResponseExtension do
|
@@ -28,7 +28,7 @@ describe RFlow::Components::HTTP::Extensions::HTTPResponseExtension do
|
|
28
28
|
|
29
29
|
it "should work" do
|
30
30
|
RFlow::Configuration.available_data_extensions['RFlow::Message::Data::HTTP::Response'].should include(described_class)
|
31
|
-
|
31
|
+
|
32
32
|
response = RFlow::Message.new('RFlow::Message::Data::HTTP::Response')
|
33
33
|
response.data.protocol.should == 'HTTP/1.0'
|
34
34
|
response.data.status_code.should == 200
|
@@ -39,5 +39,5 @@ describe RFlow::Components::HTTP::Extensions::HTTPResponseExtension do
|
|
39
39
|
response.data.status_code = 404
|
40
40
|
response.data.status_code.should == 404
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
end
|
data/spec/schema_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe 'RFlow::Message::Data::HTTP::Request Avro Schema' do
|
|
4
4
|
before(:each) do
|
5
5
|
@schema_string = RFlow::Configuration.available_data_types['RFlow::Message::Data::HTTP::Request']['avro']
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
it "should encode and decode an object" do
|
9
9
|
request = {
|
10
10
|
'method' => 'METHOD',
|
@@ -38,7 +38,7 @@ describe 'RFlow::Message::Data::HTTP::Response Avro Schema' do
|
|
38
38
|
before(:each) do
|
39
39
|
@schema_string = RFlow::Configuration.available_data_types['RFlow::Message::Data::HTTP::Response']['avro']
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it "should encode and decode an object" do
|
43
43
|
response = {
|
44
44
|
'protocol' => 'METHOD',
|
data/spec/spec_helper.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'rflow-c
|
|
3
3
|
require 'logger'
|
4
4
|
|
5
5
|
RFlow.logger = Logger.new STDOUT
|
6
|
-
|
6
|
+
|
7
7
|
def decode_avro(schema_string, serialized_object)
|
8
8
|
schema = Avro::Schema.parse(schema_string)
|
9
9
|
sio = StringIO.new(serialized_object)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rflow-components-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -99,7 +99,7 @@ files:
|
|
99
99
|
- spec/http_server_spec.rb
|
100
100
|
- spec/schema_spec.rb
|
101
101
|
- spec/spec_helper.rb
|
102
|
-
homepage:
|
102
|
+
homepage: https://github.com/redjack/rflow-components-http
|
103
103
|
licenses: []
|
104
104
|
post_install_message:
|
105
105
|
rdoc_options: []
|
@@ -108,7 +108,7 @@ require_paths:
|
|
108
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
109
|
none: false
|
110
110
|
requirements:
|
111
|
-
- -
|
111
|
+
- - ! '>='
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: '1.9'
|
114
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|