kimchi 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74d556ba7f72327244762b5bf743e90c9275214b
4
- data.tar.gz: 1a7e1224ad0fbfcf028f21608b0b7c7986121597
3
+ metadata.gz: 692b1c5b73b1c9aca217219ad4fa844e95c00ba8
4
+ data.tar.gz: 529260fb62c822cfd3b579ae748dffa6292165a8
5
5
  SHA512:
6
- metadata.gz: 157121e698f35462e62a2603c74956bbc60e4a61b6a0e70ef76957a0637981f2be20dfac7cf339bd7539bcd91a4f1d28420a7bfa5786bf44859155bff5386934
7
- data.tar.gz: f19fa638106dba00a06c073ecdccddf962727bf0210e87f700cda708bcae958d7d7b2e1f6ff4eb090702e845c0835d1470e27ec3d85b5ac432e4b8ecfe9d8c6e
6
+ metadata.gz: 8b6f5f6b8fd1f64e0fd6ff966ba2c84f809fb4363bc3d066fd38cbb459dec36b4e09ec1dab446d9d1cbcdbe9818e22026b4c7194d093c2e61710ba55fe68ad22
7
+ data.tar.gz: 6dcb65f0b93c370be8d6da1576acc27766f3eaae43b9b7a800a9ced8fb9028a2e1da01949497f5b6571b54b3167591d02a51d5e2844959fa9f067633326df288
@@ -1,3 +1,3 @@
1
1
  module Kimchi
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/wire.rb CHANGED
@@ -5,13 +5,15 @@ require "bunny"
5
5
  module Wire
6
6
 
7
7
  class Function
8
- def initialize(name, signature = nil, result = nil)
8
+ def initialize(name, signature = nil, result_type = nil, native_type = nil)
9
9
  @name = name
10
10
  @signature = signature
11
- @result = result
11
+ @result_type = result_type
12
+ @native_type = native_type
12
13
  end
14
+
13
15
  def to_json
14
- "{\"endpoint\": \"#{@name}\"" + ((@signature == nil) ? "" : ", \"signature\": #{@signature}") + ((@result == nil) ? "" : ", \"result\": \"#{@result}\"") + "}"
16
+ "{\"endpoint\": \"#{@name}\"" + ((@signature == nil) ? "" : ", \"signature\": #{@signature}") + ((@result_type == nil) ? "" : ", \"resultType\": \"#{@result_type}\"") + ((@native_type == nil) ? "" : ", \"nativeType\": \"#{@native_type}\"") + "}"
15
17
  end
16
18
  end
17
19
 
@@ -21,8 +23,34 @@ module Wire
21
23
  @arguments = arguments
22
24
  @contexts = contexts
23
25
  end
26
+
24
27
  def to_json
25
- "{\"address\": #{@function.to_json}, \"body\": #{@arguments.to_json}, \"contexts\": #{@contexts}}"
28
+ "{\"address\": #{@function.to_json}, \"body\": #{@arguments.to_json}, \"contexts\": #{@contexts}}"
29
+ end
30
+ end
31
+
32
+ class MessageCallback
33
+ def initialize (message_hash, message_id, callback, timeout_seconds)
34
+ @semaphore = Mutex.new
35
+ @callback = callback
36
+ @result = nil
37
+
38
+ Thread.new do
39
+ sleep(timeout_seconds)
40
+ message_hash.delete(message_id)
41
+ @semaphore.synchronize do
42
+ if @result.nil?
43
+ callback.timeout
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def set_result (result)
50
+ @semaphore.synchronize do
51
+ @result = result
52
+ @callback.complete(@result)
53
+ end
26
54
  end
27
55
  end
28
56
 
@@ -34,6 +62,8 @@ module Wire
34
62
  @uuid = UUID.new
35
63
  @caller_id = @uuid.generate
36
64
 
65
+ @message_hash = {}
66
+
37
67
  request_channel = @connection.create_channel
38
68
  @request_exchange = request_channel.topic("#{service_name}.request")
39
69
 
@@ -43,15 +73,39 @@ module Wire
43
73
  response_queue = response_channel.queue("#{response_queue_name}", {:durable => false, :exclusive => true, :auto_delete => true})
44
74
 
45
75
  response_queue.bind(response_exchange, :routing_key => "#{@caller_id}").subscribe do |delivery_info, metadata, payload|
46
- result_body = JSON.parse(payload)
47
- puts "#{payload}"
76
+ if (message_callback = @message_hash[metadata[:correlation_id]]) != nil
77
+ result_body = JSON.parse(payload)
78
+ message_callback.set_result(result_body)
79
+ end
48
80
  end
49
81
  end
50
82
 
51
83
  def transmit_in_only(version, invocation_signal)
84
+ @request_exchange.publish(invocation_signal.to_json, :routing_key => "#{version}.2", :headers => {"x-opt-callerId" => "#{@caller_id}"}, :content_type => "application/json", :message_id => "#{@uuid.generate}", :timestamp => Time.new.to_i)
85
+ end
52
86
 
53
- @request_exchange.publish(invocation_signal.to_json, :routing_key => "#{version}.2", :headers => {"x-opt-callerId" => "#{@caller_id}"}, :content_type => "application/json", :message_id => "#{@uuid.generate}", :timestamp => Time.new.to_i)
87
+ def transmit(version, invocation_signal, callback, timeout_seconds)
88
+ message_id = "#{@uuid.generate}".freeze
89
+ @message_hash[message_id] = MessageCallback.new(@message_hash, message_id, callback, timeout_seconds)
90
+ @request_exchange.publish(invocation_signal.to_json, :routing_key => "#{version}.2", :headers => {"x-opt-callerId" => "#{@caller_id}"}, :content_type => "application/json", :message_id => "#{message_id}", :timestamp => Time.new.to_i)
54
91
  end
55
92
  end
56
93
 
57
- end
94
+ class HttpTransport
95
+ def initialize (host, port)
96
+ @host = host
97
+ @port = port
98
+ end
99
+ def transmit (version, invocation_signal, callback, timeout_seconds)
100
+ uri = URI("#{@host}:#{@port}/api/message")
101
+ headers = {"Content-Type" => "application/json", "X-Icix-Version" => "#{version}"}
102
+ http = Net::HTTP.new(uri.host, uri.port)
103
+
104
+ res = http.post(uri.path, invocation_signal.to_json, headers)
105
+ res.code.should == '200'
106
+
107
+ response = JSON.parse res.body
108
+ callback.complete(response)
109
+ end
110
+ end
111
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kimchi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Gautier
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-17 00:00:00.000000000 Z
12
+ date: 2013-11-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -80,10 +80,9 @@ files:
80
80
  - README.md
81
81
  - Rakefile
82
82
  - kimchi.gemspec
83
- - lib/kimchi.rb
83
+ - lib/cucumber/features/step_definitions/common.rb
84
84
  - lib/kimchi/version.rb
85
85
  - lib/wire.rb
86
- - src/main/ruby/kimchi/wire/foo.rb
87
86
  homepage: http://www.icix.com
88
87
  licenses:
89
88
  - MIT
@@ -1,7 +0,0 @@
1
- require_relative "wire"
2
- require "json"
3
-
4
- puts "hellO"
5
- Wire::RabbitMQTransport.new("localhost", 5672, "echo").transmit_in_only("1", Wire::InvocationSignal.new(Wire::Function.new("talk"),{"message" => "Hello out there"}, []))
6
- sleep 60
7
-