connfu-client 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.
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
data/spec/dsl_spec.rb ADDED
@@ -0,0 +1,159 @@
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
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'examples')
8
+
9
+ require 'spec_helper'
10
+
11
+ # Conference application
12
+ require 'conference/conference_app'
13
+
14
+ describe Connfu::DSL do
15
+
16
+ let(:prov_client) {
17
+ application = Connfu::Provisioning::Application.new(API_KEY, ENDPOINT)
18
+ application.stub(:name) {APP_NAME}
19
+ application.stub(:description) {APP_DESCRIPTION}
20
+ application.stub(:stream_name) {APP_STREAM_NAME}
21
+
22
+ obj = double 'prov_client'
23
+ obj.stub(:get_info) { application }
24
+ obj.stub(:get_channels) {[]}
25
+ obj
26
+ }
27
+
28
+ before(:each) do
29
+
30
+ Connfu.stub(:prov_client).and_return(prov_client)
31
+ Connfu.should_receive(:prov_client).twice
32
+
33
+ Connfu::Listener.any_instance.stub(:start) { true }
34
+ Connfu::Listener.any_instance.stub(:join) { true }
35
+ Connfu::Dispatcher.any_instance.stub(:join) { true }
36
+ Connfu::ConnfuStream.any_instance.stub(:start_listening) { nil }
37
+ Connfu::Provisioning::Application.any_instance.stub(:get_channels).and_return {[]}
38
+
39
+ @connfu = Connfu.application(API_KEY) {
40
+
41
+ listen(:voice) do |channel|
42
+ channel.on(:new) do |call|
43
+ puts "#{NEW_CALL_MESSAGE} on number #{call[:destination]}"
44
+ conf = ConferenceApp::find_by_conference_number(call[:destination])
45
+ if conf.is_allowed?(call[:origin])
46
+ puts "whitelist number received"
47
+ else
48
+ puts "not whitelist number"
49
+ end
50
+ end
51
+
52
+ channel.on(:leave) do |call|
53
+ puts "#{call[:origin]} #{HANG_MESSAGE} #{call[:destination]}"
54
+ ConferenceApp::find(call[:destination]).end(call[:origin])
55
+ end
56
+
57
+ channel.on(:foo) do
58
+ end
59
+ end
60
+
61
+ listen(:twitter) do |channel|
62
+
63
+ channel.filter = "text has #conference"
64
+
65
+ channel.on(:new) do |tweet|
66
+ puts "A new tweet arrived"
67
+ conf = ConferenceApp::find_by_twitter_user(tweet[:origin])
68
+ conf.wall.print("#{tweet[:origin]}: has tweeted #{tweet[:destination]}")
69
+ end
70
+
71
+ end
72
+
73
+ listen(:foo) do |channel|
74
+ channel.on(:new) do |message|
75
+ puts "This is an unsupported channel"
76
+ end
77
+ end
78
+
79
+ }
80
+
81
+ end
82
+
83
+ context "channels" do
84
+
85
+ it "should have two channels defined" do
86
+ @connfu.listener_channels.length.should eql(2)
87
+ end
88
+
89
+ it "should have the channels :voice and :twitter" do
90
+ [:voice, :twitter].each { |channel|
91
+ @connfu.listener_channels.keys.should include(channel)
92
+ }
93
+ end
94
+
95
+ it "channel voice blocks length should be 4 (one per event :new, :join, :leave, :new_topic)" do
96
+ @connfu.listener_channels[:voice].blocks.length.should eql(4)
97
+ end
98
+
99
+ it "channel voice should have one block defined in :new event" do
100
+ @connfu.listener_channels[:voice].blocks[:new].length.should eql(1)
101
+ @connfu.listener_channels[:voice].blocks[:leave].length.should eql(1)
102
+ end
103
+
104
+ it "channel voice should have one block defined in :hang event" do
105
+ @connfu.listener_channels[:voice].blocks[:leave].length.should eql(1)
106
+ end
107
+
108
+ it "channel twitter should have one block defined in :new event" do
109
+ @connfu.listener_channels[:twitter].blocks[:new].length.should eql(1)
110
+ end
111
+
112
+ end
113
+
114
+ context "filters" do
115
+ it "should defined propertly the channel filter" do
116
+ @connfu.listener_channels[:twitter].filter.should eql("text has #conference")
117
+ end
118
+
119
+ end
120
+
121
+ context "messages" do
122
+
123
+ context "voice" do
124
+
125
+ it "should execute the defined block when a :new event is raised" do
126
+ @connfu.listener_channels[:voice].should_receive(:puts).with("#{NEW_CALL_MESSAGE} on number 222").once
127
+ @connfu.listener_channels[:voice].should_receive(:puts).with("whitelist number received").once
128
+
129
+ # throw event
130
+ @connfu.listener_channels[:voice].message(:new, {:origin => "111", :destination => "222"})
131
+ end
132
+
133
+ it "should execute the defined block when a :hang event is raised" do
134
+ @connfu.listener_channels[:voice].should_receive(:puts).with("111 #{HANG_MESSAGE} 222").once
135
+ @connfu.listener_channels[:voice].message(:leave, {:origin => "111", :destination => "222"})
136
+ end
137
+ end
138
+
139
+ context "twitter" do
140
+ it "should execute the defined block when a :new event is raised" do
141
+ # mock wall
142
+ wall = Wall.new
143
+ wall.should_receive(:puts).with("juandebravo: has tweeted My new tweet").once
144
+ conference = Conference.new("twitter")
145
+ conference.should_receive(:wall).and_return(wall)
146
+
147
+ # mock conference
148
+ ConferenceApp.should_receive(:find_by_twitter_user).with("juandebravo").and_return(conference)
149
+
150
+ @connfu.listener_channels[:twitter].should_receive(:puts).with("A new tweet arrived").once
151
+
152
+ # throw event
153
+ @connfu.listener_channels[:twitter].message(:new, {:origin => "juandebravo", :destination => "My new tweet"})
154
+ end
155
+ end
156
+
157
+ end
158
+
159
+ end
@@ -0,0 +1,130 @@
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
+ require 'connfu'
9
+
10
+ describe Connfu::ListenerChannel do
11
+
12
+ let(:prov_client) {
13
+ application = Connfu::Provisioning::Application.new(API_KEY, ENDPOINT)
14
+ application.stub(:name) {APP_NAME}
15
+ application.stub(:description) {APP_DESCRIPTION}
16
+ application.stub(:stream_name) {APP_STREAM_NAME}
17
+
18
+ obj = double 'prov_client'
19
+ obj.stub(:get_info) { application }
20
+ obj.stub(:get_channels) {[]}
21
+ obj
22
+ }
23
+
24
+ context "channel types" do
25
+ it "defines four supported channel types" do
26
+ Connfu::ListenerChannel::CHANNEL_TYPES.length.should eql(4)
27
+ end
28
+ end
29
+
30
+ context "listener channels" do
31
+ before(:each) do
32
+ Connfu.stub(:prov_client).and_return(prov_client)
33
+ Connfu.should_receive(:prov_client).twice
34
+
35
+ Connfu::Listener.any_instance.stub(:start) { true }
36
+ Connfu::Listener.any_instance.stub(:join) { true }
37
+ Connfu::Dispatcher.any_instance.stub(:join) { true }
38
+ Connfu::Provisioning::Application.any_instance.stub(:get_channels).and_return { [] }
39
+ Connfu::ConnfuStream.any_instance.stub(:start_listening) { nil }
40
+ end
41
+
42
+
43
+ it "unsupported channel is unconsidered" do
44
+
45
+ connfu = Connfu.application(API_KEY) {
46
+ listen(:foo) do
47
+ on(:new) do |call|
48
+ puts "foo bar"
49
+ end
50
+ end
51
+ listen(:twitter) do
52
+ on(:new) do |call|
53
+ puts "foo bar"
54
+ end
55
+ end
56
+ }
57
+
58
+ connfu.listener_channels.length.should eql(1)
59
+ end
60
+
61
+ it "supports RSS channel" do
62
+ connfu = Connfu.application(API_KEY) {
63
+ listen(:rss) do
64
+ on(:new) do |rss|
65
+ puts "foo bar"
66
+ end
67
+ end
68
+ }
69
+ connfu.listener_channels.length.should eql(1)
70
+ end
71
+
72
+ it "supports sms channel" do
73
+ connfu = Connfu.application(API_KEY) {
74
+ listen(:sms) do
75
+ on(:new) do |sms|
76
+ puts "foo bar"
77
+ end
78
+ end
79
+ }
80
+ connfu.listener_channels.length.should eql(1)
81
+ end
82
+
83
+ it "supports twitter channel" do
84
+ connfu = Connfu.application(API_KEY) {
85
+ listen(:twitter) do
86
+ on(:new) do |tweet|
87
+ puts "foo bar"
88
+ end
89
+ end
90
+ }
91
+ connfu.listener_channels.length.should eql(1)
92
+ end
93
+
94
+ it "supports voice channel" do
95
+ connfu = Connfu.application(API_KEY) {
96
+ listen(:voice) do
97
+ on(:new) do |call|
98
+ puts "foo bar"
99
+ end
100
+ end
101
+ }
102
+ connfu.listener_channels.length.should eql(1)
103
+ end
104
+
105
+
106
+ it "supports more than one channel" do
107
+ connfu = Connfu.application(API_KEY) {
108
+ listen(:voice) do
109
+ on(:new) do |call|
110
+ puts "foo bar"
111
+ end
112
+ end
113
+
114
+ listen(:rss) do
115
+ on(:new) do |rss|
116
+ puts "foo bar"
117
+ end
118
+ end
119
+ }
120
+ connfu.listener_channels.length.should eql(2)
121
+ end
122
+
123
+ it "raise an exception if no channel defined" do
124
+ lambda { @connfu = Connfu.application(API_KEY) {
125
+ } }.should raise_error(Exception)
126
+
127
+ end
128
+
129
+ end
130
+ end
@@ -0,0 +1,67 @@
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::Listener do
11
+
12
+ let(:prov_client) {
13
+ application = Connfu::Provisioning::Application.new(API_KEY, ENDPOINT)
14
+ application.stub(:name) {APP_NAME}
15
+ application.stub(:description) {APP_DESCRIPTION}
16
+ application.stub(:stream_name) {APP_STREAM_NAME}
17
+
18
+ obj = double 'prov_client'
19
+ obj.stub(:get_info) { application }
20
+ obj.stub(:get_channels) {[]}
21
+ obj
22
+ }
23
+
24
+ before(:each) do
25
+ Connfu.stub(:prov_client).and_return(prov_client)
26
+ Connfu.should_receive(:prov_client).twice
27
+
28
+ Connfu::Dispatcher.any_instance.stub(:max_messages).and_return(10)
29
+ Connfu::Listener.any_instance.stub(:max_messages).and_return(10)
30
+
31
+ Connfu::ConnfuStream.any_instance.stub(:start_listening) { nil }
32
+
33
+ @id = 0
34
+
35
+ Connfu::Provisioning::Application.any_instance.stub(:get_channels).and_return {[]}
36
+
37
+ Connfu::ConnfuStream.any_instance.stub(:get) {
38
+ @id+=1
39
+ message = "{\"id\":\"#{@id}\",\"remoteId\":\"87872349432582144\",\"summary\":\"\",\"content\":\":foo => \\\"bar\\\"\",\"sender\":\"twitter://connfudev/\",\"recipients\":[],\"tags\":[],\"links\":[],\"attachments\":[],\"timeStamp\":\"2011-07-04T13:16:15.000Z\",\"isDeleted\":false,\"isPublic\":true,\"isArticle\":false}"
40
+ Connfu::ConnfuMessageFormatter.send(:format_message, message) # private method
41
+ }
42
+
43
+ @connfu = Connfu.application(API_KEY) {
44
+ listen(:twitter) do |channel|
45
+ channel.filter = "text has #conference"
46
+
47
+ channel.on(:new) do |tweet|
48
+ # puts "A new tweet arrived"
49
+ end
50
+ end
51
+
52
+ }
53
+
54
+ end
55
+
56
+ context "twitter stream" do
57
+ describe "listener" do
58
+ it "should be an instance of Connfu::Listener when initialized" do
59
+ @connfu.listener.should be_an_instance_of(Connfu::Listener)
60
+ end
61
+ it "should receive ten messages" do
62
+ @connfu.listener.counter.should eql(10)
63
+ end
64
+ end
65
+ end
66
+
67
+ end
@@ -0,0 +1,47 @@
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 'connfu'
8
+
9
+ require 'spec_helper'
10
+
11
+ describe Connfu::Provisioning::Application do
12
+
13
+ before(:each) do
14
+ @application = Connfu::Provisioning::Application.new(API_KEY, ENDPOINT)
15
+ end
16
+
17
+ # Matcher that helps to test if an Application instance is well defined after retrieving data using prov API
18
+ RSpec::Matchers.define :be_well_defined_as_app do |name, description, stream_name|
19
+ match do |app| # app should be the Connfu::Provisioning::Application instance
20
+ app.should be_instance_of(Connfu::Provisioning::Application)
21
+ app.name.should eql(APP_NAME)
22
+ app.description.should eql(APP_DESCRIPTION)
23
+ app.stream_name.should eql(APP_STREAM_NAME)
24
+ end
25
+ end
26
+
27
+ context "Application" do
28
+ context "get_info" do
29
+ it "should retrieve name, description and stream_name" do
30
+ @application.base.should_receive(:get).once.and_return("{'description':'#{APP_DESCRIPTION}', 'name':'#{APP_NAME}', 'stream_name':'#{APP_STREAM_NAME}'}")
31
+ app = @application.get_info
32
+ app.should be_well_defined_as_app(APP_NAME, APP_DESCRIPTION, APP_STREAM_NAME)
33
+ end
34
+ end
35
+
36
+ describe "instance attributes" do
37
+ # Constructing RSpec examples programmatically
38
+ {"name" => APP_NAME, "description" => APP_DESCRIPTION, "stream_name" => APP_STREAM_NAME}.each do |attribute, value|
39
+ it "should make a HTTP request to retrieve app #{attribute}" do
40
+ @application.base.should_receive(:get).once.and_return("{'description':'#{APP_DESCRIPTION}', 'name':'#{APP_NAME}', 'stream_name':'#{APP_STREAM_NAME}'}")
41
+ @application.send(attribute.to_sym).should eql(value)
42
+ @application.should be_well_defined_as_app(APP_NAME, APP_DESCRIPTION, APP_STREAM_NAME)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,52 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ def current_time
5
+ @current_time ||= Time.now
6
+ end
7
+
8
+ def channel_attrs
9
+ @channel_attrs ||= {:created_at => "2011-08-26 11:55:10 +0300",
10
+ :updated_at => "2011-08-26 11:55:10 +0300"
11
+ }
12
+ end
13
+
14
+
15
+ shared_examples_for "Channel" do |channel, type|
16
+
17
+
18
+ RSpec::Matchers.define :have_defined_channel_attributes do |expected|
19
+ match do |channel|
20
+ channel_attrs.keys.each { |attribute|
21
+ channel.send(attribute).should eql(expected[attribute])
22
+ }
23
+ channel.type.should be_instance_of(String)
24
+ channel.uid.should be_instance_of(String)
25
+ end
26
+ end
27
+
28
+
29
+ describe "while creating a Channel instance" do
30
+ it "should initialize properly the meaning attributes" do
31
+ channel.should be_kind_of(Connfu::Provisioning::Channel)
32
+ channel.should have_defined_channel_attributes channel_attrs
33
+ end
34
+
35
+ end
36
+
37
+ describe "to_hash method" do
38
+ RSpec::Matchers.define :have_channel_details do |uid|
39
+ match do |actual|
40
+ actual.should be_instance_of(Hash)
41
+ actual.should have_key("uid")
42
+ actual["uid"].should be_instance_of(String)
43
+ end
44
+ end
45
+
46
+ it "should retrieve uid" do
47
+ #channel = Connfu::Provisioning::Channel.new(channel_attrs)
48
+ channel.to_hash.should have_channel_details(CHANNEL_KEY)
49
+ end
50
+ end
51
+
52
+ end