zelda 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ ## 1.3.0
2
+
3
+ - All strings are now force-encoded to UTF-8
4
+ - Use FakeWeb to stub the API responses
5
+
6
+
1
7
  ## 1.2.1 (Aug 24, 2011)
2
8
 
3
9
  Bugfixes:
data/Gemfile CHANGED
@@ -5,3 +5,5 @@ gemspec
5
5
  gem 'rake'
6
6
  gem 'httparty'
7
7
  gem 'rspec'
8
+ gem 'guard'
9
+ gem 'fakeweb'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zelda (1.2.0)
4
+ zelda (1.2.1)
5
5
  httparty
6
6
 
7
7
  GEM
@@ -9,6 +9,9 @@ GEM
9
9
  specs:
10
10
  crack (0.1.8)
11
11
  diff-lcs (1.1.2)
12
+ fakeweb (1.3.0)
13
+ guard (0.7.0)
14
+ thor (~> 0.14.6)
12
15
  httparty (0.7.8)
13
16
  crack (= 0.1.8)
14
17
  rake (0.9.2)
@@ -20,11 +23,14 @@ GEM
20
23
  rspec-expectations (2.6.0)
21
24
  diff-lcs (~> 1.1.2)
22
25
  rspec-mocks (2.6.0)
26
+ thor (0.14.6)
23
27
 
24
28
  PLATFORMS
25
29
  ruby
26
30
 
27
31
  DEPENDENCIES
32
+ fakeweb
33
+ guard
28
34
  httparty
29
35
  rake
30
36
  rspec
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/zelda/(.+)\.rb$}) { |m| "spec/zelda/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
@@ -2,8 +2,8 @@ module Zelda
2
2
  class Aflevering < Zelda::Base
3
3
  class << self
4
4
  def find(id)
5
- attrs = Request.get("afleveringen/#{id}")['aflevering'] rescue nil
6
- attrs ? new(attrs) : nil
5
+ response = Request.get("afleveringen/#{id}")
6
+ response ? new(response['aflevering']) : nil
7
7
  end
8
8
  end
9
9
 
@@ -7,7 +7,11 @@ module Zelda
7
7
 
8
8
  @attributes.each_pair do |key, value|
9
9
  self.class.send(:define_method, key) do
10
- @attributes[key]
10
+ if @attributes[key].is_a?(String)
11
+ @attributes[key].force_encoding("UTF-8")
12
+ else
13
+ @attributes[key]
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -3,8 +3,8 @@ module Zelda
3
3
  class << self
4
4
  # Find an omroep by slug, such as +kro+.
5
5
  def find(slug)
6
- attrs = Request.get("omroepen/#{slug}")['omroep'] rescue nil
7
- attrs ? new(attrs) : nil
6
+ response = Request.get("omroepen/#{slug}")
7
+ response ? new(response['omroep']) : nil
8
8
  end
9
9
 
10
10
  # Find all omroepen.
@@ -10,8 +10,8 @@ module Zelda
10
10
  end
11
11
 
12
12
  def find(id)
13
- attrs = Request.get("series/#{id}")['serie'] rescue nil
14
- attrs ? new(attrs) : nil
13
+ response = Request.get("series/#{id}")
14
+ response ? new(response['serie']) : nil
15
15
  end
16
16
 
17
17
  def all
@@ -1,3 +1,3 @@
1
1
  module Zelda
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -3,8 +3,8 @@ module Zelda
3
3
  class << self
4
4
  # Find a Zender by code, such as +NL1+ or +101+.
5
5
  def find(code)
6
- attrs = Request.get("zenders/#{code}")['zender'] rescue nil
7
- attrs ? new(attrs) : nil
6
+ response = Request.get("zenders/#{code}")
7
+ response ? new(response['zender']) : nil
8
8
  end
9
9
 
10
10
  # Find all Zenders.
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <aflevering>
3
+ <afbeelding></afbeelding>
4
+ <afleveringid>13212470</afleveringid>
5
+ <breedbeeld>true</breedbeeld>
6
+ <eind-tijd>2011-10-11 09:00:00</eind-tijd>
7
+ <email>jeugdjournaal@nos.nl</email>
8
+ <medium>tv</medium>
9
+ <omschrijving>Mix van het belangrijkste nieuws uit binnen- en buitenland, het weer en een nieuwsgerelateerde stelling.</omschrijving>
10
+ <pepeid>229626061</pepeid>
11
+ <start-tijd>2011-10-11 08:45:00</start-tijd>
12
+ <streams-offline-op nil="true"></streams-offline-op>
13
+ <streams-online-op nil="true"></streams-online-op>
14
+ <teletekst></teletekst>
15
+ <titel>NOS Jeugdjournaal met gebarentolk</titel>
16
+ <webcast-toegestaan nil="true"></webcast-toegestaan>
17
+ <website>http://www.jeugdjournaal.nl</website>
18
+ <zender-code>NL2</zender-code>
19
+ <serie-id-nebo>5909</serie-id-nebo>
20
+ </aflevering>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <omroep>
3
+ <name>TROS</name>
4
+ <slug>tros</slug>
5
+ </omroep>
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <serie>
3
+ <email>publieksservice@tros.nl</email>
4
+ <image>http://u.omroep.nl/n/a/2005-00/1000_seconden_still.jpg</image>
5
+ <omschrijving>&lt;span class=&quot;CMSTekst&quot;&gt;In 1000 seconden daagt presentator Ron Boszhard meesterkok Ad Janssen uit. Ad moet in 1000
6
+ seconden een maaltijd bereiden bestaande uit een voor-, hoofd- en nagerecht.&lt;br /&gt;
7
+ &lt;br /&gt;
8
+ Als Ad Janssen hier niet in slaagt, wacht hem een speciale opdracht die de kijker voor hem heeft bedacht.&lt;/span&gt;</omschrijving>
9
+ <serie-id-nebo>726</serie-id-nebo>
10
+ <teletekst-pagina></teletekst-pagina>
11
+ <titel>1000 Seconden</titel>
12
+ <website>http://www.eetsmakelijk.nl/SiteNL/servlet/ctl/1000seconden/home.jsp</website>
13
+ <omroepen>
14
+ <omroep>
15
+ <name>TROS</name>
16
+ <slug>tros</slug>
17
+ </omroep>
18
+ </omroepen>
19
+ <past-aflevering>
20
+ <afbeelding>http://u.omroep.nl/n/a/2005-00/1000_seconden_still.jpg</afbeelding>
21
+ <afleveringid>12268818</afleveringid>
22
+ <breedbeeld>true</breedbeeld>
23
+ <eind-tijd>2011-03-08 11:30:00</eind-tijd>
24
+ <email>publieksservice@tros.nl</email>
25
+ <medium>tv</medium>
26
+ <omschrijving>Wat gebeurt er als je ineens alles kwijt bent, je kleren, speelgoed, foto's, huis? Andrea woonde in het Italiaanse L'Aguila waar in 2009 een aardbeving zijn huis totaal verwoestte. Kan hij een jaar later zijn normale leven weer oppakken?</omschrijving>
27
+ <pepeid>197019126</pepeid>
28
+ <start-tijd>2011-03-08 11:15:00</start-tijd>
29
+ <streams-offline-op nil="true"></streams-offline-op>
30
+ <streams-online-op nil="true"></streams-online-op>
31
+ <teletekst></teletekst>
32
+ <titel>27 seconden...</titel>
33
+ <webcast-toegestaan nil="true"></webcast-toegestaan>
34
+ <website>http://www.eetsmakelijk.nl/SiteNL/servlet/ctl/1000seconden/home.jsp</website>
35
+ <zender-code>NL3</zender-code>
36
+ <serie-id-nebo>726</serie-id-nebo>
37
+ </past-aflevering>
38
+ </serie>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <zender>
3
+ <code>NL1</code>
4
+ <name>Nederland 1</name>
5
+ </zender>
@@ -0,0 +1,2 @@
1
+ require 'fakeweb'
2
+ FakeWeb.allow_net_connect = false
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Zelda::Aflevering do
4
-
4
+
5
5
  it_should_behave_like 'a zelda base model'
6
6
 
7
7
  it "should accept attributes when being initialized" do
@@ -20,4 +20,21 @@ describe Zelda::Aflevering do
20
20
  afl.should be_a(Zelda::Aflevering)
21
21
  afl.afleveringid.should == 'POW_00243538'
22
22
  end
23
+
24
+ def xml
25
+ File.read(File.dirname(__FILE__) + "/../responses/aflevering.xml")
26
+ end
27
+
28
+ it "parses API XML" do
29
+ FakeWeb.register_uri(:get, "http://zelda.omroep.nl/12345/afleveringen/1", :body => xml, :content_type => "text/xml")
30
+ aflevering = Zelda::Aflevering.find(1)
31
+ aflevering.email.should eq "jeugdjournaal@nos.nl"
32
+ end
33
+
34
+ describe "encoding" do
35
+ it "transcodes titel from ASCII-8BIT to UTF-8" do
36
+ afl = Zelda::Aflevering.new(:titel => "\x5a\x40\x50\x70\x72\x65\x69\xc3\xa8\x72\x65")
37
+ afl.titel.encoding.name.should == "UTF-8"
38
+ end
39
+ end
23
40
  end
@@ -89,4 +89,14 @@ describe Zelda::Omroep do
89
89
  find_series.first.should be_a(Zelda::Serie)
90
90
  end
91
91
  end
92
+
93
+ def xml
94
+ File.read(File.dirname(__FILE__) + "/../responses/omroep.xml")
95
+ end
96
+
97
+ it "parses API XML" do
98
+ FakeWeb.register_uri(:get, "http://zelda.omroep.nl/12345/omroepen/tros", :body => xml, :content_type => "text/xml")
99
+ omroep = Zelda::Omroep.find('tros')
100
+ omroep.name.should eq "TROS"
101
+ end
92
102
  end
@@ -85,4 +85,14 @@ describe Zelda::Serie do
85
85
  Zelda::Serie.should_receive(:new).with("foo").and_return "foo"
86
86
  Zelda::Serie.search("foo").should == ["foo"]
87
87
  end
88
+
89
+ def xml
90
+ File.read(File.dirname(__FILE__) + "/../responses/serie.xml")
91
+ end
92
+
93
+ it "parses API XML" do
94
+ FakeWeb.register_uri(:get, "http://zelda.omroep.nl/12345/series/726", :body => xml, :content_type => "text/xml")
95
+ serie = Zelda::Serie.find(726)
96
+ serie.titel.should eq "1000 Seconden"
97
+ end
88
98
  end
@@ -85,4 +85,14 @@ describe Zelda::Zender do
85
85
  find_series.first.should be_a(Zelda::Serie)
86
86
  end
87
87
  end
88
+
89
+ def xml
90
+ File.read(File.dirname(__FILE__) + "/../responses/zender.xml")
91
+ end
92
+
93
+ it "parses API XML" do
94
+ FakeWeb.register_uri(:get, "http://zelda.omroep.nl/12345/zenders/NL1", :body => xml, :content_type => "text/xml")
95
+ zender = Zelda::Zender.find('NL1')
96
+ zender.name.should eq "Nederland 1"
97
+ end
88
98
  end
@@ -11,8 +11,6 @@ Gem::Specification.new do |s|
11
11
  s.summary = %q{If you don't know what this is, you probably don't need it}
12
12
  s.description = %q{If you don't know what this is, you probably don't need it}
13
13
 
14
- s.rubyforge_project = "zelda"
15
-
16
14
  s.files = `git ls-files`.split("\n")
17
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zelda
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-24 00:00:00.000000000Z
12
+ date: 2011-10-12 00:00:00.000000000 +02:00
13
+ default_executable:
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: httparty
16
- requirement: &2164269260 !ruby/object:Gem::Requirement
17
+ requirement: &2157947540 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,7 +22,7 @@ dependencies:
21
22
  version: '0'
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *2164269260
25
+ version_requirements: *2157947540
25
26
  description: If you don't know what this is, you probably don't need it
26
27
  email:
27
28
  - joost@spacebabies.nl
@@ -34,6 +35,7 @@ files:
34
35
  - CHANGELOG.md
35
36
  - Gemfile
36
37
  - Gemfile.lock
38
+ - Guardfile
37
39
  - README.rdoc
38
40
  - Rakefile
39
41
  - lib/zelda.rb
@@ -44,8 +46,13 @@ files:
44
46
  - lib/zelda/serie.rb
45
47
  - lib/zelda/version.rb
46
48
  - lib/zelda/zender.rb
49
+ - spec/responses/aflevering.xml
50
+ - spec/responses/omroep.xml
51
+ - spec/responses/serie.xml
52
+ - spec/responses/zender.xml
47
53
  - spec/spec.opts
48
54
  - spec/spec_helper.rb
55
+ - spec/support/fakeweb.rb
49
56
  - spec/support/shared_examples.rb
50
57
  - spec/support/zelda.rb
51
58
  - spec/zelda/aflevering_spec.rb
@@ -54,6 +61,7 @@ files:
54
61
  - spec/zelda/serie_spec.rb
55
62
  - spec/zelda/zender_spec.rb
56
63
  - zelda.gemspec
64
+ has_rdoc: true
57
65
  homepage: https://github.com/tilsammans/zelda
58
66
  licenses: []
59
67
  post_install_message:
@@ -73,14 +81,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
81
  - !ruby/object:Gem::Version
74
82
  version: '0'
75
83
  requirements: []
76
- rubyforge_project: zelda
77
- rubygems_version: 1.8.6
84
+ rubyforge_project:
85
+ rubygems_version: 1.6.2
78
86
  signing_key:
79
87
  specification_version: 3
80
88
  summary: If you don't know what this is, you probably don't need it
81
89
  test_files:
90
+ - spec/responses/aflevering.xml
91
+ - spec/responses/omroep.xml
92
+ - spec/responses/serie.xml
93
+ - spec/responses/zender.xml
82
94
  - spec/spec.opts
83
95
  - spec/spec_helper.rb
96
+ - spec/support/fakeweb.rb
84
97
  - spec/support/shared_examples.rb
85
98
  - spec/support/zelda.rb
86
99
  - spec/zelda/aflevering_spec.rb