sdp 0.1.0

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.
@@ -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