notifier 0.5.2 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ae5afe2f3c9c49b9f8e29be682424de92908dd35
4
- data.tar.gz: 7b5c443d285fd023fb001b48ebe43ac695944d7c
2
+ SHA256:
3
+ metadata.gz: f11e00e55117bf997579f4d0cd0ba9acb4242d5e5045c519c36f938f637235d8
4
+ data.tar.gz: f4091e3ef9660c00ad6620dc45d648adb686174549eda5ecc33cf7e4e654da41
5
5
  SHA512:
6
- metadata.gz: 56c4fbc80d2c33cb22990600f977d031335c6e4cc4df42ce3f8bd9d0da452d183df75127dcd405ea36121d23bd6aab1cd8f5200e5b7de8bafde03a768563d2af
7
- data.tar.gz: a9a64939c8a7db0f0040baec682e6d078621b2a8328036d016469cb8e534a9d1faba0a56a64c1586c2c2eb378493e8fed57178de964bba7965539bc8e7d97ccf
6
+ metadata.gz: 155c248f28980870789ac3a679ce2a8a89434be67d91164ad19444b9f7ce7de2c4b1796f007f417bb14f01ae0ba26f7c0aa20fcf599ed800b67bd054932feb0f
7
+ data.tar.gz: 6ed42de3b14e5de5de1ce707f528203be37344afeb2c25ce394d36e28a959afa07cc6ec2957c601732e7ff1a94c69b5225f3283a3313e127e10ec332a3bfabe7
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ pkg/*
3
3
  .bundle
4
4
  .DS_Store
5
5
  *.lock
6
+ /coverage
data/.rubocop.yml ADDED
@@ -0,0 +1,10 @@
1
+ ---
2
+ inherit_gem:
3
+ rubocop-fnando: .rubocop.yml
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7
7
+ NewCops: enable
8
+ Exclude:
9
+ - vendor/**/*
10
+ - gemfiles/**/*
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "http://rubygems.org"
2
4
  gemspec
data/LICENSE.md ADDED
@@ -0,0 +1,20 @@
1
+ (The MIT License)
2
+
3
+ Nando Vieira
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the 'Software'), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,21 +1,17 @@
1
1
  # Notifier
2
2
 
3
- [![Travis-CI](https://travis-ci.org/fnando/notifier.png)](https://travis-ci.org/fnando/notifier)
4
- [![Code Climate](https://codeclimate.com/github/fnando/notifier/badges/gpa.svg)](https://codeclimate.com/github/fnando/notifier)
5
- [![Test Coverage](https://codeclimate.com/github/fnando/notifier/badges/coverage.svg)](https://codeclimate.com/github/fnando/notifier/coverage)
6
3
  [![Gem](https://img.shields.io/gem/v/notifier.svg)](https://rubygems.org/gems/notifier)
7
4
  [![Gem](https://img.shields.io/gem/dt/notifier.svg)](https://rubygems.org/gems/notifier)
8
5
 
9
- Send system notifications on several platforms with a simple and unified API. Currently supports:
6
+ Send system notifications on several platforms with a simple and unified API.
7
+ Currently supports:
10
8
 
11
- * Growl (Mac OS X)
12
- * terminal-notifier (Notification Center wrapper for Mac OS X)
13
- * GNTP Protocol (Growl, with Vagrant support)
14
- * Kdialog (Linux/KDE)
15
- * Knotify (Linux/KDE)
16
- * OSD Cat (Linux)
17
- * Libnotify (Linux)
18
- * Snarl (Windows)
9
+ - terminal-notifier (Notification Center wrapper for Mac OS X)
10
+ - Kdialog (Linux/KDE)
11
+ - Knotify (Linux/KDE)
12
+ - OSD Cat (Linux)
13
+ - Libnotify (Linux)
14
+ - Snarl (Windows)
19
15
 
20
16
  ## Installation
21
17
 
@@ -23,20 +19,14 @@ Send system notifications on several platforms with a simple and unified API. Cu
23
19
 
24
20
  ### Mac OS X
25
21
 
26
- #### Growl
27
-
28
- * Install Growl - http://growl.info/
29
- * Install the growlnotify script located on the "Extras" directory
30
- * Open the Growl Preference Panel (System > Growl) and activate "Listen for incoming notifications" and "Allow remote application registration" options on the Network tab.
31
-
32
22
  #### terminal-notifier
33
23
 
34
- * Install terminal-notifier - https://github.com/alloy/terminal-notifier
24
+ - Install terminal-notifier - https://github.com/alloy/terminal-notifier
35
25
 
36
26
  terminal-notifier also supports two additional flags:
37
27
 
38
- * `subtitle`
39
- * `sound`
28
+ - `subtitle`
29
+ - `sound`
40
30
 
41
31
  See terminal-notifier's help for additional information.
42
32
 
@@ -44,18 +34,21 @@ See terminal-notifier's help for additional information.
44
34
 
45
35
  If you're a linux guy, you can choose one of these methods:
46
36
 
47
- * Install libnotify-bin and its dependencies: `sudo aptitude install libnotify-bin`
48
- * Install xosd-bin: `sudo aptitude install xosd-bin`
49
- * KDE users don't need to install anything: Test Notifier will use +knotify+ or +kdialog+.
37
+ - Install libnotify-bin and its dependencies:
38
+ `sudo aptitude install libnotify-bin`
39
+ - Install xosd-bin: `sudo aptitude install xosd-bin`
40
+ - KDE users don't need to install anything: Test Notifier will use +knotify+ or
41
+ +kdialog+.
50
42
 
51
43
  ### Windows
52
44
 
53
- * Install Snarl: download from http://www.fullphat.net
54
- * Install ruby-snarl: `gem install ruby-snarl`
45
+ - Install Snarl: download from http://www.fullphat.net
46
+ - Install ruby-snarl: `gem install ruby-snarl`
55
47
 
56
48
  ## Usage
57
49
 
58
- Notifier will try to detect which notifiers are available in your system. So you can just send a message:
50
+ Notifier will try to detect which notifiers are available in your system. So you
51
+ can just send a message:
59
52
 
60
53
  ```ruby
61
54
  Notifier.notify(
@@ -67,25 +60,38 @@ Notifier.notify(
67
60
 
68
61
  Not all notifiers support the image option, therefore it will be ignored.
69
62
 
70
- If your system support more than one notifier, you can specify which one you prefer:
63
+ If your system support more than one notifier, you can specify which one you
64
+ prefer:
71
65
 
72
66
  ```ruby
73
67
  Notifier.default_notifier = :notify_send
74
68
  ```
75
69
 
76
- The available names are `growl`, `terminal_notifier`, `kdialog`, `knotify`, `notify_send`, `osd_cat`, and `snarl`.
70
+ Alternatively, you can set the default notifier by using the `NOTIFIER` env var.
71
+ The following example assumes `test_notifier` is configured on this Rails
72
+ project. The env var has precedence of `Notifier.default_notifier`.
73
+
74
+ ```console
75
+ $ NOTIFIER=hud rails test
76
+ ```
77
+
78
+ The available names are `terminal_notifier`, `kdialog`, `knotify`,
79
+ `notify_send`, `osd_cat`, and `snarl`.
77
80
 
78
- There are several helper methods that you can use in order to retrieve notifiers.
81
+ There are several helper methods that you can use in order to retrieve
82
+ notifiers.
79
83
 
80
- * `Notifier.notifier`: return the first supported notifier
81
- * `Notifier.notifiers`: return all notifiers
82
- * `Notifier.supported_notifiers`: return only supported notifiers
83
- * `Notifier.from_name(name)`: find notifier by its name
84
- * `Notifier.supported_notifier_from_name(name)`: find a supported notifier by its name
84
+ - `Notifier.notifier`: return the first supported notifier
85
+ - `Notifier.notifiers`: return all notifiers
86
+ - `Notifier.supported_notifiers`: return only supported notifiers
87
+ - `Notifier.from_name(name)`: find notifier by its name
88
+ - `Notifier.supported_notifier_from_name(name)`: find a supported notifier by
89
+ its name
85
90
 
86
91
  ## Creating custom notifiers
87
92
 
88
- To create a new notifier, just create a module on `Notifier` namespace that implements the following interface:
93
+ To create a new notifier, just create a module on `Notifier` namespace that
94
+ implements the following interface:
89
95
 
90
96
  ```ruby
91
97
  module Notifier
@@ -101,7 +107,7 @@ end
101
107
 
102
108
  ## Maintainer
103
109
 
104
- * Nando Vieira - http://nandovieira.com
110
+ - Nando Vieira - https://nandovieira.com
105
111
 
106
112
  ## Contributors
107
113
 
@@ -111,21 +117,19 @@ https://github.com/fnando/notifier/graphs/contributors
111
117
 
112
118
  (The MIT License)
113
119
 
114
- Permission is hereby granted, free of charge, to any person obtaining
115
- a copy of this software and associated documentation files (the
116
- 'Software'), to deal in the Software without restriction, including
117
- without limitation the rights to use, copy, modify, merge, publish,
118
- distribute, sublicense, and/or sell copies of the Software, and to
119
- permit persons to whom the Software is furnished to do so, subject to
120
- the following conditions:
121
-
122
- The above copyright notice and this permission notice shall be
123
- included in all copies or substantial portions of the Software.
124
-
125
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
126
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
127
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
128
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
129
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
130
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
131
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
120
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
121
+ this software and associated documentation files (the 'Software'), to deal in
122
+ the Software without restriction, including without limitation the rights to
123
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
124
+ the Software, and to permit persons to whom the Software is furnished to do so,
125
+ subject to the following conditions:
126
+
127
+ The above copyright notice and this permission notice shall be included in all
128
+ copies or substantial portions of the Software.
129
+
130
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
131
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
132
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
133
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
134
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
135
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rake/testtask"
5
+ require "rubocop/rake_task"
3
6
 
4
7
  Rake::TestTask.new(:test) do |t|
5
8
  t.libs << "test"
@@ -7,4 +10,6 @@ Rake::TestTask.new(:test) do |t|
7
10
  t.warning = false
8
11
  end
9
12
 
10
- task default: :test
13
+ RuboCop::RakeTask.new
14
+
15
+ task default: %i[test rubocop]
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notifier
4
+ module Hud
5
+ extend self
6
+
7
+ def supported?
8
+ Notifier.os?(/darwin/) && hud_bin
9
+ end
10
+
11
+ def hud_bin
12
+ @hud_bin ||= [
13
+ "/Applications/hud.app/Contents/MacOS/cli",
14
+ "~/Applications/hud.app/Contents/MacOS/cli"
15
+ ].first {|path| File.expand_path(path) }
16
+ end
17
+
18
+ def notify(options)
19
+ command = [
20
+ hud_bin,
21
+ "--title",
22
+ options[:title].to_s,
23
+ "--message",
24
+ options[:message].to_s,
25
+ "--symbol-name",
26
+ options[:image].to_s
27
+ ]
28
+
29
+ Thread.new { system(*command) }.join
30
+ end
31
+ end
32
+ end
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module Kdialog
3
5
  extend self
4
6
 
5
7
  def supported?
6
- Notifier.os?(/(linux|freebsd)/) && `which kdialog > /dev/null` && $? == 0
8
+ Notifier.os?(/(linux|freebsd)/) &&
9
+ `which kdialog > /dev/null` &&
10
+ $CHILD_STATUS == 0
7
11
  end
8
12
 
9
13
  def notify(options)
@@ -1,16 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module Knotify
3
5
  extend self
4
6
 
5
7
  def supported?
6
- Notifier.os?(/(linux|freebsd)/) && `ps -Al | grep dcop` && $? == 0
8
+ Notifier.os?(/(linux|freebsd)/) &&
9
+ `ps -Al | grep dcop` &&
10
+ $CHILD_STATUS == 0
7
11
  end
8
12
 
9
13
  def notify(options)
10
14
  command = [
11
- "dcop", "knotify", "default", "notify", "eventname",
12
- options[:title].to_s, options[:message].to_s,
13
- "", "", "16", "2"
15
+ "dcop",
16
+ "knotify",
17
+ "default",
18
+ "notify",
19
+ "eventname",
20
+ options[:title].to_s,
21
+ options[:message].to_s,
22
+ "",
23
+ "",
24
+ "16",
25
+ "2"
14
26
  ]
15
27
 
16
28
  Thread.new { system(*command) }.join
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module NotifySend
3
5
  extend self
4
6
 
5
7
  def supported?
6
- Notifier.os?(/(linux|freebsd)/) && `which notify-send > /dev/null` && $? == 0
8
+ Notifier.os?(/(linux|freebsd)/) &&
9
+ `which notify-send > /dev/null` &&
10
+ $CHILD_STATUS == 0
7
11
  end
8
12
 
9
13
  def notify(options)
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module OsdCat
3
5
  extend self
4
6
 
5
7
  def supported?
6
- Notifier.os?(/(linux|freebsd)/) && `which osd_cat > /dev/null` && $? == 0
8
+ Notifier.os?(/(linux|freebsd)/) &&
9
+ `which osd_cat > /dev/null` &&
10
+ $CHILD_STATUS == 0
7
11
  end
8
12
 
9
13
  def notify(options)
@@ -18,11 +22,11 @@ module Notifier
18
22
  "--align", "center",
19
23
  "--font", "-bitstream-bitstream charter-bold-r-*-*-*-350-*-*-*-*-*-*",
20
24
  "--delay", "5",
21
- "--outline", "4",
25
+ "--outline", "4"
22
26
  ]
23
27
 
24
28
  Thread.new do
25
- Open3.popen3(*command) do |stdin, stdout, stderr|
29
+ Open3.popen3(*command) do |stdin, _stdout, _stderr|
26
30
  stdin.puts options[:message]
27
31
  stdin.close
28
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module Placebo
3
5
  extend self
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module Snarl
3
5
  extend self
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module TerminalNotifier
3
5
  extend self
4
6
 
5
7
  def supported?
6
- Notifier.os?(/darwin/) && `which terminal-notifier` && $? == 0
8
+ Notifier.os?(/darwin/) && `which terminal-notifier` && $CHILD_STATUS == 0
7
9
  end
8
10
 
9
11
  def notify(options)
@@ -18,9 +20,18 @@ module Notifier
18
20
 
19
21
  # -sound with an empty string (e.g., "") will trigger the
20
22
  # default sound so we need to check for it.
21
- command.concat(["-sound", options.fetch(:sound, "default").to_s] ) if options[:sound]
23
+ if options[:sound]
24
+ command.concat([
25
+ "-sound",
26
+ options.fetch(:sound, "default").to_s
27
+ ])
28
+ end
22
29
 
23
- Thread.new { system(*command) }.join
30
+ Thread.new do
31
+ Open3.popen3(*command) do |_stdin, _stdout, _stderr|
32
+ # noop
33
+ end
34
+ end.join
24
35
  end
25
36
  end
26
37
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Notifier
2
4
  module Version
3
- MAJOR = 0
4
- MINOR = 5
5
- PATCH = 2
5
+ MAJOR = 1
6
+ MINOR = 2
7
+ PATCH = 1
6
8
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
9
  end
8
10
  end
data/lib/notifier.rb CHANGED
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "open3"
2
4
  require "socket"
3
5
  require "digest/md5"
4
6
  require "timeout"
5
7
  require "rbconfig"
8
+ require "English"
9
+ require "net/http"
6
10
 
7
11
  module Notifier
8
- require "notifier/growl"
9
- require "notifier/gntp"
10
12
  require "notifier/snarl"
13
+ require "notifier/hud"
11
14
  require "notifier/osd_cat"
12
15
  require "notifier/knotify"
13
16
  require "notifier/kdialog"
@@ -15,7 +18,6 @@ module Notifier
15
18
  require "notifier/placebo"
16
19
  require "notifier/terminal_notifier"
17
20
  require "notifier/version"
18
- require "notifier/adapters"
19
21
 
20
22
  extend self
21
23
 
@@ -23,8 +25,13 @@ module Notifier
23
25
  attr_accessor :default_notifier
24
26
  end
25
27
 
28
+ def skip_constants
29
+ @skip_constants ||= %w[Placebo Adapters Version]
30
+ end
31
+
26
32
  def notifier
27
- supported_notifier_from_name(default_notifier) || supported_notifiers.first
33
+ supported_notifier_from_name(ENV.fetch("NOTIFIER", default_notifier)) ||
34
+ supported_notifiers.first
28
35
  end
29
36
 
30
37
  def notify(options)
@@ -32,34 +39,32 @@ module Notifier
32
39
  end
33
40
 
34
41
  def notifiers
35
- constants.map do |name|
36
- const_get(name) unless %w[Placebo Adapters Version].include?(name.to_s)
37
- end.compact + [Placebo]
42
+ constants.filter_map do |name|
43
+ const_get(name) unless skip_constants.include?(name.to_s)
44
+ end + [Placebo]
38
45
  end
39
46
 
40
47
  def supported_notifiers
41
- notifiers.select {|notifier| notifier.supported? }
48
+ notifiers.select(&:supported?)
42
49
  end
43
50
 
44
51
  def from_name(name)
45
52
  const_get(classify(name.to_s))
46
- rescue Exception
53
+ rescue StandardError
47
54
  nil
48
55
  end
49
56
 
50
57
  def supported_notifier_from_name(name)
51
58
  notifier = from_name(name)
52
- notifier && notifier.supported? ? notifier : nil
59
+ notifier&.supported? ? notifier : nil
53
60
  end
54
61
 
55
62
  def os?(regex)
56
63
  RUBY_PLATFORM =~ regex || RbConfig::CONFIG["host_os"] =~ regex
57
64
  end
58
65
 
59
- private
60
-
61
- def classify(string)
62
- string.gsub(/_(.)/sm) { "#{$1.upcase}" }
63
- .gsub(/^(.)/) { "#{$1.upcase}" }
66
+ private def classify(string)
67
+ string.gsub(/_(.)/sm) { Regexp.last_match(1).upcase.to_s }
68
+ .gsub(/^(.)/) { Regexp.last_match(1).upcase.to_s }
64
69
  end
65
70
  end
data/notifier.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "./lib/notifier/version"
2
4
 
3
5
  Gem::Specification.new do |s|
@@ -5,20 +7,30 @@ Gem::Specification.new do |s|
5
7
  s.version = Notifier::Version::STRING
6
8
  s.platform = Gem::Platform::RUBY
7
9
  s.authors = ["Nando Vieira"]
8
- s.email = ["fnando.vieira@gmail.com"]
10
+ s.email = ["me@fnando.com"]
9
11
  s.homepage = "http://rubygems.org/gems/notifier"
10
- s.summary = "Send system notifications on several platforms with a simple and unified API. Currently supports Growl, Libnotify, OSD, KDE (Knotify and Kdialog) and Snarl"
12
+ s.summary = "Send system notifications on several platforms with a " \
13
+ "simple and unified API. Currently supports Libnotify, " \
14
+ "OSD, KDE (Knotify and Kdialog) and Snarl"
11
15
  s.description = s.summary
16
+ s.required_ruby_version = ">= 2.7"
17
+ s.metadata["rubygems_mfa_required"] = "true"
12
18
 
13
19
  s.files = `git ls-files`.split("\n")
14
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map do |f|
22
+ File.basename(f)
23
+ end
16
24
  s.require_paths = ["lib"]
17
25
 
18
- s.requirements << "Growl, terminal-notifier, Libnotify, OSD, KDE (Knotify and Kdialog) or Snarl"
26
+ s.requirements << "terminal-notifier, Libnotify, OSD, KDE (Knotify and " \
27
+ "Kdialog) or Snarl"
19
28
 
20
29
  s.add_development_dependency "minitest-utils"
21
- s.add_development_dependency "rake"
22
30
  s.add_development_dependency "mocha"
23
- s.add_development_dependency "codeclimate-test-reporter"
31
+ s.add_development_dependency "rake"
32
+ s.add_development_dependency "rubocop"
33
+ s.add_development_dependency "rubocop-fnando"
34
+ s.add_development_dependency "simplecov"
35
+ s.add_development_dependency "test_notifier"
24
36
  end
@@ -1,12 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "test_helper"
2
4
 
3
5
  class NotifierTest < Minitest::Test
4
6
  setup do
5
7
  Notifier.notifiers.each do |notifier|
6
- notifier.stubs(:supported?).returns(false) unless notifier == Notifier::Placebo
8
+ unless notifier == Notifier::Placebo
9
+ notifier.stubs(:supported?).returns(false)
10
+ end
7
11
  end
8
12
 
9
13
  Notifier.default_notifier = nil
14
+ ENV.delete("NOTIFIER")
15
+ end
16
+
17
+ teardown do
18
+ Notifier.default_notifier = :hud
10
19
  end
11
20
 
12
21
  test "retrieves list of supported notifiers" do
@@ -32,6 +41,17 @@ class NotifierTest < Minitest::Test
32
41
  assert_equal Notifier::Knotify, Notifier.notifier
33
42
  end
34
43
 
44
+ test "prefers default notifier using env var" do
45
+ ENV["NOTIFIER"] = "knotify"
46
+
47
+ Notifier::Snarl.stubs(:supported?).returns(true)
48
+ Notifier::Knotify.stubs(:supported?).returns(true)
49
+
50
+ Notifier.default_notifier = :snarl
51
+
52
+ assert_equal Notifier::Knotify, Notifier.notifier
53
+ end
54
+
35
55
  test "sends notification" do
36
56
  params = {
37
57
  title: "Some title",
@@ -46,7 +66,7 @@ class NotifierTest < Minitest::Test
46
66
  end
47
67
 
48
68
  test "retrieves list of all notifiers" do
49
- assert_equal 9, Notifier.notifiers.size
69
+ assert_equal 8, Notifier.notifiers.size
50
70
  end
51
71
 
52
72
  test "considers Placebo as fallback notifier" do
@@ -56,7 +76,7 @@ class NotifierTest < Minitest::Test
56
76
  test "returns notifier by its name" do
57
77
  assert_equal Notifier::OsdCat, Notifier.from_name(:osd_cat)
58
78
  assert_equal Notifier::NotifySend, Notifier.from_name(:notify_send)
59
- assert_equal Notifier::Growl, Notifier.from_name(:growl)
79
+ assert_equal Notifier::Hud, Notifier.from_name(:hud)
60
80
  end
61
81
 
62
82
  test "returns notifier by its name when supported" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "test_helper"
2
4
 
3
5
  class SnarlTest < Minitest::Test
data/test/test_helper.rb CHANGED
@@ -1,11 +1,15 @@
1
- require "codeclimate-test-reporter"
2
- CodeClimate::TestReporter.start
1
+ # frozen_string_literal: true
2
+
3
+ require "simplecov"
4
+ SimpleCov.start
3
5
 
4
6
  require "bundler/setup"
5
7
  require "notifier"
6
8
  require "minitest/utils"
7
9
  require "minitest/autorun"
8
10
 
11
+ Notifier.default_notifier = :hud
12
+
9
13
  module Snarl
10
14
  def self.show_message(*)
11
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-07 00:00:00.000000000 Z
11
+ date: 2022-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest-utils
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mocha
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +53,21 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: mocha
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-fnando
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
@@ -53,7 +81,21 @@ dependencies:
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: codeclimate-test-reporter
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: test_notifier
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - ">="
@@ -67,23 +109,21 @@ dependencies:
67
109
  - !ruby/object:Gem::Version
68
110
  version: '0'
69
111
  description: Send system notifications on several platforms with a simple and unified
70
- API. Currently supports Growl, Libnotify, OSD, KDE (Knotify and Kdialog) and Snarl
112
+ API. Currently supports Libnotify, OSD, KDE (Knotify and Kdialog) and Snarl
71
113
  email:
72
- - fnando.vieira@gmail.com
114
+ - me@fnando.com
73
115
  executables: []
74
116
  extensions: []
75
117
  extra_rdoc_files: []
76
118
  files:
77
119
  - ".gitignore"
78
- - ".travis.yml"
120
+ - ".rubocop.yml"
79
121
  - Gemfile
122
+ - LICENSE.md
80
123
  - README.md
81
124
  - Rakefile
82
125
  - lib/notifier.rb
83
- - lib/notifier/adapters.rb
84
- - lib/notifier/adapters/gntp.rb
85
- - lib/notifier/gntp.rb
86
- - lib/notifier/growl.rb
126
+ - lib/notifier/hud.rb
87
127
  - lib/notifier/kdialog.rb
88
128
  - lib/notifier/knotify.rb
89
129
  - lib/notifier/notify_send.rb
@@ -93,14 +133,14 @@ files:
93
133
  - lib/notifier/terminal_notifier.rb
94
134
  - lib/notifier/version.rb
95
135
  - notifier.gemspec
96
- - resources/register-growl.scpt
97
136
  - test/notifier/notifier_test.rb
98
137
  - test/notifier/snarl_test.rb
99
138
  - test/test_helper.rb
100
139
  homepage: http://rubygems.org/gems/notifier
101
140
  licenses: []
102
- metadata: {}
103
- post_install_message:
141
+ metadata:
142
+ rubygems_mfa_required: 'true'
143
+ post_install_message:
104
144
  rdoc_options: []
105
145
  require_paths:
106
146
  - lib
@@ -108,20 +148,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
148
  requirements:
109
149
  - - ">="
110
150
  - !ruby/object:Gem::Version
111
- version: '0'
151
+ version: '2.7'
112
152
  required_rubygems_version: !ruby/object:Gem::Requirement
113
153
  requirements:
114
154
  - - ">="
115
155
  - !ruby/object:Gem::Version
116
156
  version: '0'
117
157
  requirements:
118
- - Growl, terminal-notifier, Libnotify, OSD, KDE (Knotify and Kdialog) or Snarl
119
- rubyforge_project:
120
- rubygems_version: 2.5.1
121
- signing_key:
158
+ - terminal-notifier, Libnotify, OSD, KDE (Knotify and Kdialog) or Snarl
159
+ rubygems_version: 3.3.7
160
+ signing_key:
122
161
  specification_version: 4
123
162
  summary: Send system notifications on several platforms with a simple and unified
124
- API. Currently supports Growl, Libnotify, OSD, KDE (Knotify and Kdialog) and Snarl
163
+ API. Currently supports Libnotify, OSD, KDE (Knotify and Kdialog) and Snarl
125
164
  test_files:
126
165
  - test/notifier/notifier_test.rb
127
166
  - test/notifier/snarl_test.rb
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- sudo: false
4
- notifications:
5
- email: false
6
- rvm:
7
- - 2.3.0
8
- - '2.2'
9
- - '2.1'
10
- env:
11
- global:
12
- secure: mYd3r1SEZJcirOFNjNe75vMNjYJ/UHDLZAsEeCQQcI4Na03au53Pr02waJKPdXXV8JnakaYMDNBc4kOXnk3v0ytgINnvNXnObjPT2KUPvQKLUhXq2Q/BrWS4CFihihznZHAQFgeTVbDm/brLWH61+JwDlQ2kEo6OGSAZ8ZV/PV8=
@@ -1,87 +0,0 @@
1
- module Notifier
2
- module Adapters
3
- class GNTP
4
- attr_accessor :application_name
5
- attr_accessor :host
6
- attr_accessor :port
7
- attr_accessor :password
8
-
9
- def initialize(options = {})
10
- if options.kind_of?(String)
11
- options = {name: options}
12
- end
13
-
14
- @application_name = options.fetch(:name, "GNTP/Ruby")
15
- @host = options.fetch(:host, "127.0.0.1")
16
- @port = options.fetch(:port, 23053)
17
- @password = options.fetch(:password, nil)
18
- end
19
-
20
- def line_break(number = 1)
21
- "\r\n" * number
22
- end
23
-
24
- def write(*contents)
25
- contents.map! do |content|
26
- content.force_encoding("utf-8") rescue content
27
- end
28
-
29
- socket = TCPSocket.open(host, port)
30
- message = [*contents, line_break(2)].join(line_break)
31
- socket.write(message)
32
-
33
- "".tap do |response|
34
- while chunk = socket.gets
35
- break if chunk == line_break
36
- response << chunk
37
- end
38
-
39
- socket.close
40
- end
41
- end
42
-
43
- def notify(options)
44
- name = options.fetch(:name, "notification")
45
- register(name)
46
-
47
- icon = fetch_icon(options[:icon])
48
-
49
- write "GNTP/1.0 NOTIFY NONE",
50
- "Application-Name: #{application_name}",
51
- "Notification-Name: #{name}",
52
- "Notification-Title: #{options[:title]}",
53
- "Notification-Text: #{options[:message]}",
54
- "Notification-Icon: x-growl-resource://#{icon[:identifier]}",
55
- "Notification-Sticky: #{bool options[:sticky]}",
56
- nil,
57
- "Identifier: #{icon[:identifier]}",
58
- "Length: #{icon[:size]}",
59
- nil,
60
- icon[:contents]
61
- end
62
-
63
- def fetch_icon(path)
64
- contents = File.open(path, "rb") {|f| f.read }
65
-
66
- {
67
- identifier: Digest::MD5.hexdigest(contents),
68
- contents: contents,
69
- size: contents.bytesize
70
- }
71
- end
72
-
73
- def bool(boolean)
74
- {true => "Yes", false => "No"}[boolean]
75
- end
76
-
77
- def register(name)
78
- write "GNTP/1.0 REGISTER NONE",
79
- "Application-Name: #{application_name}",
80
- "Notifications-count: 1",
81
- nil,
82
- "Notification-Name: #{name}",
83
- "Notification-Enabled: True"
84
- end
85
- end
86
- end
87
- end
@@ -1,5 +0,0 @@
1
- module Notifier
2
- module Adapters
3
- require "notifier/adapters/gntp"
4
- end
5
- end
data/lib/notifier/gntp.rb DELETED
@@ -1,37 +0,0 @@
1
- module Notifier
2
- module GNTP extend self
3
- def supported?
4
- Timeout.timeout(1) { TCPSocket.new(host, port).close }
5
- true
6
- rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Timeout::Error
7
- false
8
- end
9
-
10
- def port
11
- ENV.fetch("GNTP_PORT", 23053)
12
- end
13
-
14
- def host
15
- ENV["GNTP_HOST"] || ssh_connection || "127.0.0.1"
16
- end
17
-
18
- def ssh_connection
19
- ENV["SSH_CONNECTION"][/^([^ ]+)/, 1] if ENV["SSH_CONNECTION"]
20
- end
21
-
22
- def notify(options)
23
- gntp = Adapters::GNTP.new({
24
- name: "test_notifier",
25
- host: host,
26
- port: port
27
- })
28
-
29
- gntp.notify({
30
- name: "status",
31
- title: options[:title],
32
- message: options[:message],
33
- icon: options[:image]
34
- })
35
- end
36
- end
37
- end
@@ -1,31 +0,0 @@
1
- module Notifier
2
- module Growl
3
- extend self
4
-
5
- SCRIPT = File.dirname(__FILE__) + "/../../resources/register-growl.scpt"
6
- FILE = File.expand_path("~/.test_notifier-growl")
7
-
8
- def supported?
9
- Notifier.os?(/darwin/) && `which growlnotify` && $? == 0
10
- end
11
-
12
- def notify(options)
13
- register
14
- command = [
15
- "growlnotify",
16
- "--name", "test_notifier",
17
- "--image", options.fetch(:image, "").to_s,
18
- "--priority", "2",
19
- "--message", options[:message].to_s,
20
- options[:title].to_s
21
- ]
22
-
23
- Thread.new { system(*command) }.join
24
- end
25
-
26
- def register
27
- return if File.file?(FILE)
28
- system "osascript #{SCRIPT} > #{FILE}"
29
- end
30
- end
31
- end
Binary file