terminal-notifier 1.3.0 → 1.4.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.
@@ -20,12 +20,16 @@ Examples are:
20
20
 
21
21
  ```ruby
22
22
  TerminalNotifier.notify('Hello World')
23
- TerminalNotifier.notify('Hello World', :title => 'Ruby')
23
+ TerminalNotifier.notify('Hello World', :title => 'Ruby', :subtitle => 'Programming Language')
24
24
  TerminalNotifier.notify('Hello World', :activate => 'com.apple.Safari')
25
25
  TerminalNotifier.notify('Hello World', :open => 'http://twitter.com/alloy')
26
26
  TerminalNotifier.notify('Hello World', :execute => 'say "OMG"')
27
27
  TerminalNotifier.notify('Hello World', :group => Process.pid)
28
- TerminalNotifier.remove('previous Process.pid')
28
+
29
+ TerminalNotifier.remove(Process.pid)
30
+
31
+ TerminalNotifier.list(Process.pid)
32
+ TerminalNotifier.list
29
33
  ```
30
34
 
31
35
 
@@ -6,4 +6,4 @@ end
6
6
 
7
7
  require 'terminal-notifier'
8
8
 
9
- TerminalNotifier.execute(ARGV)
9
+ exec TerminalNotifier::BIN_PATH, *ARGV
@@ -9,21 +9,20 @@ module TerminalNotifier
9
9
  @available
10
10
  end
11
11
 
12
- def self.silence_stdout
13
- stdout = STDOUT.clone
14
- STDOUT.reopen(File.new('/dev/null', 'w'))
15
- yield
16
- ensure
17
- STDOUT.reopen(stdout)
18
- end
19
-
20
- def self.execute_with_options(options)
21
- execute(options.map { |k,v| ["-#{k}", v.to_s] }.flatten)
22
- end
23
-
24
- def self.execute(argv)
12
+ def self.execute(verbose, options)
25
13
  if available?
26
- system(BIN_PATH, *argv)
14
+ command = [BIN_PATH, *options.map { |k,v| ["-#{k}", v.to_s] }.flatten]
15
+ if RUBY_VERSION < '1.9'
16
+ require 'shellwords'
17
+ command = Shellwords.shelljoin(command)
18
+ end
19
+ result = ''
20
+ IO.popen(*command) do |stdout|
21
+ output = stdout.read
22
+ STDOUT.print output if verbose
23
+ result << output
24
+ end
25
+ result
27
26
  else
28
27
  raise "terminal-notifier is only supported on Mac OS X 10.8, or higher."
29
28
  end
@@ -46,27 +45,44 @@ module TerminalNotifier
46
45
  # TerminalNotifier.notify('Hello World', :execute => 'say "OMG"')
47
46
  #
48
47
  # Raises if not supported on the current platform.
49
- def notify(message, options = {})
50
- TerminalNotifier.silence_stdout { TerminalNotifier.verbose_notify(message, options) }
48
+ def notify(message, options = {}, verbose = false)
49
+ TerminalNotifier.execute(verbose, options.merge(:message => message))
50
+ $?.success?
51
51
  end
52
52
  module_function :notify
53
53
 
54
- # The same as `verbose`, but sends the output from the tool to STDOUT.
55
- def verbose_notify(message, options = {})
56
- TerminalNotifier.execute_with_options(options.merge(:message => message))
57
- end
58
- module_function :verbose_notify
59
-
60
54
  # Removes a notification that was previously sent with the specified
61
55
  # ‘group’ ID, if one exists.
62
- def remove(group)
63
- TerminalNotifier.silence_stdout { TerminalNotifier.verbose_remove(group) }
56
+ #
57
+ # If no ‘group ID is given, all notifications are removed.
58
+ def remove(group = 'ALL', verbose = false)
59
+ TerminalNotifier.execute(verbose, :remove => group)
60
+ $?.success?
64
61
  end
65
62
  module_function :remove
66
63
 
67
- # The same as `remove`, but sends the output from the tool to STDOUT.
68
- def verbose_remove(group)
69
- TerminalNotifier.execute_with_options(:remove => group)
64
+ LIST_FIELDS = [:group, :title, :subtitle, :message, :delivered_at].freeze
65
+
66
+ # If a ‘group’ ID is given, and a notification for that group exists,
67
+ # returns a hash with details about the notification.
68
+ #
69
+ # If no ‘group’ ID is given, an array of hashes describing all
70
+ # notifications.
71
+ #
72
+ # If no information is available this will return `nil`.
73
+ def list(group = 'ALL', verbose = false)
74
+ output = TerminalNotifier.execute(verbose, :list => group)
75
+ return if output.strip.empty?
76
+
77
+ require 'time'
78
+ notifications = output.split("\n")[1..-1].map do |line|
79
+ LIST_FIELDS.zip(line.split("\t")).inject({}) do |hash, (key, value)|
80
+ hash[key] = key == :delivered_at ? Time.parse(value) : (value unless value == '(null)')
81
+ hash
82
+ end
83
+ end
84
+
85
+ group == 'ALL' ? notifications : notifications.first
70
86
  end
71
- module_function :verbose_remove
87
+ module_function :list
72
88
  end
@@ -50,8 +50,8 @@ This will obviously be a bit slower than using the tool without the wrapper.
50
50
 
51
51
  #### Options
52
52
 
53
- At a minimum, you have to specify either the `-message` option or the `-remove`
54
- option.
53
+ At a minimum, you have to specify either the `-message` , the `-remove`
54
+ option or the `-list` option.
55
55
 
56
56
  -------------------------------------------------------------------------------
57
57
 
@@ -67,6 +67,12 @@ The title of the notification. This defaults to ‘Terminal’.
67
67
 
68
68
  -------------------------------------------------------------------------------
69
69
 
70
+ `-subtitle VALUE`
71
+
72
+ The subtitle of the notification.
73
+
74
+ -------------------------------------------------------------------------------
75
+
70
76
  `-group ID`
71
77
 
72
78
  Specifies the ‘group’ a notification belongs to. For any ‘group’ only _one_
@@ -86,7 +92,16 @@ Examples are:
86
92
  `-remove ID` **[required]**
87
93
 
88
94
  Removes a notification that was previously sent with the specified ‘group’ ID,
89
- if one exists.
95
+ if one exists. If used with the special group "ALL", all message are removed.
96
+
97
+ -------------------------------------------------------------------------------
98
+
99
+ `-list ID` **[required]**
100
+
101
+ Lists details about the specified ‘group’ ID. If used with the special group
102
+ "ALL", details about all currently active messages are displayed.
103
+
104
+ The output of this command is tab-separated, which makes it easy to parse.
90
105
 
91
106
  -------------------------------------------------------------------------------
92
107
 
@@ -19,11 +19,11 @@
19
19
  <key>CFBundlePackageType</key>
20
20
  <string>APPL</string>
21
21
  <key>CFBundleShortVersionString</key>
22
- <string>1.3.0</string>
22
+ <string>1.4.0</string>
23
23
  <key>CFBundleSignature</key>
24
24
  <string>????</string>
25
25
  <key>CFBundleVersion</key>
26
- <string>4</string>
26
+ <string>5</string>
27
27
  <key>DTCompiler</key>
28
28
  <string></string>
29
29
  <key>DTPlatformBuild</key>
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terminal-notifier
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 1.3.0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Eloy Duran
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-07-30 00:00:00 Z
18
+ date: 2012-08-10 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bacon