signaly-notify 0.0.5 → 0.0.6

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
2
  SHA1:
3
- metadata.gz: 0ccb5948a481aa78a08ebbed8ff8cda4c33e9515
4
- data.tar.gz: e2901bff258d213961d7982a755aa5b55fee7fc4
3
+ metadata.gz: c3bf603d022158b24c1caf75d0e0a9b6b5022071
4
+ data.tar.gz: e9041e6655295aed2d4030e1b6027d224373567c
5
5
  SHA512:
6
- metadata.gz: 758f07968904bba363def2bef562ac2a450db0c34f7074a29722c6155b2ca1fdf56d743a5dab50ea0475708a7aa227a3641de0d586eb35ab9e1cb14a05a2c8f3
7
- data.tar.gz: 78aa078ec0218bcde21dac1ea229766ba07c7da19870a740a05a0098d130705b79e66744452ea6d5cfd66e12ecbc34223e6b3364079e96bd801b884f4ed5e7f2
6
+ metadata.gz: 4b7a7c0a2cfa6843014e3029792bd1eb402973b8a7aa6687f95e6402ef1515b9e5f823cd2c7cec4b3c471a7dfab3c506609f8d37cd22108e212779511fff58c5
7
+ data.tar.gz: 59eb092b6f9510f2212f6061c3479027809365926c2aa9298dd0ee0894dedc919712a06a9f6f88cda9655274004a9066a9bac3d939501bd3a802f3b6072851a7
@@ -1,4 +1,4 @@
1
1
  #!/bin/env ruby
2
2
 
3
3
  require 'signaly'
4
- Signaly::NotifyApp.new.call ARGV
4
+ Signaly::CLI.new.call ARGV
@@ -0,0 +1,18 @@
1
+ #!/bin/env ruby
2
+
3
+ require 'signaly'
4
+ require 'green_shoes'
5
+
6
+ ::Shoes.app :title => "signaly.cz" do
7
+ systray do
8
+ syst_icon 'signaly.png'
9
+
10
+ syst_add_button "Login" do |state|
11
+ edit_conf()
12
+ end
13
+
14
+ syst_add_sepratator
15
+
16
+ syst_quit_button true
17
+ end
18
+ end
data/lib/signaly.rb CHANGED
@@ -1,25 +1,8 @@
1
- require 'mechanize'
2
- require 'colorize'
3
- require 'highline'
4
- require 'optparse'
5
- require 'yaml'
1
+ require 'autoloaded'
6
2
 
7
- # optional gems for visual notifications
8
- begin
9
- require 'libnotify'
10
- rescue LoadError
3
+ module Signaly
4
+ Autoloaded.module do |autoloading|
5
+ # hints for loading of non-conventional constants
6
+ autoloading.with :CLI
7
+ end
11
8
  end
12
-
13
- begin
14
- require 'ruby-growl'
15
- rescue LoadError
16
- end
17
-
18
-
19
- %w(
20
- client
21
- notifier
22
- notify_app
23
- status_outputter
24
- status
25
- ).each {|l| require_relative "signaly/#{l}" }
@@ -0,0 +1,130 @@
1
+ require 'highline'
2
+ require 'optparse'
3
+ require 'yaml'
4
+
5
+ module Signaly
6
+ # collects configuration, starts NotifyApp
7
+ class CLI
8
+ DEFAULT_CONFIG_PATH = "#{ENV['HOME']}/.config/signaly-notify/config.yaml"
9
+
10
+ def call(argv)
11
+ options = process_options(argv)
12
+ config = Config.default
13
+ .merge(config_file(options.config_file))
14
+ .merge(options)
15
+ config = config.merge(find_available_notifier) if config.notify.nil?
16
+ request_config config
17
+
18
+ Signaly::NotifyApp.new.call config
19
+ end
20
+
21
+ private
22
+
23
+ def process_options(argv)
24
+ config = Config.new
25
+ optparse = OptionParser.new do |opts|
26
+ opts.on "-u", "--user NAME", "user name used to log in" do |n|
27
+ config.login = n
28
+ end
29
+
30
+ opts.on "-p", "--password WORD", "user's password" do |p|
31
+ config.password = p
32
+ end
33
+
34
+ opts.separator "If you don't provide any of the options above, "\
35
+ "the program will ask you to type the name and/or password on its start. "\
36
+ "(And especially "\
37
+ "for the password it's probably a bit safer to type it this way than "\
38
+ "to type it on the commandline.)\n\n"
39
+
40
+ opts.on "-s", "--sleep SECS", Integer, "how many seconds to sleep between two checks (default is #{config.sleep_seconds})" do |s|
41
+ config.sleep_seconds = s
42
+ end
43
+
44
+ opts.on "-r", "--remind SECS", Integer, "if I don't bother about the contents I recieved a notification about, remind me after X seconds (default is #{config.remind_after}; set to 0 to disable)" do |s|
45
+ config.remind_after = s
46
+ end
47
+
48
+ opts.on "--notify NOTIFIER", "choose visual notification engine (possible values: libnotify|growl|notifysend)" do |s|
49
+ config.notify = s.to_sym
50
+ end
51
+
52
+ opts.on "--console-only", "don't display any visual notifications" do
53
+ config.console_only = true
54
+ end
55
+
56
+ opts.on "-d", "--debug", "print debugging information to STDERR" do
57
+ config.debug_output = true
58
+ end
59
+
60
+ opts.on "--url URL", "check URL different from the default (for developmeng)" do |s|
61
+ config.url = s
62
+ end
63
+
64
+ opts.on "--skip-login", "don't login (for development)" do
65
+ config.skip_login = true
66
+ end
67
+
68
+ opts.on "-h", "--help", "print this help" do
69
+ puts opts
70
+ exit 0
71
+ end
72
+
73
+ opts.on "-c", "--config FILE", "configuration file" do |f|
74
+ config.config_file = f
75
+ end
76
+ end
77
+ optparse.parse! argv
78
+
79
+
80
+ unless argv.empty?
81
+ STDERR.puts "Warning: unused commandline arguments: "+ARGV.join(', ')
82
+ end
83
+
84
+ return config
85
+ end
86
+
87
+ # ask the user for missing essential information
88
+ def request_config(config)
89
+ cliio = HighLine.new
90
+ config.login ||= cliio.ask("login: ")
91
+ config.password ||= cliio.ask("password: ") {|q| q.echo = '*' }
92
+ end
93
+
94
+ # load configuration from config file
95
+ def config_file(path=nil)
96
+ path ||= DEFAULT_CONFIG_PATH
97
+
98
+ if File.exist? path then
99
+ cfg = YAML.load(File.open(path))
100
+ # symbolize keys
101
+ cfg = cfg.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
102
+ return cfg
103
+ end
104
+
105
+ return nil
106
+ end
107
+
108
+ def find_available_notifier
109
+ config = Signaly::Config.new
110
+
111
+ begin
112
+ require 'libnotify'
113
+
114
+ config.notify = :libnotify
115
+ return config
116
+ rescue LoadError
117
+ end
118
+
119
+ begin
120
+ require 'ruby-growl'
121
+
122
+ config.notify = :growl
123
+ return config
124
+ rescue LoadError
125
+ end
126
+
127
+ return config
128
+ end
129
+ end
130
+ end
@@ -1,16 +1,17 @@
1
+ require 'mechanize'
2
+
1
3
  module Signaly
2
4
  # interaction with signaly.cz
5
+ # (through the regular web interface intended for humans)
3
6
  class Client
4
7
 
5
8
  def initialize(config)
6
- @username = config.login
7
- @password = config.password
8
-
9
+ @config = config
9
10
  @agent = Mechanize.new
10
11
 
11
12
  @dbg_print_pages = config.debug_output || false # print raw html of all request results?
12
13
 
13
- @checked_page = config.url || 'https://www.signaly.cz/'
14
+ @checked_page = @config.url || 'https://www.signaly.cz/'
14
15
  end
15
16
 
16
17
  USERMENU_XPATH = ".//div[contains(@class, 'section-usermenu')]"
@@ -25,20 +26,14 @@ module Signaly
25
26
  unless login_form
26
27
  raise "Login form not found on the index page!"
27
28
  end
28
- login_form['name'] = @username
29
- login_form['password'] = @password
29
+ login_form['name'] = @config.login
30
+ login_form['password'] = @config.password
30
31
 
31
32
  page = @agent.submit(login_form)
32
33
  debug_page_print "first logged in", page
33
34
 
34
- errors = page.search(".//div[@class='alert alert-error']")
35
- if errors.size > 0 then
36
- msg = ''
37
- errors.each {|e| msg += e.text.strip+"\n" }
38
- raise "Login to signaly.cz failed: "+msg
39
- end
40
-
41
35
  usermenu = page.search(USERMENU_XPATH)
36
+ usermenu &&= usermenu.xpath("./div[@class='item username']")
42
37
  if usermenu.empty? then
43
38
  raise "User-menu not found. Login failed or signaly.cz UI changed again."
44
39
  end
@@ -73,7 +68,7 @@ module Signaly
73
68
  return if ! @dbg_print_pages
74
69
 
75
70
  STDERR.puts
76
- STDERR.puts ("# "+title).colorize(:yellow)
71
+ STDERR.puts ColorizedString.new("# "+title).yellow
77
72
  STDERR.puts
78
73
  STDERR.puts page.search(".//div[@class='navbar navbar-fixed-top section-header']")
79
74
  STDERR.puts
@@ -0,0 +1,44 @@
1
+ module Signaly
2
+ Config = Struct.new(
3
+ :sleep_seconds, # between checks
4
+ :remind_after, # the first notification
5
+ :notification_showtime,
6
+ :debug_output,
7
+ :login,
8
+ :password,
9
+ :url, # of the checked page
10
+ :skip_login,
11
+ :config_file,
12
+ :console_only,
13
+ :notify
14
+ )
15
+
16
+ class Config
17
+ def self.default
18
+ defaults = new
19
+ # how many seconds between two checks of the site
20
+ defaults.sleep_seconds = 60
21
+ # if there is some pending content and I don't look at it,
22
+ # remind me after X seconds
23
+ defaults.remind_after = 60*5
24
+ # for how long time the notification shows up
25
+ defaults.notification_showtime = 10
26
+ defaults.debug_output = false
27
+ defaults.password = nil
28
+ return defaults
29
+ end
30
+
31
+ # merges the config structs so that the last one
32
+ # in the argument list has the highest priority and value nil is considered
33
+ # empty
34
+ def merge(other)
35
+ merged = dup
36
+
37
+ merged.members.each do |key|
38
+ merged[key] = other[key] if other[key]
39
+ end
40
+
41
+ return merged
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,34 @@
1
+ require 'colorized_string'
2
+
3
+ module Signaly
4
+ class ConsoleOutputter < StatusOutputter
5
+ def output(new_status, old_status)
6
+ print_line new_status, old_status
7
+ set_console_title new_status
8
+ end
9
+
10
+ private
11
+
12
+ def print_line(new_status, old_status)
13
+ t = Time.now
14
+
15
+ puts # start on a new line
16
+ print t.strftime("%H:%M:%S")
17
+
18
+ [:pm, :notifications, :invitations].each do |what|
19
+ num = new_status[what].to_s
20
+ if new_status.changed?(old_status, what) then
21
+ num = ColorizedString.new(num).red
22
+ end
23
+ print " #{what}: #{num}"
24
+ end
25
+ puts
26
+ end
27
+
28
+ # doesn't work....
29
+ def set_console_title(status)
30
+ t = "signaly-notify: #{status[:pm]}/#{status[:notifications]}"
31
+ `echo -ne "\\033]0;#{t}\\007"`
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'ruby-growl'
3
+ rescue LoadError
4
+ end
5
+
6
+ module Signaly
7
+ class GrowlOutputter < StatusOutputter
8
+ def output(new_status, old_status)
9
+ text = [:pm, :notifications, :invitations].collect do |what|
10
+ "#{what}: #{new_status[what]}"
11
+ end.join "\n"
12
+
13
+ notif = Growl.new 'localhost', 'ruby-growl', 'GNTP'
14
+ notif.notify('signaly.cz', 'signaly.cz', text)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # optional gems for visual notifications
2
+ begin
3
+ require 'libnotify'
4
+ rescue LoadError
5
+ end
6
+
7
+ module Signaly
8
+ class LibnotifyOutputter < StatusOutputter
9
+ def output(new_status, old_status)
10
+ text = [:pm, :notifications, :invitations].collect do |what|
11
+ "#{what}: #{new_status[what]}"
12
+ end.join "\n"
13
+
14
+ Libnotify.show(:body => text, :summary => "signaly.cz", :timeout => @config.notification_showtime)
15
+ end
16
+ end
17
+ end
@@ -1,29 +1,6 @@
1
1
  module Signaly
2
2
  class NotifyApp
3
-
4
- SNConfig = Struct.new(:sleep_seconds, # between checks
5
- :remind_after, # the first notification
6
- :notification_showtime,
7
- :debug_output,
8
- :login,
9
- :password,
10
- :url, # of the checked page
11
- :skip_login,
12
- :config_file,
13
- :console_only,
14
- :notify)
15
-
16
- DEFAULT_CONFIG_PATH = ".config/signaly-notify/config.yaml"
17
-
18
- def call(argv)
19
- options = process_options(argv)
20
- config = merge_structs(
21
- default_config,
22
- config_file(options.config_file),
23
- options
24
- )
25
- ask_config config
26
-
3
+ def call(config)
27
4
  notifier = Notifier.new
28
5
  prepare_outputters config, notifier
29
6
 
@@ -32,120 +9,19 @@ module Signaly
32
9
 
33
10
  private
34
11
 
35
- # load configuration from config file
36
- def config_file(path=nil)
37
- path ||= File.join ENV['HOME'], DEFAULT_CONFIG_PATH
38
-
39
- if File.exist? path then
40
- cfg = YAML.load(File.open(path))
41
- # symbolize keys
42
- cfg = cfg.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
43
- return cfg
44
- end
45
-
46
- return nil
47
- end
48
-
49
- def process_options(argv)
50
- config = SNConfig.new
51
- optparse = OptionParser.new do |opts|
52
- opts.on "-u", "--user NAME", "user name used to log in" do |n|
53
- config.login = n
54
- end
55
-
56
- opts.on "-p", "--password WORD", "user's password" do |p|
57
- config.password = p
58
- end
59
-
60
- opts.separator "If you don't provide any of the options above, "\
61
- "the program will ask you to type the name and/or password on its start. "\
62
- "(And especially "\
63
- "for the password it's probably a bit safer to type it this way than "\
64
- "to type it on the commandline.)\n\n"
65
-
66
- opts.on "-s", "--sleep SECS", Integer, "how many seconds to sleep between two checks (default is #{config.sleep_seconds})" do |s|
67
- config.sleep_seconds = s
68
- end
69
-
70
- opts.on "-r", "--remind SECS", Integer, "if I don't bother about the contents I recieved a notification about, remind me after X seconds (default is #{config.remind_after}; set to 0 to disable)" do |s|
71
- config.remind_after = s
72
- end
73
-
74
- opts.on "--notify NOTIFIER", "choose visual notification engine (possible values are 'libnotify' and 'growl')" do |s|
75
- config.notify = s.to_sym
76
- end
77
-
78
- opts.on "--console-only", "don't display any visual notifications" do
79
- config.console_only = true
80
- end
81
-
82
- opts.on "-d", "--debug", "print debugging information to STDERR" do
83
- config.debug_output = true
84
- end
85
-
86
- opts.on "--url URL", "check URL different from the default (for developmeng)" do |s|
87
- config.url = s
88
- end
89
-
90
- opts.on "--skip-login", "don't login (for development)" do
91
- config.skip_login = true
92
- end
93
-
94
- opts.on "-h", "--help", "print this help" do
95
- puts opts
96
- exit 0
97
- end
98
-
99
- opts.on "-c", "--config FILE", "configuration file" do |f|
100
- config.config_file = f
101
- end
102
- end
103
- optparse.parse! argv
104
-
105
-
106
- unless argv.empty?
107
- STDERR.puts "Warning: unused commandline arguments: "+ARGV.join(', ')
108
- end
109
-
110
- return config
111
- end
112
-
113
- # ask the user for missing essential information
114
- def ask_config(config)
115
- cliio = HighLine.new
116
- config.login ||= cliio.ask("login: ")
117
- config.password ||= cliio.ask("password: ") {|q| q.echo = '*' }
118
- end
119
-
120
- # merges the config structs so that the last one
121
- # in the argument list has the highest priority and value nil is considered
122
- # empty
123
- def merge_structs(*structs)
124
- merged = structs.shift.dup
125
-
126
- merged.each_pair do |key, value|
127
- structs.each do |s|
128
- next if s.nil?
129
- if s[key] != nil then
130
- merged[key] = s[key]
131
- end
132
- end
133
- end
134
-
135
- return merged
136
- end
137
-
138
12
  def prepare_outputters(config, notifier)
139
- notifier.add_outputter ConsoleOutputter.new(config), :checked
13
+ notifier.add_outputter Signaly::ConsoleOutputter.new(config), :checked
140
14
 
141
15
  return if config.console_only
142
16
  return unless config.notify
143
17
 
144
18
  case config.notify.to_sym
145
19
  when :libnotify
146
- notifier.add_outputter LibNotifyOutputter.new(config), :changed, :remind
20
+ notifier.add_outputter Signaly::LibnotifyOutputter.new(config), :changed, :remind
147
21
  when :growl
148
- notifier.add_outputter GrowlOutputter.new(config), :changed, :remind
22
+ notifier.add_outputter Signaly::GrowlOutputter.new(config), :changed, :remind
23
+ when :notifysend
24
+ notifier.add_outputter Signaly::NotifySendOutputter.new(config), :changed, :remind
149
25
  end
150
26
  end
151
27
 
@@ -185,25 +61,5 @@ module Signaly
185
61
  sleep config.sleep_seconds
186
62
  end
187
63
  end
188
-
189
- def default_config
190
- defaults = SNConfig.new
191
- # how many seconds between two checks of the site
192
- defaults.sleep_seconds = 60
193
- # if there is some pending content and I don't look at it,
194
- # remind me after X seconds
195
- defaults.remind_after = 60*5
196
- # for how long time the notification shows up
197
- defaults.notification_showtime = 10
198
- defaults.debug_output = false
199
- defaults.password = nil
200
- # use first available visual notification engine
201
- if defined? Libnotify
202
- defaults.notify = :libnotify
203
- elsif defined? Growl
204
- defaults.notify = :growl
205
- end
206
- return defaults
207
- end
208
64
  end
209
65
  end
@@ -0,0 +1,14 @@
1
+ module Signaly
2
+ # sends desktop notification using the command-line utility
3
+ # notify-send (useful for those who have installed libnotify,
4
+ # but not the Ruby bindings)
5
+ class NotifySendOutputter < StatusOutputter
6
+ def output(new_status, old_status)
7
+ text = [:pm, :notifications, :invitations].collect do |what|
8
+ "#{what}: #{new_status[what]}"
9
+ end.join "\n"
10
+
11
+ `notify-send "#{text}"`
12
+ end
13
+ end
14
+ end
@@ -7,56 +7,4 @@ module Signaly
7
7
  def output(new_status, old_status)
8
8
  end
9
9
  end
10
-
11
- class ConsoleOutputter < StatusOutputter
12
- def output(new_status, old_status)
13
- print_line new_status, old_status
14
- set_console_title new_status
15
- end
16
-
17
- private
18
-
19
- def print_line(new_status, old_status)
20
- t = Time.now
21
-
22
- puts # start on a new line
23
- print t.strftime("%H:%M:%S")
24
-
25
- [:pm, :notifications, :invitations].each do |what|
26
- num = new_status[what].to_s
27
- if new_status.changed?(old_status, what) then
28
- num = num.colorize(:red)
29
- end
30
- print " #{what}: #{num}"
31
- end
32
- puts
33
- end
34
-
35
- # doesn't work....
36
- def set_console_title(status)
37
- t = "signaly-notify: #{status[:pm]}/#{status[:notifications]}"
38
- `echo -ne "\\033]0;#{t}\\007"`
39
- end
40
- end
41
-
42
- class LibNotifyOutputter < StatusOutputter
43
- def output(new_status, old_status)
44
- text = [:pm, :notifications, :invitations].collect do |what|
45
- "#{what}: #{new_status[what]}"
46
- end.join "\n"
47
-
48
- Libnotify.show(:body => text, :summary => "signaly.cz", :timeout => @config.notification_showtime)
49
- end
50
- end
51
-
52
- class GrowlOutputter < StatusOutputter
53
- def output(new_status, old_status)
54
- text = [:pm, :notifications, :invitations].collect do |what|
55
- "#{what}: #{new_status[what]}"
56
- end.join "\n"
57
-
58
- notif = Growl.new 'localhost', 'ruby-growl', 'GNTP'
59
- notif.notify('signaly.cz', 'signaly.cz', text)
60
- end
61
- end
62
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signaly-notify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Pavlík
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-26 00:00:00.000000000 Z
11
+ date: 2019-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.7'
33
+ version: '0.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.7'
40
+ version: '0.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: highline
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,10 +52,25 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.7'
55
- description: "signaly-notify.rb is a simple script \nlogging in with your user data
56
- to the social network https://signaly.cz \nand notifying you - by the means of printing
57
- to the console \nas well as sending a visual notification using libnotify - \nwhen
58
- something new happens.\nCurrently it only detects pending private messages and notifications."
55
+ - !ruby/object:Gem::Dependency
56
+ name: autoloaded
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.1'
69
+ description: |-
70
+ signaly-notify.rb signs in with your credentials
71
+ to the social network https://signaly.cz
72
+ and triggers a desktop notification whenever something new happens.
73
+ It detects pending private messages, notifications and invitations.
59
74
  email: jkb.pavlik@gmail.com
60
75
  executables:
61
76
  - signaly-notify.rb
@@ -63,10 +78,17 @@ extensions: []
63
78
  extra_rdoc_files: []
64
79
  files:
65
80
  - bin/signaly-notify.rb
81
+ - bin/signaly-tray.rb
66
82
  - lib/signaly.rb
83
+ - lib/signaly/cli.rb
67
84
  - lib/signaly/client.rb
85
+ - lib/signaly/config.rb
86
+ - lib/signaly/console_outputter.rb
87
+ - lib/signaly/growl_outputter.rb
88
+ - lib/signaly/libnotify_outputter.rb
68
89
  - lib/signaly/notifier.rb
69
90
  - lib/signaly/notify_app.rb
91
+ - lib/signaly/notify_send_outputter.rb
70
92
  - lib/signaly/status.rb
71
93
  - lib/signaly/status_outputter.rb
72
94
  homepage: http://github.com/igneus/signaly-notify
@@ -90,9 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
112
  version: '0'
91
113
  requirements: []
92
114
  rubyforge_project:
93
- rubygems_version: 2.2.2
115
+ rubygems_version: 2.5.1
94
116
  signing_key:
95
117
  specification_version: 4
96
118
  summary: notification script for signaly.cz (Czech christian social network)
97
119
  test_files: []
98
- has_rdoc: