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.
- data/.document +3 -0
- data/.infinity_test +4 -0
- data/.rspec +3 -0
- data/.yardopts +1 -0
- data/ChangeLog.rdoc +7 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +111 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +141 -0
- data/Rakefile +39 -0
- data/features/sdp_create.feature +15 -0
- data/features/sdp_get.feature +35 -0
- data/features/step_definitions/sdp_create_steps.rb +46 -0
- data/features/step_definitions/sdp_get_steps.rb +23 -0
- data/features/support/env.rb +3 -0
- data/features/support/sdp_file.txt +12 -0
- data/gemspec.yml +15 -0
- data/lib/sdp/description.rb +172 -0
- data/lib/sdp/parser.rb +116 -0
- data/lib/sdp/session_template.erb +41 -0
- data/lib/sdp/version.rb +4 -0
- data/lib/sdp.rb +23 -0
- data/sdp.gemspec +114 -0
- data/spec/sdp/description_spec.rb +370 -0
- data/spec/sdp/parser_spec.rb +167 -0
- data/spec/sdp_spec.rb +181 -0
- data/spec/spec_helper.rb +3 -0
- data/tasks/metrics.rake +25 -0
- data/tasks/roodi_config.yml +14 -0
- data/tasks/stats.rake +13 -0
- metadata +143 -0
@@ -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
|
data/spec/spec_helper.rb
ADDED
data/tasks/metrics.rake
ADDED
@@ -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
|