libnotify 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ doc
2
2
  pkg
3
3
  coverage
4
4
  tags
5
+ *.gemspec
data/.watchr ADDED
@@ -0,0 +1,21 @@
1
+
2
+ def run(*args)
3
+ system "ruby -rubygems -Ilib:test #{args.join(' ')}"
4
+ end
5
+
6
+ def run_tests
7
+ system "rake test"
8
+ end
9
+
10
+ def underscore(file)
11
+ file.gsub('/', '_')
12
+ end
13
+
14
+ watch('test/test_.*\.rb') {|md| run md[0] }
15
+ watch('lib/(.*)\.rb') {|md| run "test/test_#{underscore(md[1])}.rb" }
16
+ watch('test/helper.rb') { run_tests }
17
+
18
+ run_tests
19
+
20
+ Signal.trap("QUIT") { abort("\n") }
21
+ Signal.trap("INT") { run_tests }
data/README.rdoc CHANGED
@@ -6,19 +6,24 @@ Ruby binding for libnotify using FFI.
6
6
 
7
7
  require 'libnotify'
8
8
 
9
- # Using a block
9
+ # Block syntax
10
10
  Libnotify.new do |notify|
11
11
  notify.summary = "world"
12
12
  notify.body = "hello"
13
- notify.timeout = 1.5 # or 1000ms, nil, false
14
- notify.urgency = :critical # or :low, :normal, :critical
13
+ notify.timeout = 1.5 # 1.5 (s), 1000 (ms), "2", nil, false
14
+ notify.urgency = :critical # :low, :normal, :critical
15
15
  notify.icon_path = "/usr/share/icons/gnome/scalable/emblems/emblem-default.svg"
16
16
  notify.show!
17
17
  end
18
18
 
19
- # Alternative syntax
19
+ # Hash syntax
20
20
  Libnotify.show(:body => "hello", :summary => "world", :timeout => 2.5)
21
21
 
22
+ # Mixed syntax
23
+ Libnotify.show(options) do |n|
24
+ n.timeout = 1.5 # overrides :timeout in options
25
+ end
26
+
22
27
  == Install via gemcutter
23
28
  gem install gemcutter
24
29
  gem tumble
@@ -29,4 +34,4 @@ Ruby binding for libnotify using FFI.
29
34
 
30
35
  == TODO
31
36
 
32
- * Tests!
37
+ * Mock FFI calls
data/Rakefile CHANGED
@@ -18,9 +18,11 @@ Jeweler::Tasks.new do |gem|
18
18
 
19
19
  gem.add_dependency "ffi"
20
20
 
21
- #gem.add_development_dependency "riot", "= 0.10.4"
21
+ gem.add_development_dependency "riot"
22
+ gem.add_development_dependency "riot_notifier"
23
+ gem.add_development_dependency "rr"
22
24
 
23
- #gem.test_files = Dir.glob('test/test_*.rb')
25
+ gem.test_files = Dir.glob('test/test_*.rb')
24
26
  end
25
27
 
26
28
  Jeweler::GemcutterTasks.new
@@ -31,8 +33,24 @@ Rake::TestTask.new(:test) do |test|
31
33
  test.test_files = FileList.new('test/test_*.rb')
32
34
  test.libs << 'test'
33
35
  test.verbose = true
36
+ #test.warning = true
34
37
  end
35
38
 
39
+ namespace :test do
40
+ desc "Run all tests on multiple ruby versions (requires rvm)"
41
+ task(:portability) do
42
+ %w(1.8.6 1.8.7 1.9.1 1.9.2 ree jruby).each do |version|
43
+ system <<-BASH
44
+ bash -c 'source ~/.rvm/scripts/rvm;
45
+ rvm #{version};
46
+ echo "--------- ruby #{version} ----------\n";
47
+ rake -s test'
48
+ BASH
49
+ end
50
+ end
51
+ end
52
+
53
+
36
54
  # RDoc
37
55
  Rake::RDocTask.new do |rd|
38
56
  rd.title = "Riot Notifier"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/lib/libnotify.rb CHANGED
@@ -1,6 +1,3 @@
1
-
2
-
3
- require 'rubygems'
4
1
  require 'ffi'
5
2
 
6
3
  module Libnotify
@@ -31,10 +28,11 @@ module Libnotify
31
28
 
32
29
  class API
33
30
  include FFI
34
- attr_accessor :name, :summary, :body, :icon_path, :timeout, :urgency
31
+ attr_reader :timeout
32
+ attr_accessor :summary, :body, :icon_path, :urgency
35
33
 
36
34
  def initialize(options = {}, &block)
37
- self.summary = self.body = " "
35
+ self.summary = self.body = " " # Empty strings gives warnings...
38
36
  self.urgency = :normal
39
37
  self.timeout = nil
40
38
  options.each { |key, value| send("#{key}=", value) if respond_to?(key) }
@@ -47,9 +45,9 @@ module Libnotify
47
45
 
48
46
  def show!
49
47
  notify_init(self.class.to_s) or raise "notify_init failed"
50
- notify = FFI.notify_notification_new(summary, body, icon_path, nil)
48
+ notify = notify_notification_new(summary, body, icon_path, nil)
51
49
  notify_notification_set_urgency(notify, urgency)
52
- notify_notification_set_timeout(notify, timeout)
50
+ notify_notification_set_timeout(notify, timeout || -1)
53
51
  notify_notification_show(notify, nil)
54
52
  ensure
55
53
  notify_uninit
@@ -57,18 +55,18 @@ module Libnotify
57
55
 
58
56
  def timeout=(timeout)
59
57
  @timeout = case timeout
60
- when NilClass, FalseClass
61
- -1
62
58
  when Float
63
59
  (timeout * 1000).to_i
64
60
  when Fixnum
65
- if timeout > 100 # assume miliseconds
61
+ if timeout >= 100 # assume miliseconds
66
62
  timeout
67
63
  else
68
64
  timeout * 1000
69
65
  end
66
+ when NilClass, FalseClass
67
+ nil
70
68
  else
71
- timeout.to_i
69
+ timeout.to_s.to_i
72
70
  end
73
71
  end
74
72
  end
@@ -79,8 +77,8 @@ if $0 == __FILE__
79
77
  Libnotify.new do |notify|
80
78
  notify.summary = "world"
81
79
  notify.body = "hello"
82
- notify.timeout = 1.5 # or 1000ms, nil, false
83
- notify.urgency = :critical # or :low, :normal, :critical
80
+ notify.timeout = 1.5 # 1.5 (sec), 1000 (ms), "2", nil, false
81
+ notify.urgency = :critical # :low, :normal, :critical
84
82
  notify.icon_path = "/usr/share/icons/gnome/scalable/emblems/emblem-default.svg"
85
83
  notify.show!
86
84
  end
data/test/helper.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'riot'
3
+ require 'riot_notifier'
4
+
5
+ require 'libnotify'
6
+
7
+ Riot.reporter = RiotNotifier::Libnotify
8
+
9
+ require 'rr'
10
+
11
+ Riot::Situation.send :include, RR::Adapters::RRMethods
@@ -0,0 +1,72 @@
1
+ require 'helper'
2
+
3
+ context Libnotify do
4
+ setup { Libnotify }
5
+
6
+ asserts("responds to new").respond_to(:new)
7
+ asserts("responds to show").respond_to(:show)
8
+
9
+ asserts("#new calls API#new") do
10
+ mock(Libnotify::API).new(hash_including(:body => "test"))
11
+ Libnotify.new(:body => "test")
12
+ RR.verify
13
+ end
14
+ asserts("#show calls API#show") do
15
+ mock(Libnotify::API).show(hash_including(:body => "test"))
16
+ Libnotify.show(:body => "test")
17
+ RR.verify
18
+ end
19
+ end
20
+
21
+ context Libnotify::API do
22
+ setup { Libnotify::API }
23
+
24
+ context "without options and block" do
25
+ setup { topic.new }
26
+
27
+ asserts("summary is whitspaced") { topic.summary }.equals(" ")
28
+ asserts("body is whitspaced") { topic.body }.equals(" ")
29
+ asserts("urgency is :normal") { topic.urgency }.equals(:normal)
30
+ asserts("timeout is nil") { topic.timeout }.nil
31
+ asserts("icon_path is nil") { topic.icon_path }.nil
32
+ end
33
+
34
+ context "with options and block" do
35
+ setup do
36
+ topic.new(:summary => "hello", :body => "body", :invalid_option => 23) do |n|
37
+ n.body = "overwritten"
38
+ n.icon_path = "/path/to/icon"
39
+ end
40
+ end
41
+
42
+ asserts("summary is set") { topic.summary }.equals("hello")
43
+ asserts("body was overwritten by block") { topic.body }.equals("overwritten")
44
+ asserts("icon_path set") { topic.icon_path }.equals("/path/to/icon")
45
+ end
46
+
47
+ context "timeout=" do
48
+ setup { topic.new }
49
+
50
+ asserts("with float") { topic.timeout = 2.5; topic.timeout }.equals(2500)
51
+ asserts("with fixnum ms") { topic.timeout = 100; topic.timeout }.equals(100)
52
+ asserts("with fixnum ms") { topic.timeout = 101; topic.timeout }.equals(101)
53
+ asserts("with fixnum seconds") { topic.timeout = 1; topic.timeout }.equals(1000)
54
+ asserts("with fixnum seconds") { topic.timeout = 99; topic.timeout }.equals(99000)
55
+ asserts("with nil") { topic.timeout = nil; topic.timeout }.nil
56
+ asserts("with false") { topic.timeout = false; topic.timeout }.nil
57
+ asserts("with to_s.to_i") { topic.timeout = :"2 seconds"; topic.timeout }.equals(2)
58
+ end
59
+
60
+ # TODO mock this!
61
+ context "show!" do
62
+ setup { topic.new(:timeout => 1.0, :icon_path => "/usr/share/icons/gnome/scalable/emblems/emblem-default.svg") }
63
+
64
+ [ :low, :normal, :critical ].each do |urgency|
65
+ asserts("with urgency #{urgency}") do
66
+ topic.summary = "#{RUBY_VERSION} at #{RUBY_PLATFORM}"
67
+ topic.body = defined?(RUBY_DESCRIPTION) ? RUBY_DESCRIPTION : '?'
68
+ topic.urgency = urgency; topic.show!
69
+ end
70
+ end
71
+ end
72
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libnotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Suschlik
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-06 00:00:00 +01:00
12
+ date: 2009-12-08 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,36 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: riot
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: riot_notifier
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: rr
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
25
55
  description:
26
56
  email: peter-libnotify@suschlik.de
27
57
  executables: []
@@ -32,10 +62,13 @@ extra_rdoc_files:
32
62
  - README.rdoc
33
63
  files:
34
64
  - .gitignore
65
+ - .watchr
35
66
  - README.rdoc
36
67
  - Rakefile
37
68
  - VERSION
38
69
  - lib/libnotify.rb
70
+ - test/helper.rb
71
+ - test/test_libnotify.rb
39
72
  has_rdoc: true
40
73
  homepage: http://github.com/splattael/libnotify
41
74
  licenses: []
@@ -64,5 +97,5 @@ rubygems_version: 1.3.5
64
97
  signing_key:
65
98
  specification_version: 3
66
99
  summary: Ruby bindings for libnotify using FFI
67
- test_files: []
68
-
100
+ test_files:
101
+ - test/test_libnotify.rb