connfu-client 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +3 -0
- data/.rvmrc +2 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +120 -0
- data/LICENSE.txt +661 -0
- data/README.rdoc +398 -0
- data/Rakefile +38 -0
- data/bin/.DS_Store +0 -0
- data/bin/connfu-client +94 -0
- data/connfu-client.gemspec +41 -0
- data/examples/conference/application.rb +68 -0
- data/examples/conference/conference.rb +33 -0
- data/examples/conference/conference_app.rb +25 -0
- data/examples/conference/connfu.log +5 -0
- data/examples/conference/wall.rb +11 -0
- data/examples/provisioning/app/get.rb +29 -0
- data/examples/provisioning/channels/get.rb +34 -0
- data/examples/provisioning/rss/create.rb +28 -0
- data/examples/provisioning/rss/delete.rb +27 -0
- data/examples/provisioning/rss/get.rb +32 -0
- data/examples/provisioning/rss/put.rb +29 -0
- data/examples/provisioning/setup.rb +2 -0
- data/examples/provisioning/twitter/create.rb +31 -0
- data/examples/provisioning/twitter/delete.rb +27 -0
- data/examples/provisioning/twitter/get.rb +32 -0
- data/examples/provisioning/twitter/put.rb +29 -0
- data/examples/provisioning/voice/create.rb +26 -0
- data/examples/provisioning/voice/delete.rb +27 -0
- data/examples/provisioning/voice/get.rb +36 -0
- data/examples/provisioning/voice/phones/create.rb +26 -0
- data/examples/provisioning/voice/phones/delete.rb +28 -0
- data/examples/provisioning/voice/phones/get.rb +38 -0
- data/examples/provisioning/voice/put.rb +38 -0
- data/examples/provisioning/voice/whitelist/create.rb +26 -0
- data/examples/provisioning/voice/whitelist/delete.rb +27 -0
- data/examples/provisioning/voice/whitelist/get.rb +36 -0
- data/examples/provisioning/voice/whitelist/put.rb +27 -0
- data/lib/connfu.rb +134 -0
- data/lib/connfu/cli/generator.rb +71 -0
- data/lib/connfu/connfu_logger.rb +88 -0
- data/lib/connfu/connfu_message_formatter.rb +134 -0
- data/lib/connfu/connfu_stream.rb +182 -0
- data/lib/connfu/dispatcher.rb +164 -0
- data/lib/connfu/dsl.rb +84 -0
- data/lib/connfu/events.rb +32 -0
- data/lib/connfu/listener.rb +85 -0
- data/lib/connfu/listener_channel.rb +100 -0
- data/lib/connfu/message.rb +74 -0
- data/lib/connfu/provisioning.rb +12 -0
- data/lib/connfu/provisioning/application.rb +374 -0
- data/lib/connfu/provisioning/base.rb +95 -0
- data/lib/connfu/provisioning/channel.rb +79 -0
- data/lib/connfu/provisioning/phone.rb +55 -0
- data/lib/connfu/provisioning/rss.rb +21 -0
- data/lib/connfu/provisioning/twitter.rb +28 -0
- data/lib/connfu/provisioning/voice.rb +89 -0
- data/lib/connfu/provisioning/whitelist.rb +62 -0
- data/lib/connfu/version.rb +6 -0
- data/lib/rdoc/generator/template/connfu/_context.rhtml +209 -0
- data/lib/rdoc/generator/template/connfu/_head.rhtml +7 -0
- data/lib/rdoc/generator/template/connfu/class.rhtml +38 -0
- data/lib/rdoc/generator/template/connfu/file.rhtml +36 -0
- data/lib/rdoc/generator/template/connfu/index.rhtml +13 -0
- data/lib/rdoc/generator/template/connfu/resources/apple-touch-icon.png +0 -0
- data/lib/rdoc/generator/template/connfu/resources/css/github.css +129 -0
- data/lib/rdoc/generator/template/connfu/resources/css/main.css +339 -0
- data/lib/rdoc/generator/template/connfu/resources/css/panel.css +389 -0
- data/lib/rdoc/generator/template/connfu/resources/css/reset.css +53 -0
- data/lib/rdoc/generator/template/connfu/resources/favicon.ico +0 -0
- data/lib/rdoc/generator/template/connfu/resources/i/arrows.png +0 -0
- data/lib/rdoc/generator/template/connfu/resources/i/results_bg.png +0 -0
- data/lib/rdoc/generator/template/connfu/resources/i/tree_bg.png +0 -0
- data/lib/rdoc/generator/template/connfu/resources/js/highlight.pack.js +1 -0
- data/lib/rdoc/generator/template/connfu/resources/js/jquery-1.3.2.min.js +19 -0
- data/lib/rdoc/generator/template/connfu/resources/js/jquery-effect.js +593 -0
- data/lib/rdoc/generator/template/connfu/resources/js/main.js +20 -0
- data/lib/rdoc/generator/template/connfu/resources/js/searchdoc.js +628 -0
- data/lib/rdoc/generator/template/connfu/resources/panel/index.html +72 -0
- data/lib/rdoc/generator/template/connfu/se_index.rhtml +8 -0
- data/spec/connfu_message_formatter_spec.rb +88 -0
- data/spec/connfu_spec.rb +51 -0
- data/spec/connfu_stream_spec.rb +84 -0
- data/spec/dispatcher_spec.rb +227 -0
- data/spec/dsl_spec.rb +159 -0
- data/spec/listener_channel_spec.rb +130 -0
- data/spec/listener_spec.rb +67 -0
- data/spec/provisioning/application_spec.rb +47 -0
- data/spec/provisioning/channel_shared_examples.rb +52 -0
- data/spec/provisioning/channel_spec.rb +13 -0
- data/spec/provisioning/phone_spec.rb +88 -0
- data/spec/provisioning/voice_spec.rb +138 -0
- data/spec/provisioning_spec.rb +500 -0
- data/spec/spec_helper.rb +51 -0
- metadata +298 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
module Connfu
|
3
|
+
|
4
|
+
##
|
5
|
+
# This class provides the relevant information got from an external event
|
6
|
+
#
|
7
|
+
class Message
|
8
|
+
|
9
|
+
# valid voice messages
|
10
|
+
VOICE_TYPES = ["join", "leave", "new_topic"]
|
11
|
+
|
12
|
+
# valid sms messages
|
13
|
+
SMS_TYPES = ["sms"]
|
14
|
+
|
15
|
+
attr_reader :id # external identifier
|
16
|
+
attr_reader :content # main content
|
17
|
+
attr_reader :from # sender
|
18
|
+
attr_reader :to # receiver
|
19
|
+
attr_reader :message_type # new, join
|
20
|
+
attr_reader :channel_type # twitter, voice, sms, rss, etc
|
21
|
+
attr_accessor :channel_name # specific channel (twitter account, etc)
|
22
|
+
|
23
|
+
##
|
24
|
+
# Initializer
|
25
|
+
def initialize(params)
|
26
|
+
params.each_pair { |key, value|
|
27
|
+
self.instance_variable_set("@#{key}", value)
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Trying to show the information properly
|
33
|
+
def to_s
|
34
|
+
value = []
|
35
|
+
self.instance_variables.each { |var|
|
36
|
+
value << "#{var[1..-1]}: #{self.instance_variable_get(var)}"
|
37
|
+
}
|
38
|
+
value.join("; ").to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# Retrieve an attribute using a Hash approach
|
43
|
+
# ==== Parameters
|
44
|
+
# * +value+ attribute name
|
45
|
+
# ==== Return
|
46
|
+
# attribute value
|
47
|
+
def [](value)
|
48
|
+
self.instance_variable_get("@#{value.to_s}")
|
49
|
+
end
|
50
|
+
|
51
|
+
class << self
|
52
|
+
##
|
53
|
+
# Checks if a message is a valid voice message (If it is included in VOICE_TYPES)
|
54
|
+
# ==== Parameters
|
55
|
+
# * +type+ message type
|
56
|
+
# ==== Return
|
57
|
+
# true if the message is a voice message, false if not
|
58
|
+
def is_voice?(type)
|
59
|
+
VOICE_TYPES.include?(type)
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Checks if a message is a valid sms message (If it is included in SMS_TYPES)
|
64
|
+
# ==== Parameters
|
65
|
+
# * +type+ message type
|
66
|
+
# ==== Return
|
67
|
+
# true if the message is a sms message, false if not
|
68
|
+
def is_sms?(type)
|
69
|
+
SMS_TYPES.include?(type)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'connfu/provisioning/application'
|
2
|
+
require 'connfu/provisioning/base'
|
3
|
+
require 'connfu/provisioning/channel'
|
4
|
+
require 'connfu/provisioning/phone'
|
5
|
+
require 'connfu/provisioning/rss'
|
6
|
+
require 'connfu/provisioning/twitter'
|
7
|
+
require 'connfu/provisioning/voice'
|
8
|
+
|
9
|
+
module Connfu
|
10
|
+
module Provisioning
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,374 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
module Connfu
|
4
|
+
module Provisioning
|
5
|
+
|
6
|
+
##
|
7
|
+
# Application class defines the single entry point to fetch, create, update and delete
|
8
|
+
# any channel associated to the application
|
9
|
+
#
|
10
|
+
class Application
|
11
|
+
# Base instance to send HTTP requests to connFu API
|
12
|
+
attr_accessor :base
|
13
|
+
|
14
|
+
##
|
15
|
+
# Initializer
|
16
|
+
# ==== Parameters
|
17
|
+
#
|
18
|
+
# * +api_key+ valid api_key that authenticates the application
|
19
|
+
# * +endpoint+ connFu endpoint (host:port). Optional
|
20
|
+
def initialize(api_key, endpoint = Connfu::CONNFU_ENDPOINT)
|
21
|
+
@base = Base.new(api_key, endpoint)
|
22
|
+
@name = nil
|
23
|
+
@description = nil
|
24
|
+
@stream_name = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Retrieves the app information using the API
|
29
|
+
# ==== Return
|
30
|
+
# * +self+ instance with name, description and stream_name updated
|
31
|
+
# * raise RestClient::Unauthorized if token is invalid
|
32
|
+
def get_info
|
33
|
+
if @name.nil?
|
34
|
+
data = ActiveSupport::JSON.decode(@base.get(""))
|
35
|
+
unless data.nil? or !data.instance_of?(Hash)
|
36
|
+
@name = data["name"]
|
37
|
+
@description = data["description"]
|
38
|
+
@stream_name = data["stream_name"]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Returns the app name. Lazy loading, it sends a request to retrieve application info
|
46
|
+
# only the first time this method is called, and the info is cached for next calls
|
47
|
+
# ==== Return
|
48
|
+
# application name
|
49
|
+
def name
|
50
|
+
@name.nil? and get_info
|
51
|
+
@name
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
##
|
56
|
+
# Returns the app description. Lazy loading, it sends a request to retrieve application info
|
57
|
+
# only the first time this method is called, and the info is cached for next calls
|
58
|
+
# ==== Return
|
59
|
+
# application description
|
60
|
+
def description
|
61
|
+
@name.nil? and get_info
|
62
|
+
@description
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
# Returns the app stream name. Lazy loading, it sends a request to retrieve application info
|
67
|
+
# only the first time this method is called, and the info is cached for next calls
|
68
|
+
# ==== Return
|
69
|
+
# application stream name
|
70
|
+
def stream_name
|
71
|
+
@name.nil? and get_info
|
72
|
+
@stream_name
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# Retrieves the app channels
|
77
|
+
# ==== Return
|
78
|
+
# Array of Channel instances
|
79
|
+
def get_channels
|
80
|
+
data = ActiveSupport::JSON.decode(@base.get("channels/"))
|
81
|
+
Channel.unmarshal(data)
|
82
|
+
end
|
83
|
+
|
84
|
+
#
|
85
|
+
# Twitter channel management
|
86
|
+
#
|
87
|
+
# Retrieve the Twitter channel
|
88
|
+
# @param key Twitter channel identifier. It it is not specified, all the twitter channels are fetched
|
89
|
+
#
|
90
|
+
def get_twitter_channel(key = "")
|
91
|
+
data = ActiveSupport::JSON.decode(@base.get("channels/twitter/#{key}"))
|
92
|
+
Twitter.unmarshal(data)
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# @TODO
|
97
|
+
#
|
98
|
+
def update_twitter_channel()
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Create a Twitter channel per each of the origin or recipients
|
104
|
+
#
|
105
|
+
# ==== Parameters
|
106
|
+
#
|
107
|
+
# * +key+ Twitter channel identifier
|
108
|
+
# * +params+ Twitter channel behavior
|
109
|
+
# - array object of origin twitter accounts
|
110
|
+
# - Hash object
|
111
|
+
# - origin: one or more twitter accounts
|
112
|
+
# - mentions: one or more twitter accounts
|
113
|
+
# - hashtags: one or more hashtags
|
114
|
+
def create_twitter_channel(key, params = {:origin => [], :mentions => [], :hashtags => []})
|
115
|
+
|
116
|
+
if params.is_a?(Array)
|
117
|
+
_params = {}
|
118
|
+
_params[:origin] = params
|
119
|
+
params = _params
|
120
|
+
elsif params.is_a?(String)
|
121
|
+
_params = {}
|
122
|
+
_params[:origin] = params
|
123
|
+
params = _params
|
124
|
+
end
|
125
|
+
|
126
|
+
unless params.has_key?(:origin) or params.has_key?(:mentions)
|
127
|
+
raise "Invalid parameters. Either origin or mentions should be defined"
|
128
|
+
end
|
129
|
+
|
130
|
+
if params.has_key?(:origin) and params.has_key?(:mentions)
|
131
|
+
raise "Invalid parameters. Only origin or mentions can be defined"
|
132
|
+
end
|
133
|
+
|
134
|
+
filter = []
|
135
|
+
|
136
|
+
# filter = "tags:(tag1 AND tag2...)
|
137
|
+
if params.has_key?(:hashtags) and params[:hashtags].length > 0
|
138
|
+
filter << "tags:(#{params[:hashtags].map { |hashtag| "#{hashtag}" }.join(" AND ")})"
|
139
|
+
end
|
140
|
+
|
141
|
+
if params.has_key?(:origin)
|
142
|
+
# retrieve all the tweets from/to that user
|
143
|
+
if filter.empty?
|
144
|
+
filter = ""
|
145
|
+
else
|
146
|
+
filter = filter.join(' AND ')
|
147
|
+
end
|
148
|
+
if params[:origin].is_a?(String)
|
149
|
+
users = [params[:origin]]
|
150
|
+
else
|
151
|
+
users = params[:origin]
|
152
|
+
end
|
153
|
+
|
154
|
+
@base.post("channels/twitter",
|
155
|
+
{:uid => key,
|
156
|
+
:accounts => users.collect { |item| {:name => item} },
|
157
|
+
:filter => filter
|
158
|
+
})
|
159
|
+
else
|
160
|
+
# retrieve users mentions
|
161
|
+
users = params[:mentions]
|
162
|
+
locations = []
|
163
|
+
# create a stream per each origin
|
164
|
+
users.each { |user|
|
165
|
+
user_filter = filter.dup
|
166
|
+
user_filter << "recipients:#{user}"
|
167
|
+
|
168
|
+
locations << @base.post("channels/twitter",
|
169
|
+
{:uid => key,
|
170
|
+
:accounts => [{:name => user}],
|
171
|
+
:filter => "(#{user_filter.join(' AND ')})"
|
172
|
+
})
|
173
|
+
}
|
174
|
+
locations
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
##
|
180
|
+
# Delete a Twitter channel
|
181
|
+
#
|
182
|
+
# ==== Parameters
|
183
|
+
# * +key+ twitter channel unique identifier
|
184
|
+
# === Return
|
185
|
+
# * nil if success
|
186
|
+
# * RestClient exception with relevant error information
|
187
|
+
def delete_twitter_channel(key)
|
188
|
+
@base.delete("channels/twitter/#{key}")
|
189
|
+
end
|
190
|
+
|
191
|
+
#
|
192
|
+
# Voice channel management
|
193
|
+
#
|
194
|
+
# Retrieve the voice channel
|
195
|
+
# @param voice Voice channel identifier. It it is not specified, all the voice channels are fetched
|
196
|
+
#
|
197
|
+
def get_voice_channel(voice = "")
|
198
|
+
data = @base.get("channels/voice/#{voice}")
|
199
|
+
data = ActiveSupport::JSON.decode(data)
|
200
|
+
Voice.unmarshal(data)
|
201
|
+
end
|
202
|
+
|
203
|
+
#
|
204
|
+
# Update the voice channel topic
|
205
|
+
# @param voice Voice channel identifier
|
206
|
+
# @param params
|
207
|
+
# String: topic new topic
|
208
|
+
# Hash:
|
209
|
+
# topic new topic
|
210
|
+
# welcome_message new welcome_message
|
211
|
+
# rejected_message new rejected_message
|
212
|
+
#
|
213
|
+
def update_voice_channel(voice, params)
|
214
|
+
attributes = {}
|
215
|
+
if params.is_a?(String)
|
216
|
+
attributes[:topic] = params
|
217
|
+
elsif params.is_a?(Hash)
|
218
|
+
Voice::UPDATE_ATTRIBUTES.each { |attr|
|
219
|
+
params.has_key?(attr) and attributes[attr] = params[attr]
|
220
|
+
}
|
221
|
+
else
|
222
|
+
# do nothing, raise exception...
|
223
|
+
end
|
224
|
+
@base.put("channels/voice/#{voice}", attributes)
|
225
|
+
end
|
226
|
+
|
227
|
+
##
|
228
|
+
# Create a new voice channel
|
229
|
+
# ==== Parameters
|
230
|
+
# * +name+ voice channel identifier
|
231
|
+
# * +country+ country to allocate a DID
|
232
|
+
#
|
233
|
+
def create_voice_channel(name, country, privacy = Voice::Privacy::WHITELIST)
|
234
|
+
@base.post("channels/voice", {:uid => name, :country => country, :privacy => privacy})
|
235
|
+
end
|
236
|
+
|
237
|
+
##
|
238
|
+
# Delete a voice channel
|
239
|
+
# ==== Parameters
|
240
|
+
# * +name+ voice channel identifier
|
241
|
+
#
|
242
|
+
def delete_voice_channel(voice)
|
243
|
+
@base.delete("channels/voice/#{voice}")
|
244
|
+
end
|
245
|
+
|
246
|
+
# Voice channel Phone Management
|
247
|
+
|
248
|
+
##
|
249
|
+
# Retrieve a voice channel phone lists, that's the list of phones assigned to that voice channel
|
250
|
+
# ==== Parameters
|
251
|
+
# * +voice+ Voice channel identifier
|
252
|
+
# * +phone+ (optional) specific Phone number to retrieve. If it is not specified, all the list is fetched
|
253
|
+
def get_phones(voice, phone = "")
|
254
|
+
Phone.unmarshal(voice, ActiveSupport::JSON.decode(@base.get("channels/voice/#{voice}/phones/#{phone}")))
|
255
|
+
end
|
256
|
+
|
257
|
+
##
|
258
|
+
# Delete one phone number or the whole phone list
|
259
|
+
# ==== Parameters
|
260
|
+
# * +voice+: Voice channel identifier
|
261
|
+
# * +phone+: specific number to delete.
|
262
|
+
def delete_phone(voice, phone)
|
263
|
+
@base.delete("channels/voice/#{voice}/phones/#{phone}")
|
264
|
+
end
|
265
|
+
|
266
|
+
##
|
267
|
+
# Add a new phone number to the Voice channel
|
268
|
+
# ==== Parameters
|
269
|
+
# * +voice+: Voice channel identifier
|
270
|
+
# * +country+: for the phone number to be allocated
|
271
|
+
def add_phone(voice, country)
|
272
|
+
@base.post("channels/voice/#{voice}/phones", {:country => country})
|
273
|
+
end
|
274
|
+
|
275
|
+
|
276
|
+
##
|
277
|
+
# Voice channel Whitelist management
|
278
|
+
#
|
279
|
+
# Retrieve the whitelist
|
280
|
+
# @param voice Voice channel identifier
|
281
|
+
# @param number (optional) specific whitelist number to retrieve. If it is not specified, all the list is fetched
|
282
|
+
def get_whitelist(voice, number = "")
|
283
|
+
if number.empty?
|
284
|
+
Whitelist.unmarshal(voice, ActiveSupport::JSON.decode(@base.get("channels/voice/#{voice}/whitelisted/#{number}")))
|
285
|
+
else
|
286
|
+
user = ActiveSupport::JSON.decode(@base.get("channels/voice/#{voice}/whitelisted/#{number}"))
|
287
|
+
WhitelistUser.new(*user.values)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
#
|
292
|
+
# Delete one whitelist number or the whole whitelist
|
293
|
+
# @param voice Voice channel identifier
|
294
|
+
# @param number (optional) specific number to delete. If not present, the whole whitelist is deleted
|
295
|
+
def delete_whitelist(voice, number = "")
|
296
|
+
@base.delete("channels/voice/#{voice}/whitelisted/#{number}")
|
297
|
+
end
|
298
|
+
|
299
|
+
#
|
300
|
+
# Create a new item in the whitelist
|
301
|
+
# @param *args:
|
302
|
+
# - First parameter: voice channel identifier
|
303
|
+
# - Second parameter can be either:
|
304
|
+
# - WhitelistUser object with the name and phone information
|
305
|
+
# - two arguments name, phone
|
306
|
+
#
|
307
|
+
def add_whitelist(*args)
|
308
|
+
|
309
|
+
if args.length.eql?(2)
|
310
|
+
@base.post("channels/voice/#{args[0]}/whitelisted", {:name => args[1].name, :phone => args[1].phone})
|
311
|
+
else
|
312
|
+
@base.post("channels/voice/#{args[0]}/whitelisted", {:name => args[1], :phone => args[2]})
|
313
|
+
end
|
314
|
+
|
315
|
+
end
|
316
|
+
|
317
|
+
#
|
318
|
+
# Update a whitelist item
|
319
|
+
# @param *args:
|
320
|
+
# - First parameter: voice channel identifier
|
321
|
+
# - Second parameter can be either:
|
322
|
+
# - WhitelistUser object with the name and phone information
|
323
|
+
# - two arguments name, phone
|
324
|
+
#
|
325
|
+
def update_whitelist(*args)
|
326
|
+
if args.length.eql?(2)
|
327
|
+
@base.put("channels/voice/#{args[0]}/whitelisted/#{args[1].phone}", {:name => args[1].name})
|
328
|
+
else
|
329
|
+
@base.put("channels/voice/#{args[0]}/whitelisted/#{args[2]}", {:name => args[1]})
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
#
|
334
|
+
# RSS channel management
|
335
|
+
#
|
336
|
+
# Retrieve the rss channel
|
337
|
+
# @param name RSS channel identifier. It it is not specified, all the RSS channels are fetched
|
338
|
+
#
|
339
|
+
def get_rss_channel(name = "")
|
340
|
+
data = @base.get("channels/rss/#{name}")
|
341
|
+
data = ActiveSupport::JSON.decode(data)
|
342
|
+
Rss.unmarshal(data)
|
343
|
+
end
|
344
|
+
|
345
|
+
#
|
346
|
+
# Create a new rss channel
|
347
|
+
# @param name rss channel identifier
|
348
|
+
# @param uri RSS endpoint
|
349
|
+
#
|
350
|
+
def create_rss_channel(name, uri)
|
351
|
+
@base.post("channels/rss", {:uid => name, :uri => uri})
|
352
|
+
end
|
353
|
+
|
354
|
+
#
|
355
|
+
# Update the rss channel URI
|
356
|
+
# @param name RSS channel identifier
|
357
|
+
# @param uri new uri
|
358
|
+
#
|
359
|
+
def update_rss_channel(name, uri)
|
360
|
+
@base.put("channels/rss/#{name}", {:uri => uri})
|
361
|
+
end
|
362
|
+
|
363
|
+
#
|
364
|
+
# Delete a rss channel
|
365
|
+
# @param name rss channel identifier
|
366
|
+
#
|
367
|
+
def delete_rss_channel(name)
|
368
|
+
@base.delete("channels/rss/#{name}")
|
369
|
+
end
|
370
|
+
|
371
|
+
end
|
372
|
+
|
373
|
+
end
|
374
|
+
end
|