radiodns 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- radiodns (0.0.1)
4
+ radiodns (0.0.2)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -10,7 +10,38 @@ This Ruby Gem provides utilities for working with the RadioDNS spec.
10
10
 
11
11
  ## Usage
12
12
 
13
+ Add this to the top of your script
14
+
13
15
  require 'radiodns'
14
16
 
15
- cname = RadioDNS::Resolver.resolve(''09580.c586.ce1.fm.radiodns.org')
17
+ Then if you already have the Fully Qualified Domain Name as specified
18
+ in the [RadioDNS spec](http://radiodns.org/wp-content/uploads/2009/03/rdns011.pdf), you
19
+ can resolve it into a CNAME like so
20
+
21
+ cname = RadioDNS::Resolver.resolve('09580.c586.ce1.fm.radiodns.org')
16
22
  puts cname #=> 'rdns.musicradio.com'
23
+
24
+ You can also pass in the parameters required to construct the FQDN to
25
+ the resolve method
26
+
27
+ params = {
28
+ :freq => '09580',
29
+ :pi => 'c586',
30
+ :ecc => 'ce1',
31
+ :bearer => 'fm'
32
+ }
33
+ cname = RadioDNS::Resolver.resolve(params)
34
+
35
+ The bearers `fm`, `dab`, `drm`, `amss` and `hd` are supported.
36
+
37
+ ## TODO
38
+
39
+ - better error checking of supplied parameters. The code current
40
+ checks for mandatory parameters but not if the parameters
41
+ themselves conform to the spec (e.g. pa should be between 0 and
42
+ 1023)
43
+
44
+ - return an appropriate error if DNS look-up does not resolve to
45
+ CNAME.
46
+
47
+ - service discovery
data/lib/radiodns.rb CHANGED
@@ -3,9 +3,51 @@ require 'resolv'
3
3
  module RadioDNS
4
4
  class Resolver
5
5
  def self.resolve(fqdn)
6
+ if fqdn.is_a? Hash
7
+ fqdn = construct_fqdn(fqdn)
8
+ end
9
+
6
10
  resolver = Resolv::DNS.new
7
11
  cname = resolver.getresource(fqdn, Resolv::DNS::Resource::IN::CNAME)
8
12
  cname.name.to_s
9
13
  end
14
+
15
+ def self.construct_fqdn(params)
16
+ bearer = params[:bearer]
17
+ case bearer
18
+ when "fm" then construct_fqdn_for_fm(params)
19
+ when "dab" then construct_fqdn_for_dab(params)
20
+ when "drm" then construct_fqdn_for_drm_or_amss(params)
21
+ when "amss" then construct_fqdn_for_drm_or_amss(params)
22
+ when "hd" then construct_fqdn_for_hd(params)
23
+ end
24
+ end
25
+
26
+ private
27
+ def self.construct_fqdn_for_hd(params)
28
+ raise ArgumentError unless params[:tx] && params[:cc]
29
+ [params[:tx], params[:cc], 'hd.radiodns.org'].join('.')
30
+ end
31
+ def self.construct_fqdn_for_drm_or_amss(params)
32
+ raise ArgumentError unless params[:sid]
33
+ [params[:sid], params[:bearer], 'radiodns.org'].join('.')
34
+ end
35
+ def self.construct_fqdn_for_dab(params)
36
+ raise ArgumentError unless params[:scids] && params[:sid] && params[:eid] && params[:ecc]
37
+ [params[:appty_uatype] || params[:pa],
38
+ params[:scids],
39
+ params[:sid],
40
+ params[:eid],
41
+ params[:ecc],
42
+ 'dab.radiodns.org'].reject{|a| a.nil?}.join('.')
43
+ end
44
+ def self.construct_fqdn_for_fm(params)
45
+ raise ArgumentError if params[:ecc] && params[:country]
46
+ raise ArgumentError if params[:ecc].nil? && params[:country].nil?
47
+ [params[:freq],
48
+ params[:pi],
49
+ params[:ecc] || params[:country],
50
+ 'fm.radiodns.org'].join('.')
51
+ end
10
52
  end
11
53
  end
@@ -1,3 +1,3 @@
1
1
  module Radiodns
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/radiodns.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Chris Lowis"]
10
10
  s.email = ["chris.lowis@gmail.com"]
11
- s.homepage = ""
11
+ s.homepage = "http://github.com/chrislo/radiodns"
12
12
  s.summary = %q{Perform RadioDNS resolutions and service lookups}
13
13
  s.description = %q{Perform RadioDNS resolutions and service lookups}
14
14
 
@@ -5,7 +5,7 @@ require 'radiodns'
5
5
 
6
6
  describe "RadioDNS::Resolver" do
7
7
  describe "resolve" do
8
- it "should query radiodns.org" do
8
+ before(:each) do
9
9
  mock_resolver = mock()
10
10
  mock_cname = mock()
11
11
  mock_resolver.expects(:getresource).
@@ -14,9 +14,156 @@ describe "RadioDNS::Resolver" do
14
14
  mock_cname.expects(:name).returns('rdns.musicradio.com')
15
15
 
16
16
  Resolv::DNS.expects(:new).returns(mock_resolver)
17
-
17
+ end
18
+ it "should query radiodns.org" do
18
19
  cname = RadioDNS::Resolver.resolve('09580.c586.ce1.fm.radiodns.org')
19
20
  assert_equal 'rdns.musicradio.com', cname
20
21
  end
22
+
23
+ it "should accept hash params too" do
24
+ params = {
25
+ :freq => '09580',
26
+ :pi => 'c586',
27
+ :ecc => 'ce1',
28
+ :bearer => 'fm'
29
+ }
30
+ cname = RadioDNS::Resolver.resolve(params)
31
+ assert_equal 'rdns.musicradio.com', cname
32
+ end
33
+ end
34
+
35
+ describe "construct_fqdn" do
36
+ describe "for FM/VHF bearer" do
37
+ it "should construct a fqdn when ecc is supplied" do
38
+ params = {
39
+ :bearer => 'fm',
40
+ :ecc => 'ce1',
41
+ :pi => 'c585',
42
+ :freq => '09580'
43
+ }
44
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
45
+ assert_equal '09580.c585.ce1.fm.radiodns.org', fqdn
46
+ end
47
+ it "should construct a fqdn when country is supplied" do
48
+ params = {
49
+ :bearer => 'fm',
50
+ :country => 'gb',
51
+ :pi => 'c585',
52
+ :freq => '09580'
53
+ }
54
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
55
+ assert_equal '09580.c585.gb.fm.radiodns.org', fqdn
56
+ end
57
+ it "should raise when country and ecc is supplied" do
58
+ params = {
59
+ :bearer => 'fm',
60
+ :country => 'gb',
61
+ :ecc => 'ce1',
62
+ :pi => 'c585',
63
+ :freq => '09580'
64
+ }
65
+ assert_raises(ArgumentError) {RadioDNS::Resolver.construct_fqdn(params)}
66
+ end
67
+ it "should raise when neither country nor ecc is supplied" do
68
+ params = {
69
+ :bearer => 'fm',
70
+ :pi => 'c585',
71
+ :freq => '09580'
72
+ }
73
+ assert_raises(ArgumentError) {RadioDNS::Resolver.construct_fqdn(params)}
74
+ end
75
+ end
76
+ describe "for DAB bearer" do
77
+ it "should construct a fqdn" do
78
+ params = {
79
+ :bearer => 'dab',
80
+ :ecc => 'ecc',
81
+ :eid => 'eid',
82
+ :sid => 'sid',
83
+ :scids => 'scids'
84
+ }
85
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
86
+ assert_equal 'scids.sid.eid.ecc.dab.radiodns.org', fqdn
87
+ end
88
+ it "should raise if parameters are missing" do
89
+ params = {
90
+ :bearer => 'dab',
91
+ }
92
+ assert_raises(ArgumentError) {RadioDNS::Resolver.construct_fqdn(params)}
93
+ end
94
+ it "should prepend appty-uatype if provided" do
95
+ params = {
96
+ :bearer => 'dab',
97
+ :ecc => 'ecc',
98
+ :eid => 'eid',
99
+ :sid => 'sid',
100
+ :scids => 'scids',
101
+ :appty_uatype => 'appty-uatype'
102
+ }
103
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
104
+ assert_equal 'appty-uatype.scids.sid.eid.ecc.dab.radiodns.org', fqdn
105
+ end
106
+ it "should prepend pa if provided" do
107
+ params = {
108
+ :bearer => 'dab',
109
+ :ecc => 'ecc',
110
+ :eid => 'eid',
111
+ :sid => 'sid',
112
+ :scids => 'scids',
113
+ :pa => 'pa'
114
+ }
115
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
116
+ assert_equal 'pa.scids.sid.eid.ecc.dab.radiodns.org', fqdn
117
+ end
118
+ end
119
+ describe "for DRM bearer" do
120
+ it "should construct a fqdn" do
121
+ params = {
122
+ :bearer => 'drm',
123
+ :sid => 'sid',
124
+ }
125
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
126
+ assert_equal 'sid.drm.radiodns.org', fqdn
127
+ end
128
+ it "should raise if sid is missing" do
129
+ params = {
130
+ :bearer => 'drm',
131
+ }
132
+ assert_raises(ArgumentError) {RadioDNS::Resolver.construct_fqdn(params)}
133
+ end
134
+ end
135
+ describe "for AMSS bearer" do
136
+ it "should construct a fqdn" do
137
+ params = {
138
+ :bearer => 'amss',
139
+ :sid => 'sid',
140
+ }
141
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
142
+ assert_equal 'sid.amss.radiodns.org', fqdn
143
+ end
144
+ it "should raise if sid is missing" do
145
+ params = {
146
+ :bearer => 'amss',
147
+ }
148
+ assert_raises(ArgumentError) {RadioDNS::Resolver.construct_fqdn(params)}
149
+ end
150
+ end
151
+ describe "for hd bearer" do
152
+ it "should construct a fqdn" do
153
+ params = {
154
+ :bearer => 'hd',
155
+ :tx => 'tx',
156
+ :cc => 'cc',
157
+ }
158
+ fqdn = RadioDNS::Resolver.construct_fqdn(params)
159
+ assert_equal 'tx.cc.hd.radiodns.org', fqdn
160
+ end
161
+ it "should raise if tx or cc is missing" do
162
+ params = {
163
+ :bearer => 'hd',
164
+ }
165
+ assert_raises(ArgumentError) {RadioDNS::Resolver.construct_fqdn(params)}
166
+ end
167
+ end
21
168
  end
22
169
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: radiodns
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chris Lowis
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-05 00:00:00 +00:00
13
+ date: 2011-03-06 00:00:00 +00:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -55,7 +55,7 @@ files:
55
55
  - radiodns.gemspec
56
56
  - spec/radiodns_spec.rb
57
57
  has_rdoc: true
58
- homepage: ""
58
+ homepage: http://github.com/chrislo/radiodns
59
59
  licenses: []
60
60
 
61
61
  post_install_message: