sdp 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|