messed 0.0.1
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 +8 -0
- data/README.rdoc +22 -0
- data/Rakefile +76 -0
- data/VERSION +1 -0
- data/application_spec/Rakefile +12 -0
- data/application_spec/app/runner.rb +3 -0
- data/application_spec/bin/runner +18 -0
- data/application_spec/bin/status +36 -0
- data/application_spec/bin/web +29 -0
- data/application_spec/config/environment.rb +8 -0
- data/application_spec/config/environments/development.rb +0 -0
- data/application_spec/log/development.log +6 -0
- data/application_spec/spec/application_spec.rb +12 -0
- data/application_spec/spec/spec.opts +7 -0
- data/application_spec/spec/spec_helper.rb +42 -0
- data/bin/messed +9 -0
- data/lib/messed/booter.rb +114 -0
- data/lib/messed/configuration.rb +94 -0
- data/lib/messed/controller/helper.rb +8 -0
- data/lib/messed/controller/processing.rb +22 -0
- data/lib/messed/controller/respond.rb +48 -0
- data/lib/messed/controller.rb +17 -0
- data/lib/messed/em_runner.rb +50 -0
- data/lib/messed/interface/adapter/sms.rb +4 -0
- data/lib/messed/interface/adapter/twitter_consumer.rb +35 -0
- data/lib/messed/interface/adapter/twitter_search.rb +111 -0
- data/lib/messed/interface/adapter/twitter_sender.rb +44 -0
- data/lib/messed/interface/adapter/twitter_streaming.rb +50 -0
- data/lib/messed/interface/adapter.rb +68 -0
- data/lib/messed/interface/runner.rb +20 -0
- data/lib/messed/interface.rb +74 -0
- data/lib/messed/logger.rb +50 -0
- data/lib/messed/matcher.rb +50 -0
- data/lib/messed/message/twitter.rb +23 -0
- data/lib/messed/message.rb +35 -0
- data/lib/messed/queue/beanstalk.rb +56 -0
- data/lib/messed/queue.rb +17 -0
- data/lib/messed/session/memcache.rb +40 -0
- data/lib/messed/session.rb +7 -0
- data/lib/messed/tasks/console.rb +70 -0
- data/lib/messed/tasks/generation.rb +12 -0
- data/lib/messed/tasks/runner.rb +50 -0
- data/lib/messed/tasks/status.rb +37 -0
- data/lib/messed/tasks.rb +9 -0
- data/lib/messed/util/remote_status.rb +45 -0
- data/lib/messed.rb +235 -0
- data/patterns/messed/Pattern +24 -0
- data/patterns/messed/Rakefile +12 -0
- data/patterns/messed/app/runner.rb +5 -0
- data/patterns/messed/bin/console +3 -0
- data/patterns/messed/bin/runner +3 -0
- data/patterns/messed/bin/status +3 -0
- data/patterns/messed/bin/web +13 -0
- data/patterns/messed/config/environment.rb +15 -0
- data/patterns/messed/config/environments/development.rb +2 -0
- data/patterns/messed/config/environments/production.rb +0 -0
- data/patterns/messed/config/environments/test.rb +0 -0
- data/patterns/messed/spec/application_spec.rb +12 -0
- data/patterns/messed/spec/spec.opts +7 -0
- data/patterns/messed/spec/spec_helper.rb +44 -0
- data/spec/adapter/applications/twitter_search/app/application.rb +3 -0
- data/spec/adapter/applications/twitter_search/app/runner.rb +7 -0
- data/spec/adapter/applications/twitter_search/bin/incoming +89 -0
- data/spec/adapter/applications/twitter_search/bin/runner +21 -0
- data/spec/adapter/applications/twitter_search/bin/status +36 -0
- data/spec/adapter/applications/twitter_search/config/environment.rb +11 -0
- data/spec/adapter/applications/twitter_search/config/environments/development.rb +0 -0
- data/spec/adapter/applications/twitter_search/log/development.log +1006 -0
- data/spec/adapter/applications/twitter_sender/app/application.rb +0 -0
- data/spec/adapter/applications/twitter_sender/app/runner.rb +0 -0
- data/spec/adapter/applications/twitter_sender/bin/incoming +89 -0
- data/spec/adapter/applications/twitter_sender/bin/runner +21 -0
- data/spec/adapter/applications/twitter_sender/bin/status +36 -0
- data/spec/adapter/applications/twitter_sender/config/environment.rb +11 -0
- data/spec/adapter/applications/twitter_sender/config/environments/development.rb +0 -0
- data/spec/adapter/applications/twitter_sender/log/development.log +146 -0
- data/spec/adapter/http/direct_message +0 -0
- data/spec/adapter/http/twitter_search +20 -0
- data/spec/adapter/http/update +0 -0
- data/spec/adapter/twitter_search_spec.rb +36 -0
- data/spec/adapter/twitter_sender_spec.rb +64 -0
- data/spec/booter_spec.rb +7 -0
- data/spec/fixtures/booter/app/application.rb +3 -0
- data/spec/fixtures/booter/app/runner.rb +7 -0
- data/spec/fixtures/booter/bin/incoming +89 -0
- data/spec/fixtures/booter/bin/runner +21 -0
- data/spec/fixtures/booter/bin/status +36 -0
- data/spec/fixtures/booter/config/environment.rb +15 -0
- data/spec/fixtures/booter/config/environments/development.rb +0 -0
- data/spec/fixtures/booter/log/development.log +11 -0
- data/spec/message_spec.rb +52 -0
- data/spec/session_spec.rb +34 -0
- data/spec/spec.opts +7 -0
- data/spec/spec_helper.rb +8 -0
- data/test/app/runner.rb +5 -0
- data/test/config/environment.rb +15 -0
- data/test/config/environments/development.rb +2 -0
- data/test/config/environments/production.rb +0 -0
- data/test/config/environments/test.rb +0 -0
- data/test/spec/application_spec.rb +12 -0
- data/test/spec/spec_helper.rb +44 -0
- metadata +291 -0
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
begin
|
|
5
|
+
require 'messed'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
if ENV['MESSED_HOME']
|
|
8
|
+
require File.join(ENV['MESSED_HOME'], 'lib', 'messed')
|
|
9
|
+
else
|
|
10
|
+
raise("no messed!")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'thor'
|
|
15
|
+
|
|
16
|
+
class IncomingRunnerTask < Thor
|
|
17
|
+
|
|
18
|
+
method_options :detach => false
|
|
19
|
+
method_options :environment => "development"
|
|
20
|
+
desc "start [NAME]", "start an incoming instance"
|
|
21
|
+
def start(name = nil)
|
|
22
|
+
application = Messed::Booter.new(File.expand_path(File.join(File.dirname(__FILE__), '..')), options.environment)
|
|
23
|
+
incoming = if name.nil? and application.incoming_map.size == 1
|
|
24
|
+
application.incoming_map.values.first
|
|
25
|
+
elsif application.incoming_map.key?(name)
|
|
26
|
+
application.incoming_map[name]
|
|
27
|
+
else
|
|
28
|
+
raise(name ? "unable to find incoming with name #{name}" : "You have no incoming setup.")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Messed::Interface::Runner.new(incoming).start
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
IncomingRunnerTask.start
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
begin
|
|
5
|
+
require 'messed'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
if ENV['MESSED_HOME']
|
|
8
|
+
require File.join(ENV['MESSED_HOME'], 'lib', 'messed')
|
|
9
|
+
else
|
|
10
|
+
raise("no messed!")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'thor'
|
|
15
|
+
|
|
16
|
+
$root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
17
|
+
|
|
18
|
+
Messed::Tasks::Runner.start
|
|
19
|
+
|
|
20
|
+
RunnerTask.start
|
|
21
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
begin
|
|
5
|
+
require 'messed'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
if ENV['MESSED_HOME']
|
|
8
|
+
require File.join(ENV['MESSED_HOME'], 'lib', 'messed')
|
|
9
|
+
else
|
|
10
|
+
raise("no messed!")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'thor'
|
|
15
|
+
|
|
16
|
+
class IncomingRunnerTask < Thor
|
|
17
|
+
|
|
18
|
+
method_options :detach => false
|
|
19
|
+
method_options :environment => "development"
|
|
20
|
+
desc "start [NAME]", "start an incoming instance"
|
|
21
|
+
def start(name = nil)
|
|
22
|
+
application = Messed::Booter.new(File.expand_path(File.join(File.dirname(__FILE__), '..')), options.environment)
|
|
23
|
+
incoming = if name.nil? and application.incoming_map.size == 1
|
|
24
|
+
application.incoming_map.values.first
|
|
25
|
+
elsif application.incoming_map.key?(name)
|
|
26
|
+
application.incoming_map[name]
|
|
27
|
+
else
|
|
28
|
+
raise(name ? "unable to find incoming with name #{name}" : "You have no incoming setup.")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
IncomingRunner.new(incoming)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
IncomingRunnerTask.start
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
queues.incoming.host = '127.0.0.1'
|
|
2
|
+
queues.incoming.port = 11300
|
|
3
|
+
queues.incoming.tube = 'incoming-tube'
|
|
4
|
+
|
|
5
|
+
queues.outgoing.host = '127.0.0.1'
|
|
6
|
+
queues.outgoing.port = 11300
|
|
7
|
+
queues.outgoing.tube = 'outgoing-tube'
|
|
8
|
+
|
|
9
|
+
interfaces.twitter_sender.adapter = :twitter_sender
|
|
10
|
+
interfaces.twitter_sender.options[:username] = 'josh'
|
|
11
|
+
interfaces.twitter_sender.options[:password] = 'josh'
|
|
File without changes
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Loading interface `twitter_sender'
|
|
2
|
+
Putting response say onto outgoing queue
|
|
3
|
+
Putting response reply onto outgoing queue
|
|
4
|
+
Putting response whisper onto outgoing queue
|
|
5
|
+
Loading interface `twitter_sender'
|
|
6
|
+
Putting response say onto outgoing queue
|
|
7
|
+
Putting response reply onto outgoing queue
|
|
8
|
+
Putting response whisper onto outgoing queue
|
|
9
|
+
Loading interface `twitter_sender'
|
|
10
|
+
Loading interface `twitter_sender'
|
|
11
|
+
Loading interface `twitter_sender'
|
|
12
|
+
Loading interface `twitter_sender'
|
|
13
|
+
Loading interface `twitter_sender'
|
|
14
|
+
Putting response say onto outgoing queue
|
|
15
|
+
Putting response reply onto outgoing queue
|
|
16
|
+
Putting response whisper onto outgoing queue
|
|
17
|
+
Loading interface `twitter_sender'
|
|
18
|
+
Putting response say onto outgoing queue
|
|
19
|
+
Putting response reply onto outgoing queue
|
|
20
|
+
Putting response whisper onto outgoing queue
|
|
21
|
+
Loading interface `twitter_sender'
|
|
22
|
+
Putting response say onto outgoing queue
|
|
23
|
+
Putting response reply onto outgoing queue
|
|
24
|
+
Putting response whisper onto outgoing queue
|
|
25
|
+
Loading interface `twitter_sender'
|
|
26
|
+
Putting response say onto outgoing queue
|
|
27
|
+
Putting response reply onto outgoing queue
|
|
28
|
+
Putting response whisper onto outgoing queue
|
|
29
|
+
Loading interface `twitter_sender'
|
|
30
|
+
Putting response say onto outgoing queue
|
|
31
|
+
Putting response reply onto outgoing queue
|
|
32
|
+
Putting response whisper onto outgoing queue
|
|
33
|
+
Loading interface `twitter_sender'
|
|
34
|
+
Loading interface `twitter_sender'
|
|
35
|
+
Loading interface `twitter_sender'
|
|
36
|
+
Putting response say onto outgoing queue
|
|
37
|
+
Putting response reply onto outgoing queue
|
|
38
|
+
Putting response whisper onto outgoing queue
|
|
39
|
+
Loading interface `twitter_sender'
|
|
40
|
+
Loading interface `twitter_sender'
|
|
41
|
+
Putting response say onto outgoing queue
|
|
42
|
+
Putting response reply onto outgoing queue
|
|
43
|
+
Putting response whisper onto outgoing queue
|
|
44
|
+
Loading interface `twitter_sender'
|
|
45
|
+
Putting response say onto outgoing queue
|
|
46
|
+
Putting response reply onto outgoing queue
|
|
47
|
+
Putting response whisper onto outgoing queue
|
|
48
|
+
Loading interface `twitter_sender'
|
|
49
|
+
Putting response say onto outgoing queue
|
|
50
|
+
Putting response reply onto outgoing queue
|
|
51
|
+
Putting response whisper onto outgoing queue
|
|
52
|
+
Loading interface `twitter_sender'
|
|
53
|
+
Putting response say onto outgoing queue
|
|
54
|
+
Putting response reply onto outgoing queue
|
|
55
|
+
Putting response whisper onto outgoing queue
|
|
56
|
+
Loading interface `twitter_sender'
|
|
57
|
+
Putting response say onto outgoing queue
|
|
58
|
+
Putting response reply onto outgoing queue
|
|
59
|
+
Putting response whisper onto outgoing queue
|
|
60
|
+
Loading interface `twitter_sender'
|
|
61
|
+
Putting response say onto outgoing queue
|
|
62
|
+
Putting response reply onto outgoing queue
|
|
63
|
+
Putting response whisper onto outgoing queue
|
|
64
|
+
Loading interface `twitter_sender'
|
|
65
|
+
Putting response say onto outgoing queue
|
|
66
|
+
Putting response reply onto outgoing queue
|
|
67
|
+
Putting response whisper onto outgoing queue
|
|
68
|
+
Loading interface `twitter_sender'
|
|
69
|
+
Putting response say onto outgoing queue
|
|
70
|
+
Putting response reply onto outgoing queue
|
|
71
|
+
Putting response whisper onto outgoing queue
|
|
72
|
+
Loading interface `twitter_sender'
|
|
73
|
+
Putting response say onto outgoing queue
|
|
74
|
+
Putting response reply onto outgoing queue
|
|
75
|
+
Putting response whisper onto outgoing queue
|
|
76
|
+
Loading interface `twitter_sender'
|
|
77
|
+
Putting response say onto outgoing queue
|
|
78
|
+
Putting response reply onto outgoing queue
|
|
79
|
+
Putting response whisper onto outgoing queue
|
|
80
|
+
Loading interface `twitter_sender'
|
|
81
|
+
Loading interface `twitter_sender'
|
|
82
|
+
Loading interface `twitter_sender'
|
|
83
|
+
Loading interface `twitter_sender'
|
|
84
|
+
Processing `say'
|
|
85
|
+
Putting response say onto outgoing queue
|
|
86
|
+
No response.
|
|
87
|
+
Processing `reply'
|
|
88
|
+
Putting response reply onto outgoing queue
|
|
89
|
+
No response.
|
|
90
|
+
Processing `whisper'
|
|
91
|
+
Putting response whisper onto outgoing queue
|
|
92
|
+
No response.
|
|
93
|
+
Loading interface `twitter_sender'
|
|
94
|
+
Processing `say'
|
|
95
|
+
Putting response say onto outgoing queue
|
|
96
|
+
No response.
|
|
97
|
+
Processing `reply'
|
|
98
|
+
Putting response reply onto outgoing queue
|
|
99
|
+
No response.
|
|
100
|
+
Processing `whisper'
|
|
101
|
+
Putting response whisper onto outgoing queue
|
|
102
|
+
No response.
|
|
103
|
+
Loading interface `twitter_sender'
|
|
104
|
+
Processing `say'
|
|
105
|
+
Putting response say onto outgoing queue
|
|
106
|
+
No response.
|
|
107
|
+
Processing `reply'
|
|
108
|
+
Putting response reply onto outgoing queue
|
|
109
|
+
No response.
|
|
110
|
+
Processing `whisper'
|
|
111
|
+
Putting response whisper onto outgoing queue
|
|
112
|
+
No response.
|
|
113
|
+
Loading interface `twitter_sender'
|
|
114
|
+
Processing `say'
|
|
115
|
+
Putting response say onto outgoing queue
|
|
116
|
+
No response.
|
|
117
|
+
Processing `reply'
|
|
118
|
+
Putting response reply onto outgoing queue
|
|
119
|
+
No response.
|
|
120
|
+
Processing `whisper'
|
|
121
|
+
Putting response whisper onto outgoing queue
|
|
122
|
+
No response.
|
|
123
|
+
Setting up interface: :twitter_sender
|
|
124
|
+
Status handler for Messed started on 0.0.0.0:19191
|
|
125
|
+
Processing `say'
|
|
126
|
+
Putting response say onto outgoing queue
|
|
127
|
+
No response.
|
|
128
|
+
Processing `reply'
|
|
129
|
+
Putting response reply onto outgoing queue
|
|
130
|
+
No response.
|
|
131
|
+
Processing `whisper'
|
|
132
|
+
Putting response whisper onto outgoing queue
|
|
133
|
+
No response.
|
|
134
|
+
Status handler for Messed::Interface started on 0.0.0.0:11190
|
|
135
|
+
Setting up interface: :twitter_sender
|
|
136
|
+
Status handler for Messed started on 0.0.0.0:19191
|
|
137
|
+
Processing `say'
|
|
138
|
+
Putting response say onto outgoing queue
|
|
139
|
+
No response.
|
|
140
|
+
Processing `reply'
|
|
141
|
+
Putting response reply onto outgoing queue
|
|
142
|
+
No response.
|
|
143
|
+
Processing `whisper'
|
|
144
|
+
Putting response whisper onto outgoing queue
|
|
145
|
+
No response.
|
|
146
|
+
Status handler for Messed::Interface started on 0.0.0.0:11190
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
HTTP/1.1 200 OK
|
|
2
|
+
Date: Mon, 09 Nov 2009 14:37:07 GMT
|
|
3
|
+
Server: hi
|
|
4
|
+
Status: 200 OK
|
|
5
|
+
X-Served-From: sjc1c195
|
|
6
|
+
Content-Type: application/json; charset=utf-8
|
|
7
|
+
X-Served-By: sjc1h009.twitter.com
|
|
8
|
+
X-Timeline-Cache-Hit: Hit
|
|
9
|
+
Cache-Control: max-age=15, must-revalidate, max-age=300
|
|
10
|
+
Expires: Mon, 09 Nov 2009 14:42:07 GMT
|
|
11
|
+
Content-Length: 7026
|
|
12
|
+
Vary: Accept-Encoding
|
|
13
|
+
X-Varnish: 2124311127
|
|
14
|
+
Age: 0
|
|
15
|
+
Via: 1.1 varnish
|
|
16
|
+
X-Cache-Svr: sjc1h009.twitter.com
|
|
17
|
+
X-Cache: MISS
|
|
18
|
+
Connection: close
|
|
19
|
+
|
|
20
|
+
{"results":[{"profile_image_url":"http://a3.twimg.com/profile_images/295456431/smalllogog_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:41 +0000","from_user":"redpandajewelry","to_user_id":null,"text":"I love niobium colors http://flic.kr/p/7ept6w","id":5559802757,"from_user_id":41981,"geo":null,"iso_language_code":"it","source":"<a href="http://flickr.com/services/twitter/" rel="nofollow">Flickr</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/466063174/twitter_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:41 +0000","from_user":"MeganNBaker","to_user_id":null,"text":"apple cinnamon oatmeal from trader joes = love. they should really put one in rochester before i move home.","id":5559802708,"from_user_id":6115983,"geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a3.twimg.com/profile_images/502272605/headshot_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:41 +0000","from_user":"louiealdip","to_user_id":7245782,"text":"@erikamodina love that book! :) she said okay! :)) I HAVE A BLACK CARDIGAN ALREADY! :)","id":5559802663,"from_user_id":9782054,"to_user":"erikamodina","geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a3.twimg.com/profile_images/424179347/002_2__0_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:40 +0000","from_user":"hava35","to_user_id":71282164,"text":"@7Jaguar Hi, good morning, how are you? love you...","id":5559802299,"from_user_id":60872971,"to_user":"7JAGUAR","geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/444858244/n1250311767_30074763_1017_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:40 +0000","from_user":"ampuniakudj","to_user_id":null,"text":"i love you girl","id":5559802278,"from_user_id":27890452,"geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a3.twimg.com/profile_images/509666999/IMG_2091_normal.JPG","created_at":"Mon, 09 Nov 2009 14:36:40 +0000","from_user":"tiffanylovebug","to_user_id":8994366,"text":"@justinbieber ahh Justin come to Dallas, Texas! Please and thankyouuu i love you<3 wish me luck with my physco english teacher:P","id":5559802258,"from_user_id":10779502,"to_user":"justinbieber","geo":null,"iso_language_code":"en","source":"<a href="http://help.twitter.com/index.php?pg=kb.page&id=75" rel="nofollow">txt</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/220424034/0011__normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:39 +0000","from_user":"djCatscan","to_user_id":null,"text":"Damn i love my Culture Vulture.","id":5559802212,"from_user_id":17965922,"geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a3.twimg.com/profile_images/506087969/IMG00033-20090904-0026_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:39 +0000","from_user":"Flee_Dee","to_user_id":null,"text":"RT @iAlyssafaye: #musicmondays lloyd feat lil. Wayne (YOU) I love it!(Throwbaq my shiit tho=] )","id":5559802197,"from_user_id":76032217,"geo":null,"iso_language_code":"en","source":"<a href="http://ubertwitter.com" rel="nofollow">UberTwitter</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/512625550/Selena07_normal.png","created_at":"Mon, 09 Nov 2009 14:36:39 +0000","from_user":"Selena_Jonas95","to_user_id":70146460,"text":"@Jonas_BieberFan Ohhh... no I never hated Selena But I didnmt like her that much but Now I love her and so does all of my friends! hehe!!","id":5559802137,"from_user_id":52367015,"to_user":"Jonas_BieberFan","geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/514275970/Foto-0047_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:39 +0000","from_user":"najlalove","to_user_id":8994366,"text":"@justinbieber good moriningjustin cann u plzz follws myy soon plzz i love u \u2665","id":5559802115,"from_user_id":19645706,"to_user":"justinbieber","geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/407761428/Rachellebw8_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:39 +0000","from_user":"RachelleLuvsMo","to_user_id":11614634,"text":"@thelittleidiot --*you* my darling love. I Love *You* With All My Heart,Your Eternal Love Rachelle LaDelle' xxxxoooo @>-->-- I miss *you*.xo","id":5559802030,"from_user_id":54505816,"to_user":"thelittleidiot","geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a3.twimg.com/profile_images/459061357/CIMG3047_normal.JPG","created_at":"Mon, 09 Nov 2009 14:36:39 +0000","from_user":"saescamilla15","to_user_id":13614872,"text":"@Destuhneee haha that's why you love me :D","id":5559801998,"from_user_id":13615584,"to_user":"Destuhneee","geo":null,"iso_language_code":"en","source":"<a href="http://echofon.com/" rel="nofollow">Echofon</a>"},{"profile_image_url":"http://a3.twimg.com/profile_images/207793583/l_3704e355ca6c4f8eb4fbbdff0b2d75ac_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:38 +0000","from_user":"joshjohnson80","to_user_id":null,"text":"THANK YOU to all my friends who made this weekend SPECIAL! Love you all SO MUCH!!!!","id":5559801857,"from_user_id":10477193,"geo":null,"iso_language_code":"en","source":"<a href="http://www.myspace.com/sync" rel="nofollow">MySpace</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/511475780/7723_164782524847_620469847_3666553_759475_n_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:38 +0000","from_user":"MissZaraLouise","to_user_id":null,"text":"I swear ppl love to tlkbwt me my ears just dnt stop burning!! Wow!!","id":5559801736,"from_user_id":64982975,"geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"},{"profile_image_url":"http://a1.twimg.com/profile_images/451617040/chairandchin_bw_normal.jpg","created_at":"Mon, 09 Nov 2009 14:36:38 +0000","from_user":"jamesglave","to_user_id":null,"text":"I love sending dinner guests home with a giant bucket of compost.","id":5559801732,"from_user_id":90034,"geo":null,"iso_language_code":"en","source":"<a href="http://twitter.com/">web</a>"}],"max_id":5559802757,"since_id":0,"refresh_url":"?since_id=5559802757&q=love","next_page":"?page=2&max_id=5559802757&q=love","results_per_page":15,"page":1,"completed_in":0.025489,"query":"love"}
|
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
require 'em-http/mock'
|
|
3
|
+
require 'rack'
|
|
4
|
+
|
|
5
|
+
describe "A Messed application", 'twitter searching' do
|
|
6
|
+
|
|
7
|
+
before(:all) do
|
|
8
|
+
EventMachine::HttpRequest.register_file("http://search.twitter.com:80/search.json?q=love", :get, File.join(File.dirname(__FILE__), 'http', 'twitter_search'))
|
|
9
|
+
EventMachine::HttpRequest.pass_through_requests = false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should take a twitter search and process them" do
|
|
13
|
+
Messed::Booter.new(File.join(File.dirname(__FILE__), 'applications', 'twitter_search')) do |booter|
|
|
14
|
+
booter.application.incoming.drain!
|
|
15
|
+
booter.application.outgoing.drain!
|
|
16
|
+
|
|
17
|
+
booter.application.match {
|
|
18
|
+
always do
|
|
19
|
+
say message
|
|
20
|
+
end
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
booter.interface_for(:search).start
|
|
24
|
+
EM.add_timer(1) do
|
|
25
|
+
booter.application.incoming.jobs_available.should == 15
|
|
26
|
+
booter.application.start
|
|
27
|
+
EM.add_timer(1) do
|
|
28
|
+
booter.application.outgoing.jobs_available.should == 15
|
|
29
|
+
EM.stop_event_loop
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
require 'em-http/mock'
|
|
3
|
+
require 'rack'
|
|
4
|
+
|
|
5
|
+
EventMachine::HttpRequest = EventMachine::MockHttpRequest
|
|
6
|
+
|
|
7
|
+
describe "A Messed application", 'twitter sending' do
|
|
8
|
+
before(:all) do
|
|
9
|
+
EventMachine::HttpRequest.register_file("http://twitter.com:80/direct_messages/new.json", :post, File.join(File.dirname(__FILE__), 'http', 'direct_message'))
|
|
10
|
+
EventMachine::HttpRequest.register_file("http://twitter.com:80/statuses/update.json", :post, File.join(File.dirname(__FILE__), 'http', 'update'))
|
|
11
|
+
|
|
12
|
+
EventMachine::HttpRequest.pass_through_requests = false
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
before(:each) do
|
|
16
|
+
EventMachine::HttpRequest.reset_counts!
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should take messages off the outgoing queue and dispatch them to twitter" do
|
|
20
|
+
Messed::Booter.new(File.join(File.dirname(__FILE__), 'applications', 'twitter_sender')) do |booter|
|
|
21
|
+
booter.application.incoming.drain!
|
|
22
|
+
booter.application.outgoing.drain!
|
|
23
|
+
booter.application.incoming << Messed::Message::Twitter.new {|m| m.body = 'say' }
|
|
24
|
+
booter.application.incoming << Messed::Message::Twitter.new {|m| m.body = 'reply'; m.from = 'josh' }
|
|
25
|
+
booter.application.incoming << Messed::Message::Twitter.new {|m| m.body = 'whisper'; m.from = 'josh' }
|
|
26
|
+
|
|
27
|
+
booter.application.match {
|
|
28
|
+
with 'say' do
|
|
29
|
+
say message
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
with 'reply' do
|
|
33
|
+
reply message
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
with 'whisper' do
|
|
37
|
+
whisper message
|
|
38
|
+
end
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
booter.application.start
|
|
42
|
+
EM.add_timer(1) do
|
|
43
|
+
booter.interface_for(:twitter_sender).start
|
|
44
|
+
EM.add_timer(1) do
|
|
45
|
+
booter.application.outgoing.jobs_available.should == 0
|
|
46
|
+
EventMachine::HttpRequest.count("http://twitter.com:80/direct_messages/new.json", "POST").should == 1
|
|
47
|
+
EventMachine::HttpRequest.count("http://twitter.com:80/statuses/update.json", "POST").should == 2
|
|
48
|
+
EM.stop_event_loop
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#booter.application.start(false)
|
|
54
|
+
#p booter.interface_for('twitter_sender')
|
|
55
|
+
#
|
|
56
|
+
#
|
|
57
|
+
#booter.application.outgoing.jobs_available.should == 0
|
|
58
|
+
#EventMachine::HttpRequest.count("http://twitter.com:80/direct_messages/new.json", "POST").should == 1
|
|
59
|
+
#EventMachine::HttpRequest.count("http://twitter.com:80/statuses/update.json", "POST").should == 2
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
data/spec/booter_spec.rb
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
require 'spec/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Messed::Booter do
|
|
4
|
+
it "should list all the possible interfaces" do
|
|
5
|
+
Messed::Booter.possible_interfaces(File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'booter'))).should =~ [:search, :twitter_sender]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
begin
|
|
5
|
+
require 'messed'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
if ENV['MESSED_HOME']
|
|
8
|
+
require File.join(ENV['MESSED_HOME'], 'lib', 'messed')
|
|
9
|
+
else
|
|
10
|
+
raise("no messed!")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'thor'
|
|
15
|
+
|
|
16
|
+
class IncomingRunnerTask < Thor
|
|
17
|
+
|
|
18
|
+
method_options :detach => false
|
|
19
|
+
method_options :environment => "development"
|
|
20
|
+
desc "start [NAME]", "start an incoming instance"
|
|
21
|
+
def start(name = nil)
|
|
22
|
+
application = Messed::Booter.new(File.expand_path(File.join(File.dirname(__FILE__), '..')), options.environment)
|
|
23
|
+
incoming = if name.nil? and application.incoming_map.size == 1
|
|
24
|
+
application.incoming_map.values.first
|
|
25
|
+
elsif application.incoming_map.key?(name)
|
|
26
|
+
application.incoming_map[name]
|
|
27
|
+
else
|
|
28
|
+
raise(name ? "unable to find incoming with name #{name}" : "You have no incoming setup.")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Messed::Interface::Runner.new(incoming).start
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
IncomingRunnerTask.start
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
begin
|
|
5
|
+
require 'messed'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
if ENV['MESSED_HOME']
|
|
8
|
+
require File.join(ENV['MESSED_HOME'], 'lib', 'messed')
|
|
9
|
+
else
|
|
10
|
+
raise("no messed!")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'thor'
|
|
15
|
+
|
|
16
|
+
$root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
17
|
+
|
|
18
|
+
Messed::Tasks::Runner.start
|
|
19
|
+
|
|
20
|
+
RunnerTask.start
|
|
21
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
begin
|
|
5
|
+
require 'messed'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
if ENV['MESSED_HOME']
|
|
8
|
+
require File.join(ENV['MESSED_HOME'], 'lib', 'messed')
|
|
9
|
+
else
|
|
10
|
+
raise("no messed!")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'thor'
|
|
15
|
+
|
|
16
|
+
class IncomingRunnerTask < Thor
|
|
17
|
+
|
|
18
|
+
method_options :detach => false
|
|
19
|
+
method_options :environment => "development"
|
|
20
|
+
desc "start [NAME]", "start an incoming instance"
|
|
21
|
+
def start(name = nil)
|
|
22
|
+
application = Messed::Booter.new(File.expand_path(File.join(File.dirname(__FILE__), '..')), options.environment)
|
|
23
|
+
incoming = if name.nil? and application.incoming_map.size == 1
|
|
24
|
+
application.incoming_map.values.first
|
|
25
|
+
elsif application.incoming_map.key?(name)
|
|
26
|
+
application.incoming_map[name]
|
|
27
|
+
else
|
|
28
|
+
raise(name ? "unable to find incoming with name #{name}" : "You have no incoming setup.")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
IncomingRunner.new(incoming)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
IncomingRunnerTask.start
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
queues.incoming.host = '127.0.0.1'
|
|
2
|
+
queues.incoming.port = 11300
|
|
3
|
+
queues.incoming.tube = 'incoming-tube'
|
|
4
|
+
|
|
5
|
+
queues.outgoing.host = '127.0.0.1'
|
|
6
|
+
queues.outgoing.port = 11300
|
|
7
|
+
queues.outgoing.tube = 'outgoing-tube'
|
|
8
|
+
|
|
9
|
+
interfaces.search.adapter = :twitter_search
|
|
10
|
+
interfaces.search.options[:fetch] = {:query => {'q' => 'love'}, :host => 'search.twitter.com', :path => 'search.json'}
|
|
11
|
+
interfaces.search.options[:interval] = 30
|
|
12
|
+
|
|
13
|
+
interfaces.twitter_sender.adapter = :twitter_sender
|
|
14
|
+
interfaces.twitter_sender.options[:username] = 'josh'
|
|
15
|
+
interfaces.twitter_sender.options[:password] = 'josh'
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Loading interface `twitter_sender'
|
|
2
|
+
Loading interface `search'
|
|
3
|
+
Loading interface `twitter_sender'
|
|
4
|
+
Loading interface `search'
|
|
5
|
+
Setting up interface: :twitter_sender
|
|
6
|
+
Setting up interface: :search
|
|
7
|
+
Setting up interface: :search
|
|
8
|
+
Setting up interface: :twitter_sender
|
|
9
|
+
Setting up interface: :twitter_sender
|
|
10
|
+
Setting up interface: :search
|
|
11
|
+
Starting...
|