converse 1.0.2

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/lib/api.rb ADDED
@@ -0,0 +1,7 @@
1
+ class API
2
+ attr_reader :broker
3
+
4
+ def initialize(broker)
5
+ @broker = broker
6
+ end
7
+ end
data/lib/broker.rb ADDED
@@ -0,0 +1,13 @@
1
+ class Broker
2
+ attr_accessor :domain_language
3
+
4
+ def open_topic(concern, action)
5
+ end
6
+
7
+ def broker_conversation(topic)
8
+ end
9
+
10
+ def discuss(concern, action)
11
+ broker_conversation(open_topic(concern, action))
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ class Conversation
2
+ attr_accessor :uri
3
+ attr_accessor :body
4
+ attr_accessor :headers
5
+ attr_accessor :connection
6
+ attr_accessor :host
7
+ attr_accessor :port
8
+ attr_accessor :path
9
+ attr_accessor :request
10
+ attr_accessor :response
11
+ attr_accessor :subscribers
12
+
13
+ def initialize(uri)
14
+ @uri = uri
15
+ parsed = URI.parse(uri)
16
+ @host = parsed.host
17
+ @port = parsed.port
18
+ @path = parsed.path
19
+ @subscribers = []
20
+ end
21
+
22
+ def ask
23
+ raise NotImplementedError.new
24
+ end
25
+
26
+ def say
27
+ raise NotImplementedError.new
28
+ end
29
+
30
+ def subscribe(subscriber)
31
+ @subscribers << subscriber
32
+ end
33
+
34
+ def notify_subscribers(data)
35
+ @subscribers.each do |subscriber|
36
+ subscriber.notify(data)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,57 @@
1
+ require 'net/http'
2
+ require "comms/conversation"
3
+ require "json"
4
+
5
+ class HTMLConversation < Conversation
6
+ attr_accessor :use_ssl
7
+
8
+ def initialize(uri)
9
+ super(uri)
10
+ @use_ssl = false
11
+ @port = @use_ssl ? 443 : 80 if @port == nil
12
+ end
13
+
14
+ def notify_subscribers_of_request(path)
15
+ output = "HTTP=>\n"
16
+ output += "#{path}\n"
17
+ output += "#{@request.body}\n"
18
+ notify_subscribers(output)
19
+ end
20
+
21
+ def notify_subscribers_of_response
22
+ output = "<=HTTP\n"
23
+ output += "#{@response.body}\n"
24
+ notify_subscribers(output)
25
+ end
26
+
27
+ def populate_request(path, data)
28
+ @request.body = data if not data.nil?
29
+ @request.basic_auth "hetzner_api", "secret"
30
+ notify_subscribers_of_request(path)
31
+ end
32
+
33
+ def converse(path, data = nil)
34
+ populate_request(path, data)
35
+ @response = connect.request @request
36
+ notify_subscribers_of_response
37
+ return @response
38
+ end
39
+
40
+ def connect
41
+ if (@use_ssl)
42
+ Net::HTTP.start(@host, @port, :use_ssl => @use_ssl ? "yes" : "no")
43
+ else
44
+ Net::HTTP.start(@host, @port)
45
+ end
46
+ end
47
+
48
+ def ask(path, data = nil)
49
+ @request = Net::HTTP::Get.new(path)
50
+ converse(path, data)
51
+ end
52
+
53
+ def say(path, data = nil)
54
+ @request = Net::HTTP::Post.new(path)
55
+ converse(path, data)
56
+ end
57
+ end
@@ -0,0 +1,39 @@
1
+ require "comms/conversation"
2
+ require "mysql2"
3
+
4
+ class MysqlConversation < Conversation
5
+ attr_writer :username
6
+ attr_writer :password
7
+ attr_writer :database
8
+ attr_accessor :query
9
+
10
+ def initialize(uri)
11
+ super(uri)
12
+ parsed = URI.parse(uri)
13
+ @username = parsed.user
14
+ @password = parsed.password
15
+ @database = parsed.path.gsub(/\//, "")
16
+ end
17
+
18
+ def connect()
19
+ @client = Mysql2::Client.new(:host => @host,
20
+ :port => @port.to_f,
21
+ :username => @username,
22
+ :password => @password,
23
+ :database => @database)
24
+ end
25
+
26
+ def converse
27
+ connect()
28
+ @client.query(@query)
29
+ end
30
+
31
+ def ask
32
+ converse
33
+ end
34
+
35
+ def say
36
+ converse
37
+ end
38
+
39
+ end
@@ -0,0 +1,58 @@
1
+ require "comms/simple_logger"
2
+
3
+ class Interaction
4
+ attr_accessor :broker
5
+ attr_accessor :concern
6
+ attr_accessor :action
7
+ attr_accessor :substance
8
+ attr_accessor :conversation
9
+ attr_accessor :should_i_ask
10
+
11
+ def discuss_with_broker_concerning(broker, concern)
12
+ discuss_with(broker)
13
+ concerning(concern)
14
+ end
15
+
16
+ def discuss_with(broker)
17
+ @broker = broker
18
+ end
19
+
20
+ def concerning(concern)
21
+ @concern = concern.dup
22
+ end
23
+
24
+ def about(action)
25
+ @action = action.dup
26
+ end
27
+
28
+ def detailed_by(substance)
29
+ @substance = substance
30
+ end
31
+
32
+ def by_asking
33
+ @should_i_ask = true
34
+ end
35
+
36
+ def by_saying
37
+ @should_i_ask = false
38
+ end
39
+
40
+ def ask
41
+ @conversation.ask
42
+ end
43
+
44
+ def say
45
+ @conversation.say
46
+ end
47
+
48
+ def discuss
49
+ @conversation = broker.broker_conversation(@broker.open_topic(@concern, @action))
50
+ @conversation.subscribe(SimpleLogger.new)
51
+ @should_i_ask ? response = ask : response = say
52
+ interpret_conversation(response)
53
+ end
54
+
55
+ def interpret_conversation(response)
56
+ response
57
+ end
58
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: converse
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 2
10
+ version: 1.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Ernst van Graan
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-08-23 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description:
22
+ email:
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/api.rb
31
+ - lib/interaction.rb
32
+ - lib/broker.rb
33
+ - lib/comms/conversation.rb
34
+ - lib/comms/html/html_conversation.rb
35
+ - lib/comms/mysql/mysql_conversation.rb
36
+ homepage:
37
+ licenses: []
38
+
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib/comms/mysql
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ hash: 3
50
+ segments:
51
+ - 0
52
+ version: "0"
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.24
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Converse provides Broker/Translator classes to facilitate communication across an API by means of conversations
69
+ test_files: []
70
+