post_commit 0.1.0 → 0.1.1
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/README.rdoc +34 -1
- data/lib/post_commit/hooks/base.rb +4 -0
- data/lib/post_commit/hooks/url.rb +39 -0
- data/lib/post_commit/version.rb +1 -1
- data/lib/post_commit.rb +1 -6
- data/spec/post_commit/url_spec.rb +51 -0
- metadata +4 -1
data/README.rdoc
CHANGED
@@ -7,6 +7,7 @@ Post commit allows you to notify several services with simple and elegant DSL. I
|
|
7
7
|
* FriendFeed
|
8
8
|
* LightHouse
|
9
9
|
* Twitter
|
10
|
+
* URL
|
10
11
|
|
11
12
|
= Usage
|
12
13
|
|
@@ -75,6 +76,21 @@ The Twitter hook supports public and direct messages.
|
|
75
76
|
post "Mary, check this out! http://example.com", :type => :direct_message, :screen_name => "marydoe"
|
76
77
|
post "Mary, check this out! http://example.com", :type => :direct_message, :user_id => 12345
|
77
78
|
|
79
|
+
== URL
|
80
|
+
|
81
|
+
To send a message to an arbitrary URL, use the <tt>:url</tt>.
|
82
|
+
|
83
|
+
post_commit :url do
|
84
|
+
post "http://example.com", :status => "pending", :id => 1234, :service => "yourapp"
|
85
|
+
end
|
86
|
+
|
87
|
+
If you need a basic authorization, just inform the <tt>username</tt> and <tt>password</tt>.
|
88
|
+
|
89
|
+
post_commit :url do
|
90
|
+
authorize :username => "johndoe", :password => "mypass"
|
91
|
+
post "http://example.com", :status => "running", :id => 1234, :service => "yourapp"
|
92
|
+
end
|
93
|
+
|
78
94
|
= Creating new hooks
|
79
95
|
|
80
96
|
To create a new hook, you can extend the <tt>PostCommit::Hooks::Base</tt> class, to bootstrap your own class.
|
@@ -87,7 +103,8 @@ To create a new hook, you can extend the <tt>PostCommit::Hooks::Base</tt> class,
|
|
87
103
|
end
|
88
104
|
end
|
89
105
|
|
90
|
-
|
106
|
+
Your new hook will be register automatically. By downcasing the class name. So, <tt>LightHouse</tt> will be registered as <tt>:lighthouse</tt>.
|
107
|
+
To register this hook will other name, you just have to call the <tt>PostCommit::Hooks.register</tt> method.
|
91
108
|
|
92
109
|
PostCommit::Hooks.register :email, Email
|
93
110
|
|
@@ -104,11 +121,27 @@ You can use the <tt>credentials</tt> attribute to retrieve these settings.
|
|
104
121
|
= To-Do
|
105
122
|
|
106
123
|
* Receive post commits
|
124
|
+
* URL hook must post JSON and XML data
|
125
|
+
* Create IRC hook
|
126
|
+
* Create Jabber hook
|
127
|
+
* Create email hook
|
107
128
|
|
108
129
|
= Maintainer
|
109
130
|
|
110
131
|
* Nando Vieira - http://simplesideias.com.br
|
111
132
|
|
133
|
+
= Contributing
|
134
|
+
|
135
|
+
Once you've made your great commits:
|
136
|
+
|
137
|
+
1. Fork[http://help.github.com/forking/] the project at http://github.com/fnando/post_commit
|
138
|
+
2. Create a topic branch - <tt>git checkout -b my_branch</tt>
|
139
|
+
3. Push to your branch - <tt>git push origin my_branch</tt>
|
140
|
+
4. Create an Issue[http://github.com/fnando/post_commit/issues] with a link to your branch
|
141
|
+
5. That's it!
|
142
|
+
|
143
|
+
Please respect the indentation rules. And always use 2 spaces.
|
144
|
+
|
112
145
|
= License
|
113
146
|
|
114
147
|
(The MIT License)
|
@@ -17,6 +17,10 @@ module PostCommit
|
|
17
17
|
@credentials = {}
|
18
18
|
end
|
19
19
|
|
20
|
+
def self.inherited(base)
|
21
|
+
PostCommit::Hooks.register base.name.split("::").last.downcase.to_sym, base
|
22
|
+
end
|
23
|
+
|
20
24
|
# Set up the authorization for the current notifier.
|
21
25
|
# Each notifier can have its own authorization options.
|
22
26
|
def authorize(options = {})
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module PostCommit
|
2
|
+
module Hooks
|
3
|
+
# To send an URL post commit, you have to set up your URL and, optionally, username and password.
|
4
|
+
#
|
5
|
+
# post_commit :url do
|
6
|
+
# post "http://example.com", :message => "Post commit"
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# If you need to authorize your request with basic auth, you can set your username and password.
|
10
|
+
#
|
11
|
+
# post_commit :url do
|
12
|
+
# authorize :username => "johndoe", :password => "mypass"
|
13
|
+
# post "http://example.com", :message => "Post commit"
|
14
|
+
# end
|
15
|
+
class URL < Base
|
16
|
+
# Post data to an arbitrary URL. The data should a one-depth hash.
|
17
|
+
#
|
18
|
+
# post "http://example.com", :message => "Post commit", :service => "yourapp"
|
19
|
+
def post(url, params = {})
|
20
|
+
@uri = URI.parse(url)
|
21
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
22
|
+
|
23
|
+
@request = Net::HTTP::Post.new(uri.path)
|
24
|
+
@request.basic_auth credentials[:username], credentials[:password] if credentials[:username]
|
25
|
+
@request.form_data = params
|
26
|
+
|
27
|
+
@response = http.request(@request)
|
28
|
+
|
29
|
+
if response.code =~ /^2\d+/
|
30
|
+
true
|
31
|
+
else
|
32
|
+
false
|
33
|
+
end
|
34
|
+
rescue Exception
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/post_commit/version.rb
CHANGED
data/lib/post_commit.rb
CHANGED
@@ -11,14 +11,9 @@ require "post_commit/hooks/campfire"
|
|
11
11
|
require "post_commit/hooks/friend_feed"
|
12
12
|
require "post_commit/hooks/light_house"
|
13
13
|
require "post_commit/hooks/twitter"
|
14
|
+
require "post_commit/hooks/url"
|
14
15
|
require "post_commit/version"
|
15
16
|
|
16
|
-
PostCommit::Hooks.register :basecamp, PostCommit::Hooks::Basecamp
|
17
|
-
PostCommit::Hooks.register :campfire, PostCommit::Hooks::Campfire
|
18
|
-
PostCommit::Hooks.register :friendfeed, PostCommit::Hooks::FriendFeed
|
19
|
-
PostCommit::Hooks.register :lighthouse, PostCommit::Hooks::LightHouse
|
20
|
-
PostCommit::Hooks.register :twitter, PostCommit::Hooks::Twitter
|
21
|
-
|
22
17
|
# Send a notification to the specified service. This method is just
|
23
18
|
# a shorcut to the PostCommit::Hooks module.
|
24
19
|
#
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe PostCommit::Hooks::URL do
|
4
|
+
before do
|
5
|
+
@url = "http://example.com/some/url"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should instantiate hook" do
|
9
|
+
hook = post_commit(:url) {}
|
10
|
+
hook.should be_an_instance_of(PostCommit::Hooks::URL)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should recover from unknown exceptions" do
|
14
|
+
Net::HTTP.should_receive(:new).and_raise(Exception)
|
15
|
+
subject.post(@url, :message => "Some message").should be_false
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should set authorization headers" do
|
19
|
+
@url = "http://johndoe:mypass@example.com/some/url"
|
20
|
+
FakeWeb.register_uri(:post, @url, :status => ["200", "OK"])
|
21
|
+
|
22
|
+
subject.authorize :username => "johndoe", :password => "mypass"
|
23
|
+
subject.post(@url, :message => "Some message")
|
24
|
+
|
25
|
+
subject.request["authorization"].should == subject.request.send(:basic_encode, "johndoe", "mypass")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be posted" do
|
29
|
+
FakeWeb.register_uri(:post, @url, :status => ["200", "OK"])
|
30
|
+
subject.post(@url, :message => "Some message")
|
31
|
+
FakeWeb.should have_requested(:post, @url)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be successful with any success status" do
|
35
|
+
FakeWeb.register_uri(:post, @url, [
|
36
|
+
{:status => ["200", "OK"]},
|
37
|
+
{:status => ["201", "Created"]}
|
38
|
+
])
|
39
|
+
|
40
|
+
subject.post(@url, :message => "Some message").should be_true
|
41
|
+
subject.post(@url, :message => "Some message").should be_true
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should set post data" do
|
45
|
+
subject.post(@url, :message => "Some message", :id => 1234)
|
46
|
+
body = CGI.parse(subject.request.body)
|
47
|
+
|
48
|
+
body["message"].to_s.should == "Some message"
|
49
|
+
body["id"].to_s.should == "1234"
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: post_commit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/post_commit/hooks/friend_feed.rb
|
43
43
|
- lib/post_commit/hooks/light_house.rb
|
44
44
|
- lib/post_commit/hooks/twitter.rb
|
45
|
+
- lib/post_commit/hooks/url.rb
|
45
46
|
- lib/post_commit/version.rb
|
46
47
|
- spec/post_commit/base_spec.rb
|
47
48
|
- spec/post_commit/basecamp_spec.rb
|
@@ -49,6 +50,7 @@ files:
|
|
49
50
|
- spec/post_commit/friend_feed_spec.rb
|
50
51
|
- spec/post_commit/light_house_spec.rb
|
51
52
|
- spec/post_commit/twitter_spec.rb
|
53
|
+
- spec/post_commit/url_spec.rb
|
52
54
|
- spec/resources/controllers.rb
|
53
55
|
- spec/resources/responses/campfire.json
|
54
56
|
- spec/resources/responses/friendfeed.json
|
@@ -90,5 +92,6 @@ test_files:
|
|
90
92
|
- spec/post_commit/friend_feed_spec.rb
|
91
93
|
- spec/post_commit/light_house_spec.rb
|
92
94
|
- spec/post_commit/twitter_spec.rb
|
95
|
+
- spec/post_commit/url_spec.rb
|
93
96
|
- spec/resources/controllers.rb
|
94
97
|
- spec/spec_helper.rb
|