sdp 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.rdoc +7 -0
- data/README.rdoc +7 -11
- data/Rakefile +14 -2
- data/lib/sdp.rb +15 -10
- data/lib/sdp/description.rb +8 -6
- data/lib/sdp/parse_error.rb +2 -0
- data/lib/sdp/parser.rb +7 -1
- data/lib/sdp/runtime_error.rb +2 -0
- data/lib/sdp/version.rb +1 -2
- data/sdp.gemspec +3 -3
- data/spec/sdp/parser_spec.rb +16 -19
- data/spec/sdp_spec.rb +36 -28
- data/spec/spec_helper.rb +4 -2
- metadata +28 -29
- data/tasks/metrics.rake +0 -25
- data/tasks/roodi_config.yml +0 -14
- data/tasks/stats.rake +0 -13
data/ChangeLog.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
= sdp
|
2
2
|
|
3
|
-
*
|
3
|
+
* http://rubygems.org/gems/sdp
|
4
4
|
* {Documentation}[http://rubydoc.info/gems/sdp]
|
5
|
-
* {Email}[steve.loveless
|
5
|
+
* {Email}[mailto://steve.loveless@gmail.com]
|
6
6
|
|
7
7
|
== Description
|
8
8
|
|
@@ -126,16 +126,12 @@ to use for an SDP description.
|
|
126
126
|
== Requirements
|
127
127
|
|
128
128
|
* Rubies (tested, at least):
|
129
|
-
* 1.8.7-
|
130
|
-
* 1.9.
|
131
|
-
* 1.9.
|
132
|
-
* JRuby 1.5
|
129
|
+
* 1.8.7-p352
|
130
|
+
* 1.9.2-p290
|
131
|
+
* 1.9.3-p0
|
132
|
+
* JRuby 1.6.5
|
133
133
|
* Gems:
|
134
|
-
* parslet,
|
135
|
-
* Gems (development):
|
136
|
-
* bundler, ~> 1.0.0
|
137
|
-
* rspec, >= 2.6.0
|
138
|
-
* yard, >= 0.6.0
|
134
|
+
* parslet, >= 1.1.0
|
139
135
|
|
140
136
|
== Install
|
141
137
|
|
data/Rakefile
CHANGED
@@ -2,14 +2,26 @@ require 'rubygems'
|
|
2
2
|
require 'bundler/gem_tasks'
|
3
3
|
require 'rspec/core/rake_task'
|
4
4
|
require 'yard'
|
5
|
+
require 'code_statistics'
|
5
6
|
|
7
|
+
# RSpec & `gem test`
|
6
8
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
7
9
|
t.ruby_opts = "-w"
|
8
10
|
t.rspec_opts = ['--format', 'documentation', '--color']
|
9
11
|
end
|
10
12
|
task :test => :spec
|
11
13
|
|
14
|
+
# Yard
|
12
15
|
YARD::Rake::YardocTask.new
|
13
16
|
|
14
|
-
#
|
15
|
-
|
17
|
+
# code_statistics
|
18
|
+
STATS_DIRECTORIES = [
|
19
|
+
%w(Library lib/),
|
20
|
+
%w(Behavior\ tests features/),
|
21
|
+
%w(Unit\ tests spec/)
|
22
|
+
].collect { |name, dir| [ name, "#{dir}" ] }.select { |name, dir| File.directory?(dir) }
|
23
|
+
|
24
|
+
desc "Report code statistics (KLOCs, etc) from the application"
|
25
|
+
task :stats do
|
26
|
+
CodeStatistics.new(*STATS_DIRECTORIES).to_s
|
27
|
+
end
|
data/lib/sdp.rb
CHANGED
@@ -1,23 +1,28 @@
|
|
1
|
-
require 'sdp/version'
|
2
|
-
require 'sdp/description'
|
3
|
-
require 'sdp/parser'
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/sdp/version')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/sdp/description')
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/sdp/parser')
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/sdp/parse_error')
|
4
5
|
|
5
|
-
# The only use for this class is the
|
6
|
+
# The only use for this class is the +#parse+ method, which is in this
|
6
7
|
# base class solely for convenience. Other than this method, this
|
7
8
|
# base class doesn't really do anything.
|
8
9
|
class SDP
|
9
10
|
|
10
|
-
# Creates a parser and parses the given text in to an SDP::Description
|
11
|
+
# Creates a parser and parses the given text in to an +SDP::Description+
|
11
12
|
# object.
|
12
13
|
#
|
13
14
|
# @param [String] sdp_text The text from an SDP description.
|
14
15
|
# @return [SDP::Description] The object that represents the description
|
15
|
-
#
|
16
|
+
# that was parsed.
|
17
|
+
# @raise [SDP::ParseError] If parsing fails, raise an SDP::ParseError instead
|
18
|
+
# of a Parslet exception that might confuse SDP users.
|
16
19
|
def self.parse sdp_text
|
17
|
-
|
20
|
+
begin
|
21
|
+
sdp_hash = SDP::Parser.new.parse sdp_text
|
22
|
+
rescue Parslet::UnconsumedInput => ex
|
23
|
+
raise SDP::ParseError, ex
|
24
|
+
end
|
25
|
+
|
18
26
|
SDP::Description.new(sdp_hash)
|
19
27
|
end
|
20
28
|
end
|
21
|
-
|
22
|
-
# Reclass so we can raise our own Exceptions.
|
23
|
-
class SDP::RuntimeError < StandardError; end;
|
data/lib/sdp/description.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'erb'
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/runtime_error')
|
3
4
|
|
4
5
|
class SDP
|
5
6
|
PROTOCOL_VERSION = 0
|
6
7
|
|
7
|
-
# Represents an SDP description as defined in
|
8
|
+
# Represents an SDP description as defined in
|
9
|
+
# {RFC 4566}[http://tools.ietf.org/html/rfc4566]. This class allows
|
8
10
|
# for creating an object so you can, in turn, create a String that
|
9
11
|
# represents an SDP description. The String, then can be used by
|
10
12
|
# other protocols that depend on an SDP description.
|
11
13
|
#
|
12
|
-
# SDP::Description objects are initialized empty (i.e. no fields are
|
14
|
+
# +SDP::Description+ objects are initialized empty (i.e. no fields are
|
13
15
|
# defined), putting the onus on you to add fields in the proper order.
|
14
|
-
# After building the description up, call
|
16
|
+
# After building the description up, call +#to_s+ to render it. This
|
15
17
|
# will render the String with fields in order that they were added
|
16
18
|
# to the object, so be sure to add them according to spec!
|
17
19
|
class Description < Hash
|
@@ -31,7 +33,7 @@ class SDP
|
|
31
33
|
#
|
32
34
|
# @param [Symbol] field_type
|
33
35
|
# @return [] Returns whatever type the value is that's stored
|
34
|
-
#
|
36
|
+
# in the Hash key.
|
35
37
|
def define_read_field_method(field_type)
|
36
38
|
define_method field_type do
|
37
39
|
if field_type == :media_sections
|
@@ -99,7 +101,7 @@ class SDP
|
|
99
101
|
end
|
100
102
|
|
101
103
|
# @param [Hash] session_as_hash Pass this in to use these values instead
|
102
|
-
#
|
104
|
+
# of building your own from scratch.
|
103
105
|
def initialize(session_as_hash=nil)
|
104
106
|
if session_as_hash.nil?
|
105
107
|
self[:session_section] = {}
|
@@ -122,7 +124,7 @@ class SDP
|
|
122
124
|
super
|
123
125
|
end
|
124
126
|
|
125
|
-
# Turns the current SDP::Description object into the SDP description,
|
127
|
+
# Turns the current +SDP::Description+ object into the SDP description,
|
126
128
|
# ready to be used.
|
127
129
|
#
|
128
130
|
# @return [String] The SDP description.
|
data/lib/sdp/parser.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'sdp'
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../sdp')
|
2
|
+
require 'rubygems'
|
2
3
|
require 'parslet'
|
3
4
|
|
4
5
|
# Class for parsing SDP description text, ideally when receiving as some sort
|
@@ -10,6 +11,11 @@ require 'parslet'
|
|
10
11
|
# the RFC 4566 implies that this description isn't valid (because that field is
|
11
12
|
# required). Instead ofraising an exception, the parser lets the
|
12
13
|
# SDP::Description class deal with this.
|
14
|
+
#
|
15
|
+
# Also, an object of this class parses key/value pairs, where, as a by-product
|
16
|
+
# of using +Parslet+, values end up being +Parslet::Slice+ objects. It's worth
|
17
|
+
# pointing out that while those are not Strings, they mostly behave like
|
18
|
+
# Strings. See the Parslet docs for more info.
|
13
19
|
class SDP::Parser < Parslet::Parser
|
14
20
|
# All of the fields
|
15
21
|
rule(:version) { str('v=') >> field_value.as(:protocol_version) >> eol }
|
data/lib/sdp/version.rb
CHANGED
data/sdp.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
that can be converted to text using}
|
13
13
|
s.email = %q{steve.loveless@gmail.com}
|
14
14
|
s.extra_rdoc_files = Dir.glob("*.rdoc")
|
15
|
-
s.files = Dir.glob("{features,lib,spec
|
15
|
+
s.files = Dir.glob("{features,lib,spec}/**/*") + Dir.glob("*.rdoc") +
|
16
16
|
%w(.gemtest .rspec .yardopts Gemfile Rakefile sdp.gemspec)
|
17
17
|
s.homepage = %q{http://github.com/turboladen/sdp}
|
18
18
|
s.licenses = %w(MIT)
|
@@ -20,13 +20,13 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.summary = %q{Parse and create SDP (Session Description Protocol) text based on RFC4566.}
|
21
21
|
s.test_files = Dir.glob("spec/**/*")
|
22
22
|
|
23
|
-
s.add_runtime_dependency(%q<parslet>, ["
|
23
|
+
s.add_runtime_dependency(%q<parslet>, [">= 1.1.0"])
|
24
24
|
|
25
25
|
s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
|
26
26
|
s.add_development_dependency(%q<code_statistics>, ["~> 0.2.13"])
|
27
27
|
s.add_development_dependency(%q<cucumber>, ["~> 1.1.0"])
|
28
|
-
s.add_development_dependency(%q<metric_fu>, [">= 2.1.0"])
|
29
28
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
30
29
|
s.add_development_dependency(%q<rspec>, [">= 2.6.0"])
|
30
|
+
s.add_development_dependency(%q<simplecov>, [">= 0.5.0"])
|
31
31
|
s.add_development_dependency(%q<yard>, [">= 0.6.0"])
|
32
32
|
end
|
data/spec/sdp/parser_spec.rb
CHANGED
@@ -170,25 +170,22 @@ describe SDP::Parser do
|
|
170
170
|
it "all possible fields in 1 section" do
|
171
171
|
sdp = "m=audio 0 RTP/AVP 96\r\ni=Test info\r\nc=IN IP4 0.0.0.0\r\nb=AS:40\r\nk=prompt\r\na=rtpmap:96 MP4A-LATM/44100/2\r\na=fmtp:96 cpresent=0;config=400027200000\r\n"
|
172
172
|
sdp_hash = @parser.parse sdp
|
173
|
-
sdp_hash[:media_sections].first
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
"fmtp"
|
190
|
-
sdp_hash[:media_sections].first[:attributes].last[:value].should ==
|
191
|
-
"96 cpresent=0;config=400027200000"
|
173
|
+
first_media_section = sdp_hash[:media_sections].first
|
174
|
+
first_media_section[:media].should == "audio"
|
175
|
+
first_media_section[:port].should == "0"
|
176
|
+
first_media_section[:protocol].should == "RTP/AVP"
|
177
|
+
first_media_section[:format].should == "96"
|
178
|
+
first_media_section[:information].should == "Test info"
|
179
|
+
first_media_section[:connection_network_type].should == "IN"
|
180
|
+
first_media_section[:connection_address_type].should == "IP4"
|
181
|
+
first_media_section[:connection_address].should == "0.0.0.0"
|
182
|
+
first_media_section[:bandwidth_type].should == "AS"
|
183
|
+
first_media_section[:bandwidth].should == "40"
|
184
|
+
first_media_section[:encryption_method].should == "prompt"
|
185
|
+
first_media_section[:attributes].first[:attribute].should == "rtpmap"
|
186
|
+
first_media_section[:attributes].first[:value].should == "96 MP4A-LATM/44100/2"
|
187
|
+
first_media_section[:attributes].last[:attribute].should == "fmtp"
|
188
|
+
first_media_section[:attributes].last[:value].should == "96 cpresent=0;config=400027200000"
|
192
189
|
end
|
193
190
|
end
|
194
191
|
|
data/spec/sdp_spec.rb
CHANGED
@@ -23,144 +23,152 @@ a=rtpmap:99 h263-1998/90000
|
|
23
23
|
EOF
|
24
24
|
|
25
25
|
describe SDP do
|
26
|
-
it "
|
27
|
-
SDP.const_get('VERSION').
|
26
|
+
it "VERSION is 0.2.5" do
|
27
|
+
SDP.const_get('VERSION').should eql '0.2.5'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "raises when parsing malformed SDP text" do
|
31
|
+
expect { SDP.parse("pants") }.to raise_error SDP::ParseError
|
28
32
|
end
|
29
33
|
|
30
34
|
context "parses SDP text into a Hash" do
|
31
35
|
before do
|
32
|
-
|
36
|
+
begin
|
37
|
+
@parsed_sdp = SDP.parse SDP_TEXT
|
38
|
+
rescue Parslet::ParseFailed => error
|
39
|
+
puts error, parser.root.error_tree
|
40
|
+
end
|
33
41
|
end
|
34
42
|
|
35
43
|
it "has a version number of 0" do
|
36
44
|
@parsed_sdp.protocol_version.should == "0"
|
37
|
-
@parsed_sdp.protocol_version.
|
45
|
+
@parsed_sdp.protocol_version.should be_a Parslet::Slice
|
38
46
|
end
|
39
47
|
|
40
48
|
context "origin" do
|
41
49
|
it "has a username of 'jdoe'" do
|
42
50
|
@parsed_sdp.username.should == 'jdoe'
|
43
|
-
@parsed_sdp.username.
|
51
|
+
@parsed_sdp.username.should be_a Parslet::Slice
|
44
52
|
end
|
45
53
|
|
46
54
|
it "has a session_id of '2890844526'" do
|
47
55
|
@parsed_sdp.id.should == "2890844526"
|
48
|
-
@parsed_sdp.id.
|
56
|
+
@parsed_sdp.id.should be_a Parslet::Slice
|
49
57
|
end
|
50
58
|
|
51
59
|
it "has a session_version of '2890842807'" do
|
52
60
|
@parsed_sdp.version.should == '2890842807'
|
53
|
-
@parsed_sdp.version.
|
61
|
+
@parsed_sdp.version.should be_a Parslet::Slice
|
54
62
|
end
|
55
63
|
|
56
64
|
it "has a net_type of 'IN'" do
|
57
65
|
@parsed_sdp.network_type.should == "IN"
|
58
|
-
@parsed_sdp.network_type.
|
66
|
+
@parsed_sdp.network_type.should be_a Parslet::Slice
|
59
67
|
end
|
60
68
|
|
61
69
|
it "has a address_type of 'IP4'" do
|
62
70
|
@parsed_sdp.address_type.should == "IP4"
|
63
|
-
@parsed_sdp.address_type.
|
71
|
+
@parsed_sdp.address_type.should be_a Parslet::Slice
|
64
72
|
end
|
65
73
|
|
66
74
|
it "has a unicast_address of '10.47.16.5'" do
|
67
75
|
@parsed_sdp.unicast_address.should == "10.47.16.5"
|
68
|
-
@parsed_sdp.unicast_address.
|
76
|
+
@parsed_sdp.unicast_address.should be_a Parslet::Slice
|
69
77
|
end
|
70
78
|
end
|
71
79
|
|
72
80
|
it "has a session name of 'SDP Seminar'" do
|
73
81
|
@parsed_sdp.name.should == "SDP Seminar"
|
74
|
-
@parsed_sdp.name.
|
82
|
+
@parsed_sdp.name.should be_a Parslet::Slice
|
75
83
|
end
|
76
84
|
|
77
85
|
it "has a session information of 'A Seminar on the session description protocol'" do
|
78
86
|
@parsed_sdp.information.should == "A Seminar on the session description protocol"
|
79
|
-
@parsed_sdp.information.
|
87
|
+
@parsed_sdp.information.should be_a Parslet::Slice
|
80
88
|
end
|
81
89
|
|
82
90
|
it "has a URI of 'http://www.example.com/seminars/sdp.pdf'" do
|
83
91
|
@parsed_sdp.uri.should == "http://www.example.com/seminars/sdp.pdf"
|
84
|
-
@parsed_sdp.uri.
|
92
|
+
@parsed_sdp.uri.should be_a Parslet::Slice
|
85
93
|
end
|
86
94
|
|
87
95
|
it "has an email address of 'j.doe@example.com (Jane Doe)'" do
|
88
96
|
@parsed_sdp.email_address.should == "j.doe@example.com (Jane Doe)"
|
89
|
-
@parsed_sdp.email_address.
|
97
|
+
@parsed_sdp.email_address.should be_a Parslet::Slice
|
90
98
|
end
|
91
99
|
|
92
100
|
it "has a phone number of '+1 617 555-6011'" do
|
93
101
|
@parsed_sdp.phone_number.should == "+1 617 555-6011"
|
94
|
-
@parsed_sdp.phone_number.
|
102
|
+
@parsed_sdp.phone_number.should be_a Parslet::Slice
|
95
103
|
end
|
96
104
|
|
97
105
|
context "bandwidth" do
|
98
106
|
it "has a bandwidth type of 'CT'" do
|
99
107
|
@parsed_sdp.bandwidth_type.should == "CT"
|
100
|
-
@parsed_sdp.bandwidth_type.
|
108
|
+
@parsed_sdp.bandwidth_type.should be_a Parslet::Slice
|
101
109
|
end
|
102
110
|
|
103
111
|
it "has a bandwidth of '1000'" do
|
104
112
|
@parsed_sdp.bandwidth.should == "1000"
|
105
|
-
@parsed_sdp.bandwidth.
|
113
|
+
@parsed_sdp.bandwidth.should be_a Parslet::Slice
|
106
114
|
end
|
107
115
|
end
|
108
116
|
|
109
117
|
context "timing" do
|
110
118
|
it "has a start time of '2873397496'" do
|
111
119
|
@parsed_sdp.start_time.should == '2873397496'
|
112
|
-
@parsed_sdp.start_time.
|
120
|
+
@parsed_sdp.start_time.should be_a Parslet::Slice
|
113
121
|
end
|
114
122
|
|
115
123
|
it "has a stop time of '2873404696'" do
|
116
124
|
@parsed_sdp.stop_time.should == '2873404696'
|
117
|
-
@parsed_sdp.stop_time.
|
125
|
+
@parsed_sdp.stop_time.should be_a Parslet::Slice
|
118
126
|
end
|
119
127
|
end
|
120
128
|
|
121
129
|
context "repeat times" do
|
122
130
|
it "has a repeat interval of '604800'" do
|
123
131
|
@parsed_sdp.repeat_interval.should == '604800'
|
124
|
-
@parsed_sdp.repeat_interval.
|
132
|
+
@parsed_sdp.repeat_interval.should be_a Parslet::Slice
|
125
133
|
end
|
126
134
|
|
127
135
|
it "has an active duration of '3600'" do
|
128
136
|
@parsed_sdp.active_duration.should == '3600'
|
129
|
-
@parsed_sdp.active_duration.
|
137
|
+
@parsed_sdp.active_duration.should be_a Parslet::Slice
|
130
138
|
end
|
131
139
|
|
132
140
|
it "has a offsets from start time of '0 90000'" do
|
133
141
|
@parsed_sdp.offsets_from_start_time.should == '0 90000'
|
134
|
-
@parsed_sdp.offsets_from_start_time.
|
142
|
+
@parsed_sdp.offsets_from_start_time.should be_a Parslet::Slice
|
135
143
|
end
|
136
144
|
end
|
137
145
|
|
138
146
|
context "time zones" do
|
139
147
|
it "has a time zone adjustment of '2882844526'" do
|
140
148
|
@parsed_sdp.time_zones[:adjustment_time].should == '2882844526'
|
141
|
-
@parsed_sdp.time_zones[:adjustment_time].
|
149
|
+
@parsed_sdp.time_zones[:adjustment_time].should be_a Parslet::Slice
|
142
150
|
end
|
143
151
|
|
144
152
|
it "has a time zone offset of '-1h'" do
|
145
153
|
@parsed_sdp.time_zones[:offset].should == '-1h'
|
146
|
-
@parsed_sdp.time_zones[:offset].
|
154
|
+
@parsed_sdp.time_zones[:offset].should be_a Parslet::Slice
|
147
155
|
end
|
148
156
|
end
|
149
157
|
|
150
158
|
context "connection data" do
|
151
159
|
it "has a connection network type of 'IN'" do
|
152
160
|
@parsed_sdp.connection_network_type.should == "IN"
|
153
|
-
@parsed_sdp.connection_network_type.
|
161
|
+
@parsed_sdp.connection_network_type.should be_a Parslet::Slice
|
154
162
|
end
|
155
163
|
|
156
164
|
it "has a addrtype of :IP4" do
|
157
165
|
@parsed_sdp.connection_address_type.should == "IP4"
|
158
|
-
@parsed_sdp.connection_address_type.
|
166
|
+
@parsed_sdp.connection_address_type.should be_a Parslet::Slice
|
159
167
|
end
|
160
168
|
|
161
169
|
it "has a connection address of '224.2.17.12/127'" do
|
162
170
|
@parsed_sdp.connection_address.should == '224.2.17.12/127'
|
163
|
-
@parsed_sdp.connection_address.
|
171
|
+
@parsed_sdp.connection_address.should be_a Parslet::Slice
|
164
172
|
end
|
165
173
|
end
|
166
174
|
|
@@ -177,7 +185,7 @@ describe SDP do
|
|
177
185
|
end
|
178
186
|
end
|
179
187
|
|
180
|
-
|
188
|
+
describe "PROTOCOL_VERSION" do
|
181
189
|
it "has an PROTOCOL_VERSION constant defined" do
|
182
190
|
SDP.const_defined?('PROTOCOL_VERSION').should be_true
|
183
191
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
2
4
|
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
3
5
|
require 'sdp/version'
|
4
6
|
|
5
|
-
SDP_MISSING_TIME = "v=0\r\no=- 1809368942 3379601213 IN IP4 127.0.0.1\r\ns=Secret Agent from SomaFM\r\ni=Downtempo Spy Lounge\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=x-qt-text-cmt:Orban Opticodec-PCx-qt-text-nam:Secret Agent from SomaFMx-qt-text-inf:Downtempo Spy Loungecontrol:*\r\nm=audio 0 RTP/AVP 96\r\na=rtpmap:96 MP4A-LATM/44100/2a=fmtp:96 cpresent=0;config=400027200000a=control:trackID=1\r\n"
|
7
|
+
SDP_MISSING_TIME = "v=0\r\no=- 1809368942 3379601213 IN IP4 127.0.0.1\r\ns=Secret Agent from SomaFM\r\ni=Downtempo Spy Lounge\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=x-qt-text-cmt:Orban Opticodec-PCx-qt-text-nam:Secret Agent from SomaFMx-qt-text-inf:Downtempo Spy Loungecontrol:*\r\nm=audio 0 RTP/AVP 96\r\na=rtpmap:96 MP4A-LATM/44100/2a=fmtp:96 cpresent=0;config=400027200000a=control:trackID=1\r\n"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: parslet
|
16
|
-
requirement: &
|
16
|
+
requirement: &70223149043040 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 1.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70223149043040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &70223149042480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>'
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70223149042480
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: code_statistics
|
38
|
-
requirement: &
|
38
|
+
requirement: &70223149041980 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.2.13
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70223149041980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cucumber
|
49
|
-
requirement: &
|
49
|
+
requirement: &70223149041460 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,43 +54,43 @@ dependencies:
|
|
54
54
|
version: 1.1.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70223149041460
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement: &
|
59
|
+
name: rake
|
60
|
+
requirement: &70223149040940 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version:
|
65
|
+
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70223149040940
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement: &
|
70
|
+
name: rspec
|
71
|
+
requirement: &70223149040440 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: 2.6.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70223149040440
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
|
-
name:
|
82
|
-
requirement: &
|
81
|
+
name: simplecov
|
82
|
+
requirement: &70223149039920 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
87
|
+
version: 0.5.0
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70223149039920
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &70223149039400 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: 0.6.0
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70223149039400
|
102
102
|
description: ! "This gem allows for parsing SDP (Session Description\n Protocol)
|
103
103
|
information in to a Ruby object, making it easy to read \n and work with that
|
104
104
|
data. It also allows for easily creating SDP objects \n that can be converted
|
@@ -120,7 +120,9 @@ files:
|
|
120
120
|
- features/support/env.rb
|
121
121
|
- features/support/sdp_file.txt
|
122
122
|
- lib/sdp/description.rb
|
123
|
+
- lib/sdp/parse_error.rb
|
123
124
|
- lib/sdp/parser.rb
|
125
|
+
- lib/sdp/runtime_error.rb
|
124
126
|
- lib/sdp/session_template.erb
|
125
127
|
- lib/sdp/version.rb
|
126
128
|
- lib/sdp.rb
|
@@ -128,9 +130,6 @@ files:
|
|
128
130
|
- spec/sdp/parser_spec.rb
|
129
131
|
- spec/sdp_spec.rb
|
130
132
|
- spec/spec_helper.rb
|
131
|
-
- tasks/metrics.rake
|
132
|
-
- tasks/roodi_config.yml
|
133
|
-
- tasks/stats.rake
|
134
133
|
- ChangeLog.rdoc
|
135
134
|
- LICENSE.rdoc
|
136
135
|
- README.rdoc
|
@@ -161,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
160
|
version: '0'
|
162
161
|
requirements: []
|
163
162
|
rubyforge_project:
|
164
|
-
rubygems_version: 1.8.
|
163
|
+
rubygems_version: 1.8.10
|
165
164
|
signing_key:
|
166
165
|
specification_version: 3
|
167
166
|
summary: Parse and create SDP (Session Description Protocol) text based on RFC4566.
|
data/tasks/metrics.rake
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'metric_fu'
|
2
|
-
|
3
|
-
MetricFu::Configuration.run do |config|
|
4
|
-
#define which metrics you want to use
|
5
|
-
config.metrics = [:churn, :flog, :flay, :reek, :roodi, :rcov, :stats]
|
6
|
-
config.graphs = [:flog, :flay, :reek, :roodi, :rcov, :stats]
|
7
|
-
config.churn = { :start_date => "1 year ago", :minimum_churn_count => 10 }
|
8
|
-
config.flay = { :dirs_to_flay => ['lib'],
|
9
|
-
:minimum_score => 10,
|
10
|
-
:filetypes => ['rb', 'erb'] }
|
11
|
-
config.flog = { :dirs_to_flog => ['lib'] }
|
12
|
-
config.rcov = { :environment => 'test',
|
13
|
-
:test_files => ["spec/**/*_spec.rb"],
|
14
|
-
:rcov_opts => ["--sort coverage",
|
15
|
-
"--no-html",
|
16
|
-
"--text-coverage",
|
17
|
-
"--spec-only",
|
18
|
-
"--no-color",
|
19
|
-
"--profile",
|
20
|
-
"--exclude /gems/,/Library/"]
|
21
|
-
}
|
22
|
-
config.reek = { :dirs_to_reek => ['lib'] }
|
23
|
-
config.roodi = { :dirs_to_roodi => ['lib'], :roodi_config => "tasks/roodi_config.yml" }
|
24
|
-
config.graph_engine = :bluff
|
25
|
-
end
|
data/tasks/roodi_config.yml
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
---
|
2
|
-
AssignmentInConditionalCheck: { }
|
3
|
-
CaseMissingElseCheck: { }
|
4
|
-
ClassLineCountCheck: { line_count: 300 }
|
5
|
-
ClassNameCheck: { pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/ }
|
6
|
-
CyclomaticComplexityBlockCheck: { complexity: 4 }
|
7
|
-
CyclomaticComplexityMethodCheck: { complexity: 8 }
|
8
|
-
EmptyRescueBodyCheck: { }
|
9
|
-
ForLoopCheck: { }
|
10
|
-
MethodLineCountCheck: { line_count: 30 }
|
11
|
-
MethodNameCheck: { pattern: !ruby/regexp /^[_a-z<>=\[\]|+-\/\*`]+[_a-z0-9_<>=~@\[\]]*[=!\?]?$/ }
|
12
|
-
ModuleLineCountCheck: { line_count: 300 }
|
13
|
-
ModuleNameCheck: { pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/ }
|
14
|
-
ParameterNumberCheck: { parameter_count: 5 }
|
data/tasks/stats.rake
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'code_statistics'
|
2
|
-
|
3
|
-
STATS_DIRECTORIES = [
|
4
|
-
%w(Library lib/),
|
5
|
-
%w(Behavior\ tests features/),
|
6
|
-
%w(Unit\ tests spec/)
|
7
|
-
].collect { |name, dir| [ name, "#{dir}" ] }.select { |name, dir| File.directory?(dir) }
|
8
|
-
|
9
|
-
desc "Report code statistics (KLOCs, etc) from the application"
|
10
|
-
task :stats do
|
11
|
-
CodeStatistics.new(*STATS_DIRECTORIES).to_s
|
12
|
-
end
|
13
|
-
|