private_pub 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,9 @@
1
- ## 1.0.0 (January 25, 2012)
1
+ ## 1.0.2 (August 20, 2012)
2
+
3
+ * added HTTPS support (thanks vanne)
4
+
5
+
6
+ ## 1.0.1 (January 25, 2012)
2
7
 
3
8
  * Rails 3.2 compatibility with SecureRandom fix (thanks windigo) - issue #26
4
9
 
data/README.md CHANGED
@@ -39,6 +39,29 @@ rackup private_pub.ru -s thin -E production
39
39
 
40
40
  It's not necessary to include faye.js since that will be handled automatically for you.
41
41
 
42
+ ## Serving Faye over HTTPS (with Thin)
43
+
44
+ To server Faye over HTTPS you could create a thin configuration file `config/private_pub_thin.yml` similar to the following:
45
+
46
+ ```yaml
47
+ ---
48
+ port: 4443
49
+ ssl: true
50
+ ssl_key_file: /path/to/server.pem
51
+ ssl_cert_file: /path/to/certificate_chain.pem
52
+ environment: production
53
+ rackup: private_pub.ru
54
+ ```
55
+
56
+ The `certificate_chain.pem` file should contain your signed certificate, followed by intermediate certificates (if any) and the root certificate of the CA that signed the key.
57
+
58
+ Next reconfigure the URL in `config/private_pub.yml` to look like `https://your.hostname.com:4443/faye`
59
+
60
+ Finally start up Thin from the project root.
61
+
62
+ ```
63
+ thin -C config/private_pub_thin.yml start
64
+ ```
42
65
 
43
66
  ## Usage
44
67
 
@@ -107,6 +130,11 @@ The signature and timestamp checked on the Faye server to ensure users are only
107
130
  The `publish_to` method will send a post request to the Faye server (using `Net::HTTP`) instructing it to send the given data back to the browser.
108
131
 
109
132
 
133
+ ## Project Status
134
+
135
+ Unfortunately I have not had time to actively work on this project recently. If you find a critical issue where it does not work as documented please [ping me on Twitter](http://twitter.com/rbates) and I'll take a look.
136
+
137
+
110
138
  ## Development & Feedback
111
139
 
112
140
  Questions or comments? Please use the [issue tracker](https://github.com/ryanb/private_pub/issues). Tests can be run with `bundle` and `rake` commands.
@@ -31,7 +31,14 @@ module PrivatePub
31
31
  # Sends the given message hash to the Faye server using Net::HTTP.
32
32
  def publish_message(message)
33
33
  raise Error, "No server specified, ensure private_pub.yml was loaded properly." unless config[:server]
34
- Net::HTTP.post_form(URI.parse(config[:server]), :message => message.to_json)
34
+ url = URI.parse(config[:server])
35
+
36
+ form = Net::HTTP::Post.new(url.path.empty? ? '/' : url.path)
37
+ form.set_form_data(:message => message.to_json)
38
+
39
+ http = Net::HTTP.new(url.host, url.port)
40
+ http.use_ssl = url.scheme == "https"
41
+ http.start {|h| h.request(form)}
35
42
  end
36
43
 
37
44
  # Returns a message hash for sending to Faye
@@ -72,11 +72,40 @@ describe PrivatePub do
72
72
 
73
73
  it "publish message as json to server using Net::HTTP" do
74
74
  PrivatePub.config[:server] = "http://localhost"
75
- message = stub(:to_json => "message_json")
76
- Net::HTTP.should_receive(:post_form).with(URI.parse("http://localhost"), :message => "message_json").and_return(:result)
75
+ message = 'foo'
76
+ form = mock(:post).as_null_object
77
+ http = mock(:http).as_null_object
78
+
79
+ Net::HTTP::Post.should_receive(:new).with('/').and_return(form)
80
+ form.should_receive(:set_form_data).with(message: 'foo'.to_json)
81
+
82
+ Net::HTTP.should_receive(:new).with('localhost', 80).and_return(http)
83
+ http.should_receive(:start).and_yield(http)
84
+ http.should_receive(:request).with(form).and_return(:result)
85
+
77
86
  PrivatePub.publish_message(message).should eq(:result)
78
87
  end
79
88
 
89
+ it "it should use HTTPS if the server URL says so" do
90
+ PrivatePub.config[:server] = "https://localhost"
91
+ http = mock(:http).as_null_object
92
+
93
+ Net::HTTP.should_receive(:new).and_return(http)
94
+ http.should_receive(:use_ssl=).with(true)
95
+
96
+ PrivatePub.publish_message('foo')
97
+ end
98
+
99
+ it "it should not use HTTPS if the server URL says not to" do
100
+ PrivatePub.config[:server] = "http://localhost"
101
+ http = mock(:http).as_null_object
102
+
103
+ Net::HTTP.should_receive(:new).and_return(http)
104
+ http.should_receive(:use_ssl=).with(false)
105
+
106
+ PrivatePub.publish_message('foo')
107
+ end
108
+
80
109
  it "raises an exception if no server is specified when calling publish_message" do
81
110
  lambda {
82
111
  PrivatePub.publish_message("foo")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: private_pub
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-26 00:00:00.000000000Z
12
+ date: 2012-08-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faye
16
- requirement: &2152830800 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152830800
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rake
27
- requirement: &2152830360 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *2152830360
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rspec
38
- requirement: &2152859540 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 2.8.0
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *2152859540
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.8.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: jasmine
49
- requirement: &2152859040 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: 1.1.1
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2152859040
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.1.1
58
78
  description: Private pub/sub messaging in Rails through Faye.
59
79
  email: ryan@railscasts.com
60
80
  executables: []
@@ -102,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
122
  version: 1.3.4
103
123
  requirements: []
104
124
  rubyforge_project: private_pub
105
- rubygems_version: 1.8.10
125
+ rubygems_version: 1.8.23
106
126
  signing_key:
107
127
  specification_version: 3
108
128
  summary: Private pub/sub messaging in Rails.