pushes 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +28 -2
- data/Rakefile +8 -0
- data/bin/pushes +1 -1
- data/files/ca.heliom.pushes.plist.erb +26 -0
- data/lib/pushes/config.rb +19 -6
- data/lib/pushes/launch_agent.rb +23 -0
- data/lib/pushes/notifier.rb +7 -0
- data/lib/pushes/version.rb +1 -1
- data/lib/pushes.rb +75 -5
- data/pushes.gemspec +3 -0
- metadata +33 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6a4ad6c54d208aa4a8acbb4546d56b585ea5310
|
4
|
+
data.tar.gz: 44082e52668200352b289e08228279dde0ba391b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6e188fe64d70b2bc9618391f3ba6ddf28a35a5a836e9dc1fd073962b0c9127b472d08959512ba581c223fcb08082f68e261dad83588b6c9a5d94e597491bb36
|
7
|
+
data.tar.gz: 4d95aafb9d9ac674cf07a3b34f2ff2b03e5a80197a1a491d71601e84b70cbf115d231d026e5a8a15434831436d4db7264a040a58997693bb23b1e51299c702e9
|
data/README.md
CHANGED
@@ -1,7 +1,33 @@
|
|
1
1
|
# Pushes
|
2
2
|
GitHub post-commit notifs in your OS X Notification Center
|
3
3
|
|
4
|
-
##
|
4
|
+
## Installation
|
5
5
|
```
|
6
|
-
|
6
|
+
gem install pushes
|
7
7
|
```
|
8
|
+
|
9
|
+
## Commands
|
10
|
+
### Fetch (Default)
|
11
|
+
Single call to GitHub API.
|
12
|
+
```sh
|
13
|
+
$ pushes
|
14
|
+
$ pushes fetch
|
15
|
+
```
|
16
|
+
|
17
|
+
### Start
|
18
|
+
Start a LaunchAgent background process.<br>
|
19
|
+
Will `fetch` every `INTERVAL` seconds and will start at load.
|
20
|
+
```sh
|
21
|
+
$ pushes start
|
22
|
+
$ pushes start 30
|
23
|
+
$ pushes start INTERVAL
|
24
|
+
```
|
25
|
+
|
26
|
+
### Stop
|
27
|
+
Stop the background process and delete the LaunchAgent file.
|
28
|
+
```sh
|
29
|
+
$ pushes stop
|
30
|
+
```
|
31
|
+
|
32
|
+
## License
|
33
|
+
Copyright © 2012 Heliom. See [LICENSE](/LICENSE.md) for details.
|
data/Rakefile
CHANGED
data/bin/pushes
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>Label</key>
|
6
|
+
<string>ca.heliom.pushes</string>
|
7
|
+
<key>WorkingDirectory</key>
|
8
|
+
<string><%= ENV['HOME'] %></string>
|
9
|
+
<key>ProgramArguments</key>
|
10
|
+
<array>
|
11
|
+
<string><%= `which -a pushes`.strip.split("\n").last %></string>
|
12
|
+
</array>
|
13
|
+
<key>StartInterval</key>
|
14
|
+
<integer><%= start_interval %></integer>
|
15
|
+
<key>RunAtLoad</key>
|
16
|
+
<true/>
|
17
|
+
<key>KeepAlive</key>
|
18
|
+
<false/>
|
19
|
+
<key>StandardOutPath</key>
|
20
|
+
<string><%= ENV['HOME'] %>/.pushes/out.log</string>
|
21
|
+
<key>StandardErrorPath</key>
|
22
|
+
<string><%= ENV['HOME'] %>/.pushes/errors.log</string>
|
23
|
+
<key>Debug</key>
|
24
|
+
<true/>
|
25
|
+
</dict>
|
26
|
+
</plist>
|
data/lib/pushes/config.rb
CHANGED
@@ -2,8 +2,9 @@ require 'json'
|
|
2
2
|
require 'highline/import'
|
3
3
|
|
4
4
|
class Pushes::Config
|
5
|
-
|
6
|
-
|
5
|
+
PUSHES_FOLDER = File.join(ENV['HOME'], '.pushes')
|
6
|
+
STORAGE_FILE = File.join(PUSHES_FOLDER, 'storage')
|
7
|
+
CONFIG_FILE = File.join(PUSHES_FOLDER, 'login')
|
7
8
|
|
8
9
|
def initialize
|
9
10
|
configs = File.read(CONFIG_FILE) rescue create_config_file
|
@@ -17,13 +18,13 @@ class Pushes::Config
|
|
17
18
|
|
18
19
|
def create_config_file
|
19
20
|
github_config = {}
|
20
|
-
github_config[:login] = ask
|
21
|
-
|
22
|
-
github_config[:token] = JSON.parse(authorizations)['token']
|
21
|
+
github_config[:login] = ask('What is your GitHub username? ')
|
22
|
+
github_config[:token] = get_github_token(github_config[:login])
|
23
23
|
|
24
24
|
raise StandardError, 'You most likely typed an incorrect username or password, please try again.' unless github_config[:token]
|
25
|
+
mkdir_pushes
|
25
26
|
|
26
|
-
content = github_config.each_pair.map { |k, v| "#{k.upcase}=#{v}" }.join("\n")
|
27
|
+
content = github_config.each_pair.map { |k, v| "#{k.upcase}=#{v}" }.join("\n") + "\n"
|
27
28
|
File.open(CONFIG_FILE, 'w') do |file|
|
28
29
|
file.write(content)
|
29
30
|
end
|
@@ -31,6 +32,11 @@ class Pushes::Config
|
|
31
32
|
content
|
32
33
|
end
|
33
34
|
|
35
|
+
def mkdir_pushes
|
36
|
+
return if File.directory?(PUSHES_FOLDER)
|
37
|
+
FileUtils.mkdir(PUSHES_FOLDER)
|
38
|
+
end
|
39
|
+
|
34
40
|
def initiated?
|
35
41
|
File.exist? STORAGE_FILE
|
36
42
|
end
|
@@ -48,4 +54,11 @@ class Pushes::Config
|
|
48
54
|
def storage
|
49
55
|
File.read(STORAGE_FILE).split("\n")
|
50
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def get_github_token(github_login)
|
61
|
+
authorizations = `curl -u '#{github_login}' -d '{"scopes":["repo"],"note":"Pushes"}' https://api.github.com/authorizations`
|
62
|
+
JSON.parse(authorizations)['token']
|
63
|
+
end
|
51
64
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Pushes::LaunchAgent
|
2
|
+
PLIST_NAME = 'ca.heliom.pushes.plist'
|
3
|
+
DESTINATION = File.join(ENV['HOME'], 'Library', 'LaunchAgents')
|
4
|
+
PLIST_PATH = File.join(DESTINATION, PLIST_NAME)
|
5
|
+
TEMPLATE_PATH = File.join('../../..', 'files', "#{PLIST_NAME}.erb")
|
6
|
+
|
7
|
+
def start(start_interval)
|
8
|
+
template_file = File.expand_path(TEMPLATE_PATH, __FILE__)
|
9
|
+
template_content = File.read(template_file)
|
10
|
+
plist_content = ERB.new(template_content).result(binding)
|
11
|
+
|
12
|
+
File.open(PLIST_PATH, 'w+') do |f|
|
13
|
+
f.write(plist_content)
|
14
|
+
end
|
15
|
+
|
16
|
+
`launchctl load #{PLIST_PATH}`
|
17
|
+
end
|
18
|
+
|
19
|
+
def stop
|
20
|
+
`launchctl unload #{PLIST_PATH}`
|
21
|
+
FileUtils.rm(PLIST_PATH)
|
22
|
+
end
|
23
|
+
end
|
data/lib/pushes/version.rb
CHANGED
data/lib/pushes.rb
CHANGED
@@ -1,14 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'octokit'
|
2
|
-
require 'terminal-notifier'
|
3
3
|
|
4
|
-
require 'pushes/config'
|
5
4
|
require 'pushes/version'
|
5
|
+
require 'pushes/config'
|
6
|
+
require 'pushes/notifier'
|
7
|
+
require 'pushes/launch_agent'
|
6
8
|
|
7
9
|
module Pushes
|
10
|
+
DEFAULT_COMMAND = 'fetch'
|
11
|
+
|
8
12
|
def self.run(argv)
|
13
|
+
command = argv.first || DEFAULT_COMMAND
|
14
|
+
args = argv - [command]
|
15
|
+
|
16
|
+
if %w(--help -h).include?(command)
|
17
|
+
display_help
|
18
|
+
return 1
|
19
|
+
end
|
20
|
+
|
21
|
+
begin
|
22
|
+
send("command_#{command}", args)
|
23
|
+
rescue ArgumentError
|
24
|
+
send("command_#{command}")
|
25
|
+
rescue NoMethodError
|
26
|
+
say "error: Unknown command '#{command}'"
|
27
|
+
end
|
28
|
+
|
29
|
+
1
|
30
|
+
end
|
31
|
+
|
32
|
+
# Commands
|
33
|
+
def self.command_fetch
|
9
34
|
if first_run?
|
10
35
|
config.initiate
|
11
36
|
store_push_events
|
37
|
+
notify_initiated
|
12
38
|
else
|
13
39
|
notify_push_events
|
14
40
|
store_push_events
|
@@ -16,16 +42,28 @@ module Pushes
|
|
16
42
|
rescue
|
17
43
|
end
|
18
44
|
|
45
|
+
def self.command_start(args)
|
46
|
+
interval = args.first.to_i
|
47
|
+
start_interval = interval > 0 ? interval : 10
|
48
|
+
|
49
|
+
launch_agent.start(start_interval)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.command_stop
|
53
|
+
launch_agent.stop
|
54
|
+
end
|
55
|
+
|
56
|
+
# Utilities
|
19
57
|
def self.first_run?
|
20
58
|
!config.initiated?
|
21
59
|
end
|
22
60
|
|
23
61
|
def self.push_events
|
24
|
-
@push_events ||= received_push_events
|
62
|
+
@push_events ||= received_push_events.map(&:id)
|
25
63
|
end
|
26
64
|
|
27
65
|
def self.store_push_events
|
28
|
-
@stored_push_events = push_events
|
66
|
+
@stored_push_events = push_events
|
29
67
|
config.store(@stored_push_events)
|
30
68
|
end
|
31
69
|
|
@@ -58,10 +96,22 @@ module Pushes
|
|
58
96
|
commits_text = "commit#{'s' if commits.size > 1}"
|
59
97
|
message = "#{user} pushed #{commits.size} #{commits_text} to #{branch}"
|
60
98
|
|
61
|
-
|
99
|
+
notifier.notify(message, title: title, open: url)
|
62
100
|
end
|
63
101
|
end
|
64
102
|
|
103
|
+
def self.notify_initiated
|
104
|
+
notifier.notify("You’re all set, just wait for new commits.\n~ Pushes", title: 'Ahoy Captain!')
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.launch_agent
|
108
|
+
@launch_agent ||= LaunchAgent.new
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.notifier
|
112
|
+
@notifier ||= Notifier.new
|
113
|
+
end
|
114
|
+
|
65
115
|
def self.config
|
66
116
|
@config ||= Config.new
|
67
117
|
end
|
@@ -69,4 +119,24 @@ module Pushes
|
|
69
119
|
def self.github
|
70
120
|
@github ||= Octokit::Client.new(login: config.login, oauth_token: config.token)
|
71
121
|
end
|
122
|
+
|
123
|
+
def self.display_help
|
124
|
+
say(help_message + "\n")
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.help_message
|
128
|
+
help = []
|
129
|
+
help << 'Usage:'
|
130
|
+
help << ' pushes COMMAND'
|
131
|
+
help << ''
|
132
|
+
help << 'Options:'
|
133
|
+
help << ' -h, --help - Display help'
|
134
|
+
help << ''
|
135
|
+
help << 'Commands:'
|
136
|
+
help << 'fetch - Fetch new commits from GitHub'
|
137
|
+
help << 'start [INTERVAL] - Start a LaunchAgent background process [INTERVAL in seconds. Default: 10]'
|
138
|
+
help << 'stop - Stop background process'
|
139
|
+
|
140
|
+
help.join("\n")
|
141
|
+
end
|
72
142
|
end
|
data/pushes.gemspec
CHANGED
@@ -14,6 +14,7 @@ spec = Gem::Specification.new do |s|
|
|
14
14
|
s.files = %w(LICENSE.md README.md Rakefile pushes.gemspec)
|
15
15
|
s.files += Dir.glob("lib/**/*.rb")
|
16
16
|
s.files += Dir.glob("bin/**/*")
|
17
|
+
s.files += Dir.glob("files/**/*")
|
17
18
|
|
18
19
|
s.bindir = 'bin'
|
19
20
|
s.executables << 'pushes'
|
@@ -22,4 +23,6 @@ spec = Gem::Specification.new do |s|
|
|
22
23
|
s.add_dependency('octokit', '~> 1.24.0')
|
23
24
|
s.add_dependency('terminal-notifier', '~> 1.4.2')
|
24
25
|
s.add_dependency('highline', '~> 1.6.16')
|
26
|
+
s.add_development_dependency('rake')
|
27
|
+
s.add_development_dependency('rspec', '~> 2.13.0')
|
25
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Blais-Masson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: octokit
|
@@ -53,6 +53,34 @@ dependencies:
|
|
53
53
|
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 1.6.16
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rake
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.13.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.13.0
|
56
84
|
description:
|
57
85
|
email: fellowship@heliom.ca
|
58
86
|
executables:
|
@@ -65,9 +93,12 @@ files:
|
|
65
93
|
- Rakefile
|
66
94
|
- pushes.gemspec
|
67
95
|
- lib/pushes/config.rb
|
96
|
+
- lib/pushes/launch_agent.rb
|
97
|
+
- lib/pushes/notifier.rb
|
68
98
|
- lib/pushes/version.rb
|
69
99
|
- lib/pushes.rb
|
70
100
|
- bin/pushes
|
101
|
+
- files/ca.heliom.pushes.plist.erb
|
71
102
|
homepage: https://github.com/heliom/pushes
|
72
103
|
licenses: []
|
73
104
|
metadata: {}
|