signaly-notify 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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: