sfc-room 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.md +38 -0
- data/Rakefile +9 -0
- data/lib/sfc-room/constants.rb +171 -0
- data/lib/sfc-room/parse.rb +58 -0
- data/lib/sfc-room/room.rb +35 -0
- data/lib/sfc-room/utils.rb +19 -0
- data/lib/sfc-room/version.rb +3 -0
- data/lib/sfc-room.rb +15 -0
- data/sfc-room.gemspec +24 -0
- data/spec/parser_spec.rb +48 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/utils_spec.rb +29 -0
- metadata +62 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# SFCRoom
|
2
|
+
|
3
|
+
SFCRoom is a parser for clasrooms of Keio University Shonan Fujisawa Campus.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'sfc-room'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install sfc-room
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
require 'sfc-room'
|
22
|
+
|
23
|
+
room = SFCRoom.parse('イオタ411')
|
24
|
+
# Try with "i411","Ι411",...
|
25
|
+
# You can use also familliar names such as "サブウェイ","本館","情報基盤センター",...
|
26
|
+
|
27
|
+
room.to_greek #=> 'ι411'
|
28
|
+
room.to_japanese #=> 'イオタ411'
|
29
|
+
room.to_roman #=> 'i411'
|
30
|
+
|
31
|
+
|
32
|
+
## Contributing
|
33
|
+
|
34
|
+
1. Fork it
|
35
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
36
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
37
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
38
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
#coding:UTF-8
|
2
|
+
module SFCRoom
|
3
|
+
module Buildings
|
4
|
+
Alpha = :alpha
|
5
|
+
Omega = :omega
|
6
|
+
Mu = :mu
|
7
|
+
Kappa = :kappa
|
8
|
+
Epsilon = :epsilon
|
9
|
+
Iota = :iota
|
10
|
+
Omicron = :omicron
|
11
|
+
Lambda = :lambda
|
12
|
+
Theta = :theta
|
13
|
+
Delta = :delta
|
14
|
+
Tau = :tau
|
15
|
+
Psi = :psi
|
16
|
+
Phi = :phi
|
17
|
+
Gamma = :gamma
|
18
|
+
Sigma = :sigma
|
19
|
+
Nu = :nu
|
20
|
+
Zeta = :zeta
|
21
|
+
Xi = :xi
|
22
|
+
Eta = :eta
|
23
|
+
Lounge = :lounge
|
24
|
+
GuestHouse = :guest_house
|
25
|
+
Others = :others
|
26
|
+
|
27
|
+
List = [
|
28
|
+
Alpha,
|
29
|
+
Omega,
|
30
|
+
Mu,
|
31
|
+
Kappa,
|
32
|
+
Epsilon,
|
33
|
+
Iota,
|
34
|
+
Omicron,
|
35
|
+
Lambda,
|
36
|
+
Theta,
|
37
|
+
Delta,
|
38
|
+
Tau,
|
39
|
+
Psi,
|
40
|
+
Phi,
|
41
|
+
Gamma,
|
42
|
+
Sigma,
|
43
|
+
Nu,
|
44
|
+
Zeta,
|
45
|
+
Xi,
|
46
|
+
Eta,
|
47
|
+
Lounge,
|
48
|
+
]
|
49
|
+
JapaneseName = {
|
50
|
+
Alpha => 'アルファ',
|
51
|
+
Omega => 'オメガ',
|
52
|
+
Mu => 'ミュー',
|
53
|
+
Kappa => 'カッパ',
|
54
|
+
Epsilon => 'イプシロン',
|
55
|
+
Iota => 'イオタ',
|
56
|
+
Omicron => 'オミクロン',
|
57
|
+
Lambda => 'ラムダ',
|
58
|
+
Theta => 'シータ',
|
59
|
+
Delta => 'デルタ',
|
60
|
+
Tau => 'タウ',
|
61
|
+
Psi => 'サイ',
|
62
|
+
Phi => 'フィー',
|
63
|
+
Gamma => 'ガンマ',
|
64
|
+
Sigma => 'シグマ',
|
65
|
+
Nu => 'ニュー',
|
66
|
+
Zeta => 'ゼータ',
|
67
|
+
Xi => 'グザイ',
|
68
|
+
Eta => 'イータ',
|
69
|
+
Lounge => '学生ラウンジ',
|
70
|
+
GuestHouse => 'セミナーゲストハウス',
|
71
|
+
Others => 'その他',
|
72
|
+
}
|
73
|
+
RomanChar = {
|
74
|
+
Alpha => 'A',
|
75
|
+
#Omega => '',
|
76
|
+
Mu => 'M',
|
77
|
+
Kappa => 'k',
|
78
|
+
Epsilon => 'e',
|
79
|
+
Iota => 'i',
|
80
|
+
Omicron => 'o',
|
81
|
+
Lambda => 'l',
|
82
|
+
#Theta => '',
|
83
|
+
#Delta => '',
|
84
|
+
Tau => 't',
|
85
|
+
#Psi => '',
|
86
|
+
#Phi => '',
|
87
|
+
#Gamma => '',
|
88
|
+
#Sigma => '',
|
89
|
+
#Nu => '',
|
90
|
+
Zeta => 'Z',
|
91
|
+
#Xi => '',
|
92
|
+
#Eta => '',
|
93
|
+
#Lounge => '',
|
94
|
+
#GuestHouse => '',
|
95
|
+
#Others => '',
|
96
|
+
}
|
97
|
+
GreekChar = {
|
98
|
+
Alpha => 'Α',
|
99
|
+
Omega => 'Ω',
|
100
|
+
Mu => 'Μ',
|
101
|
+
Kappa => 'κ',
|
102
|
+
Epsilon => 'ε',
|
103
|
+
Iota => 'ι',
|
104
|
+
Omicron => 'ο',
|
105
|
+
Lambda => 'λ',
|
106
|
+
Theta => 'θ',
|
107
|
+
Delta => 'Δ',
|
108
|
+
Tau => 'τ',
|
109
|
+
Psi => 'Ψ',
|
110
|
+
Phi => 'Φ',
|
111
|
+
Gamma => 'Γ',
|
112
|
+
Sigma => 'Σ',
|
113
|
+
Nu => 'Ν',
|
114
|
+
Zeta => 'Ζ',
|
115
|
+
Xi => 'ξ',
|
116
|
+
Eta => 'η',
|
117
|
+
#Lounge => '',
|
118
|
+
#GuestHouse => '',
|
119
|
+
#Others => '',
|
120
|
+
}
|
121
|
+
Aliases = {
|
122
|
+
Alpha => %w|本館 事務|,
|
123
|
+
Omega => %w||,
|
124
|
+
Mu => %w|メディア|,
|
125
|
+
Kappa => %w||,
|
126
|
+
Epsilon => %w||,
|
127
|
+
Iota => %w||,
|
128
|
+
Omicron => %w||,
|
129
|
+
Lambda => %w||,
|
130
|
+
Theta => %w|講堂|,
|
131
|
+
Delta => %w||,
|
132
|
+
Tau => %w|院棟 大学院棟 ロフト|,
|
133
|
+
Psi => %w||,
|
134
|
+
Phi => %w||,
|
135
|
+
Gamma => %w|体育館 アリーナ|,
|
136
|
+
Sigma => %w|生協 タブリエ レディバード|,
|
137
|
+
Nu => %w|Docomoハウス ドコモハウス DNPハウス 舘内ハウス 森アトリエ IIJハウス デザインスタジオ|,
|
138
|
+
Zeta => %w|情報基盤センター|,
|
139
|
+
Xi => %w|ものづくり工房|,
|
140
|
+
Eta => %w||,
|
141
|
+
Lounge => %w|サブウェイ|,
|
142
|
+
GuestHouse => %w|ゲストハウス|,
|
143
|
+
Others => %w||,
|
144
|
+
}
|
145
|
+
SFSNumber = {
|
146
|
+
Kappa => "1",
|
147
|
+
Epsilon => "2",
|
148
|
+
Iota => "3",
|
149
|
+
Omicron => "4",
|
150
|
+
Lambda => "5",
|
151
|
+
Delta => "6",
|
152
|
+
Tau => "7",
|
153
|
+
Zeta => "8",
|
154
|
+
Nu => "9",
|
155
|
+
Omega => "10",
|
156
|
+
Others => "11",
|
157
|
+
}
|
158
|
+
end
|
159
|
+
|
160
|
+
module Floors
|
161
|
+
N1 = "n1"
|
162
|
+
N2 = "n2"
|
163
|
+
S1 = "s1"
|
164
|
+
S2 = "s2"
|
165
|
+
IIJHouse = 1
|
166
|
+
DocomoHouse = 2
|
167
|
+
DNPHouse = 3
|
168
|
+
TateuchiHouse = 4
|
169
|
+
MoriAtelier = 5
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#coding:utf-8
|
2
|
+
module SFCRoom
|
3
|
+
|
4
|
+
def parse(str)
|
5
|
+
building = nil
|
6
|
+
q = Utils.convert_for_search(str)
|
7
|
+
SFCRoom::Buildings::List.each do |b|
|
8
|
+
arr = [b.to_s]
|
9
|
+
arr.push SFCRoom::Buildings::JapaneseName[b]
|
10
|
+
arr.push SFCRoom::Buildings::RomanChar[b]
|
11
|
+
arr.push SFCRoom::Buildings::GreekChar[b]
|
12
|
+
arr += SFCRoom::Buildings::Aliases[b]
|
13
|
+
arr.delete(nil)
|
14
|
+
arr.each do |word|
|
15
|
+
if q.match(/^#{Utils.convert_for_search word}/)
|
16
|
+
building = b
|
17
|
+
break
|
18
|
+
end
|
19
|
+
end
|
20
|
+
break if building
|
21
|
+
end
|
22
|
+
number = nil
|
23
|
+
floor = nil
|
24
|
+
if building == SFCRoom::Buildings::Delta
|
25
|
+
if m = q.match(/([ns])(\d+)/)
|
26
|
+
number = "#{m[1]}#{m[2]}".upcase
|
27
|
+
floor = "#{m[1]}#{m[2][0,1]}"
|
28
|
+
end
|
29
|
+
elsif building == SFCRoom::Buildings::Tau && m = q.match(/([23][f階])?(ロフト|loft)/)
|
30
|
+
if m[1]
|
31
|
+
number = "#{m[1][0,1]}0"
|
32
|
+
floor = m[1][0,1]
|
33
|
+
else
|
34
|
+
number = "20"
|
35
|
+
floor = "2"
|
36
|
+
end
|
37
|
+
elsif building == SFCRoom::Buildings::Nu && m = q.match(/iij|docomo|ドコモ|舘内|森|dnp/i)
|
38
|
+
if q.match(/iij/i)
|
39
|
+
floor = SFCRoom::Floors::IIJHouse
|
40
|
+
elsif q.match(/docomo|ドコモ/i)
|
41
|
+
floor = SFCRoom::Floors::DocomoHouse
|
42
|
+
elsif q.match(/dnp/i)
|
43
|
+
floor = SFCRoom::Floors::DNPHouse
|
44
|
+
elsif q.match(/舘内/i)
|
45
|
+
floor = SFCRoom::Floors::TateuchiHouse
|
46
|
+
elsif q.match(/森/i)
|
47
|
+
floor = SFCRoom::Floors::MoriAtelier
|
48
|
+
end
|
49
|
+
elsif m = q.match(/(\d+)/)
|
50
|
+
number = m[1]
|
51
|
+
floor = m[1][0,1]
|
52
|
+
end
|
53
|
+
|
54
|
+
return Room.new building,number,floor
|
55
|
+
end
|
56
|
+
module_function :parse
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class SFCRoom::Room
|
2
|
+
def initialize building,room,floor=nil
|
3
|
+
@building = building
|
4
|
+
@room = room
|
5
|
+
@floor = floor
|
6
|
+
end
|
7
|
+
def inspect
|
8
|
+
"[SFCRoom #{to_roman}]"
|
9
|
+
end
|
10
|
+
def to_s
|
11
|
+
to_japanese
|
12
|
+
end
|
13
|
+
def to_greek
|
14
|
+
"#{building_in_greek}#{@room}"
|
15
|
+
end
|
16
|
+
def to_roman
|
17
|
+
"#{building_in_roman}#{@room}"
|
18
|
+
end
|
19
|
+
def to_japanese
|
20
|
+
"#{building_in_japanese}#{@room}"
|
21
|
+
end
|
22
|
+
def building_in_japanese
|
23
|
+
SFCRoom::Buildings::JapaneseName[@building]
|
24
|
+
end
|
25
|
+
def building_in_greek
|
26
|
+
SFCRoom::Buildings::GreekChar[@building] || SFCRoom::Buildings::JapaneseName[@building]
|
27
|
+
end
|
28
|
+
def building_in_roman
|
29
|
+
SFCRoom::Buildings::RomanChar[@building] || SFCRoom::Buildings::JapaneseName[@building]
|
30
|
+
end
|
31
|
+
def building_number_for_sfs
|
32
|
+
SFCRoom::Buildings::SFSNumber[@building] || SFCRoom::Buildings::SFSNumber[SFCRoom::Buildings::Others]
|
33
|
+
end
|
34
|
+
attr_reader :building,:floor,:room
|
35
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#coding:UTF-8
|
2
|
+
require 'nkf'
|
3
|
+
require 'jcode' if RUBY_VERSION < "1.9"
|
4
|
+
|
5
|
+
module SFCRoom::Utils
|
6
|
+
def self.greek_downcase str
|
7
|
+
str.tr('Α-Ω','α-ω')
|
8
|
+
end
|
9
|
+
def self.greek_upcase str
|
10
|
+
str.tr('α-ω','Α-Ω')
|
11
|
+
end
|
12
|
+
def self.hankaku_zenkaku str
|
13
|
+
NKF::nkf('-Z1 -Ww',str)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.convert_for_search str
|
17
|
+
self.hankaku_zenkaku self.greek_downcase(str).downcase
|
18
|
+
end
|
19
|
+
end
|
data/lib/sfc-room.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#coding:utf-8
|
2
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
3
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
4
|
+
|
5
|
+
directory = File.expand_path(File.dirname(__FILE__))
|
6
|
+
|
7
|
+
require directory + "/sfc-room/version.rb"
|
8
|
+
require directory + "/sfc-room/constants.rb"
|
9
|
+
require directory + "/sfc-room/utils.rb"
|
10
|
+
require directory + "/sfc-room/room.rb"
|
11
|
+
require directory + "/sfc-room/parse.rb"
|
12
|
+
|
13
|
+
module SFCRoom
|
14
|
+
# Your code goes here...
|
15
|
+
end
|
data/sfc-room.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "sfc-room/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sfc-room"
|
7
|
+
s.version = SFCRoom::VERSION
|
8
|
+
s.authors = ["ymrl"]
|
9
|
+
s.email = ["ymrl@ymrl.net"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Parser for SFC classrooms}
|
12
|
+
s.description = %q{Parser for SFC classrooms}
|
13
|
+
|
14
|
+
s.rubyforge_project = "sfc-room"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
end
|
data/spec/parser_spec.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#coding:utf-8
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
3
|
+
|
4
|
+
describe SFCRoom do
|
5
|
+
describe 'parser' do
|
6
|
+
it 'can parse all roman classroom' do
|
7
|
+
include SFCRoom
|
8
|
+
room = SFCRoom.parse('i11')
|
9
|
+
room.building.should eql(SFCRoom::Buildings::Iota)
|
10
|
+
room.room.should eql('11')
|
11
|
+
room.floor.should eql('1')
|
12
|
+
end
|
13
|
+
it 'can parse greek classroom' do
|
14
|
+
include SFCRoom
|
15
|
+
room = SFCRoom.parse('ι411')
|
16
|
+
room.building.should eql(SFCRoom::Buildings::Iota)
|
17
|
+
room.room.should eql('411')
|
18
|
+
room.floor.should eql('4')
|
19
|
+
room.to_s.should eql('イオタ411')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'can parse japanese classroom' do
|
23
|
+
room = SFCRoom.parse('ラムダ19')
|
24
|
+
room.building.should eql(SFCRoom::Buildings::Lambda)
|
25
|
+
room.room.should eql('19')
|
26
|
+
room.floor.should eql('1')
|
27
|
+
room.to_s.should eql('ラムダ19')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'can parse delta classroom' do
|
31
|
+
room = SFCRoom.parse('ΔS113')
|
32
|
+
room.building.should eql(SFCRoom::Buildings::Delta)
|
33
|
+
room.room.should eql('S113')
|
34
|
+
room.floor.should eql('s1')
|
35
|
+
room.to_s.should eql('デルタS113')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'can parse tau loft' do
|
39
|
+
room = SFCRoom.parse('タウ館2階ロフト')
|
40
|
+
room.building.should eql(SFCRoom::Buildings::Tau)
|
41
|
+
room.room.should eql('20')
|
42
|
+
room.floor.should eql('2')
|
43
|
+
room.to_s.should eql('タウ20')
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#coding:utf-8
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
3
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
|
4
|
+
|
5
|
+
if RUBY_VERSION < "1.9"
|
6
|
+
$KCODE="UTF-8"
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
require 'sfc-room'
|
11
|
+
|
12
|
+
#Dir[File.join(File.dirname(__FILE__), "..", "lib", "models", "**/*.rb")].each do |f|
|
13
|
+
# require f
|
14
|
+
#end
|
data/spec/utils_spec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#coding:utf-8
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
3
|
+
describe SFCRoom do
|
4
|
+
include SFCRoom::Utils
|
5
|
+
describe 'Utils' do
|
6
|
+
down = 'αβγδεζηθικλμνξοπρςστυφχψω'
|
7
|
+
up = 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ'
|
8
|
+
other = 'hogehogeほげほげ'
|
9
|
+
it 'can convert downcase greek to upcase ' do
|
10
|
+
str = SFCRoom::Utils.greek_upcase(down)
|
11
|
+
str.should eql(up)
|
12
|
+
end
|
13
|
+
it 'can convert upcase greek to downcase ' do
|
14
|
+
str = SFCRoom::Utils.greek_downcase(up)
|
15
|
+
str.should eql(down)
|
16
|
+
end
|
17
|
+
it 'not effect to other characters' do
|
18
|
+
str = SFCRoom::Utils.greek_downcase(other)
|
19
|
+
str.should eql(other)
|
20
|
+
str = SFCRoom::Utils.greek_upcase(other)
|
21
|
+
str.should eql(other)
|
22
|
+
str = SFCRoom::Utils.greek_upcase(up)
|
23
|
+
str.should eql(up)
|
24
|
+
str = SFCRoom::Utils.greek_downcase(down)
|
25
|
+
str.should eql(down)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sfc-room
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- ymrl
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-23 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Parser for SFC classrooms
|
15
|
+
email:
|
16
|
+
- ymrl@ymrl.net
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- lib/sfc-room.rb
|
26
|
+
- lib/sfc-room/constants.rb
|
27
|
+
- lib/sfc-room/parse.rb
|
28
|
+
- lib/sfc-room/room.rb
|
29
|
+
- lib/sfc-room/utils.rb
|
30
|
+
- lib/sfc-room/version.rb
|
31
|
+
- sfc-room.gemspec
|
32
|
+
- spec/parser_spec.rb
|
33
|
+
- spec/spec_helper.rb
|
34
|
+
- spec/utils_spec.rb
|
35
|
+
homepage: ''
|
36
|
+
licenses: []
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project: sfc-room
|
55
|
+
rubygems_version: 1.8.11
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: Parser for SFC classrooms
|
59
|
+
test_files:
|
60
|
+
- spec/parser_spec.rb
|
61
|
+
- spec/spec_helper.rb
|
62
|
+
- spec/utils_spec.rb
|