rack-musicindex 0.1.1 → 0.2.0

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.
@@ -21,7 +21,7 @@ module Rack
21
21
 
22
22
  if dirs[path_info]
23
23
  serve_podcast(env)
24
- elsif static_paths.include?(path_info)
24
+ elsif static_paths.include?(URI.unescape(path_info))
25
25
  serve_mp3(env)
26
26
  else
27
27
  status, headers, response = @app.call(env)
@@ -33,22 +33,26 @@ module Rack
33
33
  def serve_podcast(env)
34
34
  status, headers, response = @app.call(env)
35
35
 
36
+ method = env['REQUEST_METHOD']
36
37
  body = podcast(env)
38
+
37
39
  headers['Content-Type'] = 'application/xml;charset=utf-8'
38
40
  headers["Content-Length"] = body.bytesize.to_s
39
41
 
40
- [200, headers, [body]]
42
+ [200, headers, method == 'GET' ? [body] : []]
41
43
  end
42
44
 
43
45
  def serve_mp3(env)
44
46
  status, headers, response = @app.call(env)
45
- path_info = env['PATH_INFO']
46
47
 
48
+ method = env['REQUEST_METHOD']
49
+ path_info = URI.unescape(env['PATH_INFO'])
47
50
  body = open(static_paths[path_info], 'rb').read
51
+
48
52
  headers["Content-Type"] = 'audio/mpeg'
49
53
  headers["Content-Length"] = body.bytesize.to_s
50
54
 
51
- [200, headers, [body]]
55
+ [200, headers, method == 'GET' ? [body] : []]
52
56
  end
53
57
 
54
58
  def dirs
@@ -103,7 +107,7 @@ module Rack
103
107
  req = Rack::Request.new(env)
104
108
  url = req.url
105
109
  files = files(path)
106
- xml = ::Builder::XmlMarkup.new
110
+ xml = ::Builder::XmlMarkup.new(:indent => 2)
107
111
 
108
112
  xml.instruct! :xml, :version => '1.0'
109
113
  xml.rss :version => "2.0", 'xmlns:itunes' => 'http://www.itunes.com/dtds/podcast-1.0.dtd' do
@@ -116,7 +120,7 @@ module Rack
116
120
  tag = id3(file)
117
121
  author = tag[:artist]
118
122
  name = ::File.basename(file)
119
- item_link = url + '/' + name
123
+ item_link = URI.escape(url + '/' + name)
120
124
 
121
125
  xml.item do
122
126
  xml.title tag[:name] || name
@@ -128,7 +132,6 @@ module Rack
128
132
  if author
129
133
  xml.author author
130
134
  xml.itunes :author, author
131
- xml.itunes :summary, author
132
135
  end
133
136
  end
134
137
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module Musicindex
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -37,9 +37,9 @@ describe Rack::MusicIndex do
37
37
 
38
38
  items.size.should eql(1)
39
39
  item.xpath('title')[0].content.should eql('bar')
40
- item.xpath('link')[0].content.should eql('http://example.org/foo/test.mp3')
41
- item.xpath('guid')[0].content.should eql('http://example.org/foo/test.mp3')
42
- item.xpath('enclosure')[0]['url'].should eql('http://example.org/foo/test.mp3')
40
+ item.xpath('link')[0].content.should eql('http://example.org/foo/test%20foo.mp3')
41
+ item.xpath('guid')[0].content.should eql('http://example.org/foo/test%20foo.mp3')
42
+ item.xpath('enclosure')[0]['url'].should eql('http://example.org/foo/test%20foo.mp3')
43
43
  item.xpath('author')[0].content.should eql('foo')
44
44
  item.xpath('itunes:author')[0].content.should eql('foo')
45
45
  end
@@ -68,10 +68,10 @@ describe Rack::MusicIndex do
68
68
  end
69
69
 
70
70
  it 'should return mp3' do
71
- get '/foo/test.mp3'
71
+ get '/foo/test%20foo.mp3'
72
72
 
73
73
  last_response.should be_ok
74
74
  last_response['Content-Type'].should eql('audio/mpeg')
75
- last_response.body.should eql(open(fixture('/foo/test.mp3'), 'rb').read)
75
+ last_response.body.should eql(open(fixture('/foo/test foo.mp3'), 'rb').read)
76
76
  end
77
77
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-musicindex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -140,7 +140,7 @@ files:
140
140
  - lib/rack/musicindex.rb
141
141
  - lib/rack/musicindex/version.rb
142
142
  - rack-musicindex.gemspec
143
- - spec/fixtures/foo/test.mp3
143
+ - spec/fixtures/foo/test foo.mp3
144
144
  - spec/rack/musicindex_spec.rb
145
145
  - spec/spec_helper.rb
146
146
  - spec/test_app.rb
@@ -158,7 +158,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
158
  version: '0'
159
159
  segments:
160
160
  - 0
161
- hash: -2911717557310018387
161
+ hash: -1489195418899785487
162
162
  required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  none: false
164
164
  requirements:
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  segments:
169
169
  - 0
170
- hash: -2911717557310018387
170
+ hash: -1489195418899785487
171
171
  requirements: []
172
172
  rubyforge_project:
173
173
  rubygems_version: 1.8.24
@@ -175,7 +175,7 @@ signing_key:
175
175
  specification_version: 3
176
176
  summary: A Rack middleware to publish directries containing media files as podcast
177
177
  test_files:
178
- - spec/fixtures/foo/test.mp3
178
+ - spec/fixtures/foo/test foo.mp3
179
179
  - spec/rack/musicindex_spec.rb
180
180
  - spec/spec_helper.rb
181
181
  - spec/test_app.rb