githubissueswatcher 0.0.11
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 +4 -0
- data/README.md +109 -0
- data/Rakefile +21 -0
- data/bin/githubissueswatcher +47 -0
- data/githubissueswatcher.gemspec +25 -0
- data/images/icon.png +0 -0
- data/lib/githubissueswatcher.rb +140 -0
- data/lib/githubissueswatcher/version.rb +3 -0
- data/pkg/githubissueswatcher-0.0.10.gem +0 -0
- data/pkg/githubissueswatcher-0.0.9.gem +0 -0
- data/test/api.yaml +7 -0
- data/test/config.yaml +7 -0
- data/test/db.yaml +1 -0
- data/test/repos.yaml +2 -0
- data/test/run_test.rb +29 -0
- data/test/test_helper.rb +69 -0
- metadata +125 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
## Github Issues Watcher
|
2
|
+
|
3
|
+
Github issues watcher is a simple and useful gem that help you to constantly monitor your issues for both public and private repos.
|
4
|
+
|
5
|
+
It is a fork of the excellent [githubwatcher](https://github.com/DAddYE/githubwatcher)
|
6
|
+
|
7
|
+
It uses [foreverb](https://github.com/DAddYE/foreverb) to demonize the process.
|
8
|
+
|
9
|
+
A [demonstration video is here](http://www.daddye.it/post/7275490125/github-growl)
|
10
|
+
|
11
|
+
## Prerequisites
|
12
|
+
|
13
|
+
You need to have **growlnotify** installed. To do that you can install it through official [site](http://growl.info) or
|
14
|
+
if you have the awesome [brew](https://github.com/mxcl/homebrew) simply with:
|
15
|
+
|
16
|
+
``` sh
|
17
|
+
$ brew install growlnotify
|
18
|
+
```
|
19
|
+
|
20
|
+
## Installation ##
|
21
|
+
|
22
|
+
You may need to manually stop the process and run ```githubissueswatcher start``` if you encounter errors.
|
23
|
+
|
24
|
+
``` sh
|
25
|
+
$ sudo gem install githubissueswatcher
|
26
|
+
$ githubissueswatcher start
|
27
|
+
$ githubissueswatcher config
|
28
|
+
$ githubissueswatcher repos
|
29
|
+
|
30
|
+
$ githubissueswatcher stop
|
31
|
+
```
|
32
|
+
|
33
|
+
## Configuration ##
|
34
|
+
|
35
|
+
|
36
|
+
You need to enter in your username and password for Github in ```~/.githubissueswatcher/config.yaml```
|
37
|
+
It's in plaintext so make sure this folder is secure.
|
38
|
+
|
39
|
+
You need to tell to our program which repositories you want to watch, to do that simply edit ```~/.githubissueswatcher/repos.yaml```
|
40
|
+
with your favorite editor.
|
41
|
+
|
42
|
+
Should look like this (if you have ran ```githubissueswatcher start```)
|
43
|
+
|
44
|
+
We provide a `config` command to easily edit it.
|
45
|
+
|
46
|
+
``` sh
|
47
|
+
$ githubissueswatcher config
|
48
|
+
```
|
49
|
+
|
50
|
+
It will open in texmate or vim this:
|
51
|
+
|
52
|
+
``` yaml
|
53
|
+
---
|
54
|
+
- daddye/foreverb/mentioned-assigned
|
55
|
+
- padrino/padrino-framework/all
|
56
|
+
```
|
57
|
+
The correct format is **username/repo/filters** where filters are separated by a '-'
|
58
|
+
Filters include *mentioned*,*assigned*,*created* and *all*.
|
59
|
+
Note: Issues where you are mentioned will be *sticky*
|
60
|
+
So if for example you want to watch issues in [sinatra](https://github.com/sinatra/sinatra) where you are mentioned or assigned, the result should look like:
|
61
|
+
|
62
|
+
``` yaml
|
63
|
+
---
|
64
|
+
- daddye/foreverb/mentioned-assigned
|
65
|
+
- padrino/padrino-framework/all
|
66
|
+
- sinatra/sinatra/mentioned-assigned
|
67
|
+
```
|
68
|
+
|
69
|
+
If you want to watch **all** issues of a repository of a given user you simply provide **/all** so will look like:
|
70
|
+
|
71
|
+
``` yaml
|
72
|
+
---
|
73
|
+
- daddye/foreverb/mentioned-assigned
|
74
|
+
- padrino/padrino-framework/all
|
75
|
+
- sinatra/sinatra/all
|
76
|
+
```
|
77
|
+
|
78
|
+
Restart the deamon
|
79
|
+
|
80
|
+
``` sh
|
81
|
+
$ githubissueswatcher restart
|
82
|
+
```
|
83
|
+
|
84
|
+
## Working with Ruby Forever
|
85
|
+
|
86
|
+
``` sh
|
87
|
+
$ foreverb list
|
88
|
+
PID RSS CPU CMD
|
89
|
+
12494 27132 0.2 Forever: /usr/bin/githubissueswatcher
|
90
|
+
|
91
|
+
$ foreverb stop github
|
92
|
+
Do you want really stop Forever: /usr/bin/githubissueswatcher with pid 12494? y
|
93
|
+
Killing process Forever: /usr/bin/githubissueswatcher with pid 12494...
|
94
|
+
```
|
95
|
+
|
96
|
+
Your are done!
|
97
|
+
|
98
|
+
## Hacks
|
99
|
+
|
100
|
+
In some env you use `sudo gem install`, so in this case the first time you launch the app use `sudo`,
|
101
|
+
in this way will be generated the `Gemfile.lock`, in future you will be able to run it without `sudo`.
|
102
|
+
|
103
|
+
## Author ##
|
104
|
+
|
105
|
+
Peter Gabbay (Artcentric)
|
106
|
+
|
107
|
+
Original Github Issues:
|
108
|
+
|
109
|
+
DAddYE, you can follow me on twitter [@daddye](http://twitter.com/daddye)
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems' unless defined?(Gem)
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
%w(install release).each do |task|
|
5
|
+
Rake::Task[task].enhance do
|
6
|
+
sh "rm -rf pkg"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Bump version on github"
|
11
|
+
task :bump do
|
12
|
+
puts "Nothing to commit (working directory clean)" and return if `git status -s`.strip == ""
|
13
|
+
if `git status -s`.strip == ""
|
14
|
+
puts "\e[31mNothing to commit (working directory clean)\e[0m"
|
15
|
+
else
|
16
|
+
version = Bundler.load_gemspec(Dir[File.expand_path('../*.gemspec', __FILE__)].first).version
|
17
|
+
sh "git add .; git commit -a -m \"Bump to version #{version}\""
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
task :release => :bump
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
|
3
|
+
|
4
|
+
require 'rubygems' unless defined?(Gem)
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'forever'
|
7
|
+
require 'githubissueswatcher'
|
8
|
+
|
9
|
+
while ARGV.size > 0
|
10
|
+
case arg = ARGV.shift
|
11
|
+
when "config"
|
12
|
+
editor = `which mate`.chomp! || `which vim`.chomp!
|
13
|
+
puts "Im unable to find an editor, open manually ~/.githubissueswatcher/config.yaml" and exit unless editor
|
14
|
+
system editor, File.expand_path('~/.githubissueswatcher/config.yaml') and exit
|
15
|
+
when "repos"
|
16
|
+
editor = `which mate`.chomp! || `which vim`.chomp!
|
17
|
+
puts "Im unable to find an editor, open manually ~/.githubissueswatcher/repos.yaml" and exit unless editor
|
18
|
+
system editor, File.expand_path('~/.githubissueswatcher/repos.yaml') and exit
|
19
|
+
when "reset"
|
20
|
+
system "rm -rf ~/.githubissueswatcher"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Forever.run do
|
25
|
+
# Our working directory, here we store pids/logs and obviously our list of repo to watch
|
26
|
+
dir File.expand_path('~/.githubissueswatcher')
|
27
|
+
|
28
|
+
on_error do |e|
|
29
|
+
unless (@_errors ||= []).include?(e.message)
|
30
|
+
Githubissueswatcher.notify("Error!", e.message, false)
|
31
|
+
@_errors << e.message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
on_ready do
|
36
|
+
Githubissueswatcher.setup
|
37
|
+
Githubissueswatcher.notify("GitHub Issues Watcher", "was started...", false)
|
38
|
+
end
|
39
|
+
|
40
|
+
on_exit do
|
41
|
+
Githubissueswatcher.notify("GitHub Issues Watcher", "was stopped...", false)
|
42
|
+
end
|
43
|
+
|
44
|
+
every 30.seconds do
|
45
|
+
Githubissueswatcher.run
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*- #
|
2
|
+
|
3
|
+
|
4
|
+
$:.push File.expand_path("../lib", __FILE__)
|
5
|
+
require "githubissueswatcher/version"
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "githubissueswatcher"
|
9
|
+
s.version = Githubissueswatcher::VERSION
|
10
|
+
s.authors = ["Peter Gabbay", "Davide D'Agostino"]
|
11
|
+
s.email = ["peter@check2.com"]
|
12
|
+
s.homepage = "https://github.com/Artcentric/githubissueswatcher"
|
13
|
+
s.summary = "Github Issues Growl Watcher, watch any project issues and receive growl notification"
|
14
|
+
s.description = "Github Issues Growl Watcher, watch any project issues and receive growl notification based on whether you are mentioned, assigned or the creator."
|
15
|
+
|
16
|
+
s.rubyforge_project = "githubissueswatcher"
|
17
|
+
|
18
|
+
s.files = Dir["**/*"].reject { |f| File.directory?(f) || f == "Gemfile.lock" }
|
19
|
+
s.test_files = []
|
20
|
+
s.executables = %w[githubissueswatcher]
|
21
|
+
s.require_paths = %w[lib]
|
22
|
+
s.add_dependency 'httparty', '~>0.7.8'
|
23
|
+
s.add_dependency 'growl', '~>1.0.3'
|
24
|
+
s.add_dependency 'foreverb', '~>0.2.6'
|
25
|
+
end
|
data/images/icon.png
ADDED
Binary file
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'yaml' unless defined?(YAML)
|
2
|
+
require_relative "githubissueswatcher/version"
|
3
|
+
require "httparty"
|
4
|
+
require "growl"
|
5
|
+
|
6
|
+
YAML::ENGINE.yamler = "syck" if defined?(YAML::ENGINE)
|
7
|
+
|
8
|
+
module Githubissueswatcher
|
9
|
+
extend self
|
10
|
+
include HTTParty
|
11
|
+
|
12
|
+
CONFIG = File.expand_path("~/.githubissueswatcher/config.yaml")
|
13
|
+
WATCH = File.expand_path("~/.githubissueswatcher/repos.yaml")
|
14
|
+
DB = File.expand_path("~/.githubissueswatcher/db.yaml")
|
15
|
+
|
16
|
+
format :json
|
17
|
+
|
18
|
+
def setup
|
19
|
+
raise "You need to install growlnotify, use brew install growlnotify or install it from growl.info site" unless Growl.installed?
|
20
|
+
puts "Starting GitHub Issues Watcher..."
|
21
|
+
warn "If timeout occurs, your credentials may be wrong."
|
22
|
+
|
23
|
+
unless File.exist?(CONFIG)
|
24
|
+
Dir.mkdir(File.dirname(CONFIG)) unless File.exist?(File.dirname(CONFIG))
|
25
|
+
File.open(CONFIG, "w") { |f| f.write \
|
26
|
+
YAML.load("
|
27
|
+
api:
|
28
|
+
url: 'https://api.github.com'
|
29
|
+
version: 'v3'
|
30
|
+
user:
|
31
|
+
username:
|
32
|
+
password:
|
33
|
+
").to_yaml }
|
34
|
+
end
|
35
|
+
|
36
|
+
unless File.exist?(WATCH)
|
37
|
+
warn "Add the repositories you're willing to monitor editing: ~/.githubissueswatcher/repos.yaml"
|
38
|
+
Dir.mkdir(File.dirname(WATCH)) unless File.exist?(File.dirname(WATCH))
|
39
|
+
File.open(WATCH, "w") { |f| f.write ["daddye/foreverb/mentioned-assigned", "padrino/padrino-framework/all"].to_yaml }
|
40
|
+
end
|
41
|
+
|
42
|
+
unless File.exist?(DB)
|
43
|
+
Dir.mkdir(File.dirname(DB)) unless File.exist?(File.dirname(DB))
|
44
|
+
File.open(DB, "w") { |f| f.write (Time.now - 86400).to_yaml }
|
45
|
+
end
|
46
|
+
|
47
|
+
@_watch = YAML.load_file(WATCH)
|
48
|
+
@_config = YAML.load_file(CONFIG)
|
49
|
+
@base_uri, @api_version = @_config['api']['url'], @_config['api']['version']
|
50
|
+
@username, @password = @_config['user']['username'], @_config['user']['password']
|
51
|
+
raise "Oops. You forgot your username/password in ~/.githubissueswatcher/config.yaml" if @username.nil? || @password.nil?
|
52
|
+
|
53
|
+
@_db = DB # To accomodate testing
|
54
|
+
|
55
|
+
base_uri @base_uri
|
56
|
+
basic_auth @username, @password
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def start!
|
61
|
+
time_since = time_since_last_run
|
62
|
+
time_started = Time.now
|
63
|
+
Dir.mkdir(File.dirname(db)) unless File.exist?(File.dirname(db))
|
64
|
+
File.open(db, "w"){ |f| f.write time_started.to_yaml }
|
65
|
+
|
66
|
+
issues_reported = []
|
67
|
+
|
68
|
+
watch.each do |value|
|
69
|
+
key, value, filtered = *value.split("/")
|
70
|
+
filtered = filtered.split("-")
|
71
|
+
|
72
|
+
if filtered.include?("mentioned")
|
73
|
+
m = get_mentioned_issues(key,value,time_since)
|
74
|
+
m.each do |issue|
|
75
|
+
issues_reported << issue["number"]
|
76
|
+
notify("Mentioned Issue - #{value}", issue["title"], true)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
a = get_all_issues(key,value,time_since)
|
81
|
+
a.each do |issue|
|
82
|
+
next if issues_reported.include?(issue["number"])
|
83
|
+
issues_reported << issue["number"]
|
84
|
+
if filtered.include?("assigned") && issue["assignee"] && issue["assignee"]["login"].downcase == config["user"]["username"].downcase
|
85
|
+
notify("Assigned Issue", issue["title"])
|
86
|
+
next
|
87
|
+
end
|
88
|
+
|
89
|
+
if filtered.include?("created") && issue["user"]["login"].downcase == config["user"]["username"].downcase
|
90
|
+
notify("Created Issue", issue["title"])
|
91
|
+
next
|
92
|
+
end
|
93
|
+
|
94
|
+
if filtered.include?("all")
|
95
|
+
notify("Issue", issue["title"])
|
96
|
+
next
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
alias :run :start!
|
103
|
+
|
104
|
+
def time_since_last_run
|
105
|
+
File.exist?(db) ? YAML.load_file(db) : Time.now
|
106
|
+
end
|
107
|
+
|
108
|
+
def watch
|
109
|
+
@_watch ||= []
|
110
|
+
end
|
111
|
+
|
112
|
+
def config
|
113
|
+
@_config
|
114
|
+
end
|
115
|
+
|
116
|
+
def db
|
117
|
+
@_db
|
118
|
+
end
|
119
|
+
|
120
|
+
def notify(title, text, sticky=false)
|
121
|
+
Growl.notify(text, :title => title, :icon => File.expand_path("../../images/icon.png", __FILE__), :sticky => sticky)
|
122
|
+
puts "=> #{title}: #{text}"
|
123
|
+
end
|
124
|
+
|
125
|
+
def get_mentioned_issues(username, repo, since_time)
|
126
|
+
giw_get "/repos/#{username}/#{repo}/issues?mentioned=artcentric&since=#{since_time.round.iso8601}"
|
127
|
+
end
|
128
|
+
|
129
|
+
def get_all_issues(username, repo, since_time)
|
130
|
+
giw_get "/repos/#{username}/#{repo}/issues?since=#{since_time.round.iso8601}"
|
131
|
+
end
|
132
|
+
|
133
|
+
def giw_get(url)
|
134
|
+
response = get(url)
|
135
|
+
puts response
|
136
|
+
raise "Bad credentials. Check your username/password in ~/.githubissueswatcher/config.yaml" if response.is_a?(Hash) && response["message"] == "Bad credentials"
|
137
|
+
raise "Repo not found at #{url}. Check your repo in ~/.githubissueswatcher/repos.yaml. Also, you may not have proper credentials. Check config.yaml." if response.is_a?(Hash) && response["message"] == "Not Found"
|
138
|
+
return response
|
139
|
+
end
|
140
|
+
end
|
Binary file
|
Binary file
|
data/test/api.yaml
ADDED
data/test/config.yaml
ADDED
data/test/db.yaml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--- 2011-10-10 23:39:49.804623 -07:00
|
data/test/repos.yaml
ADDED
data/test/run_test.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class RunTest < MiniTest::Unit::TestCase
|
4
|
+
include TestHelper
|
5
|
+
include HTTParty
|
6
|
+
|
7
|
+
def setup
|
8
|
+
puts "Starting Test"
|
9
|
+
|
10
|
+
# File.delete(Githubissueswatcher::CONFIG_TEST) if File.exists?(Githubissueswatcher::CONFIG_TEST)
|
11
|
+
# File.delete(Githubissueswatcher::WATCH_TEST) if File.exists?(Githubissueswatcher::WATCH_TEST)
|
12
|
+
File.delete(Githubissueswatcher::DB_TEST) if File.exists?(Githubissueswatcher::DB_TEST)
|
13
|
+
|
14
|
+
Githubissueswatcher.setup
|
15
|
+
|
16
|
+
@_watch = YAML.load_file(Githubissueswatcher::WATCH_TEST)
|
17
|
+
@_repos = YAML.load_file(Githubissueswatcher::DB_TEST) if File.exist?(Githubissueswatcher::DB_TEST)
|
18
|
+
@base_uri, @api_version = YAML.load_file(Githubissueswatcher::CONFIG_TEST)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
def test_run_tester
|
25
|
+
Githubissueswatcher.start!
|
26
|
+
assert_equal true,true
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rubygems' unless defined?(Gem)
|
2
|
+
require_relative '../lib/githubissueswatcher'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
5
|
+
module TestHelper
|
6
|
+
|
7
|
+
def setup_files(api,watch)
|
8
|
+
|
9
|
+
Dir.mkdir(File.dirname(api)) unless File.exist?(File.dirname(watch))
|
10
|
+
File.open(api, "w") { |f| f.write ["https://api.github.com", "v3"].to_yaml }
|
11
|
+
|
12
|
+
Dir.mkdir(File.dirname(watch)) unless File.exist?(File.dirname(watch))
|
13
|
+
File.open(watch, "w") { |f| f.write ["daddye/all", "padrino/all"].to_yaml }
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
module Githubissueswatcher
|
20
|
+
|
21
|
+
this_dir = File.dirname(__FILE__)
|
22
|
+
puts this_dir
|
23
|
+
|
24
|
+
CONFIG_TEST = File.expand_path("#{this_dir}/config.yaml")
|
25
|
+
WATCH_TEST = File.expand_path("#{this_dir}/repos.yaml")
|
26
|
+
DB_TEST = File.expand_path("#{this_dir}/db.yaml")
|
27
|
+
|
28
|
+
def self.setup
|
29
|
+
|
30
|
+
warn "If timeout occurs, your credentials may be wrong."
|
31
|
+
|
32
|
+
unless File.exist?(CONFIG_TEST)
|
33
|
+
Dir.mkdir(File.dirname(CONFIG_TEST)) unless File.exist?(File.dirname(CONFIG_TEST))
|
34
|
+
File.open(CONFIG_TEST, "w") { |f| f.write \
|
35
|
+
YAML.load("
|
36
|
+
api:
|
37
|
+
url: 'https://api.github.com'
|
38
|
+
version: 'v3'
|
39
|
+
user:
|
40
|
+
username:
|
41
|
+
password:
|
42
|
+
").to_yaml }
|
43
|
+
end
|
44
|
+
|
45
|
+
unless File.exist?(WATCH_TEST)
|
46
|
+
warn "Add the repositories you're willing to monitor editing: ~/.githubissueswatcher/repos.yaml"
|
47
|
+
Dir.mkdir(File.dirname(WATCH_TEST)) unless File.exist?(File.dirname(WATCH_TEST))
|
48
|
+
File.open(WATCH_TEST, "w") { |f| f.write ["padrino/all"].to_yaml }
|
49
|
+
end
|
50
|
+
|
51
|
+
unless File.exist?(DB_TEST)
|
52
|
+
Dir.mkdir(File.dirname(DB_TEST)) unless File.exist?(File.dirname(DB_TEST))
|
53
|
+
File.open(DB_TEST, "w") { |f| f.write (Time.now - 86400).to_yaml }
|
54
|
+
end
|
55
|
+
|
56
|
+
@_watch = YAML.load_file(WATCH_TEST)
|
57
|
+
@_time_since = YAML.load_file(DB_TEST) if File.exist?(DB_TEST)
|
58
|
+
@_config = YAML.load_file(CONFIG_TEST)
|
59
|
+
@base_uri, @api_version = @_config['api']['url'], @_config['api']['version']
|
60
|
+
@username, @password = @_config['user']['username'], @_config['user']['password']
|
61
|
+
|
62
|
+
@_db = DB_TEST
|
63
|
+
|
64
|
+
base_uri @base_uri
|
65
|
+
basic_auth @username, @password
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: githubissueswatcher
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 11
|
9
|
+
version: 0.0.11
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Peter Gabbay
|
13
|
+
- Davide D'Agostino
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-10-11 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: httparty
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 7
|
32
|
+
- 8
|
33
|
+
version: 0.7.8
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: growl
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 1
|
46
|
+
- 0
|
47
|
+
- 3
|
48
|
+
version: 1.0.3
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: foreverb
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
- 2
|
62
|
+
- 6
|
63
|
+
version: 0.2.6
|
64
|
+
type: :runtime
|
65
|
+
version_requirements: *id003
|
66
|
+
description: Github Issues Growl Watcher, watch any project issues and receive growl notification based on whether you are mentioned, assigned or the creator.
|
67
|
+
email:
|
68
|
+
- peter@check2.com
|
69
|
+
executables:
|
70
|
+
- githubissueswatcher
|
71
|
+
extensions: []
|
72
|
+
|
73
|
+
extra_rdoc_files: []
|
74
|
+
|
75
|
+
files:
|
76
|
+
- bin/githubissueswatcher
|
77
|
+
- Gemfile
|
78
|
+
- githubissueswatcher.gemspec
|
79
|
+
- images/icon.png
|
80
|
+
- lib/githubissueswatcher/version.rb
|
81
|
+
- lib/githubissueswatcher.rb
|
82
|
+
- pkg/githubissueswatcher-0.0.10.gem
|
83
|
+
- pkg/githubissueswatcher-0.0.9.gem
|
84
|
+
- Rakefile
|
85
|
+
- README.md
|
86
|
+
- test/api.yaml
|
87
|
+
- test/config.yaml
|
88
|
+
- test/db.yaml
|
89
|
+
- test/repos.yaml
|
90
|
+
- test/run_test.rb
|
91
|
+
- test/test_helper.rb
|
92
|
+
has_rdoc: true
|
93
|
+
homepage: https://github.com/Artcentric/githubissueswatcher
|
94
|
+
licenses: []
|
95
|
+
|
96
|
+
post_install_message:
|
97
|
+
rdoc_options: []
|
98
|
+
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
segments:
|
115
|
+
- 0
|
116
|
+
version: "0"
|
117
|
+
requirements: []
|
118
|
+
|
119
|
+
rubyforge_project: githubissueswatcher
|
120
|
+
rubygems_version: 1.3.7
|
121
|
+
signing_key:
|
122
|
+
specification_version: 3
|
123
|
+
summary: Github Issues Growl Watcher, watch any project issues and receive growl notification
|
124
|
+
test_files: []
|
125
|
+
|