rype 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/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ .belly
2
+ .redcar
3
+ *.gem
4
+ pkg
5
+ tags
6
+ pkg
7
+ .bundle
8
+ Gemfile.lock
9
+ vendor/
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rype.gemspec
4
+ gemspec
data/History.txt ADDED
@@ -0,0 +1,9 @@
1
+ 2010/08/12
2
+ - Added some very basic instructions.
3
+
4
+ 2010/04/12
5
+ - Simple class structure for sending chat messages
6
+
7
+ 2010/04/11
8
+ - Started development, with a simple file that uses various chat-related aspects of the raw dbus-transported API.
9
+ - Added dependency: dbus => http://github.com/mvidner/ruby-dbus/downloads
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2010 Niko Felger
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
20
+
21
+ This product uses the Skype API but is not endorsed, certified or otherwise
22
+ approved in any way by Skype.
data/Rakefile ADDED
@@ -0,0 +1,78 @@
1
+ require "rubygems"
2
+ require "rake/gempackagetask"
3
+ require "rake/rdoctask"
4
+
5
+ require "spec"
6
+ require "spec/rake/spectask"
7
+ Spec::Rake::SpecTask.new do |t|
8
+ t.spec_opts = %w(--format specdoc --colour)
9
+ t.libs = ["spec"]
10
+ end
11
+
12
+ require 'cucumber'
13
+ require 'cucumber/rake/task'
14
+ Cucumber::Rake::Task.new('features') do |t|
15
+ t.cucumber_opts = %w{--format pretty}
16
+ end
17
+
18
+ task :default => ["spec", "features"]
19
+
20
+ # This builds the actual gem. For details of what all these options
21
+ # mean, and other ones you can add, check the documentation here:
22
+ #
23
+ # http://rubygems.org/read/chapter/20
24
+ #
25
+ spec = Gem::Specification.new do |s|
26
+
27
+ # Change these as appropriate
28
+ s.name = "rype"
29
+ s.version = "0.1.0"
30
+ s.summary = "Skype Api wrapper"
31
+ s.author = "Niko Felger"
32
+ s.email = "niko.felger@gmail.com"
33
+ s.homepage = "http://github.com/nfelger/rype"
34
+
35
+ s.has_rdoc = false
36
+ # You should probably have a README of some kind. Change the filename
37
+ # as appropriate
38
+ # s.extra_rdoc_files = %w(README)
39
+ # s.rdoc_options = %w(--main README)
40
+
41
+ # Add any extra files to include in the gem (like your README)
42
+ s.files = %w(History.txt) + Dir.glob("{bin,spec,lib/**/*}")
43
+ s.executables = FileList["bin/**"].map { |f| File.basename(f) }
44
+ s.require_paths = ["lib"]
45
+
46
+ # If you want to depend on other gems, add them here, along with any
47
+ # relevant versions
48
+ # s.add_dependency("some_other_gem", "~> 0.1.0")
49
+
50
+ # If your tests use any gems, include them here
51
+ s.add_development_dependency("rspec")
52
+ s.add_development_dependency("cucumber")
53
+ end
54
+
55
+ # To publish your gem online, install the 'gemcutter' gem; Read more
56
+ # about that here: http://gemcutter.org/pages/gem_docs
57
+ Rake::GemPackageTask.new(spec) do |pkg|
58
+ pkg.gem_spec = spec
59
+ end
60
+
61
+ desc "Build the gemspec file #{spec.name}.gemspec"
62
+ task :gemspec do
63
+ file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
64
+ File.open(file, "w") {|f| f << spec.to_ruby }
65
+ end
66
+
67
+ task :package => :gemspec
68
+
69
+ # Generate documentation
70
+ Rake::RDocTask.new do |rd|
71
+ rd.rdoc_files.include("lib/**/*.rb")
72
+ rd.rdoc_dir = "rdoc"
73
+ end
74
+
75
+ desc 'Clear out RDoc and generated packages'
76
+ task :clean => [:clobber_rdoc, :clobber_package] do
77
+ rm "#{spec.name}.gemspec"
78
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', '..', 'lib')
4
+
5
+ require 'rype'
6
+ require 'pp'
7
+
8
+ Rype.on(:chatmessage_received) do |chatmessage|
9
+ chatmessage.chat do |chat|
10
+ chatmessage.body do |body|
11
+ chat.send_message(body)
12
+ end
13
+ end
14
+ end
15
+
16
+ Rype.attach.join
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', '..', 'lib')
4
+
5
+ require 'rype'
6
+ require 'pp'
7
+
8
+ Rype.attach
9
+
10
+ Rype.chats do |chats|
11
+ chats.each do |chat|
12
+ p chat
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', '..', 'lib')
4
+ require 'rype'
5
+
6
+ Rype.attach
7
+
8
+ chat_id, message_body = ARGV[0..1]
9
+
10
+ Rype.chat(chat_id).send_message(message_body)
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ export DISPLAY=:2
4
+
5
+ if [[ ! -e /tmp/.X2-lock ]]
6
+ then Xvfb :2 &
7
+ fi
8
+
9
+ skype &
@@ -0,0 +1,9 @@
1
+ Feature: Receiving chat messages
2
+ Background:
3
+ Given I am using the Skype Api testing fake
4
+
5
+ Scenario: Receiving a message
6
+ Given a client has registered a callback for notifications about "CHATMESSAGE"
7
+ When Skype issues a notification "CHATMESSAGE 123 STATUS RECEIVED"
8
+ Then the callback should be called
9
+
@@ -0,0 +1,13 @@
1
+ Feature: Send a chat message
2
+
3
+ Background:
4
+ Given I am using the Skype Api testing fake
5
+
6
+ Scenario: Send message
7
+ Given there is a chat with id "#test/$echo123;2010fc482c5ce233"
8
+ When I send a chatmessage "Howdy pal!" to "#test/$echo123;2010fc482c5ce233"
9
+ Then the Skype Api should receive the message
10
+ """
11
+ CHATMESSAGE #test/$echo123;2010fc482c5ce233 Howdy pal!
12
+ """
13
+
@@ -0,0 +1,39 @@
1
+ Given /^I am using the Skype Api testing fake$/ do
2
+ # Silence constant re-assignment warning.
3
+ original_verbosity = $VERBOSE
4
+ $VERBOSE = nil
5
+ Rype::Api = Rype::FakeApi
6
+ $VERBOSE = original_verbosity
7
+ end
8
+
9
+ Given /^there is a chat with id "([^\"]*)"$/ do |chat_id|
10
+ # Let's assume it exists.
11
+ end
12
+
13
+ Given /^a client has registered a callback for notifications about "([^\"]*)"$/ do |scope|
14
+ @callback = lambda do
15
+ if @called
16
+ @called
17
+ else
18
+ @called = true
19
+ false
20
+ end
21
+ end
22
+ Rype::Api.on_notification(scope, @callback)
23
+ end
24
+
25
+ When /^I send a chatmessage "([^\"]*)" to "([^\"]*)"$/ do |message_body, chat_id|
26
+ Rype::Chat.new(chat_id).send_message(message_body)
27
+ end
28
+
29
+ When /^Skype issues a notification "([^\"]*)"$/ do |notification|
30
+ Rype::Api.notify(notification)
31
+ end
32
+
33
+ Then /^the Skype Api should receive the message$/ do |string|
34
+ Rype::Api.recorded_messages.should include(string)
35
+ end
36
+
37
+ Then /^the callback should be called$/ do
38
+ @callback.call.should be_true
39
+ end
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
+
3
+ require 'rype'
@@ -0,0 +1,22 @@
1
+ require 'forwardable'
2
+
3
+ module Rype
4
+ class FakeApi < Api
5
+ class << self
6
+ extend Forwardable
7
+
8
+ def_delegator :instance, :recorded_messages
9
+ end
10
+
11
+ def attach
12
+ end
13
+
14
+ def invoke(message)
15
+ recorded_messages << message
16
+ end
17
+
18
+ def recorded_messages
19
+ @recorded_messages ||= []
20
+ end
21
+ end
22
+ end
data/lib/rype.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'forwardable'
2
+
3
+ require 'rype/api'
4
+ require 'rype/chat'
5
+ require 'rype/chatmessage'
6
+ require 'rype/events'
7
+
8
+ module Rype
9
+ Offline = Class.new StandardError
10
+ Denied = Class.new StandardError
11
+
12
+ class << self
13
+ extend Forwardable
14
+
15
+ def_delegators Rype::Api, :instance, :attach, :thread
16
+ def_delegator Rype::Chat, :new, :chat
17
+ def_delegator Rype::Chat, :all, :chats
18
+ def_delegator Rype::Events, :on
19
+
20
+ Rype::Events.initialize_listeners
21
+ end
22
+ end
23
+
data/lib/rype/api.rb ADDED
@@ -0,0 +1,121 @@
1
+ require 'dbus'
2
+ require 'forwardable'
3
+
4
+ module Rype
5
+ class Notify < DBus::Object
6
+ dbus_interface "com.Skype.API.Client" do
7
+ dbus_method :Notify, "in data:s" do |message|
8
+ Api.notify(message)
9
+ end
10
+ end
11
+ end
12
+
13
+ class Api
14
+ class << self
15
+ extend Forwardable
16
+ def_delegators :instance, :attach, :invoke, :on_notification, :notify, :thread
17
+
18
+ def instance
19
+ @instance ||= new
20
+ end
21
+ end
22
+
23
+ attr_reader :thread
24
+
25
+ def attach(application_name="rype")
26
+ raise "Already attached." if attached?
27
+
28
+ # Say hi to Skype.
29
+ status, = api.Invoke "NAME #{application_name}"
30
+
31
+ if status == 'CONNSTATUS OFFLINE'
32
+ raise Rype::Offline
33
+ elsif status != 'OK'
34
+ raise Rype::Denied
35
+ end
36
+
37
+ api.Invoke "PROTOCOL 7"
38
+
39
+ run_notification_thread
40
+ end
41
+
42
+ def invoke(message, &block)
43
+ raise "Not attached to Skype. Call Rype::Api.attach first." unless attached?
44
+
45
+ log_outgoing message
46
+ if block_given?
47
+ api.Invoke(message) do |headers, answer|
48
+ log_incoming answer
49
+ block.call(answer)
50
+ end
51
+ else
52
+ answer = api.Invoke(message) do |_, _|
53
+ # Huh? Without passing in a block, sometimes it hangs...??
54
+ end
55
+ log_incoming answer
56
+ answer
57
+ end
58
+ end
59
+
60
+ def on_notification(scope, proc=nil, &block)
61
+ raise "Need to register callbacks before attaching to Skype." if attached?
62
+
63
+ callbacks[scope] ||= []
64
+ callbacks[scope] << (proc ? proc : block)
65
+ end
66
+
67
+ def notify(message)
68
+ log_incoming message
69
+
70
+ callbacks.keys.each do |key|
71
+ next unless match = Regexp.new("^#{key}").match(message)
72
+ callbacks[key].each{ |callback| callback.call(*match.captures) }
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def initialize
79
+ # 'pu'a says no.
80
+ end
81
+
82
+ def attached?
83
+ thread and thread.alive?
84
+ end
85
+
86
+ def api
87
+ @api ||= begin
88
+ skype_service = bus.service("com.Skype.API")
89
+ skype_object = skype_service.object('/com/Skype')
90
+ skype_object.introspect
91
+ skype_object["com.Skype.API"]
92
+ end
93
+ end
94
+
95
+ def run_notification_thread
96
+ @thread ||= Thread.new do
97
+ receiving_service = bus.request_service("com.nikofelger.ruby-skype")
98
+ receiving_service.export(Notify.new("/com/Skype/Client"))
99
+ dbus_event_loop = DBus::Main.new
100
+ dbus_event_loop << bus
101
+ dbus_event_loop.run
102
+ end
103
+ end
104
+
105
+ def bus
106
+ DBus::SessionBus.instance
107
+ end
108
+
109
+ def callbacks
110
+ @callback ||= {}
111
+ end
112
+
113
+ def log_incoming(message)
114
+ STDERR.puts "<- #{message}"
115
+ end
116
+
117
+ def log_outgoing(message)
118
+ STDERR.puts "-> #{message}"
119
+ end
120
+ end
121
+ end
data/lib/rype/chat.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'rype/events'
2
+
3
+ module Rype
4
+ class Chat
5
+ class << self
6
+ attr_accessor :chats
7
+
8
+ def all
9
+ chats if chats
10
+
11
+ Api.invoke("SEARCH CHATS")
12
+ sleep 0.01 while chats.nil?
13
+
14
+ yield chats
15
+ end
16
+ end
17
+
18
+ attr_reader :chatname
19
+
20
+ def initialize(chatname)
21
+ @chatname = chatname
22
+ end
23
+
24
+ def send_message(message)
25
+ Api.invoke("CHATMESSAGE #{@chatname} #{message}")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ module Rype
2
+ class Chatmessage
3
+ def initialize(id)
4
+ @chatmessage_id = id
5
+ end
6
+
7
+ def chat(&block)
8
+ return unless block_given?
9
+ get_property("CHATNAME") do |chatname|
10
+ block.call(Chat.new(chatname))
11
+ end
12
+ end
13
+
14
+ def body(&block)
15
+ return unless block_given?
16
+ get_property("BODY", &block)
17
+ end
18
+
19
+ def from(&block)
20
+ return unless block_given?
21
+ get_property("FROM_HANDLE", &block)
22
+ end
23
+
24
+ def from_name(&block)
25
+ return unless block_given?
26
+ get_property("FROM_DISPNAME", &block)
27
+ end
28
+
29
+ private
30
+ def get_property(property, &block)
31
+ return unless block_given?
32
+ Api.invoke("GET CHATMESSAGE #{@chatmessage_id} #{property}") do |message|
33
+ yield message.split[3..-1].join(' ')
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ require 'thread'
2
+
3
+ module Rype
4
+ class Events
5
+ class << self
6
+ def on(event)
7
+ case event
8
+
9
+ when :chatmessage_received
10
+ Rype::Api.instance.on_notification("CHATMESSAGE (.*) STATUS RECEIVED") do |chatmessage_id|
11
+ yield Chatmessage.new(chatmessage_id)
12
+ end
13
+
14
+ when :chats_received
15
+ Rype::Api.instance.on_notification("CHATS (.*)") do |chatlist|
16
+ yield chatlist.split(', ').map { |chatname| Chat.new(chatname) }
17
+ end
18
+ end
19
+ end
20
+
21
+ def initialize_listeners
22
+ mutex = Mutex.new
23
+ Rype::Events.on(:chats_received) do |chats|
24
+ mutex.synchronize { Rype::Chat.chats = chats }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
data/readme.md ADDED
@@ -0,0 +1,70 @@
1
+ # rype – Ruby library to talk to the Skype API
2
+
3
+ ## Description
4
+
5
+ This library is a simple wrapper for Skype's dbus-based Linux API.
6
+
7
+ Currently, it has the following capabilities:
8
+
9
+ * Get a list of your chats,
10
+ * send chat messages,
11
+ * receive chat messages,
12
+ * use the raw Skype protocol via Rype::Api#invoke and Rype::Api#on_notification. More information about the protocol at [developer.skype.com](http://developer.skype.com)
13
+
14
+
15
+ ## Installation
16
+
17
+ In order to work with the rype gem, there are a few requirements:
18
+
19
+ - You need to be on Linux
20
+ - You need to have Skype running
21
+ - You need dbus installed (e.g., via apt on Ubuntu)
22
+ - You need the ruby-dbus gem:
23
+ - wget http://github.com/downloads/mvidner/ruby-dbus/ruby-dbus-0.3.1.tgz
24
+ - tar xzf ruby-dbus-0.3.1.tgz
25
+ - cd ruby-dbus-0.3.1
26
+ - follow the instructions in README
27
+ - You may want Xvfb (if you want to run Skype head-less)
28
+
29
+
30
+ ## Verify your installation
31
+
32
+ To confirm it's working, start skype and sign in. Then, open an irb session and:
33
+
34
+ require 'dbus'
35
+ bus = DBus::SessionBus.instance
36
+ skype_service = bus.service("com.Skype.API")
37
+ client_to_skype = skype_service.object('/com/Skype')
38
+ client_to_skype.introspect
39
+ api = client_to_skype["com.Skype.API"]
40
+ api.Invoke("NAME rype")
41
+
42
+ If everything is set up correctly, Skype will now ask whether "rype" should be allowed to connect.
43
+
44
+
45
+ ## Usage
46
+
47
+ There are a few examples in `examples/` that should give you an idea of how
48
+ to use the gem.
49
+
50
+
51
+ ## Head-less Skype
52
+
53
+ Say you want to be running an app that connects to Skype on a box that won't have a display attached. For this use case, Xvfb is quite handy:
54
+
55
+ > "Xvfb or X virtual framebuffer is an X11 server that performs all graphical operations in memory, not showing any screen output." (wikipedia)"
56
+
57
+ In `examples/start_skype`, there's a shell script that shows how to start Skype and Xvfb.
58
+
59
+ You can safely ignore warnings about missing fonts, but if they bother you, try:
60
+
61
+ sudo aptitude install xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic
62
+
63
+ If Xvfb won't start at all, more drastic measures may be required:
64
+
65
+ sudo apt-get install xserver-xorg-core
66
+
67
+ ## small print
68
+
69
+ This product uses the Skype API but is not endorsed, certified or otherwise
70
+ approved in any way by Skype.
data/rype.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.version = "0.0.1"
6
+ s.name = "rype"
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Niko Felger"]
9
+ s.email = ["niko.felger@gmail.com"]
10
+ s.homepage = "https://github.com/nfelger/rype"
11
+ s.summary = %q{Unofficial Skype Api wrapper}
12
+ s.description = %q{Unofficial Skype Api wrapper}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+ s.has_rdoc = false
19
+ s.rubygems_version = %q{1.3.7}
20
+ s.add_dependency("ruby-dbus", [">= 0.6"])
21
+ s.add_development_dependency("rspec")
22
+ end
@@ -0,0 +1,39 @@
1
+ require 'rype/chat'
2
+
3
+ # describe Rype::Chat, '.all' do
4
+ # subject { Rype::Chat }
5
+ #
6
+ # it "should get the list of chats from the api" do
7
+ # Rype.instance.should_receive(:invoke).with("SEARCH CHATS") do
8
+ # Rype.instance.notify("CHATS")
9
+ # end
10
+ #
11
+ # subject.all
12
+ # end
13
+ #
14
+ # context "when the response contains chats" do
15
+ # before(:each) do
16
+ # Rype.instance.stub!(:invoke).with("SEARCH CHATS") do
17
+ # Rype.instance.notify("CHATS #bitman/$jessy;eb06e65612353279, #bitman/$jdenton;9244e98f82d7d391")
18
+ # end
19
+ # end
20
+ #
21
+ # it "should return a new Chat object for each chat id in the response" do
22
+ # subject.all do |chats|
23
+ # chats.all?{|chat| chat.should be_a(Rype::Chat)}
24
+ # chats.map{|chat| chat.chatname}.should == ["#bitman/$jessy;eb06e65612353279", "#bitman/$jdenton;9244e98f82d7d391"]
25
+ # end
26
+ # end
27
+ # end
28
+ # end
29
+
30
+ describe Rype::Chat, '#send_message' do
31
+ subject { Rype::Chat.new('#test/$echo123;2010fc482c5ce233') }
32
+
33
+ it "should tell the api to send the message" do
34
+ Rype.instance.should_receive(:invoke).
35
+ with("CHATMESSAGE #test/$echo123;2010fc482c5ce233 ohai Zkaip")
36
+
37
+ subject.send_message("ohai Zkaip")
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+ require 'rype'
3
+
4
+ describe Rype do
5
+ describe '.instance' do
6
+ subject { Rype.instance }
7
+ it { should be_a(Rype::Api) }
8
+ end
9
+
10
+ describe '.attach' do
11
+ it "should delegate to Rype::Api" do
12
+ Rype::Api.should_receive(:attach).with("chat id")
13
+ Rype.attach("chat id")
14
+ end
15
+ end
16
+
17
+ describe '.chat' do
18
+ subject { Rype.chat('chat id') }
19
+ it { should be_a(Rype::Chat) }
20
+ end
21
+
22
+ describe '.chats' do
23
+ it "should delegate to Rype::Chat" do
24
+ Rype::Chat.should_receive(:all)
25
+ Rype.chats
26
+ end
27
+ end
28
+
29
+ describe '.on' do
30
+ it "should delegate to Rype::Events" do
31
+ Rype::Events.should_receive(:on)
32
+ Rype.on
33
+ end
34
+ end
35
+
36
+ describe '.thread' do
37
+ it 'should delegate to Rype::Api' do
38
+ Rype::Api.should_receive(:thread)
39
+ Rype.thread
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,5 @@
1
+ require 'rype'
2
+ require File.join(File.dirname(__FILE__), '..', 'features', 'support', 'lib', 'fake_api')
3
+ require 'pp'
4
+
5
+ Rype::Api.instance_variable_set(:"@instance", Rype::FakeApi.instance)
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rype
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Niko Felger
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-22 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ruby-dbus
16
+ requirement: &7610360 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0.6'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *7610360
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &7609960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *7609960
36
+ description: Unofficial Skype Api wrapper
37
+ email:
38
+ - niko.felger@gmail.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - .gitignore
44
+ - .travis.yml
45
+ - Gemfile
46
+ - History.txt
47
+ - LICENSE
48
+ - Rakefile
49
+ - examples/chats/echo_server.rb
50
+ - examples/chats/list_chats.rb
51
+ - examples/chats/send_chat.rb
52
+ - examples/start_skype
53
+ - features/receive_chatmessage.feature
54
+ - features/send_chatmessage.feature
55
+ - features/step_definitions/skype_steps.rb
56
+ - features/support/env.rb
57
+ - features/support/lib/fake_api.rb
58
+ - lib/rype.rb
59
+ - lib/rype/api.rb
60
+ - lib/rype/chat.rb
61
+ - lib/rype/chatmessage.rb
62
+ - lib/rype/events.rb
63
+ - readme.md
64
+ - rype.gemspec
65
+ - spec/lib/rype/chat_spec.rb
66
+ - spec/lib/rype_spec.rb
67
+ - spec/spec_helper.rb
68
+ homepage: https://github.com/nfelger/rype
69
+ licenses: []
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 1.8.10
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Unofficial Skype Api wrapper
92
+ test_files: []