sdp 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,167 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'sdp/parser'
3
+ require 'base64'
4
+
5
+ describe SDP::Parser do
6
+ before :each do
7
+ @parser = SDP::Parser.new
8
+ end
9
+
10
+ context "does NOT raise when missing required values" do
11
+ it "version" do
12
+ lambda do
13
+ @parser.parse "o=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\nt=11111 22222\n"
14
+ end.should_not raise_error Parslet::ParseFailed
15
+ end
16
+
17
+ it "origin" do
18
+ lambda do
19
+ @parser.parse "v=0\ns=This is a test session\nt=11111 22222\n"
20
+ end.should_not raise_error Parslet::ParseFailed
21
+ end
22
+
23
+ it "name" do
24
+ lambda do
25
+ @parser.parse "v=0\no=steve 1234 5555 IN IP4 123.33.22.123\nt=11111 22222\n"
26
+ end.should_not raise_error Parslet::ParseFailed
27
+ end
28
+
29
+ it "timing" do
30
+ lambda do
31
+ @parser.parse "v=0\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\n"
32
+ end.should_not raise_error Parslet::ParseFailed
33
+ end
34
+ end
35
+
36
+ context "parses" do
37
+ it "required values" do
38
+ sdp = "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\nt=11111 22222\nm=audio 49170 RTP/AVP 0\n"
39
+ lambda { @parser.parse sdp }.should_not raise_error
40
+ sdp_hash = @parser.parse sdp
41
+ sdp_hash.should == {
42
+ :session_section => {
43
+ :protocol_version=>"1",
44
+ :username=>"steve",
45
+ :id=>"1234",
46
+ :version=>"5555",
47
+ :network_type=>"IN",
48
+ :address_type=>"IP4",
49
+ :unicast_address=>"123.33.22.123",
50
+ :name=>"This is a test session",
51
+ :start_time=>"11111",
52
+ :stop_time=>"22222"
53
+ },
54
+ :media_sections=>[
55
+ { :media=>"audio", :port=>"49170", :protocol=>"RTP/AVP", :format=>"0" }
56
+ ]
57
+ }
58
+ end
59
+
60
+ it "other combinations" do
61
+ sdps = [
62
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=prompt\na=recvonly\na=bobo:the clown\nm=video 49170/2 RTP/AVP 31\na=hotness\na=attribute2:do stuff\nm=audio 12335 RTP/AVP 99\na=make:it now\n",
63
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=prompt\na=recvonly\na=bobo:the clown\n",
64
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=prompt\n",
65
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=clear:password\n",
66
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n",
67
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h\n",
68
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\n",
69
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\n",
70
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\n",
71
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\n",
72
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\n",
73
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\n",
74
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\n",
75
+ "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\n"
76
+ ]
77
+
78
+ sdps.each do |sdp|
79
+ lambda { @parser.parse sdp }.should_not raise_error
80
+ end
81
+ end
82
+
83
+ it "alternate email address" do
84
+ sdp = "e=Jane Doe <j.doe@example.com>\r\n"
85
+ sdp_hash = @parser.parse sdp
86
+ sdp_hash[:session_section][:email_address].should == "Jane Doe <j.doe@example.com>"
87
+ end
88
+
89
+ it "connection data that uses TTL value" do
90
+ sdp = "c=IN IP4 224.2.36.42/127\r\n"
91
+ sdp_hash = @parser.parse sdp
92
+ sdp_hash[:session_section][:connection_address].should == "224.2.36.42/127"
93
+ end
94
+
95
+ it "connection data that uses IPv6 and address count" do
96
+ sdp = "c=IN IP6 FF15::101/3\r\n"
97
+ sdp_hash = @parser.parse sdp
98
+ sdp_hash[:session_section][:connection_address].should == "FF15::101/3"
99
+ end
100
+
101
+ it "repeat times in seconds" do
102
+ sdp = "r=604800 3600 0 90000\r\n"
103
+ sdp_hash = @parser.parse sdp
104
+ sdp_hash[:session_section][:repeat_interval].should == "604800"
105
+ sdp_hash[:session_section][:active_duration].should == "3600"
106
+ sdp_hash[:session_section][:offsets_from_start_time].should == "0 90000"
107
+ end
108
+
109
+ it "time zones" do
110
+ sdp = "z=2882844526 -1h 2898848070 0\r\n"
111
+ sdp_hash = @parser.parse sdp
112
+ sdp_hash[:session_section][:time_zones].first[:adjustment_time].should == "2882844526"
113
+ sdp_hash[:session_section][:time_zones].first[:offset].should == "-1h"
114
+ sdp_hash[:session_section][:time_zones].last[:adjustment_time].should == "2898848070"
115
+ sdp_hash[:session_section][:time_zones].last[:offset].should == "0"
116
+ end
117
+
118
+ context "encryption keys" do
119
+ it "clear" do
120
+ sdp = "k=clear:password\r\n"
121
+ sdp_hash = @parser.parse sdp
122
+ sdp_hash[:session_section][:encryption_method].should == "clear"
123
+ sdp_hash[:session_section][:encryption_key].should == "password"
124
+ end
125
+
126
+ it "base64" do
127
+ # #encode64 adds newlines every 60 chars; remove them--they're unnecessary
128
+ password = Base64.encode64('password').gsub("\n", '')
129
+ sdp = "k=base64:#{password}\r\n"
130
+ sdp_hash = @parser.parse sdp
131
+ sdp_hash[:session_section][:encryption_method].should == "base64"
132
+ sdp_hash[:session_section][:encryption_key].should == password
133
+ end
134
+
135
+ it "uri" do
136
+ uri = "http://aserver.com/thing.pdf"
137
+ sdp = "k=uri:#{uri}\r\n"
138
+ sdp_hash = @parser.parse sdp
139
+ sdp_hash[:session_section][:encryption_method].should == "uri"
140
+ sdp_hash[:session_section][:encryption_key].should == uri
141
+ end
142
+
143
+ it "prompt" do
144
+ sdp = "k=prompt\r\n"
145
+ sdp_hash = @parser.parse sdp
146
+ sdp_hash[:session_section][:encryption_method].should == "prompt"
147
+ sdp_hash[:session_section][:encryption_key].should be_nil
148
+ end
149
+ end
150
+ end
151
+
152
+ context "parses EOLs" do
153
+ it "parses \\r\\n" do
154
+ sdp = "v=123\r\n"
155
+ lambda { @parser.parse sdp }.should_not raise_error
156
+ sdp_hash = @parser.parse sdp
157
+ sdp_hash[:session_section][:protocol_version].should == "123"
158
+ end
159
+
160
+ it "parses \\n" do
161
+ sdp = "v=456\n"
162
+ lambda { @parser.parse sdp }.should_not raise_error
163
+ sdp_hash = @parser.parse sdp
164
+ sdp_hash[:session_section][:protocol_version].should == "456"
165
+ end
166
+ end
167
+ end
data/spec/sdp_spec.rb ADDED
@@ -0,0 +1,181 @@
1
+ require 'spec_helper'
2
+ require 'sdp'
3
+
4
+ SDP_TEXT =<<EOF
5
+ v=0
6
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
7
+ s=SDP Seminar
8
+ i=A Seminar on the session description protocol
9
+ u=http://www.example.com/seminars/sdp.pdf
10
+ e=j.doe@example.com (Jane Doe)
11
+ p=+1 617 555-6011
12
+ c=IN IP4 224.2.17.12/127
13
+ b=CT:1000
14
+ t=2873397496 2873404696
15
+ r=604800 3600 0 90000
16
+ z=2882844526 -1h
17
+ k=clear:password
18
+ a=recvonly
19
+ a=type:test
20
+ m=audio 49170 RTP/AVP 0
21
+ m=video 51372 RTP/AVP 99
22
+ a=rtpmap:99 h263-1998/90000
23
+ EOF
24
+
25
+ describe SDP do
26
+ it "should have a VERSION constant" do
27
+ SDP.const_get('VERSION').should_not be_empty
28
+ end
29
+
30
+ context "parses SDP text into a Hash" do
31
+ before do
32
+ @parsed_sdp = SDP.parse SDP_TEXT
33
+ end
34
+
35
+ it "has a version number of 0" do
36
+ @parsed_sdp.protocol_version.should == "0"
37
+ @parsed_sdp.protocol_version.class.should == String
38
+ end
39
+
40
+ context "origin" do
41
+ it "has a username of 'jdoe'" do
42
+ @parsed_sdp.username.should == 'jdoe'
43
+ @parsed_sdp.username.class.should == String
44
+ end
45
+
46
+ it "has a session_id of '2890844526'" do
47
+ @parsed_sdp.id.should == "2890844526"
48
+ @parsed_sdp.id.class.should == String
49
+ end
50
+
51
+ it "has a session_version of '2890842807'" do
52
+ @parsed_sdp.version.should == '2890842807'
53
+ @parsed_sdp.version.class.should == String
54
+ end
55
+
56
+ it "has a net_type of 'IN'" do
57
+ @parsed_sdp.network_type.should == "IN"
58
+ @parsed_sdp.network_type.class.should == String
59
+ end
60
+
61
+ it "has a address_type of 'IP4'" do
62
+ @parsed_sdp.address_type.should == "IP4"
63
+ @parsed_sdp.address_type.class.should == String
64
+ end
65
+
66
+ it "has a unicast_address of '10.47.16.5'" do
67
+ @parsed_sdp.unicast_address.should == "10.47.16.5"
68
+ @parsed_sdp.unicast_address.class.should == String
69
+ end
70
+ end
71
+
72
+ it "has a session name of 'SDP Seminar'" do
73
+ @parsed_sdp.name.should == "SDP Seminar"
74
+ @parsed_sdp.name.class.should == String
75
+ end
76
+
77
+ it "has a session information of 'A Seminar on the session description protocol'" do
78
+ @parsed_sdp.information.should == "A Seminar on the session description protocol"
79
+ @parsed_sdp.information.class.should == String
80
+ end
81
+
82
+ it "has a URI of 'http://www.example.com/seminars/sdp.pdf'" do
83
+ @parsed_sdp.uri.should == "http://www.example.com/seminars/sdp.pdf"
84
+ @parsed_sdp.uri.class.should == String
85
+ end
86
+
87
+ it "has an email address of 'j.doe@example.com (Jane Doe)'" do
88
+ @parsed_sdp.email_address.should == "j.doe@example.com (Jane Doe)"
89
+ @parsed_sdp.email_address.class.should == String
90
+ end
91
+
92
+ it "has a phone number of '+1 617 555-6011'" do
93
+ @parsed_sdp.phone_number.should == "+1 617 555-6011"
94
+ @parsed_sdp.phone_number.class.should == String
95
+ end
96
+
97
+ it "has a bandwidth type of 'CT'" do
98
+ @parsed_sdp.bandwidth_type.should == "CT"
99
+ @parsed_sdp.bandwidth_type.class.should == String
100
+ end
101
+
102
+ it "has a bandwidth of '1000'" do
103
+ @parsed_sdp.bandwidth.should == "1000"
104
+ @parsed_sdp.bandwidth.class.should == String
105
+ end
106
+
107
+ it "has a start time of '2873397496'" do
108
+ @parsed_sdp.start_time.should == '2873397496'
109
+ @parsed_sdp.start_time.class.should == String
110
+ end
111
+
112
+ it "has a stop time of '2873404696'" do
113
+ @parsed_sdp.stop_time.should == '2873404696'
114
+ @parsed_sdp.stop_time.class.should == String
115
+ end
116
+
117
+ it "has a repeat interval of '604800'" do
118
+ @parsed_sdp.repeat_interval.should == '604800'
119
+ @parsed_sdp.repeat_interval.class.should == String
120
+ end
121
+
122
+ it "has an active duration of '3600'" do
123
+ @parsed_sdp.active_duration.should == '3600'
124
+ @parsed_sdp.active_duration.class.should == String
125
+ end
126
+
127
+ it "has a offsets from start time of '0 90000'" do
128
+ @parsed_sdp.offsets_from_start_time.should == '0 90000'
129
+ @parsed_sdp.offsets_from_start_time.class.should == String
130
+ end
131
+
132
+ it "has a time zone adjustment of '2882844526'" do
133
+ @parsed_sdp.time_zones[:adjustment_time].should == '2882844526'
134
+ @parsed_sdp.time_zones[:adjustment_time].class.should == String
135
+ end
136
+
137
+ it "has a time zone offset of '-1h'" do
138
+ @parsed_sdp.time_zones[:offset].should == '-1h'
139
+ @parsed_sdp.time_zones[:offset].class.should == String
140
+ end
141
+
142
+ context "connection data" do
143
+ it "has a nettype of 'IN'" do
144
+ @parsed_sdp.network_type.should == "IN"
145
+ @parsed_sdp.network_type.class.should == String
146
+ end
147
+
148
+ it "has a addrtype of :IP4" do
149
+ @parsed_sdp.address_type.should == "IP4"
150
+ @parsed_sdp.address_type.class.should == String
151
+ end
152
+
153
+ it "has a connection address of '224.2.17.12/127'" do
154
+ @parsed_sdp.connection_address.should == '224.2.17.12/127'
155
+ @parsed_sdp.connection_address.class.should == String
156
+ end
157
+ end
158
+
159
+ context "session attributes" do
160
+ it "has an attribute of type 'recvonly' with an empty value" do
161
+ @parsed_sdp.attributes[0][:attribute].should == 'recvonly'
162
+ @parsed_sdp.attributes[0][:value].should == nil
163
+ end
164
+
165
+ it "has a second attribute 'type' with value 'test'" do
166
+ @parsed_sdp.attributes[1][:attribute].should == 'type'
167
+ @parsed_sdp.attributes[1][:value].should == 'test'
168
+ end
169
+ end
170
+ end
171
+
172
+ context "PROTOCOL_VERSION" do
173
+ it "has an PROTOCOL_VERSION constant defined" do
174
+ SDP.const_defined?('PROTOCOL_VERSION').should be_true
175
+ end
176
+
177
+ it "is set to 0" do
178
+ SDP::PROTOCOL_VERSION.should == 0
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,3 @@
1
+ require 'rspec'
2
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
3
+ require 'sdp/version'
@@ -0,0 +1,25 @@
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
@@ -0,0 +1,14 @@
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 ADDED
@@ -0,0 +1,13 @@
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
+
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sdp
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - sloveless
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-22 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: parslet
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 0
30
+ - 0
31
+ version: 1.0.0
32
+ type: :runtime
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: bundler
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 1
44
+ - 0
45
+ - 0
46
+ version: 1.0.0
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: yard
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 0
59
+ - 6
60
+ - 0
61
+ version: 0.6.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: *id003
65
+ description: "This gem allows for parsing SDP (Session Description Protocol) information in to a Ruby object, making it easy to read and work with that data. It also allows for easily creating SDP objects that can be converted to text using #to_s."
66
+ email: steve.loveless@gmail.com
67
+ executables: []
68
+
69
+ extensions: []
70
+
71
+ extra_rdoc_files:
72
+ - README.rdoc
73
+ - ChangeLog.rdoc
74
+ - LICENSE.txt
75
+ files:
76
+ - .document
77
+ - .infinity_test
78
+ - .rspec
79
+ - .yardopts
80
+ - ChangeLog.rdoc
81
+ - Gemfile
82
+ - Gemfile.lock
83
+ - LICENSE.txt
84
+ - README.rdoc
85
+ - Rakefile
86
+ - features/sdp_create.feature
87
+ - features/sdp_get.feature
88
+ - features/step_definitions/sdp_create_steps.rb
89
+ - features/step_definitions/sdp_get_steps.rb
90
+ - features/support/env.rb
91
+ - features/support/sdp_file.txt
92
+ - gemspec.yml
93
+ - lib/sdp.rb
94
+ - lib/sdp/description.rb
95
+ - lib/sdp/parser.rb
96
+ - lib/sdp/session_template.erb
97
+ - lib/sdp/version.rb
98
+ - sdp.gemspec
99
+ - spec/sdp/description_spec.rb
100
+ - spec/sdp/parser_spec.rb
101
+ - spec/sdp_spec.rb
102
+ - spec/spec_helper.rb
103
+ - tasks/metrics.rake
104
+ - tasks/roodi_config.yml
105
+ - tasks/stats.rake
106
+ has_rdoc: yard
107
+ homepage: http://rubygems.org/gems/sdp
108
+ licenses:
109
+ - MIT
110
+ post_install_message:
111
+ rdoc_options: []
112
+
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ segments:
129
+ - 1
130
+ - 3
131
+ - 6
132
+ version: 1.3.6
133
+ requirements: []
134
+
135
+ rubyforge_project: sdp
136
+ rubygems_version: 1.3.7
137
+ signing_key:
138
+ specification_version: 3
139
+ summary: Parse and create SDP (Session Description Protocol) text based on RFC4566.
140
+ test_files:
141
+ - spec/sdp/description_spec.rb
142
+ - spec/sdp/parser_spec.rb
143
+ - spec/sdp_spec.rb