pushover 0.4.0 → 0.5.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.
- data/Gemfile +21 -1
- data/Guardfile +19 -0
- data/LICENSE +32 -18
- data/Rakefile +6 -1
- data/bin/pushover +18 -7
- data/lib/pushover.rb +6 -3
- data/lib/pushover/app.rb +13 -10
- data/lib/pushover/user.rb +14 -10
- data/lib/pushover/version.rb +1 -1
- data/pushover.gemspec +2 -2
- data/spec/bin/pushover_spec.rb +42 -0
- data/spec/lib/pushover/app_spec.rb +26 -0
- data/spec/{pushover_spec.rb → lib/pushover/pushover_spec.rb} +0 -0
- data/spec/lib/pushover/user_spec.rb +28 -0
- data/whatsnew.md +6 -2
- metadata +14 -19
- data/lib/pushover/config.rb +0 -62
- data/lib/pushover/optparser.rb +0 -71
- data/spec/app_spec.rb +0 -19
- data/spec/cli_spec.rb +0 -42
- data/spec/config_spec.rb +0 -29
- data/spec/optparser_spec.rb +0 -0
- data/spec/user_spec.rb +0 -21
data/Gemfile
CHANGED
@@ -1,4 +1,24 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in pushover.gemspec
|
4
3
|
gemspec
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
gem "pry"
|
7
|
+
gem "pry-debugger"
|
8
|
+
gem "redcarpet"
|
9
|
+
gem "guard"
|
10
|
+
gem "guard-bundler"
|
11
|
+
gem "guard-rspec"
|
12
|
+
gem "guard-yard"
|
13
|
+
gem "guard-shell"
|
14
|
+
gem 'libnotify', :require => false
|
15
|
+
gem 'growl', :require => false
|
16
|
+
gem 'rb-inotify', :require => false
|
17
|
+
gem 'rb-fsevent', :require => false
|
18
|
+
gem 'rb-fchange', :require => false
|
19
|
+
end
|
20
|
+
|
21
|
+
group :test do
|
22
|
+
gem "rspec"
|
23
|
+
gem "rake"
|
24
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# A sample Guardfile
|
3
|
+
# More info at https://github.com/guard/guard#readme
|
4
|
+
|
5
|
+
guard :bundler do
|
6
|
+
watch 'Gemfile'
|
7
|
+
watch '*.gemspec'
|
8
|
+
end
|
9
|
+
|
10
|
+
guard :rspec do
|
11
|
+
watch(%r{^spec/.+_spec\.rb$})
|
12
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec spec/lib/#{m[1]}_spec.rb" }
|
13
|
+
watch(%r{^bin/(.+)\.rb$}) { |m| "spec/bin/#{m[1]}_spec.rb" }
|
14
|
+
watch('spec/spec_helper.rb') { "spec" }
|
15
|
+
end
|
16
|
+
|
17
|
+
# guard :yard do
|
18
|
+
# watch(%r{^lib/(.+)\.rb$})
|
19
|
+
# end
|
data/LICENSE
CHANGED
@@ -1,22 +1,36 @@
|
|
1
|
-
|
1
|
+
All software in this package is covered by the MIT license and beerware (rev42).
|
2
2
|
|
3
|
-
|
3
|
+
Copyright (c) 2011 Ernie Brodeur
|
4
4
|
|
5
|
-
Permission is hereby granted, free of charge, to any person
|
6
|
-
a copy of this software and associated documentation
|
7
|
-
"Software"), to deal in the Software without
|
8
|
-
without limitation the rights to use,
|
9
|
-
distribute, sublicense, and/or sell
|
10
|
-
|
11
|
-
the following
|
5
|
+
Permission is hereby granted, free of charge, to any person
|
6
|
+
obtaining a copy of this software and associated documentation
|
7
|
+
files (the "Software"), to deal in the Software without
|
8
|
+
restriction, including without limitation the rights to use,
|
9
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the
|
11
|
+
Software is furnished to do so, subject to the following
|
12
|
+
conditions:
|
12
13
|
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
14
|
+
The above copyright notice and this permission notice shall be
|
15
|
+
included in all copies or substantial portions of the Software.
|
15
16
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING
|
22
|
-
WITH THE SOFTWARE OR THE USE OR
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
19
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
21
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
23
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
24
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
|
26
|
+
/*
|
27
|
+
* ----------------------------------------------------------------------------
|
28
|
+
* "THE BEER-WARE LICENSE" (Revision 42):
|
29
|
+
* Ernie Brodeur wrote this package. As long as you retain this notice you
|
30
|
+
* can do whatever you want with this stuff. If we meet some day, and you think
|
31
|
+
* this stuff is worth it, you can buy me a beer in return.
|
32
|
+
* ----------------------------------------------------------------------------
|
33
|
+
*/
|
34
|
+
|
35
|
+
All contributed code is licensed accordingly and accredited whenever possible.
|
36
|
+
If I make any mistake about this, please feel free to contact me at ebrodeur@ujami.net.
|
data/Rakefile
CHANGED
data/bin/pushover
CHANGED
@@ -2,7 +2,17 @@
|
|
2
2
|
|
3
3
|
require 'pushover'
|
4
4
|
|
5
|
+
include Bini
|
5
6
|
include Pushover
|
7
|
+
Options.on("-u", "--user USER", "Which user, can be a saved name or token.") { |o| Options[:user] = o}
|
8
|
+
Options.on("-a", "--app APPKEY", "Which app to notify, can be a saved name or apikey.") { |o| Options[:appkey] = o}
|
9
|
+
Options.on("-t", "--title [TITLE]", "Set the title of the notification (optional).") { |o| Options[:title] = o}
|
10
|
+
Options.on("-p", "--priority [PRIORITY]", OptionParser::DecimalInteger , "Set the priority of the notification from -1 to 1 (optional).") { |o| Options[:priority] = o}
|
11
|
+
Options.on("-d", "--device [DEVICE]", "Specify the device to send the notifcation to. (optional).") { |o| Options[:device] = o}
|
12
|
+
Options.on("-c", "--config_file [FILE]", "Set the target config file.") {|o| Options[:config_file] = o}
|
13
|
+
Options.on("--save-app NAME", "Saves the application to the config file under NAME.") { |o| Options[:save_app] = [Options[:appkey], o]}
|
14
|
+
Options.on("--save-user NAME", "Saves the user to the config file under NAME.") { |o| Options[:save_user] = [Options[:user], o]}
|
15
|
+
|
6
16
|
Options.parse!
|
7
17
|
|
8
18
|
# Order is important.
|
@@ -13,14 +23,14 @@ end
|
|
13
23
|
|
14
24
|
if Options[:save_app]
|
15
25
|
puts "Saving application #{Options[:save_app][0]} to #{Options[:save_app][1]}."
|
16
|
-
App.add Options[:save_app][
|
26
|
+
App.add Options[:save_app][1], Options[:save_app][0]
|
17
27
|
puts "Save successful."
|
18
28
|
exit
|
19
29
|
end
|
20
30
|
|
21
31
|
if Options[:save_user]
|
22
32
|
puts "Saving user #{Options[:save_user][0]} to #{Options[:save_user][1]}."
|
23
|
-
User.add Options[:save_user][
|
33
|
+
User.add Options[:save_user][1], Options[:save_user][0]
|
24
34
|
puts "Save successful."
|
25
35
|
exit
|
26
36
|
end
|
@@ -48,16 +58,16 @@ if !User.current_user?
|
|
48
58
|
end
|
49
59
|
exit if bail
|
50
60
|
|
61
|
+
# I do both just as an example, you can configure it this way and have it
|
62
|
+
# pre-configured:
|
51
63
|
Pushover.configure do |c|
|
52
64
|
c.user = User.current_user
|
53
65
|
c.token = App.current_app
|
54
|
-
c.message = message
|
55
|
-
c.title = Options[:title]
|
56
|
-
c.priority = Options[:priority]
|
57
|
-
c.device = Options[:device]
|
58
66
|
end
|
59
67
|
|
60
|
-
|
68
|
+
# Or in real time, which will also overwrite the .configure block.
|
69
|
+
response = Pushover.notification message:message, title:Options[:title],
|
70
|
+
priority:Options[:priority], device:Options[:device]
|
61
71
|
|
62
72
|
if response.code == "200"
|
63
73
|
puts "Message sent successfully!"
|
@@ -65,3 +75,4 @@ else
|
|
65
75
|
j = Yajl.load response.body
|
66
76
|
puts "ErrorCode (#{response.code}): #{j['errors'].first}."
|
67
77
|
end
|
78
|
+
|
data/lib/pushover.rb
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
require "net/https"
|
2
2
|
require "yajl"
|
3
|
+
require 'bini'
|
4
|
+
require 'bini/config'
|
5
|
+
require 'bini/optparser'
|
3
6
|
|
4
7
|
require "pushover/version"
|
5
8
|
require "pushover/app"
|
6
9
|
require "pushover/user"
|
7
|
-
require "pushover/config"
|
8
|
-
require "pushover/optparser"
|
9
|
-
|
10
10
|
# The primary pushover namespace.
|
11
11
|
module Pushover
|
12
|
+
# lets save our config to it's own dir, just because.
|
13
|
+
Bini.config.file = "#{Dir.home}/.config/pushover/credentials.yaml"
|
14
|
+
Bini.config.load
|
12
15
|
|
13
16
|
extend self
|
14
17
|
|
data/lib/pushover/app.rb
CHANGED
@@ -10,14 +10,14 @@ module Pushover
|
|
10
10
|
attr_accessor :name
|
11
11
|
attr_accessor :api_key
|
12
12
|
|
13
|
-
def initialize(
|
13
|
+
def initialize(name, api_key)
|
14
14
|
@name = name
|
15
15
|
@api_key = api_key
|
16
|
-
|
16
|
+
Bini.config[:applications] = {} if !Bini.config[:applications]
|
17
17
|
if name
|
18
|
-
|
18
|
+
Bini.config[:applications][name] = api_key
|
19
19
|
else
|
20
|
-
|
20
|
+
Bini.config[:applications][api_key] = api_key
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -28,7 +28,7 @@ module Pushover
|
|
28
28
|
# @param [String] word the search token, can be an apikey or appname.
|
29
29
|
# @return [String] return the apikey (if it can find one) or the word itself.
|
30
30
|
def find(word)
|
31
|
-
return
|
31
|
+
return Bini.config[:applications][word] if Bini.config[:applications][word]
|
32
32
|
word
|
33
33
|
end
|
34
34
|
|
@@ -36,23 +36,26 @@ module Pushover
|
|
36
36
|
# @param [String] api_key is the api_key to be used.
|
37
37
|
# @param [String] name is the short name that can be referenced later.
|
38
38
|
# @return [Boolean] return the results of the save attempt.
|
39
|
-
def add(
|
40
|
-
App.new
|
41
|
-
|
39
|
+
def add(name, api_key)
|
40
|
+
App.new name, api_key
|
41
|
+
Bini.config.save!
|
42
42
|
end
|
43
43
|
|
44
|
+
def remove(name)
|
45
|
+
Bini.config[:applications].delete name if Bini.config[:applications]
|
46
|
+
end
|
44
47
|
# Return the current app selected, or the first one saved.
|
45
48
|
def current_app
|
46
49
|
return @current_app if @current_app
|
47
50
|
|
48
51
|
# did something get supplied on the cli? try to find it.
|
49
52
|
if Options[:appkey]
|
50
|
-
@current_app =
|
53
|
+
@current_app = find Options[:appkey]
|
51
54
|
end
|
52
55
|
|
53
56
|
# no? do we have anything we can return?
|
54
57
|
if !@current_app
|
55
|
-
@current_app =
|
58
|
+
@current_app = find Bini.config[:applications].first[0]
|
56
59
|
end
|
57
60
|
@current_app
|
58
61
|
end
|
data/lib/pushover/user.rb
CHANGED
@@ -10,22 +10,22 @@ module Pushover
|
|
10
10
|
attr_accessor :name
|
11
11
|
attr_accessor :token
|
12
12
|
|
13
|
-
def initialize(
|
13
|
+
def initialize(name, token)
|
14
14
|
@name = name
|
15
15
|
@token = token
|
16
|
-
|
17
|
-
|
16
|
+
Bini.config[:users] = {} if !Bini.config[:users]
|
17
|
+
Bini.config[:users][name] = token
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
21
21
|
|
22
22
|
extend self
|
23
23
|
|
24
|
-
# Find the
|
24
|
+
# Find the token in the users, or pass on the word to try direct access.
|
25
25
|
# @param [String] word the search token, can be an apikey or appname.
|
26
26
|
# @return [String] return the apikey (if it can find one) or the word itself.
|
27
27
|
def find(word)
|
28
|
-
return
|
28
|
+
return Bini.config[:users][word] if Bini.config[:users][word]
|
29
29
|
word
|
30
30
|
end
|
31
31
|
|
@@ -33,9 +33,13 @@ module Pushover
|
|
33
33
|
# @param [String] token is the token to be used.
|
34
34
|
# @param [String] name is the short name that can be referenced later.
|
35
35
|
# @return [Boolean] return the results of the save attempt.
|
36
|
-
def add(
|
37
|
-
User.new
|
38
|
-
|
36
|
+
def add(name, token)
|
37
|
+
User.new name, token
|
38
|
+
Bini.config.save!
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove(name)
|
42
|
+
Bini.config[:users].delete name if Bini.config[:users]
|
39
43
|
end
|
40
44
|
|
41
45
|
# Return the current user selected, or the first one saved.
|
@@ -44,12 +48,12 @@ module Pushover
|
|
44
48
|
|
45
49
|
# did something get supplied on the cli? try to find it.
|
46
50
|
if Options[:user]
|
47
|
-
@current_user =
|
51
|
+
@current_user = find Options[:user]
|
48
52
|
end
|
49
53
|
|
50
54
|
# no? do we have anything we can return?
|
51
55
|
if !@current_user
|
52
|
-
@current_user =
|
56
|
+
@current_user = find Bini.config[:users].first[0]
|
53
57
|
end
|
54
58
|
@current_user
|
55
59
|
end
|
data/lib/pushover/version.rb
CHANGED
data/pushover.gemspec
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
# describe "CLI Interface" do
|
2
|
+
# # the save file to be used.
|
3
|
+
# SaveFile = 'spec/test_config'
|
4
|
+
# # the exact string to execute the test version of pushover.
|
5
|
+
# Exec = "bundle exec bin/pushover"
|
6
|
+
# ExecConfig = Exec + " -c #{SaveFile}"
|
7
|
+
# describe "Can select the config file" do
|
8
|
+
# it "short form (-c)" do
|
9
|
+
# output = `#{ExecConfig}`
|
10
|
+
# output.include? "Selecting config file: #{SaveFile}"
|
11
|
+
# end
|
12
|
+
|
13
|
+
# it "long form (--config_file)" do
|
14
|
+
# output = `#{Exec} -c #{SaveFile}`
|
15
|
+
# output.include? "Selecting config file: #{SaveFile}"
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
# describe "Saving" do
|
19
|
+
# it "Application." do
|
20
|
+
# output = `#{ExecConfig} --app 'test_app_api_key' --save-app test_app`
|
21
|
+
# output.include?("Save successful").should be_true
|
22
|
+
# end
|
23
|
+
# it "User." do
|
24
|
+
# output = `#{ExecConfig} --user 'test_user_key' --save-app test_user`
|
25
|
+
# output.include?("Save successful").should be_true
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
# describe "Sending a message" do
|
29
|
+
# it "With no saved info."
|
30
|
+
# context "With saved information" do
|
31
|
+
# it "With a saved user"
|
32
|
+
# it "With a saved app"
|
33
|
+
# it "With both"
|
34
|
+
# end
|
35
|
+
# describe "Title" do
|
36
|
+
# it "can send with a title"
|
37
|
+
# it "can send without a title"
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# it "provides the proper version number"
|
41
|
+
# end
|
42
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'pushover'
|
2
|
+
|
3
|
+
include Pushover
|
4
|
+
|
5
|
+
describe "application" do
|
6
|
+
before(:each) do
|
7
|
+
Bini.config.file = "tmp/test.save"
|
8
|
+
Bini.config.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can add a application to the Config[:application] hash." do
|
12
|
+
App.add "foo", "bar"
|
13
|
+
Bini.config[:applications]["foo"].should eq("bar")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "can remove a application from the hash." do
|
17
|
+
App.add "foo", "bar"
|
18
|
+
App.remove "foo"
|
19
|
+
Bini.config[:applications]["foo"].should be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can find the apikey from the name" do
|
23
|
+
App.add "foo", "bar"
|
24
|
+
App.find("foo").should eq("bar")
|
25
|
+
end
|
26
|
+
end
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'pushover'
|
2
|
+
|
3
|
+
include Pushover
|
4
|
+
|
5
|
+
describe "user" do
|
6
|
+
before(:each) do
|
7
|
+
Bini.config.file = "tmp/test.save"
|
8
|
+
Bini.config.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can add a user to the Config[:application] hash." do
|
12
|
+
User.add "foo", "bar"
|
13
|
+
Bini.config[:users]["foo"].should eq("bar")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "can remove a user from the hash." do
|
17
|
+
User.add "foo", "bar"
|
18
|
+
User.remove "foo"
|
19
|
+
Bini.config[:users]["foo"].should be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can find the token from the name" do
|
23
|
+
User.add "foo", "bar"
|
24
|
+
User.find("foo").should eq("bar")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
data/whatsnew.md
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
-
|
1
|
+
0.5.0:
|
2
|
+
* Switched the order of App and it's derivatives so that it's name, api_key to make it more human readable.
|
3
|
+
* Ditto for User.
|
4
|
+
* Merged in me bones.
|
5
|
+
* Using bini's logic whenever possible now instead of reinventing the wheel.
|
6
|
+
0.4.0:
|
2
7
|
* Added priority and device specification.
|
3
8
|
* Moved all the variables, including message, into the configure block.
|
4
|
-
* Documentation push, 100% passage and updated for yardoc.
|
5
9
|
* Updated the gemspec with some more information.
|
6
10
|
* Better output for error messages.
|
7
11
|
0.3.1
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,17 +9,17 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: yajl-ruby
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
|
-
type: :
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: bini
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
@@ -56,6 +56,7 @@ extra_rdoc_files:
|
|
56
56
|
files:
|
57
57
|
- .gitignore
|
58
58
|
- Gemfile
|
59
|
+
- Guardfile
|
59
60
|
- LICENSE
|
60
61
|
- README.md
|
61
62
|
- Rakefile
|
@@ -63,18 +64,14 @@ files:
|
|
63
64
|
- dev_notes.md
|
64
65
|
- lib/pushover.rb
|
65
66
|
- lib/pushover/app.rb
|
66
|
-
- lib/pushover/config.rb
|
67
|
-
- lib/pushover/optparser.rb
|
68
67
|
- lib/pushover/user.rb
|
69
68
|
- lib/pushover/version.rb
|
70
69
|
- pushover.gemspec
|
71
|
-
- spec/
|
72
|
-
- spec/
|
73
|
-
- spec/
|
74
|
-
- spec/
|
75
|
-
- spec/pushover_spec.rb
|
70
|
+
- spec/bin/pushover_spec.rb
|
71
|
+
- spec/lib/pushover/app_spec.rb
|
72
|
+
- spec/lib/pushover/pushover_spec.rb
|
73
|
+
- spec/lib/pushover/user_spec.rb
|
76
74
|
- spec/spec_helper.rb
|
77
|
-
- spec/user_spec.rb
|
78
75
|
- whatsnew.md
|
79
76
|
homepage: https://github.com/erniebrodeur/pushover
|
80
77
|
licenses: []
|
@@ -108,11 +105,9 @@ signing_key:
|
|
108
105
|
specification_version: 3
|
109
106
|
summary: This gem will provide both an API and CLI interface to pushover.net.
|
110
107
|
test_files:
|
111
|
-
- spec/
|
112
|
-
- spec/
|
113
|
-
- spec/
|
114
|
-
- spec/
|
115
|
-
- spec/pushover_spec.rb
|
108
|
+
- spec/bin/pushover_spec.rb
|
109
|
+
- spec/lib/pushover/app_spec.rb
|
110
|
+
- spec/lib/pushover/pushover_spec.rb
|
111
|
+
- spec/lib/pushover/user_spec.rb
|
116
112
|
- spec/spec_helper.rb
|
117
|
-
- spec/user_spec.rb
|
118
113
|
has_rdoc: yard
|
data/lib/pushover/config.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Pushover
|
4
|
-
# This is an extended [Hash] that adds some saving features via yajl.
|
5
|
-
class ConfigBlob < Hash
|
6
|
-
attr_accessor :save_file
|
7
|
-
|
8
|
-
# @return [String] the dirname of the save file.
|
9
|
-
def save_dir
|
10
|
-
File.dirname @save_file
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize(load = true)
|
14
|
-
@save_file = "#{Dir.home}/.config/pushover/config.json"
|
15
|
-
|
16
|
-
self.load if load
|
17
|
-
end
|
18
|
-
|
19
|
-
# Clear the config file (not implemented)
|
20
|
-
def clear
|
21
|
-
end
|
22
|
-
|
23
|
-
# Save the config, will raise an exception if the file exists.
|
24
|
-
def save
|
25
|
-
FileUtils.mkdir_p save_dir if !Dir.exist? save_dir
|
26
|
-
if any?
|
27
|
-
# I do this the long way because I want an immediate sync.
|
28
|
-
f = open(@save_file, 'w')
|
29
|
-
f.write Yajl.dump self
|
30
|
-
f.sync
|
31
|
-
f.close
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Backup our save file, will remove original in the process.
|
36
|
-
def backupSave
|
37
|
-
FileUtils.mv @save_file, "#{@save_file}.bak" if File.file? @save_file
|
38
|
-
end
|
39
|
-
|
40
|
-
# Save the config, removing the existing one if necessary.
|
41
|
-
def save!(backup = true)
|
42
|
-
if backup
|
43
|
-
backupSave
|
44
|
-
else
|
45
|
-
FileUtils.rm @save_file if File.file? @save_file
|
46
|
-
end
|
47
|
-
|
48
|
-
save
|
49
|
-
end
|
50
|
-
|
51
|
-
# Load the config file if it is available.
|
52
|
-
def load
|
53
|
-
if File.exist?(@save_file) && File.stat(@save_file).size > 0
|
54
|
-
h = Yajl.load open(@save_file, 'r').read
|
55
|
-
h.each { |k,v| self[k.to_sym] = v}
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# A convenience instance of config, provides Pushover.Config.
|
61
|
-
Config = ConfigBlob.new
|
62
|
-
end
|
data/lib/pushover/optparser.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
|
3
|
-
module Pushover
|
4
|
-
# override the built-in [OptionParser], adding some nifty features.
|
5
|
-
# Options[] is a hash value designed to collect the contents added to @options.
|
6
|
-
|
7
|
-
class OptionParser < ::OptionParser
|
8
|
-
def initialize
|
9
|
-
super
|
10
|
-
@options = {}
|
11
|
-
|
12
|
-
on("-V", "--version", "Print version") { |version| @options[:version] = true}
|
13
|
-
on("-u", "--user USER", "Which user, can be a saved name or token.") { |o| @options[:user] = o}
|
14
|
-
on("-a", "--app APPKEY", "Which app to notify, can be a saved name or apikey.") { |o| @options[:appkey] = o}
|
15
|
-
on("-t", "--title [TITLE]", "Set the title of the notification (optional).") { |o| @options[:title] = o}
|
16
|
-
on("-p", "--priority [PRIORITY]", DecimalInteger , "Set the priority of the notification from -1 to 1 (optional).") { |o| @options[:priority] = o}
|
17
|
-
on("-d", "--device [DEVICE]", "Specify the device to send the notifcation to. (optional).") { |o| @options[:device] = o}
|
18
|
-
on("-c", "--config_file [FILE]", "Set the target config file.") {|o| @options[:config_file] = o}
|
19
|
-
on("--save-app NAME", "Saves the application to the config file under NAME.") { |o| @options[:save_app] = [@options[:appkey], o]}
|
20
|
-
on("--save-user NAME", "Saves the user to the config file under NAME.") { |o| @options[:save_user] = [@options[:user], o]}
|
21
|
-
end
|
22
|
-
|
23
|
-
# This will build an on/off option with a default value set to false.
|
24
|
-
def bool_on(word, description = "")
|
25
|
-
Options[word.to_sym] = false
|
26
|
-
on "-#{word.chars.first}", "--[no]#{word}", description do |o|
|
27
|
-
Options[word.to_sym] == o
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Build out the banner and calls the built in parse!
|
32
|
-
# Loads any saved options automatically.
|
33
|
-
def parse!
|
34
|
-
@banner = "Send notifications over to pushover.net.\n\n"
|
35
|
-
super
|
36
|
-
|
37
|
-
if @options[:version]
|
38
|
-
puts Pushover::VERSION
|
39
|
-
exit 0
|
40
|
-
end
|
41
|
-
|
42
|
-
# we need to mash in our config array. To do this we want to make config
|
43
|
-
# options that don't overwrite cli options.
|
44
|
-
Config.each do |k,v|
|
45
|
-
@options[k] = v if !@options[k] && ["applications", "users"].include?(k)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Entry point to the options hash
|
50
|
-
# @return will return the value of key if provided, else the entire [Hash]
|
51
|
-
def [](k = nil)
|
52
|
-
return @options[k] if k
|
53
|
-
return @options if @options.any?
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
|
57
|
-
# Set a value in the option array, used as a way to store the results of the parsed value.
|
58
|
-
def []=(k,v)
|
59
|
-
@options[k] = v
|
60
|
-
end
|
61
|
-
|
62
|
-
# Check to see if the option hash has any k/v pairs.
|
63
|
-
# @return [Boolean] true if any pairs at all, false otherwise.
|
64
|
-
def empty?
|
65
|
-
@options.empty?
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Add a built in Options to the Pushover namespace, purely a convenience thing.
|
70
|
-
Options = OptionParser.new
|
71
|
-
end
|
data/spec/app_spec.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'pushover'
|
2
|
-
|
3
|
-
describe "application" do
|
4
|
-
before(:each) do
|
5
|
-
Pushover::Config.save_file = "test.save"
|
6
|
-
Pushover::Config.clear
|
7
|
-
end
|
8
|
-
|
9
|
-
it "can add a application to the Config[:application] hash." do
|
10
|
-
Pushover::App.add "bar", "foo"
|
11
|
-
Pushover::Config[:applications]["foo"].should eq("bar")
|
12
|
-
end
|
13
|
-
|
14
|
-
it "can remove a application from the hash."
|
15
|
-
it "can find the apikey from the name" do
|
16
|
-
Pushover::App.add "bar", "foo"
|
17
|
-
Pushover::App.find("foo").should eq("bar")
|
18
|
-
end
|
19
|
-
end
|
data/spec/cli_spec.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
describe "CLI Interface" do
|
2
|
-
# the save file to be used.
|
3
|
-
SaveFile = 'spec/test_config'
|
4
|
-
# the exact string to execute the test version of pushover.
|
5
|
-
Exec = "bundle exec bin/pushover"
|
6
|
-
ExecConfig = Exec + " -c #{SaveFile}"
|
7
|
-
describe "Can select the config file" do
|
8
|
-
it "short form (-c)" do
|
9
|
-
output = `#{ExecConfig}`
|
10
|
-
output.include? "Selecting config file: #{SaveFile}"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "long form (--config_file)" do
|
14
|
-
output = `#{Exec} -c #{SaveFile}`
|
15
|
-
output.include? "Selecting config file: #{SaveFile}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
describe "Saving" do
|
19
|
-
it "Application." do
|
20
|
-
output = `#{ExecConfig} --app 'test_app_api_key' --save-app test_app`
|
21
|
-
output.include?("Save successful").should be_true
|
22
|
-
end
|
23
|
-
it "User." do
|
24
|
-
output = `#{ExecConfig} --user 'test_user_key' --save-app test_user`
|
25
|
-
output.include?("Save successful").should be_true
|
26
|
-
end
|
27
|
-
end
|
28
|
-
describe "Sending a message" do
|
29
|
-
it "With no saved info."
|
30
|
-
context "With saved information" do
|
31
|
-
it "With a saved user"
|
32
|
-
it "With a saved app"
|
33
|
-
it "With both"
|
34
|
-
end
|
35
|
-
describe "Title" do
|
36
|
-
it "can send with a title"
|
37
|
-
it "can send without a title"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
it "provides the proper version number"
|
41
|
-
end
|
42
|
-
|
data/spec/config_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'pushover'
|
2
|
-
|
3
|
-
describe "Config" do
|
4
|
-
before(:all) do
|
5
|
-
Pushover::Config.save_file = "config_spec.tmp"
|
6
|
-
Pushover::Config.clear
|
7
|
-
Pushover::Config[:test] = true
|
8
|
-
Pushover::Config.save!
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should exist" do
|
12
|
-
expect { Pushover::Config }.to_not be(nil)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should have a save_file" do
|
16
|
-
Pushover::Config.save_file.should eq("config_spec.tmp")
|
17
|
-
end
|
18
|
-
|
19
|
-
it "save_dir should be the basename of save_file" do
|
20
|
-
Pushover::Config.save_dir.should eq(File.dirname Pushover::Config.save_file)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should save if not empty"
|
24
|
-
it "should make a backup"
|
25
|
-
it "should load" do
|
26
|
-
Pushover::Config.load
|
27
|
-
Pushover::Config[:test].should eq(true)
|
28
|
-
end
|
29
|
-
end
|
data/spec/optparser_spec.rb
DELETED
File without changes
|
data/spec/user_spec.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'pushover'
|
2
|
-
|
3
|
-
describe "user" do
|
4
|
-
before(:each) do
|
5
|
-
Pushover::Config.save_file = "test.save"
|
6
|
-
Pushover::Config.clear
|
7
|
-
end
|
8
|
-
|
9
|
-
it "can add a user to the Config[:application] hash." do
|
10
|
-
Pushover::User.add "bar", "foo"
|
11
|
-
Pushover::Config[:users]["foo"].should eq("bar")
|
12
|
-
end
|
13
|
-
|
14
|
-
it "can remove a user from the hash."
|
15
|
-
it "can find the token from the name" do
|
16
|
-
Pushover::User.add "bar", "foo"
|
17
|
-
Pushover::User.find("foo").should eq("bar")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
|