twiddla 0.1.0

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.
@@ -0,0 +1,47 @@
1
+ Twiddla
2
+ ## Installation
3
+
4
+ http://rubygems.org/gems/twiddla
5
+
6
+ gem install twiddla
7
+
8
+ ## Usage
9
+
10
+ Set up API key
11
+
12
+ require 'twiddla'
13
+ Twiddla.auth!('username', 'password') # set your own API key here
14
+
15
+ Create user
16
+
17
+ options = {
18
+ newusername: 'john_doe',
19
+ newpassword: 'password',
20
+ displayname: 'John Doe'
21
+ }
22
+ user_name = Twiddla::API.create_user(options)
23
+
24
+ Create meeting
25
+
26
+ options = { meetingtitle: 'Title', meetingpassword: 'password' }
27
+ session_id = Twiddla::API.create_meeting(options)
28
+
29
+ Embeddable meeting url
30
+
31
+ meeting_url = Twiddla::API.meeting_url(session_id)
32
+
33
+ List active meetings
34
+
35
+ meetings = Twiddla::API.active_meetings
36
+
37
+ List snapshots
38
+
39
+ snapshots = Twiddla::API.snapshots
40
+
41
+ Delete meeting
42
+
43
+ Twiddla::API.delete(session_id)
44
+
45
+ ## Twiddla API References
46
+
47
+ http://www.twiddla.com/API/Reference.aspx
@@ -0,0 +1 @@
1
+ require 'twiddla/base'
@@ -0,0 +1,61 @@
1
+ module Twiddla
2
+ class API
3
+ class << self
4
+ attr_accessor :username, :password
5
+
6
+ def create_user(options)
7
+ api_call('CreateUser', options)
8
+ end
9
+
10
+ def create_meeting(options={})
11
+ call('new', options)
12
+ end
13
+
14
+ def meeting_url(session_id, options = {})
15
+ params = { sessionid: session_id }.merge(options)
16
+ "#{twiddla_url('api/Start')}?#{URI.encode_www_form(params)}"
17
+ end
18
+
19
+ def active_meetings
20
+ api_call('ListActive').split(',')
21
+ end
22
+
23
+ def snapshots(session_id = nil)
24
+ params = session_id ? { sessionid: session_id } : {}
25
+ api_call('ListSnapshots', params)
26
+ end
27
+
28
+ def delete_meeting(session_id)
29
+ api_call('DeleteSession', { sessionid: session_id })
30
+ end
31
+
32
+ private
33
+
34
+ def api_call(path, params = {})
35
+ call("api/#{path}", params)
36
+ end
37
+
38
+ def call(path, params = {})
39
+ uri = URI.parse(twiddla_url(path))
40
+ response = Net::HTTP.post_form(uri, auth_params.merge(params))
41
+ check_for_errors_and_return response.body.to_s
42
+ end
43
+
44
+ def twiddla_url(path)
45
+ "http://www.twiddla.com/#{path}.aspx"
46
+ end
47
+
48
+ def auth_params
49
+ { username: username, password: password }
50
+ end
51
+
52
+ LEADING_NEGATIVE_INTEGER = /-\d/
53
+ def check_for_errors_and_return(response_body)
54
+ raise APIError.new(response_body) if response_body.match(LEADING_NEGATIVE_INTEGER)
55
+ response_body
56
+ end
57
+ end
58
+ end
59
+
60
+ class Twiddla::APIError < Exception; end
61
+ end
@@ -0,0 +1,9 @@
1
+ require 'net/http'
2
+ require 'twiddla/api'
3
+
4
+ module Twiddla
5
+ def self.auth!(username, password)
6
+ API.password = password
7
+ API.username = username
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Twiddla
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'Twiddla'
2
+ include Twiddla
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twiddla::API do
4
+ before :each do
5
+ Twiddla.auth!('username', 'password')
6
+ @response = mock()
7
+ @response.stub(:body).and_return('')
8
+ Net::HTTP.stub(:post_form).and_return(@response)
9
+ @session_id = rand(1000)
10
+ end
11
+
12
+ describe '.create_user' do
13
+ it 'calls "CreateUser"' do
14
+ options = {
15
+ newusername: 'foo',
16
+ newpassword: 'bar',
17
+ displayname: 'foo bar',
18
+ email: 'foo@example.com',
19
+ }
20
+ Twiddla::API.should_receive(:api_call).with('CreateUser', options).and_return(options[:displayname])
21
+ Twiddla::API.create_user(options)
22
+ end
23
+ end
24
+
25
+ describe '.create_meeting' do
26
+ it 'calls "new"' do
27
+ Twiddla::API.should_receive(:call).with('new', {}).and_return(@session_id)
28
+ Twiddla::API.create_meeting
29
+ end
30
+ end
31
+
32
+ describe '.meeting_url' do
33
+ it 'creates embeddable url' do
34
+ regex = /api\/Start\.aspx\?sessionid=#{@session_id}$/
35
+ Twiddla::API.meeting_url(@session_id).should match(regex)
36
+ end
37
+ end
38
+
39
+ describe '.active_meetings' do
40
+ it 'calls "ListActive"' do
41
+ session_ids = [@session_id, @session_id + 1].map(&:to_s)
42
+ Twiddla::API.should_receive(:api_call).with('ListActive').and_return(session_ids.join(','))
43
+ Twiddla::API.active_meetings.should == session_ids
44
+ end
45
+ end
46
+
47
+ describe '.snapshots' do
48
+ it 'calls "ListSnapshots"' do
49
+ Twiddla::API.should_receive(:call).with('api/ListSnapshots', { sessionid: @session_id })
50
+ Twiddla::API.snapshots(@session_id)
51
+ end
52
+ end
53
+
54
+ describe '.delete_meeting' do
55
+ it 'calls "DeleteSession"' do
56
+ Twiddla::API.should_receive(:call).with('api/DeleteSession', { sessionid: @session_id }).and_return('1')
57
+ Twiddla::API.delete_meeting(@session_id)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "twiddla/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "twiddla"
7
+ s.version = Twiddla::VERSION
8
+ s.date = "2013-02-17"
9
+ s.authors = ["Hwan-Joon Choi"]
10
+ s.email = ["hc5duke@gmail.com"]
11
+ s.homepage = "https://github.com/hc5duke/twiddla"
12
+
13
+ s.summary = "Twiddla API ruby wrapper."
14
+ s.description = "Twiddla API in ruby."
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rspec", "~>2.5"
22
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: twiddla
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Hwan-Joon Choi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.5'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.5'
30
+ description: Twiddla API in ruby.
31
+ email:
32
+ - hc5duke@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - README.md
38
+ - lib/twiddla.rb
39
+ - lib/twiddla/api.rb
40
+ - lib/twiddla/base.rb
41
+ - lib/twiddla/version.rb
42
+ - spec/spec_helper.rb
43
+ - spec/twiddla_spec.rb
44
+ - twiddla.gemspec
45
+ homepage: https://github.com/hc5duke/twiddla
46
+ licenses: []
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.24
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Twiddla API ruby wrapper.
69
+ test_files:
70
+ - spec/spec_helper.rb
71
+ - spec/twiddla_spec.rb