shoutcast_api 0.1.4 → 0.1.5

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/.watchr ADDED
@@ -0,0 +1,21 @@
1
+
2
+ def run(*args)
3
+ system "ruby -rubygems -Ilib:test #{args.join(' ')}"
4
+ end
5
+
6
+ def run_tests
7
+ system "rake test"
8
+ end
9
+
10
+ def underscore(file)
11
+ file.gsub('/', '_')
12
+ end
13
+
14
+ watch('test/test_.*\.rb') {|md| run md[0] }
15
+ watch('lib/(.*)\.rb') {|md| run "test/test_#{underscore(md[1])}.rb" }
16
+ watch('test/helper.rb') { run_tests }
17
+
18
+ run_tests
19
+
20
+ Signal.trap("QUIT") { abort("\n") }
21
+ Signal.trap("INT") { run_tests }
data/Rakefile CHANGED
@@ -20,6 +20,8 @@ Jeweler::Tasks.new do |gem|
20
20
  gem.add_dependency 'roxml', '~> 2.5'
21
21
 
22
22
  gem.add_development_dependency "mocha"
23
+ gem.add_development_dependency "riot", ">= 0.10.4"
24
+ gem.add_development_dependency "riot_notifier", ">= 0.0.3"
23
25
 
24
26
  gem.test_files = Dir.glob('test/test_*.rb')
25
27
  end
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
- ---
1
+ ---
2
+ :patch: 5
3
+ :build:
2
4
  :major: 0
3
5
  :minor: 1
4
- :patch: 4
5
- :build:
data/lib/shoutcast_api.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'activesupport'
1
+ require 'active_support'
2
2
  require 'httparty'
3
3
  require 'roxml'
4
4
  require 'forwardable'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{shoutcast_api}
8
- s.version = "0.1.4"
8
+ s.version = "0.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Peter Suschlik"]
12
- s.date = %q{2009-11-06}
12
+ s.date = %q{2009-12-07}
13
13
  s.default_executable = %q{shoutcast_search}
14
14
  s.email = %q{peter-scapi@suschlik.de}
15
15
  s.executables = ["shoutcast_search"]
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".gitignore",
21
+ ".watchr",
21
22
  "README.rdoc",
22
23
  "Rakefile",
23
24
  "VERSION.yml",
@@ -51,15 +52,21 @@ Gem::Specification.new do |s|
51
52
  s.add_runtime_dependency(%q<httparty>, ["~> 0.4"])
52
53
  s.add_runtime_dependency(%q<roxml>, ["~> 2.5"])
53
54
  s.add_development_dependency(%q<mocha>, [">= 0"])
55
+ s.add_development_dependency(%q<riot>, [">= 0.10.4"])
56
+ s.add_development_dependency(%q<riot_notifier>, [">= 0.0.3"])
54
57
  else
55
58
  s.add_dependency(%q<httparty>, ["~> 0.4"])
56
59
  s.add_dependency(%q<roxml>, ["~> 2.5"])
57
60
  s.add_dependency(%q<mocha>, [">= 0"])
61
+ s.add_dependency(%q<riot>, [">= 0.10.4"])
62
+ s.add_dependency(%q<riot_notifier>, [">= 0.0.3"])
58
63
  end
59
64
  else
60
65
  s.add_dependency(%q<httparty>, ["~> 0.4"])
61
66
  s.add_dependency(%q<roxml>, ["~> 2.5"])
62
67
  s.add_dependency(%q<mocha>, [">= 0"])
68
+ s.add_dependency(%q<riot>, [">= 0.10.4"])
69
+ s.add_dependency(%q<riot_notifier>, [">= 0.0.3"])
63
70
  end
64
71
  end
65
72
 
data/test/helper.rb CHANGED
@@ -1,9 +1,10 @@
1
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
-
3
- require 'test/unit'
4
-
5
1
  require 'rubygems'
2
+
6
3
  require 'mocha'
4
+ require 'riot'
5
+ require 'riot_notifier'
6
+
7
+ Riot.reporter = RiotNotifier::Libnotify
7
8
 
8
9
  require 'shoutcast_api'
9
10
 
@@ -26,4 +27,5 @@ module TestExtensions
26
27
  end
27
28
  end
28
29
 
29
- Test::Unit::TestCase.send(:include, TestExtensions)
30
+ Riot::Context.send :include, TestExtensions
31
+ Riot::Situation.send :include, TestExtensions
data/test/test_basic.rb CHANGED
@@ -1,24 +1,16 @@
1
- require File.join(File.dirname(__FILE__), 'helper')
1
+ require 'helper'
2
2
 
3
- class ShoutcastTest < Test::Unit::TestCase
4
-
5
- def test_delegators
6
- assert_respond_to Shoutcast, :genres
7
- assert_respond_to Shoutcast, :search
8
- end
3
+ context Shoutcast do
4
+ setup { Shoutcast }
9
5
 
6
+ asserts("responds to genres").respond_to(:genres)
7
+ asserts("responds to search").respond_to(:search)
10
8
  end
11
9
 
12
- class ExtensionsTest < Test::Unit::TestCase
13
-
14
- def test_file_fixture
15
- assert_equal "", file_fixture("empty.plain")
16
- end
17
-
18
- def test_http_response_stubbing
10
+ context "Extensions" do
11
+ asserts("empty body with empty file") { file_fixture("empty.plain") }.equals("")
12
+ asserts("http stubbing") do
19
13
  stub_http_response_with("empty.plain")
20
-
21
- assert_equal "", HTTParty.get('').body
22
- end
23
-
14
+ HTTParty.get('').body
15
+ end.equals("")
24
16
  end
data/test/test_fetcher.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), 'helper')
1
+ require 'helper'
2
2
 
3
3
  require 'ostruct'
4
4
  class FakeResponse < OpenStruct
@@ -16,72 +16,81 @@ class FakeResponse < OpenStruct
16
16
  end
17
17
  end
18
18
 
19
- class FetcherTest < Test::Unit::TestCase
20
- include Shoutcast
19
+ include Shoutcast
21
20
 
22
- def test_base_uri
23
- assert_equal "http://yp.shoutcast.com", Stationlist.base_uri
24
- end
21
+ context Fetcher do
22
+
23
+ setup { Fetcher }
24
+
25
+ asserts("base uri") { topic.base_uri }.equals("http://yp.shoutcast.com")
25
26
 
26
- def test_nocache_paramater
27
- fetcher = Fetcher.clone
27
+ context "testing nocache parameter" do
28
+ setup do
29
+ fetcher = Fetcher.clone
28
30
 
29
- def fetcher.get(path, options)
30
- FakeResponse.new do |response|
31
- response.options = options
31
+ def fetcher.get(path, options)
32
+ FakeResponse.new do |response|
33
+ response.options = options
34
+ end
32
35
  end
36
+ fetcher
33
37
  end
34
38
 
35
- # {}
36
- response = fetcher.send(:fetch) { |response| response }
37
- assert response
38
- assert_instance_of Hash, response.options
39
- assert_instance_of Hash, response.options[:query]
40
- assert response.options[:query][:nocache]
41
-
42
- # { :nocache => "random" }
43
- response = fetcher.send(:fetch, :nocache => "random") { |response| response }
44
- assert response
45
- assert_instance_of Hash, response.options
46
- assert_instance_of Hash, response.options[:query]
47
- assert_equal "random", response.options[:query][:nocache]
48
-
49
- # nil
50
- response = fetcher.send(:fetch, nil) { |response| response }
51
- assert_instance_of Hash, response.options
52
- assert_instance_of Hash, response.options[:query]
53
- assert response.options[:query][:nocache]
54
- end
39
+ asserts("random nocache parameter") do
40
+ topic.send(:fetch) {|r| r }.options[:query][:nocache]
41
+ end.exists
42
+
43
+ asserts("random nocache parameter passing nil") do
44
+ topic.send(:fetch, nil) {|r| r }.options[:query][:nocache]
45
+ end.exists
55
46
 
56
- def test_genres_list
57
- stub_http_response_with("genrelist.plain")
47
+ asserts("static nocache parameter") do
48
+ topic.send(:fetch, :nocache => "static") {|r| r }.options[:query][:nocache]
49
+ end.equals("static")
58
50
 
59
- list = Fetcher.genres
60
- # DRY test/text_xml.rb GenrelistTest
61
- assert_instance_of Genrelist, list
62
- assert_instance_of Genre, list.first
63
51
  end
64
52
 
65
- def test_genres_empty_response
66
- stub_http_response_with("empty.plain")
53
+ # TODO enable mocked tests again!
54
+ if false
55
+ context "fetching genres" do
56
+ setup do
57
+ p "here"
58
+ stub_http_response_with("genrelist.plain")
59
+ Fetcher.genres
60
+ end
67
61
 
68
- assert_nil Fetcher.genres
62
+ asserts("class type").kind_of(Genrelist)
63
+ asserts("first item is a Genre") { topic.first }.kind_of(Genre)
69
64
  end
70
65
 
71
- def test_search_with_invalid_option
72
- stub_http_response_with("search_death.plain")
66
+ context "fetching empty genres" do
67
+ setup do
68
+ stub_http_response_with("empty.plain")
69
+ Fetcher.genres
70
+ end
73
71
 
74
- list = Fetcher.search
75
- # DRY test/text_xml.rb StationlistTest
76
- assert_instance_of Stationlist, list
77
- assert_equal "/sbin/tunein-station.pls", list.tunein_base_path
78
- assert_instance_of Station, list.first
72
+ asserts("nil") { topic }.nil
79
73
  end
80
74
 
81
- def test_search_empty_response
82
- stub_http_response_with("empty.plain")
75
+ context "search with invalid options" do
76
+ setup do
77
+ stub_http_response_with("search_death.plain")
78
+ Fetcher.search
79
+ end
80
+
81
+ asserts("class type").kind_of(Stationlist)
82
+ asserts("tunein base path") { topic.tunein_base_path }.equals("/sbin/tunein-station.pls")
83
+ asserts("first item is a Station") { topic.first }.kind_of(Station)
84
+ end
85
+
86
+ context "searching with empty response" do
87
+ setup do
88
+ stub_http_response_with("empty.plain")
89
+ Fetcher.search
90
+ end
83
91
 
84
- assert_nil Fetcher.genres
92
+ asserts_topic.nil
93
+ end
85
94
  end
86
95
 
87
96
  end
data/test/test_xml.rb CHANGED
@@ -1,145 +1,101 @@
1
- require File.join(File.dirname(__FILE__), 'helper')
2
-
3
- class StationTest < Test::Unit::TestCase
4
- include Shoutcast
5
-
6
- def setup
7
- xml = <<-XML
8
- <station
9
- id="1234"
10
- name=" Metal radio "
11
- mt="audio/mpeg"
12
- br="128"
13
- genre=" Metal Rock "
14
- ct=" Heavy Metal Band "
15
- lc="123"/>
16
- XML
17
-
18
- @station = Station.from_xml xml
1
+ require 'helper'
2
+
3
+ include Shoutcast
4
+
5
+ context Station do
6
+ setup do
7
+ Station.from_xml <<-XML
8
+ <station
9
+ id="1234"
10
+ name=" Metal radio "
11
+ mt="audio/mpeg"
12
+ br="128"
13
+ genre=" Metal Rock "
14
+ ct=" Heavy Metal Band "
15
+ lc="123"/>
16
+ XML
19
17
  end
20
18
 
21
- def test_parsing
22
- assert_instance_of Station, @station
23
- assert_equal 1234, @station.id
24
- assert_equal "Metal radio", @station.name
25
- assert_equal "audio/mpeg", @station.media_type
26
- assert_equal 128, @station.bitrate
27
- assert_equal "Metal Rock", @station.genre
28
- assert_equal "Heavy Metal Band", @station.current_title
29
- assert_equal 123, @station.listeners
30
- assert_nil @station.tunein
31
- end
32
-
33
- def test_type
34
- assert_equal "mpeg", @station.type
35
-
36
- def @station.media_type
37
- "strange format"
19
+ asserts("class type").kind_of(Station)
20
+ asserts("id") { topic.id }.equals(1234)
21
+ asserts("name") { topic.name }.equals("Metal radio")
22
+ asserts("media type") { topic.media_type }.equals("audio/mpeg")
23
+ asserts("bitrate") { topic.bitrate }.equals(128)
24
+ asserts("genre") { topic.genre }.equals("Metal Rock")
25
+ asserts("current title") { topic.current_title }.equals("Heavy Metal Band")
26
+ asserts("listeners") { topic.listeners }.equals(123)
27
+ asserts("no tunein path") { topic.tunein }.nil
28
+
29
+ context "with media type" do
30
+ setup do
31
+ def topic.media_type
32
+ "strange format"
33
+ end
34
+ topic
38
35
  end
39
-
40
- assert_equal "strange format", @station.type
36
+ asserts("type") { topic.type }.equals("strange format")
41
37
  end
42
38
 
43
- def test_to_s
44
- string = @station.to_s
45
-
46
- assert string.include?(@station.id.to_s)
47
- assert string.include?(@station.name)
48
- assert string.include?(@station.current_title)
49
- assert string.include?(@station.bitrate.to_s)
50
- assert string.include?(@station.listeners.to_s)
39
+ context "with to_s" do
40
+ [ :id, :name, :current_title, :bitrate, :listeners ].each do |attr|
41
+ asserts("contains #{attr}") { topic.to_s.include?(topic.send(attr).to_s) }
42
+ end
51
43
  end
52
44
 
53
- def test_header
54
- string = Station.header
45
+ context "with header" do
46
+ setup { topic.class.header }
55
47
 
56
- assert string.include?("id")
57
- assert string.include?("station-name")
58
- assert string.include?("title")
59
- assert string.include?("bit")
60
- assert string.include?("listen.")
48
+ %w(id station-name title bit listen.).each do |header|
49
+ asserts("contains #{header}") { topic.include?(header) }
50
+ end
61
51
  end
62
52
 
63
53
  # TODO test <=>
64
-
65
54
  end
66
55
 
67
-
68
- class StationlistTest < Test::Unit::TestCase
69
- include Shoutcast
70
-
71
- def setup
72
- @list = Stationlist.from_xml file_fixture("search_death.plain")
73
- end
74
-
75
- def test_attributes
76
- assert_instance_of Stationlist, @list
77
- assert_equal "/sbin/tunein-station.pls", @list.tunein_base_path
78
- assert_equal 49, @list.size
79
- assert_instance_of Station, @list.first
80
- end
81
-
82
- def test_base_uri
83
- assert_equal "http://yp.shoutcast.com", Stationlist.base_uri
56
+ context Stationlist do
57
+ setup { Stationlist.from_xml file_fixture("search_death.plain") }
58
+
59
+ asserts("base uri") { topic.class.base_uri }.equals("http://yp.shoutcast.com")
60
+ asserts("correct class type").kind_of(Stationlist)
61
+ asserts("tunein path") { topic.tunein_base_path }.equals("/sbin/tunein-station.pls")
62
+ asserts("list size") { topic.size }.equals(49)
63
+ asserts("tunein path") { topic.tunein(topic.first) }.equals { topic.first.tunein }
64
+
65
+ context "for first item" do
66
+ setup { topic.first }
67
+ asserts("correct class type").kind_of(Station)
68
+ asserts("tunein path") do
69
+ topic.tunein
70
+ end.equals { "http://yp.shoutcast.com/sbin/tunein-station.pls?id=#{topic.id}" }
84
71
  end
85
-
86
- def test_tunein
87
- station = @list.first
88
-
89
- assert_equal "http://yp.shoutcast.com/sbin/tunein-station.pls?id=#{station.id}", @list.tunein(station)
90
- end
91
-
92
- def test_tunein_propagtion_after_parse
93
- station = @list.first
94
-
95
- assert_equal @list.tunein(station), station.tunein
96
- end
97
-
98
72
  end
99
73
 
74
+ context Genrelist do
75
+ setup { Genrelist.from_xml file_fixture("genrelist.plain") }
100
76
 
101
- class GenrelistTest < Test::Unit::TestCase
102
- include Shoutcast
77
+ asserts("correct class type").kind_of(Genrelist)
78
+ asserts("list size") { topic.size }.equals(434)
79
+ asserts("first item is Genre") { topic.first }.kind_of(Genre)
80
+ asserts("responds to each").respond_to(:each)
81
+ asserts("raises NoMethodError on invalid method") { topic.invalid_method }.raises(NoMethodError)
82
+ asserts("gernes name == to_s") { topic.first.name }.equals { topic.first.to_s }
103
83
 
104
- def setup
105
- @list = Genrelist.from_xml file_fixture("genrelist.plain")
106
- end
84
+ context "sorted" do
85
+ setup { topic.sort }
107
86
 
108
- def test_array_mimic
109
- assert_instance_of Genrelist, @list
110
- assert_equal 434, @list.size
111
- assert_instance_of Genre, @list.first
112
- assert_respond_to @list, :each
113
- assert_raise(NoMethodError) { @list.nothing_found }
87
+ asserts("first genre name") { topic.first.name }.equals("24h")
88
+ asserts("last genre name") { topic.last.name }.equals("Zouk")
114
89
  end
115
-
116
- def test_genre_name
117
- sorted = @list.sort
118
-
119
- assert_equal "24h", sorted.first.name
120
- assert_equal "Zouk", sorted.last.name
121
- end
122
-
123
- def test_genre_to_s
124
- genre = @list.first
125
-
126
- assert_equal genre.name, genre.to_s
127
- end
128
-
129
- end
130
-
131
-
132
- class MyClass
133
- include Shoutcast::Xml
134
90
  end
135
91
 
136
- class XmlTest < Test::Unit::TestCase
137
-
138
- def test_trim
139
- assert_respond_to MyClass, :trim
140
-
141
- string = " test mee "
142
- assert_equal "test mee", MyClass.trim.call(string)
92
+ context Xml do
93
+ setup do
94
+ Class.new do
95
+ include Xml
96
+ end
143
97
  end
144
98
 
99
+ asserts("responds to trim").respond_to(:trim)
100
+ asserts("trims strings") { topic.trim.call(" trim me ") }.equals("trim me")
145
101
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoutcast_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Suschlik
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-06 00:00:00 +01:00
12
+ date: 2009-12-07 00:00:00 +01:00
13
13
  default_executable: shoutcast_search
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,6 +42,26 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: riot
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.10.4
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: riot_notifier
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.0.3
64
+ version:
45
65
  description:
46
66
  email: peter-scapi@suschlik.de
47
67
  executables:
@@ -52,6 +72,7 @@ extra_rdoc_files:
52
72
  - README.rdoc
53
73
  files:
54
74
  - .gitignore
75
+ - .watchr
55
76
  - README.rdoc
56
77
  - Rakefile
57
78
  - VERSION.yml