argosnap 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +58 -0
- data/Rakefile +12 -0
- data/argosnap.gemspec +23 -0
- data/bin/argosnap +67 -0
- data/files/local.sh +15 -0
- data/lib/argosnap/balance.rb +39 -0
- data/lib/argosnap/install.rb +22 -0
- data/lib/argosnap/osxnotify.rb +53 -0
- data/lib/argosnap/version.rb +3 -0
- data/lib/argosnap.rb +10 -0
- data/test/lib/argosnap/options_test.rb +7 -0
- data/test/lib/argosnap/version_test.rb +7 -0
- data/test/test_helper.rb +3 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 58c0e9370c15fdbea9a88293750f435b115c448d
|
4
|
+
data.tar.gz: ebf0309dbbe124b0aa99ec8e283331f4dfafaba5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 44019bb49bb27233a27157488c3e2d159b5b20bd381f3121f024c8446283e82965fe11d72c3e171a1d766e52c89b5ec34587307e7f7a7e06172112bc98d794da
|
7
|
+
data.tar.gz: 43ea9a9b559d741d336c1fa91ac65be6b74c1b48b37ece810cb5b293e82df1b8b96749b69597b4adf012fe0f6127dffc42f3897e57cab7a5e567ed34ebed81cc
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Panagiotis Atmatzidis
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Argosnap
|
2
|
+
|
3
|
+
This gem allows you to displays your current amount of picodollars along with [OSX notifications](http://support.apple.com/kb/ht5362) when your [tarsnap account](http://www.tarsnap.com/) falls bellow a predefined threshold of [picodollars](http://www.tarsnap.com/picoUSD-why.html).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install the gem via rubygems:
|
8
|
+
|
9
|
+
$ gem install argosnap plist mechanize terminal-notifier
|
10
|
+
|
11
|
+
## Configure
|
12
|
+
|
13
|
+
Run `install` for the script to create the configuration file like:
|
14
|
+
|
15
|
+
$ argosnap -i config
|
16
|
+
|
17
|
+
Then we configure the `config.yml` file which looks like this:
|
18
|
+
|
19
|
+
---
|
20
|
+
:email: sample@email.com
|
21
|
+
:password: p4sw0rd3
|
22
|
+
:threshold: 10
|
23
|
+
:seconds: 7200
|
24
|
+
|
25
|
+
Just put your tarsnap login credentials. You can omit the other two variables if you are not using an OSX system. To view your account use the command:
|
26
|
+
|
27
|
+
$ argosnap -p
|
28
|
+
|
29
|
+
|
30
|
+
## Configure Launchd under MacOSX
|
31
|
+
|
32
|
+
In the `config.yml` adjust the `threshold` and `seconds` options as you see fit. Threshold is the amount of *picodollars* bellow which you'd like to start seeing notifications and the `seconds` consists of the time window. Then type:
|
33
|
+
|
34
|
+
$ argosnap -i cron
|
35
|
+
|
36
|
+
Now just start the installed `.plist` file and you're done.
|
37
|
+
|
38
|
+
## Options
|
39
|
+
|
40
|
+
To run an osx notification use the command:
|
41
|
+
|
42
|
+
$ argosnap -p osx
|
43
|
+
Current balance (picodollars): 4.8812
|
44
|
+
|
45
|
+
To get the amount of picodollars as an integer type:
|
46
|
+
|
47
|
+
$ argosnap -p clean
|
48
|
+
4.8812
|
49
|
+
|
50
|
+
That's all :-)
|
51
|
+
|
52
|
+
## Contributing
|
53
|
+
|
54
|
+
1. Fork it ( http://github.com/atmosx/argosnap/fork )
|
55
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
56
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
57
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
58
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/argosnap.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'argosnap/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "argosnap"
|
8
|
+
spec.version = Argosnap::VERSION
|
9
|
+
spec.authors = ["Panagiotis Atmatzidis"]
|
10
|
+
spec.email = ["atma@convalesco.org"]
|
11
|
+
spec.summary = %q{Display osx notifications when tarsnap account runs out of picodollars}
|
12
|
+
spec.description = %q{A ruby script displays OSX notifications with current ballance. If the balance of picodollars falls bellow a specific threshold}
|
13
|
+
spec.homepage = "https://github.com/atmosx/argosnap"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
data/bin/argosnap
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative File.expand_path('../../lib/argosnap', __FILE__)
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
options = {}
|
6
|
+
|
7
|
+
opt_parser = OptionParser.new do |opt|
|
8
|
+
opt.banner = "argosnap #{Argosnap::VERSION} ( https://github.com/atmosx/argosnap/ )\nUsage: argosnap [OPTIONS]"
|
9
|
+
opt.separator ""
|
10
|
+
opt.separator " version: dislay version"
|
11
|
+
opt.separator " install [config]: installs configure file 'config.yml'"
|
12
|
+
opt.separator " install [cron]: installs Launchd script under OSX"
|
13
|
+
opt.separator " print: prints the output in picodollars"
|
14
|
+
opt.separator " print [osx]: print osx notification"
|
15
|
+
opt.separator " print [clean]: prints only the picollars (float rounded in 4 decimals), to use in cli"
|
16
|
+
opt.separator ""
|
17
|
+
|
18
|
+
opt.on("-v","--version","display version") do |version|
|
19
|
+
options[:version] = version
|
20
|
+
end
|
21
|
+
|
22
|
+
opt.on("-i","--install [OPTION]", "install configuration files") do |install|
|
23
|
+
options[:install] = install || 'config'
|
24
|
+
end
|
25
|
+
|
26
|
+
opt.on("-p","--print [OPTION]","fetch current amount in picodollars") do |print|
|
27
|
+
options[:print] = print || 'default'
|
28
|
+
end
|
29
|
+
|
30
|
+
opt.on("-h","--help","help") do |h|
|
31
|
+
options[:help] = h
|
32
|
+
puts opt_parser
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Execution flow
|
37
|
+
begin
|
38
|
+
opt_parser.parse!
|
39
|
+
if options[:version]
|
40
|
+
puts Argosnap::VERSION
|
41
|
+
elsif options[:install]
|
42
|
+
if options[:install] == 'config'
|
43
|
+
Argosnap::Install.new.config
|
44
|
+
elsif options[:install] == 'cron'
|
45
|
+
Argosnap::OSXNotifications.new.install_launchd_script
|
46
|
+
end
|
47
|
+
elsif options[:help]
|
48
|
+
# do nothing - avoids double printing of 'opt_parser'
|
49
|
+
elsif options[:print]
|
50
|
+
if options[:print] == 'osx'
|
51
|
+
Argosnap::OSXNotifications.new.display
|
52
|
+
elsif options[:print] == 'default'
|
53
|
+
b = Argosnap::Fetch.new.balance
|
54
|
+
puts "Current balance (picodollars): #{b}"
|
55
|
+
elsif options[:print] == 'clean'
|
56
|
+
b = Argosnap::Fetch.new.balance
|
57
|
+
puts b
|
58
|
+
else
|
59
|
+
puts "Option not recognized"
|
60
|
+
end
|
61
|
+
else
|
62
|
+
puts opt_parser
|
63
|
+
end
|
64
|
+
rescue OptionParser::InvalidOption => e
|
65
|
+
puts "No such option! Type 'argosnap -h' for help!"
|
66
|
+
exit
|
67
|
+
end
|
data/files/local.sh
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# Load RVM into a shell session *as a function*
|
4
|
+
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
|
5
|
+
# First try to load from a user install
|
6
|
+
source "$HOME/.rvm/scripts/rvm"
|
7
|
+
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
|
8
|
+
# Then try to load from a root install
|
9
|
+
source "/usr/local/rvm/scripts/rvm"
|
10
|
+
else
|
11
|
+
printf "ERROR: An RVM installation was not found.\n"
|
12
|
+
fi
|
13
|
+
|
14
|
+
# Executable now should be in path
|
15
|
+
argosnap -p osx
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'mechanize'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module Argosnap
|
6
|
+
# Given a username and a password, fetch balance from http://www.tarsnap.com
|
7
|
+
class Fetch
|
8
|
+
def initialize
|
9
|
+
begin
|
10
|
+
user = ENV['USER']
|
11
|
+
raise ArgumentError.new("Please make sure you run 'asnap install' in order to install configuration files, before running asnap!") unless File.exists?("#{Dir.home}/.argosnap/config.yml")
|
12
|
+
r = YAML::load_file("#{Dir.home}/.argosnap/config.yml")
|
13
|
+
logfile = "#{Dir.home}/.argosnap/argosnap.log"
|
14
|
+
@email, @password, @threshold, @logger, @agent = r[:email], r[:password], r[:threshold], Logger.new(logfile), Mechanize.new
|
15
|
+
rescue ArgumentError => e
|
16
|
+
puts e.message
|
17
|
+
# puts e.backtrace
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Fetch balance from tarsnap using mechanize
|
23
|
+
def balance
|
24
|
+
begin
|
25
|
+
page = @agent.get('https://www.tarsnap.com/account.html')
|
26
|
+
form = page.form_with(:action => 'https://www.tarsnap.com/manage.cgi')
|
27
|
+
form.address = @email
|
28
|
+
form.password = @password
|
29
|
+
panel = @agent.submit(form)
|
30
|
+
picodollars = panel.parser.to_s.scan(/\$\d+\.\d+/)[0].scan(/\d+\.\d+/)[0].to_f.round(4) # I'm the feeling that this can be done in a prettier way
|
31
|
+
@logger.info "Execution ended successfully! Picodollars: #{picodollars}"
|
32
|
+
picodollars
|
33
|
+
rescue Exception => e
|
34
|
+
@logger.error "A problem with tarsnap notification occured:"
|
35
|
+
@logger.error "#{e}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'yaml'
|
3
|
+
require 'plist'
|
4
|
+
|
5
|
+
module Argosnap
|
6
|
+
class Install
|
7
|
+
# Install 'config.yml'
|
8
|
+
def config
|
9
|
+
url = 'http://atmosx.github.com/argosnap'
|
10
|
+
raise ArgumentError.new("This gem is made for UNIX! Please check the website for details #{url} !") unless %w{ darwin linux freebsd openbsd netbsd }.include? Gem::Platform.local.os
|
11
|
+
begin
|
12
|
+
Dir.mkdir(File.join(Dir.home, ".argosnap"), 0700) unless Dir.exists?("/Users/#{ENV['USER']}/.argosnap")# permissions are a-rwx,u+rwx
|
13
|
+
config = {email: 'tarsnap_email', password: 'tarsnap_password', threshold: 10, seconds: 7200}
|
14
|
+
File.open("#{Dir.home}/.argosnap/config.yml", "w") {|f| f.write(config.to_yaml)}
|
15
|
+
puts "1. Edit the configuration file: #{Dir.home}/.argosnap/config.yml"
|
16
|
+
puts "2. Launch argosnap by typing in the terminal: argosnap -p"
|
17
|
+
rescue Exception => e
|
18
|
+
puts e.message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'terminal-notifier'
|
2
|
+
require_relative File.expand_path('../balance', __FILE__)
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Argosnap
|
6
|
+
class OSXNotifications
|
7
|
+
def initialize
|
8
|
+
begin
|
9
|
+
user = ENV['USER']
|
10
|
+
raise ArgumentError.new("This command is made for Darwin! Please check the website for details #{url} !") unless Gem::Platform.local.os == 'darwin'
|
11
|
+
r = YAML::load_file("#{Dir.home}/.argosnap/config.yml")
|
12
|
+
logfile = "#{Dir.home}/.argosnap/argosnap.log"
|
13
|
+
@threshold, @logger, @picodollars, @time_interval = r[:threshold], Logger.new(logfile), Argosnap::Fetch.new.balance, r[:seconds]
|
14
|
+
rescue ArgumentError => e
|
15
|
+
puts e.message
|
16
|
+
# puts e.backtrace
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Creates launchd script with user's variables
|
22
|
+
def install_launchd_script
|
23
|
+
raise ArgumentError.new("Please make sure you run 'asnap install' in order to install configuration files, before running asnap!") unless File.exists?("#{Dir.home}/.argosnap/config.yml")
|
24
|
+
user = ENV['USER']
|
25
|
+
c = "#{Dir.home}/.argosnap/config.yml"
|
26
|
+
begin
|
27
|
+
launch_agents = "/Users/#{user}/Library/LaunchAgents/"
|
28
|
+
# start_script loads the RVM environment.
|
29
|
+
start_script = File.expand_path('../../../files/local.sh', __FILE__)
|
30
|
+
if Dir.exists?(launch_agents)
|
31
|
+
filename = "org.#{user}.argosnap.plist"
|
32
|
+
if File.exist?("#{launch_agents}#{filename}")
|
33
|
+
puts "Please delete file: #{launch_agents}#{filename} before proceeding!"
|
34
|
+
else
|
35
|
+
hash = {"Label"=>"#{filename.scan(/(.+)(?:\.[^.]+)/).flatten[0]}", "ProgramArguments"=>["#{start_script}"], "StartInterval"=> @time_interval, "RunAtLoad"=>true}
|
36
|
+
File.open("#{launch_agents}#{filename}", 'w') {|f| f.write(hash.to_plist)}
|
37
|
+
puts "Launchd script is installed. Type 'launchctl load -w #{launch_agents}#{filename}' to load the plist."
|
38
|
+
end
|
39
|
+
else
|
40
|
+
puts "No '#{launch_agents}' directory found! Aborting installation."
|
41
|
+
end
|
42
|
+
rescue Exception => e
|
43
|
+
puts e.message
|
44
|
+
# puts e.backtrace
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Display notifications
|
49
|
+
def display
|
50
|
+
TerminalNotifier.notify("Current balance: #{@picodollars}", :title => 'TarSnap', :subtitle => 'balance running out') if @picodollars < @threshold.to_i
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/argosnap.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# argosnap module
|
2
|
+
|
3
|
+
require_relative File.expand_path("../argosnap/version", __FILE__)
|
4
|
+
require_relative File.expand_path("../argosnap/install", __FILE__)
|
5
|
+
require_relative File.expand_path("../argosnap/balance", __FILE__)
|
6
|
+
require_relative File.expand_path("../argosnap/osxnotify", __FILE__)
|
7
|
+
# require 'argosnap/install'
|
8
|
+
# require 'argosnap/balance'
|
9
|
+
# require 'argosnap/version'
|
10
|
+
# require 'argosnap/osxnotify'
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: argosnap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Panagiotis Atmatzidis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
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'
|
41
|
+
description: A ruby script displays OSX notifications with current ballance. If the
|
42
|
+
balance of picodollars falls bellow a specific threshold
|
43
|
+
email:
|
44
|
+
- atma@convalesco.org
|
45
|
+
executables:
|
46
|
+
- argosnap
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- ".gitignore"
|
51
|
+
- Gemfile
|
52
|
+
- LICENSE.txt
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- argosnap.gemspec
|
56
|
+
- bin/argosnap
|
57
|
+
- files/local.sh
|
58
|
+
- lib/argosnap.rb
|
59
|
+
- lib/argosnap/balance.rb
|
60
|
+
- lib/argosnap/install.rb
|
61
|
+
- lib/argosnap/osxnotify.rb
|
62
|
+
- lib/argosnap/version.rb
|
63
|
+
- test/lib/argosnap/options_test.rb
|
64
|
+
- test/lib/argosnap/version_test.rb
|
65
|
+
- test/test_helper.rb
|
66
|
+
homepage: https://github.com/atmosx/argosnap
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.1.10
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Display osx notifications when tarsnap account runs out of picodollars
|
90
|
+
test_files:
|
91
|
+
- test/lib/argosnap/options_test.rb
|
92
|
+
- test/lib/argosnap/version_test.rb
|
93
|
+
- test/test_helper.rb
|