connfu-client 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/.rspec +3 -0
  2. data/.rvmrc +2 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +120 -0
  5. data/LICENSE.txt +661 -0
  6. data/README.rdoc +398 -0
  7. data/Rakefile +38 -0
  8. data/bin/.DS_Store +0 -0
  9. data/bin/connfu-client +94 -0
  10. data/connfu-client.gemspec +41 -0
  11. data/examples/conference/application.rb +68 -0
  12. data/examples/conference/conference.rb +33 -0
  13. data/examples/conference/conference_app.rb +25 -0
  14. data/examples/conference/connfu.log +5 -0
  15. data/examples/conference/wall.rb +11 -0
  16. data/examples/provisioning/app/get.rb +29 -0
  17. data/examples/provisioning/channels/get.rb +34 -0
  18. data/examples/provisioning/rss/create.rb +28 -0
  19. data/examples/provisioning/rss/delete.rb +27 -0
  20. data/examples/provisioning/rss/get.rb +32 -0
  21. data/examples/provisioning/rss/put.rb +29 -0
  22. data/examples/provisioning/setup.rb +2 -0
  23. data/examples/provisioning/twitter/create.rb +31 -0
  24. data/examples/provisioning/twitter/delete.rb +27 -0
  25. data/examples/provisioning/twitter/get.rb +32 -0
  26. data/examples/provisioning/twitter/put.rb +29 -0
  27. data/examples/provisioning/voice/create.rb +26 -0
  28. data/examples/provisioning/voice/delete.rb +27 -0
  29. data/examples/provisioning/voice/get.rb +36 -0
  30. data/examples/provisioning/voice/phones/create.rb +26 -0
  31. data/examples/provisioning/voice/phones/delete.rb +28 -0
  32. data/examples/provisioning/voice/phones/get.rb +38 -0
  33. data/examples/provisioning/voice/put.rb +38 -0
  34. data/examples/provisioning/voice/whitelist/create.rb +26 -0
  35. data/examples/provisioning/voice/whitelist/delete.rb +27 -0
  36. data/examples/provisioning/voice/whitelist/get.rb +36 -0
  37. data/examples/provisioning/voice/whitelist/put.rb +27 -0
  38. data/lib/connfu.rb +134 -0
  39. data/lib/connfu/cli/generator.rb +71 -0
  40. data/lib/connfu/connfu_logger.rb +88 -0
  41. data/lib/connfu/connfu_message_formatter.rb +134 -0
  42. data/lib/connfu/connfu_stream.rb +182 -0
  43. data/lib/connfu/dispatcher.rb +164 -0
  44. data/lib/connfu/dsl.rb +84 -0
  45. data/lib/connfu/events.rb +32 -0
  46. data/lib/connfu/listener.rb +85 -0
  47. data/lib/connfu/listener_channel.rb +100 -0
  48. data/lib/connfu/message.rb +74 -0
  49. data/lib/connfu/provisioning.rb +12 -0
  50. data/lib/connfu/provisioning/application.rb +374 -0
  51. data/lib/connfu/provisioning/base.rb +95 -0
  52. data/lib/connfu/provisioning/channel.rb +79 -0
  53. data/lib/connfu/provisioning/phone.rb +55 -0
  54. data/lib/connfu/provisioning/rss.rb +21 -0
  55. data/lib/connfu/provisioning/twitter.rb +28 -0
  56. data/lib/connfu/provisioning/voice.rb +89 -0
  57. data/lib/connfu/provisioning/whitelist.rb +62 -0
  58. data/lib/connfu/version.rb +6 -0
  59. data/lib/rdoc/generator/template/connfu/_context.rhtml +209 -0
  60. data/lib/rdoc/generator/template/connfu/_head.rhtml +7 -0
  61. data/lib/rdoc/generator/template/connfu/class.rhtml +38 -0
  62. data/lib/rdoc/generator/template/connfu/file.rhtml +36 -0
  63. data/lib/rdoc/generator/template/connfu/index.rhtml +13 -0
  64. data/lib/rdoc/generator/template/connfu/resources/apple-touch-icon.png +0 -0
  65. data/lib/rdoc/generator/template/connfu/resources/css/github.css +129 -0
  66. data/lib/rdoc/generator/template/connfu/resources/css/main.css +339 -0
  67. data/lib/rdoc/generator/template/connfu/resources/css/panel.css +389 -0
  68. data/lib/rdoc/generator/template/connfu/resources/css/reset.css +53 -0
  69. data/lib/rdoc/generator/template/connfu/resources/favicon.ico +0 -0
  70. data/lib/rdoc/generator/template/connfu/resources/i/arrows.png +0 -0
  71. data/lib/rdoc/generator/template/connfu/resources/i/results_bg.png +0 -0
  72. data/lib/rdoc/generator/template/connfu/resources/i/tree_bg.png +0 -0
  73. data/lib/rdoc/generator/template/connfu/resources/js/highlight.pack.js +1 -0
  74. data/lib/rdoc/generator/template/connfu/resources/js/jquery-1.3.2.min.js +19 -0
  75. data/lib/rdoc/generator/template/connfu/resources/js/jquery-effect.js +593 -0
  76. data/lib/rdoc/generator/template/connfu/resources/js/main.js +20 -0
  77. data/lib/rdoc/generator/template/connfu/resources/js/searchdoc.js +628 -0
  78. data/lib/rdoc/generator/template/connfu/resources/panel/index.html +72 -0
  79. data/lib/rdoc/generator/template/connfu/se_index.rhtml +8 -0
  80. data/spec/connfu_message_formatter_spec.rb +88 -0
  81. data/spec/connfu_spec.rb +51 -0
  82. data/spec/connfu_stream_spec.rb +84 -0
  83. data/spec/dispatcher_spec.rb +227 -0
  84. data/spec/dsl_spec.rb +159 -0
  85. data/spec/listener_channel_spec.rb +130 -0
  86. data/spec/listener_spec.rb +67 -0
  87. data/spec/provisioning/application_spec.rb +47 -0
  88. data/spec/provisioning/channel_shared_examples.rb +52 -0
  89. data/spec/provisioning/channel_spec.rb +13 -0
  90. data/spec/provisioning/phone_spec.rb +88 -0
  91. data/spec/provisioning/voice_spec.rb +138 -0
  92. data/spec/provisioning_spec.rb +500 -0
  93. data/spec/spec_helper.rb +51 -0
  94. metadata +298 -0
@@ -0,0 +1,72 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
6
+ <head>
7
+ <title>search index</title>
8
+ <link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" charset="utf-8" />
9
+ <link rel="stylesheet" href="../css/panel.css" type="text/css" media="screen" charset="utf-8" />
10
+ <script src="search_index.js" type="text/javascript" charset="utf-8"></script>
11
+ <script src="tree.js" type="text/javascript" charset="utf-8"></script>
12
+ <script src="../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="../js/searchdoc.js" type="text/javascript" charset="utf-8"></script>
14
+ <script type="text/javascript" charset="utf-8">
15
+ function placeholder() {
16
+ if ($('<input type="text">')[0].placeholder !== undefined) return;
17
+
18
+ $('#search-label').click(function() {
19
+ $('#search').focus();
20
+ $('#search-label').hide();
21
+ });
22
+
23
+ $('#search').focus(function() {
24
+ $('#search-label').hide();
25
+ });
26
+ $('#search').blur(function() {
27
+ this.value == '' && $('#search-label').show()
28
+ });
29
+
30
+ $('#search')[0].value == '' && $('#search-label').show();
31
+ }
32
+ $(function() {
33
+ placeholder();
34
+ $('#links').hide();
35
+ var panel = new Searchdoc.Panel($('#panel'), search_data, tree, top.frames[1]);
36
+ $('#search').focus();
37
+
38
+ var s = window.parent.location.search.match(/\?q=([^&]+)/);
39
+ if (s) {
40
+ s = decodeURIComponent(s[1]).replace(/\+/g, ' ');
41
+ if (s.length > 0)
42
+ {
43
+ $('#search').val(s);
44
+ panel.search(s, true);
45
+ }
46
+ }
47
+ })
48
+ </script>
49
+ </head>
50
+ <body>
51
+ <div class="panel panel_tree" id="panel">
52
+ <div class="header">
53
+ <div>
54
+ <label for="search" id="search-label" style="display: none">Search</label>
55
+ <table>
56
+ <tr><td>
57
+ <input type="Search" placeholder="Search" autosave="searchdoc" results="10" id="search" autocomplete="off"/>
58
+ </td></tr>
59
+ </table></div>
60
+ </div>
61
+ <div class="tree">
62
+ <ul>
63
+ </ul>
64
+ </div>
65
+ <div class="result">
66
+ <ul>
67
+ </ul>
68
+ </div>
69
+ </div>
70
+ <a href="links.html" id="links">index</a>
71
+ </body>
72
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>File index</head>
3
+ <body>
4
+ <% @files.each do |file| %>
5
+ <a href="../<%= file.path %>"><%= file.relative_name %></a>
6
+ <% end %>
7
+ </body>
8
+ </html>
@@ -0,0 +1,88 @@
1
+ ##
2
+ # connFu is a platform of Telefonica delivered by Bluevia Labs.
3
+ #
4
+ # Please, check out www.connfu.com and if you need further information
5
+ # contact us at mailto:support@connfu.com
6
+
7
+ require 'spec_helper'
8
+ require 'connfu'
9
+
10
+ describe Connfu::ConnfuMessageFormatter do
11
+
12
+ context "initialize" do
13
+
14
+ it "should format properly a SMS event" do
15
+ message = Connfu::ConnfuMessageFormatter.format_voice_sms(["sms", { "appId" => "123456", "from" => "+34677001122", "to" => "+4475234444", "message" => "Hello connFu application!" }])
16
+ message.should be_instance_of(Array)
17
+ message.length.should be(1)
18
+ message = message.pop
19
+ message.message_type.should eql("new")
20
+ message.channel_type.should eql("sms")
21
+ message.channel_name.should eql("123456")
22
+ message.to.should eql("+4475234444")
23
+ message.from.should eql("+34677001122")
24
+ end
25
+
26
+ it "should format properly a join event" do
27
+ message = Connfu::ConnfuMessageFormatter.format_voice_sms(["join", {"appId" => "123456","conferenceId" => "connfu://channel-99999#", "from" => "+34677001122", "to" => "+4475234444"}])
28
+ message.should be_instance_of(Array)
29
+ message.length.should be(1)
30
+ message = message.pop
31
+
32
+ message.message_type.should eql("join")
33
+ message.channel_type.should eql("voice")
34
+ message.channel_name.should eql("channel-99999")
35
+ message.to.should eql("+4475234444")
36
+ message.from.should eql("+34677001122")
37
+ end
38
+
39
+ it "should discard an invalid voice event type" do
40
+ message = Connfu::ConnfuMessageFormatter.format_voice_sms(["join2", {"appId" => "123456","conferenceId" => "connfu://99999#", "from" => "+34677001122", "to" => "+4475234444"}])
41
+ message.should be_instance_of(Array)
42
+ puts message[0]
43
+ message.length.should be(0)
44
+ end
45
+
46
+ it "should discard an invalid voice event message" do
47
+ message = Connfu::ConnfuMessageFormatter.format_voice_sms(["join2"])
48
+ message.should be_instance_of(Array)
49
+ puts message[0]
50
+ message.length.should be(0)
51
+ end
52
+
53
+ it "should format properly a twitter event" do
54
+ raw = {"id" => "source:twitter/94cc51b0-e5e3-11e0-a5f3-12313b050905","occurred_at" => "2011-09-23T12:57:23.000Z","actor" => {"object_type" => "person","id" => "connfudev","display_name" => "connfudev","published" => "2011-07-03T11:02:39.000Z","image" => {"url" => "http://a3.twimg.com/profile_images/1424588002/ninja_normal.jpg"},"statuses_count" => 128,"profile_text_color" => "333333","geo_enabled" => true,"show_all_inline_media" => false,"protected" => false,"friends_count" => 1,"favourites_count" => 0,"description" => "","profile_image_url_https" => "https://si0.twimg.com/profile_images/1424588002/ninja_normal.jpg","profile_use_background_image" => true,"following" => nil,"follow_request_sent" => nil,"listed_count" => 0,"default_profile_image" => false,"profile_link_color" => "0084B4","profile_sidebar_border_color" => "C0DEED","profile_sidebar_fill_color" => "DDEEF6","profile_background_image_url_https" => "https://si0.twimg.com/images/themes/theme1/bg.png","default_profile" => true,"profile_background_tile" => false,"utc_offset" => 0,"lang" => "en","is_translator" => false,"notifications" => nil,"verified" => false,"profile_background_image_url" => "http://a0.twimg.com/images/themes/theme1/bg.png","contributors_enabled" => false,"time_zone" => "London","followers_count" => 0,"profile_background_color" => "C0DEED"},"verb" => "post","object" => {"object_type" => "note","id" => "117221019508424704","url" => "http://twitter.com/connfudev/status/117221019508424704","published" => "2011-07-03T11:02:39.000Z","content" => "yoooooosss","in_reply_to_status_id" => nil,"retweeted" => false,"entities" => {"urls" => [],"user_mentions" => []},"truncated" => false,"place" => nil,"retweet_count" => 0,"favorited" => false,"contributors" => nil},"target" => {"object_type" => "list","display_name" => "connfudev's Twitter Timeline","summary" => "connfudev's Twitter Timeline","image" => {"url" => "http://a3.twimg.com/profile_images/1424588002/ninja_normal.jpg"}},"title" => "yoooooosss","provider" => {"object_type" => "service","id" => "http://twitter.com","display_name" => "Twitter","url" => "http://twitter.com"},"backchat" => {"source" => "TWITTER","bare_uri" => "twitter://connfudev/","user_path" => ["twitter-listener"],"journal" => ["backchat.tracker.TwitterJValueProcessor"],"uuid" => "94cd1500-e5e3-11e0-a5f3-12313b050905","channels" => ["twitter://connfudev/"]}}
55
+ message = Connfu::ConnfuMessageFormatter.format_message(raw)
56
+ message.should be_instance_of(Array)
57
+ message.length.should be(1)
58
+ message = message.pop
59
+ message.message_type.should eql("new")
60
+ message.channel_type.should eql("twitter")
61
+ message.channel_name.should eql("connfudev")
62
+ message.to.should be_nil
63
+ message.from.should eql("connfudev")
64
+ end
65
+
66
+ it "should discard a invalid twitter event because sender is invalid" do
67
+ raw = "{\"id\":\"1111111\",\"remoteId\":\"87872349432582144\",\"summary\":\"\",\"content\":\":foo =&gt; \\\"bar\\\"\",\"sender\":\"\",\"recipients\":[],\"tags\":[],\"links\":[],\"attachments\":[],\"timeStamp\":\"2011-07-04T13:16:15.000Z\",\"isDeleted\":false,\"isPublic\":true,\"isArticle\":false}"
68
+ message = Connfu::ConnfuMessageFormatter.format_message(raw)
69
+ message.should be_instance_of(Array)
70
+ message.length.should be(0)
71
+ end
72
+
73
+ it "should discard a invalid twitter event because message is not a Hash" do
74
+ raw = ["foo", "bar"]
75
+ message = Connfu::ConnfuMessageFormatter.format_message(raw)
76
+ message.should be_instance_of(Array)
77
+ message.length.should be(0)
78
+ end
79
+
80
+ it "should discard a invalid twitter event because recipient is invalid" do
81
+ raw = "{\"id\":\"1111111\",\"remoteId\":\"87872349432582144\",\"summary\":\"\",\"content\":\":foo =&gt; \\\"bar\\\"\",\"sender\":\"twitter://connfudev/\",\"recipients\":[\"foo\"],\"tags\":[],\"links\":[],\"attachments\":[],\"timeStamp\":\"2011-07-04T13:16:15.000Z\",\"isDeleted\":false,\"isPublic\":true,\"isArticle\":false}"
82
+ message = Connfu::ConnfuMessageFormatter.format_message(raw)
83
+ message.should be_instance_of(Array)
84
+ message.length.should be(0)
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,51 @@
1
+ #
2
+ # connFu is a platform of Telefonica delivered by Bluevia Labs
3
+ # Please, check out www.connfu.com and if you need more information
4
+ # contact us at mailto:support@connfu.com
5
+ #
6
+
7
+ require 'spec_helper'
8
+
9
+ describe Connfu do
10
+
11
+ let(:prov_client) {
12
+ application = Connfu::Provisioning::Application.new(API_KEY, "endpoint")
13
+ application.stub(:name) {APP_NAME}
14
+ application.stub(:description) {APP_DESCRIPTION}
15
+ application.stub(:stream_name) {APP_STREAM_NAME}
16
+
17
+ obj = double 'prov_client'
18
+ obj.stub(:get_info) { application }
19
+ obj.stub(:get_channels) {[]}
20
+ obj
21
+ }
22
+
23
+ context "initialize" do
24
+
25
+ before(:each) do
26
+
27
+ Connfu.stub(:prov_client).and_return(prov_client)
28
+ Connfu.should_receive(:prov_client).twice
29
+
30
+ @connfu = Connfu.application(API_KEY)
31
+ end
32
+
33
+ it "should be an instance of Module when initialized" do
34
+ @connfu.should be_an_instance_of(Module)
35
+ end
36
+
37
+ it "should initialize properly the token attribute" do
38
+ @connfu.token.should eql(API_KEY)
39
+ end
40
+
41
+ it "should be able to read the token attribute" do
42
+ @connfu.should respond_to(:token)
43
+ end
44
+
45
+ it "should not be able to write the token attribute" do
46
+ lambda { @connfu.token="we5rwer" }.should raise_error (NoMethodError)
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,84 @@
1
+ #
2
+ # connFu is a platform of Telefonica delivered by Bluevia Labs
3
+ # Please, check out www.connfu.com and if you need more information
4
+ # contact us at mailto:support@connfu.com
5
+ #
6
+
7
+
8
+ require 'spec_helper'
9
+
10
+ describe Connfu::ConnfuStream do
11
+
12
+ let(:connfu_stream) do
13
+ Connfu::ConnfuStream.new(APP_STREAM_NAME, API_KEY, ENDPOINT)
14
+ end
15
+
16
+ context "initialize" do
17
+ it "should be an instance of Connfu::ConnfuStream when initialized" do
18
+ connfu_stream.should be_an_instance_of(Connfu::ConnfuStream)
19
+ end
20
+
21
+ # Constructing RSpec examples programmatically
22
+ {"app_stream" => APP_STREAM_NAME, "api_key" => API_KEY}.each do |attribute, value|
23
+ it "should initialize properly the parameter #{attribute}" do
24
+ connfu_stream.instance_variable_get("@#{attribute}").should eql(value)
25
+ end
26
+ end
27
+
28
+ it "should define a custom message formatter" do
29
+ connfu_stream.instance_variable_get("@formatter").should eql(Connfu::ConnfuMessageFormatter)
30
+ end
31
+ end
32
+
33
+ context "queue" do
34
+ let(:message) do
35
+ Connfu::Message.new({})
36
+ end
37
+
38
+ it "should be an instance of Queue" do
39
+ connfu_stream.send(:queue).should be_instance_of(Queue)
40
+ end
41
+ it "should be empty when intialized" do
42
+ connfu_stream.send(:queue).empty?.should be_true
43
+ end
44
+
45
+ it "should be populate when an incoming message arrives" do
46
+ connfu_stream.send(:message, [message])
47
+ connfu_stream.send(:queue).empty?.should be_false
48
+ connfu_stream.send(:queue).length.should be(1)
49
+ end
50
+
51
+ it "should be populate when several incoming message arrives" do
52
+ connfu_stream.send(:message, [message, message, message])
53
+ connfu_stream.send(:queue).empty?.should be_false
54
+ connfu_stream.send(:queue).length.should be(3)
55
+ end
56
+
57
+ it "should retrieve the first message in the queue" do
58
+ messages = [message, message, message]
59
+ connfu_stream.send(:message, messages)
60
+ connfu_stream.send(:queue).empty?.should be_false
61
+ messages.each{|msg|
62
+ connfu_stream.get.should eql(msg)
63
+ }
64
+ end
65
+
66
+ it "should not add a message if it is not the valid type" do
67
+ connfu_stream.send(:message, [1111])
68
+ connfu_stream.send(:queue).empty?.should be_true
69
+ end
70
+
71
+ end
72
+
73
+ context "authentication headers" do
74
+ let(:headers) do
75
+ {"accept" => "application/json",
76
+ "authorization" => "Backchat #{API_KEY}",
77
+ "Connection" => "Keep-Alive"}
78
+ end
79
+
80
+ it "should include the required headers" do
81
+ connfu_stream.send(:headers).should eql(headers)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,227 @@
1
+ #
2
+ # connFu is a platform of Telefonica delivered by Bluevia Labs
3
+ # Please, check out www.connfu.com and if you need more information
4
+ # contact us at mailto:support@connfu.com
5
+ #
6
+
7
+ require 'spec_helper'
8
+
9
+ describe Connfu::Dispatcher do
10
+
11
+ let(:prov_client) {
12
+ application = Connfu::Provisioning::Application.new(API_KEY, ENDPOINT)
13
+ application.stub(:name) {APP_NAME}
14
+ application.stub(:description) {APP_DESCRIPTION}
15
+ application.stub(:stream_name) {APP_STREAM_NAME}
16
+
17
+ obj = double 'prov_client'
18
+ obj.stub(:get_info) { application }
19
+ obj.stub(:get_channels) { [] }
20
+ obj
21
+ }
22
+
23
+ context "initialize" do
24
+ it "should be a Dispatch class instance" do
25
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"})
26
+ obj.should be_instance_of(Connfu::Dispatcher)
27
+ end
28
+
29
+ it "should raise an exception if no listener channels are provided" do
30
+ lambda { Connfu::Dispatcher.new(nil, nil) }.should raise_error(Exception, "Unable to dispatch events if no channel is defined")
31
+ end
32
+ end
33
+
34
+ context "set_channels" do
35
+ let(:app_channels) do
36
+ [{"uid"=>"twitter", "type"=>"twitter", "accounts"=>[{"name"=>"juandebravo"}, {"name"=>"connfudev"}], "filter"=>""},
37
+ {"uid"=>"juan-voice", "type"=>"sms", "phones" => [{"country"=>"UK", "phone_number"=>"9876"}]},
38
+ {"uid"=>"juan-voice", "type"=>"voice", "phones" => [{"country"=>"UK", "phone_number"=>"9876"}]},
39
+ {"uid"=>"channel-1312722260", "type"=>"twitter", "accounts"=>[{"name"=>"juandebravo"}, {"name"=>"finnstr"}], "filter"=>""}]
40
+ end
41
+
42
+ let(:message_details) do
43
+ {"id" => "external_id", "content" => "foo, bar", "from" => "connfudev", "to" => "osuka", "message_type" => "new"}
44
+ end
45
+
46
+ let(:voice_message_details) do
47
+ details = message_details
48
+ details["channel_type"] = "voice"
49
+ details["to"] = "1234"
50
+ details["channel_name"] = "juan-voice"
51
+ details
52
+ end
53
+
54
+ let(:sms_message_details) do
55
+ details = message_details
56
+ details["channel_type"] = "sms"
57
+ details["to"] = "9876"
58
+ details["channel_name"] = "juan-voice"
59
+ details
60
+ end
61
+
62
+ let(:twitter_message_details) do
63
+ details = message_details
64
+ details["channel_type"] = "twitter"
65
+ details
66
+ end
67
+
68
+ it "should retrieve only the twitter channels when a twitter message from is retrieved" do
69
+ details = twitter_message_details
70
+ details["to"] = "unknown"
71
+ details["from"] = "connfudev"
72
+ message = Connfu::Message.new(details)
73
+ message.channel_name.should be_nil
74
+
75
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
76
+ obj.send(:set_channels!, message)
77
+ message.channel_name.should be_kind_of(Array)
78
+ message.channel_name.length.should eql(1)
79
+ end
80
+
81
+ it "should retrieve only the twitter channels when a twitter message from is retrieved. return two channels" do
82
+ details = twitter_message_details
83
+ details["to"] = "unknown"
84
+ details["from"] = "juandebravo"
85
+ message = Connfu::Message.new(details)
86
+ message.channel_name.should be_nil
87
+
88
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
89
+ obj.send(:set_channels!, message)
90
+ message.channel_name.should be_kind_of(Array)
91
+ message.channel_name.length.should eql(2)
92
+ end
93
+
94
+ it "should retrieve only the twitter channels when a twitter message to is retrieved" do
95
+ details = twitter_message_details
96
+ details["to"] = "connfudev"
97
+ details["from"] = "unknown"
98
+ message = Connfu::Message.new(details)
99
+ message.channel_name.should be_nil
100
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
101
+ obj.send(:set_channels!, message)
102
+ message.channel_name.should be_kind_of(Array)
103
+ message.channel_name.length.should eql(1)
104
+ end
105
+
106
+ it "should retrieve only the twitter channels when a twitter message to is retrieved. return two channels" do
107
+ details = twitter_message_details
108
+ details["to"] = "juandebravo"
109
+ details["from"] = "unknown"
110
+ message = Connfu::Message.new(details)
111
+ message.channel_name.should be_nil
112
+
113
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
114
+ obj.send(:set_channels!, message)
115
+ message.channel_name.should be_kind_of(Array)
116
+ message.channel_name.length.should eql(2)
117
+ end
118
+
119
+ it "should retrieve only the voice channels when a voice message is retrieved" do
120
+ message = Connfu::Message.new(voice_message_details)
121
+ message.channel_name.should_not be_nil
122
+ message.channel_name.should eql("juan-voice")
123
+
124
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
125
+ obj.send(:set_channels!, message)
126
+ message.channel_name.should be_kind_of(Array)
127
+ message.channel_name.length.should eql(1)
128
+ end
129
+
130
+ it "should retrieve no voice channel when DID is not expected" do
131
+ voice = voice_message_details
132
+ voice["channel_name"] = "foo"
133
+ message = Connfu::Message.new(voice)
134
+ message.channel_name.should_not be_nil
135
+ message.channel_name.should eql("foo")
136
+
137
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
138
+ obj.send(:set_channels!, message)
139
+ puts message.channel_name
140
+ message.channel_name.should be_kind_of(Array)
141
+ message.channel_name.length.should eql(0)
142
+ end
143
+
144
+ it "should retrieve no sms channel when DID is not expected" do
145
+ sms = sms_message_details
146
+ sms["to"] = "1234"
147
+ message = Connfu::Message.new(sms)
148
+
149
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
150
+ obj.send(:set_channels!, message)
151
+ puts message.channel_name
152
+ message.channel_name.should be_kind_of(Array)
153
+ message.channel_name.length.should eql(0)
154
+ end
155
+
156
+ it "should retrieve only the sms channels when a sms message is retrieved" do
157
+ message = Connfu::Message.new(sms_message_details)
158
+ message.channel_name.should_not be_nil
159
+ message.channel_name.should eql("juan-voice")
160
+
161
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
162
+
163
+ obj.send(:set_channels!, message)
164
+ message.channel_name.should be_kind_of(Array)
165
+ message.channel_name.length.should eql(1)
166
+ message.channel_name[0].should eql("juan-voice")
167
+ end
168
+
169
+ it "should retrieve no channel when unknown channel_type is retrieved" do
170
+ message = Connfu::Message.new(message_details)
171
+ obj = Connfu::Dispatcher.new(nil, {:foo => "bar"}, app_channels)
172
+ obj.send(:set_channels!, message)
173
+ message.channel_name.should be_kind_of(Array)
174
+ message.channel_name.length.should eql(0)
175
+ end
176
+
177
+ end
178
+
179
+
180
+ context "twitter stream" do
181
+
182
+ before(:each) do
183
+
184
+ Connfu.stub(:prov_client).and_return(prov_client)
185
+ Connfu.should_receive(:prov_client).twice
186
+
187
+ Connfu::Dispatcher.any_instance.stub(:max_messages).and_return(10)
188
+ Connfu::Listener.any_instance.stub(:max_messages).and_return(10)
189
+ Connfu::Provisioning::Application.any_instance.stub(:get_channels).and_return { [] }
190
+
191
+ Connfu::ConnfuStream.any_instance.stub(:start_listening) { nil }
192
+
193
+ @id = 0
194
+ Connfu::ConnfuStream.any_instance.stub(:get) {
195
+ @id+=1
196
+ message = "{\"id\":\"#{@id}\",\"remoteId\":\"87872349432582144\",\"summary\":\"\",\"content\":\":foo =&gt; \\\"bar\\\"\",\"sender\":\"twitter://connfudev/\",\"recipients\":[],\"tags\":[],\"links\":[],\"attachments\":[],\"timeStamp\":\"2011-07-04T13:16:15.000Z\",\"isDeleted\":false,\"isPublic\":true,\"isArticle\":false}"
197
+ Connfu::ConnfuMessageFormatter.send(:format_message, message) # private method
198
+ }
199
+
200
+ #Connfu.logger = STDOUT
201
+
202
+ @connfu = Connfu.application(API_KEY) {
203
+ listen(:twitter) do |channel|
204
+
205
+ channel.filter = "text has #conference"
206
+
207
+ channel.on(:new) do |tweet|
208
+ # puts "A new tweet arrived"
209
+ end
210
+
211
+ end
212
+
213
+ }
214
+
215
+ end
216
+
217
+ describe "dispatcher" do
218
+ it "should be an instance of Connfu::Dispatcher when initialized" do
219
+ @connfu.dispatcher.should be_an_instance_of(Connfu::Dispatcher)
220
+ end
221
+ it "should receive ten messages" do
222
+ @connfu.dispatcher.counter.should eql(10)
223
+ end
224
+ end
225
+ end
226
+
227
+ end