sportdb-sync 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -3
- data/lib/sportdb/sync.rb +2 -2
- data/lib/sportdb/sync/club.rb +4 -4
- data/lib/sportdb/sync/country.rb +2 -2
- data/lib/sportdb/sync/event.rb +2 -2
- data/lib/sportdb/sync/league.rb +1 -4
- data/lib/sportdb/sync/season.rb +1 -1
- data/lib/sportdb/sync/sync.rb +79 -30
- data/lib/sportdb/sync/version.rb +4 -2
- data/test/helper.rb +1 -1
- data/test/test_country.rb +6 -6
- data/test/test_league.rb +6 -6
- data/test/test_misc.rb +3 -3
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e69405f0f6aab33c299ed7479747f1adb6e90282
|
4
|
+
data.tar.gz: ef45575530d5b0e899ff08f69089462486fd580a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f969dc99e13d4b5b98fddf63925e44f24e799cc5ae7d6ee8db34738e1140c9bbe8657199f389586a9ef6a16b895e39207f3e34e98b264c978934a853ee08800e
|
7
|
+
data.tar.gz: 51a8e71e961fdd780561a038afe381026c5aca39838f210825b72f2aafc583bc85db62e5cf6190e32ec1256a983d410de26e1033b5ed9257020819e6894f4bd2
|
data/Rakefile
CHANGED
@@ -3,7 +3,7 @@ require './lib/sportdb/sync/version.rb'
|
|
3
3
|
|
4
4
|
Hoe.spec 'sportdb-sync' do
|
5
5
|
|
6
|
-
self.version = SportDb::Sync::VERSION
|
6
|
+
self.version = SportDb::Module::Sync::VERSION
|
7
7
|
|
8
8
|
self.summary = "sportdb-sync - sport.db sync helpers for leagues, seasons, clubs, match schedules and results, and more"
|
9
9
|
self.description = summary
|
@@ -20,8 +20,8 @@ Hoe.spec 'sportdb-sync' do
|
|
20
20
|
self.licenses = ['Public Domain']
|
21
21
|
|
22
22
|
self.extra_deps = [
|
23
|
-
['sportdb-
|
24
|
-
['sportdb-models',
|
23
|
+
['sportdb-catalogs', '>= 1.0.0'],
|
24
|
+
['sportdb-models', '>= 2.0.2'],
|
25
25
|
]
|
26
26
|
|
27
27
|
self.spec_extras = {
|
data/lib/sportdb/sync.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'sportdb/
|
3
|
+
require 'sportdb/catalogs'
|
4
4
|
require 'sportdb/models' ## add sql database support
|
5
5
|
|
6
6
|
|
@@ -16,4 +16,4 @@ require 'sportdb/sync/club'
|
|
16
16
|
require 'sportdb/sync/sync'
|
17
17
|
|
18
18
|
|
19
|
-
puts SportDb::Sync.banner # say hello
|
19
|
+
puts SportDb::Module::Sync.banner # say hello
|
data/lib/sportdb/sync/club.rb
CHANGED
@@ -50,8 +50,8 @@ module SportDb
|
|
50
50
|
# finders
|
51
51
|
|
52
52
|
def self.find_or_create( club )
|
53
|
-
## note: assume "canonical uniquie" names
|
54
|
-
rec = Model::Team.find_by(
|
53
|
+
## note: assume "canonical uniquie" names for now for clubs
|
54
|
+
rec = Model::Team.find_by( name: club.name )
|
55
55
|
if rec.nil?
|
56
56
|
|
57
57
|
## todo/fix: move auto-key gen to structs for re(use)!!!!!!
|
@@ -61,7 +61,7 @@ module SportDb
|
|
61
61
|
|
62
62
|
attribs = {
|
63
63
|
key: key,
|
64
|
-
|
64
|
+
name: club.name,
|
65
65
|
country_id: Sync::Country.find_or_create( club.country ).id,
|
66
66
|
club: true,
|
67
67
|
national: false ## check -is default anyway - use - why? why not?
|
@@ -71,7 +71,7 @@ module SportDb
|
|
71
71
|
attribs[:code] = club.code if club.code ## add code (abbreviation) if present
|
72
72
|
|
73
73
|
if club.alt_names.empty? == false
|
74
|
-
attribs[:
|
74
|
+
attribs[:alt_names] = club.alt_names.join('|')
|
75
75
|
end
|
76
76
|
|
77
77
|
rec = Model::Team.create!( attribs )
|
data/lib/sportdb/sync/country.rb
CHANGED
@@ -57,8 +57,8 @@ module SportDb
|
|
57
57
|
attribs = {
|
58
58
|
key: country.key,
|
59
59
|
name: country.name,
|
60
|
-
code: country.
|
61
|
-
fifa: country.fifa,
|
60
|
+
code: country.code, ## fix: uses fifa code now (should be iso-alpha3 if available)
|
61
|
+
## fifa: country.fifa,
|
62
62
|
area: 1,
|
63
63
|
pop: 1
|
64
64
|
}
|
data/lib/sportdb/sync/event.rb
CHANGED
@@ -79,8 +79,8 @@ module SportDb
|
|
79
79
|
## otherwise use 2017, 7, 1
|
80
80
|
## start_at use year and 7,1 e.g. Date.new( 2017, 7, 1 )
|
81
81
|
## hack: fix/todo1!!
|
82
|
-
## add "fake"
|
83
|
-
attribs[:
|
82
|
+
## add "fake" start_date for now
|
83
|
+
attribs[:start_date] = if season.year? ## e.g. assume 2018 etc.
|
84
84
|
Date.new( season.start_year, 1, 1 )
|
85
85
|
else ## assume 2014/15 etc.
|
86
86
|
Date.new( season.start_year, 7, 1 )
|
data/lib/sportdb/sync/league.rb
CHANGED
@@ -40,11 +40,8 @@ module SportDb
|
|
40
40
|
def self.find_or_create( league )
|
41
41
|
rec = find( league )
|
42
42
|
if rec.nil?
|
43
|
-
## use title and not name - why? why not?
|
44
|
-
## quick fix: change name to title
|
45
|
-
|
46
43
|
attribs = { key: league.key,
|
47
|
-
|
44
|
+
name: league.name }
|
48
45
|
|
49
46
|
if league.country
|
50
47
|
attribs[ :country_id ] = Sync::Country.find_or_create( league.country ).id
|
data/lib/sportdb/sync/season.rb
CHANGED
data/lib/sportdb/sync/sync.rb
CHANGED
@@ -6,14 +6,14 @@ module SportDb
|
|
6
6
|
|
7
7
|
class NationalTeam
|
8
8
|
def self.find_or_create( team )
|
9
|
-
rec = Model::Team.find_by(
|
9
|
+
rec = Model::Team.find_by( name: team.name )
|
10
10
|
if rec.nil?
|
11
11
|
puts "add national team: #{team.key}, #{team.name}, #{team.country.name} (#{team.country.key})"
|
12
12
|
|
13
13
|
### note: key expected three or more lowercase letters a-z /\A[a-z]{3,}\z/
|
14
14
|
attribs = {
|
15
15
|
key: team.key, ## note: always use downcase fifa code for now!!!
|
16
|
-
|
16
|
+
name: team.name,
|
17
17
|
code: team.code,
|
18
18
|
country_id: Sync::Country.find_or_create( team.country ).id,
|
19
19
|
club: false,
|
@@ -21,7 +21,7 @@ module SportDb
|
|
21
21
|
}
|
22
22
|
|
23
23
|
if team.alt_names.empty? == false
|
24
|
-
attribs[:
|
24
|
+
attribs[:alt_names] = team.alt_names.join('|')
|
25
25
|
end
|
26
26
|
|
27
27
|
rec = Model::Team.create!( attribs )
|
@@ -64,13 +64,20 @@ module SportDb
|
|
64
64
|
|
65
65
|
class Round
|
66
66
|
def self.find_or_create( round, event: )
|
67
|
-
rec = Model::Round.find_by(
|
67
|
+
rec = Model::Round.find_by( name: round.name, event_id: event.id )
|
68
68
|
if rec.nil?
|
69
|
+
## find last pos - check if it can be nil?
|
70
|
+
max_pos = Model::Round.where( event_id: event.id ).maximum( 'pos' )
|
71
|
+
max_pos = max_pos ? max_pos+1 : 1
|
72
|
+
|
69
73
|
attribs = { event_id: event.id,
|
70
|
-
|
71
|
-
pos:
|
72
|
-
start_at: event.start_at.to_date
|
74
|
+
name: round.name,
|
75
|
+
pos: max_pos
|
73
76
|
}
|
77
|
+
|
78
|
+
## todo/fix: check if round has (optional) start or end date and add!!!
|
79
|
+
## attribs[ :start_date] = round.start_date.to_date
|
80
|
+
|
74
81
|
rec = Model::Round.create!( attribs )
|
75
82
|
end
|
76
83
|
rec
|
@@ -80,12 +87,18 @@ module SportDb
|
|
80
87
|
|
81
88
|
class Group
|
82
89
|
def self.find_or_create( group, event: )
|
83
|
-
rec = Model::Group.find_by(
|
90
|
+
rec = Model::Group.find_by( name: group.name, event_id: event.id )
|
84
91
|
if rec.nil?
|
92
|
+
## find last pos - check if it can be nil?
|
93
|
+
max_pos = Model::Group.where( event_id: event.id ).maximum( 'pos' )
|
94
|
+
max_pos = max_pos ? max_pos+1 : 1
|
95
|
+
|
85
96
|
attribs = { event_id: event.id,
|
86
|
-
|
87
|
-
pos:
|
97
|
+
name: group.name,
|
98
|
+
pos: max_pos
|
88
99
|
}
|
100
|
+
|
101
|
+
## todo/fix: check/add optional group key (was: pos before)!!!!
|
89
102
|
rec = Model::Group.create!( attribs )
|
90
103
|
end
|
91
104
|
## todo/fix: add/update teams in group too!!!!!
|
@@ -96,7 +109,7 @@ module SportDb
|
|
96
109
|
|
97
110
|
class Stage
|
98
111
|
def self.find( name, event: )
|
99
|
-
Model::Stage.find_by(
|
112
|
+
Model::Stage.find_by( name: name, event_id: event.id )
|
100
113
|
end
|
101
114
|
def self.find!( name, event: )
|
102
115
|
rec = find( name, event: event )
|
@@ -112,10 +125,8 @@ module SportDb
|
|
112
125
|
def self.find_or_create( name, event: )
|
113
126
|
rec = find( name, event: event )
|
114
127
|
if rec.nil?
|
115
|
-
## use title and not name - why? why not?
|
116
|
-
## quick fix: change name to title
|
117
128
|
attribs = { event_id: event.id,
|
118
|
-
|
129
|
+
name: name,
|
119
130
|
}
|
120
131
|
rec = Model::Stage.create!( attribs )
|
121
132
|
end
|
@@ -125,21 +136,28 @@ module SportDb
|
|
125
136
|
|
126
137
|
|
127
138
|
|
128
|
-
class Match
|
139
|
+
class Match
|
140
|
+
### todo/fix: rename to create!! (add update support later) !!!!
|
141
|
+
## use update_by_round or update_by_date or update_by_teams or such
|
142
|
+
## NO easy (unique always auto-id match) possible!!!!!!
|
129
143
|
def self.create_or_update( match, event: )
|
130
144
|
## note: MUST find round, thus, use bang (!)
|
131
145
|
|
132
146
|
## todo/check: allow strings too - why? why not?
|
133
147
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
148
|
+
round_rec = if match.round
|
149
|
+
## query for round - allow string or round rec
|
150
|
+
round_name = match.round.is_a?( String ) ? match.round : match.round.name
|
151
|
+
Model::Round.find_by!( event_id: event.id,
|
152
|
+
name: round_name )
|
153
|
+
else # note: allow matches WITHOUT rounds too (e.g. England Football League 1888 and others)
|
154
|
+
nil
|
155
|
+
end
|
138
156
|
|
139
157
|
## todo/check: allow fallback with db lookup if NOT found in cache - why? why not?
|
140
158
|
## or better use Sync::Team.find_or_create( team ) !!!!!!! to auto-create on first hit!
|
141
159
|
## || Team.find_or_create( team1 ) -- note: does NOT work for string (only recs) - what to do?
|
142
|
-
## || Model::Team.find_by!(
|
160
|
+
## || Model::Team.find_by!( name: team1_name )
|
143
161
|
team1_name = match.team1.is_a?( String ) ? match.team1 : match.team1.name
|
144
162
|
team1_rec = Team.cache[ team1_name ]
|
145
163
|
team2_name = match.team2.is_a?( String ) ? match.team2 : match.team2.name
|
@@ -147,32 +165,63 @@ module SportDb
|
|
147
165
|
|
148
166
|
## check optional group (e.g. Group A, etc.)
|
149
167
|
group_rec = if match.group
|
150
|
-
|
168
|
+
group_name = match.group.is_a?( String ) ? match.group : match.group.name
|
151
169
|
Model::Group.find_by!( event_id: event.id,
|
152
|
-
|
170
|
+
name: group_name )
|
153
171
|
else
|
154
172
|
nil
|
155
173
|
end
|
156
174
|
|
175
|
+
## check optional stage (e.g. Regular, Play Off, Relegation, etc. )
|
176
|
+
stage_rec = if match.stage
|
177
|
+
stage_name = match.stage.is_a?( String ) ? match.stage : match.stage.name
|
178
|
+
Model::Stage.find_by!( event_id: event.id,
|
179
|
+
name: stage_name )
|
180
|
+
else
|
181
|
+
nil
|
182
|
+
end
|
183
|
+
|
184
|
+
### todo/check: what happens if there's more than one match? exception raised??
|
185
|
+
rec = if round_rec
|
186
|
+
## add match status too? allows [abandoned] and [replay] in same round
|
187
|
+
Model::Match.find_by( round_id: round_rec.id,
|
188
|
+
team1_id: team1_rec.id,
|
189
|
+
team2_id: team2_rec.id )
|
190
|
+
else
|
191
|
+
## always assume new record for now
|
192
|
+
## check for date or such - why? why not?
|
193
|
+
nil
|
194
|
+
end
|
157
195
|
|
158
|
-
rec = Model::Game.find_by( round_id: round_rec.id,
|
159
|
-
team1_id: team1_rec.id,
|
160
|
-
team2_id: team2_rec.id )
|
161
196
|
if rec.nil?
|
162
|
-
|
197
|
+
## find last pos - check if it can be nil? yes, is nil if no records found
|
198
|
+
max_pos = Model::Match.where( event_id: event.id ).maximum( 'pos' )
|
199
|
+
max_pos = max_pos ? max_pos+1 : 1
|
200
|
+
|
201
|
+
attribs = { event_id: event.id, ## todo/fix: change to data struct too?
|
163
202
|
team1_id: team1_rec.id,
|
164
203
|
team2_id: team2_rec.id,
|
165
|
-
pos:
|
166
|
-
|
204
|
+
pos: max_pos,
|
205
|
+
date: match.date.to_date, ## todo/fix: split and add date & time!!!!
|
167
206
|
score1: match.score1,
|
168
207
|
score2: match.score2,
|
169
208
|
score1i: match.score1i,
|
170
|
-
score2i: match.score2i
|
209
|
+
score2i: match.score2i,
|
210
|
+
score1et: match.score1et,
|
211
|
+
score2et: match.score2et,
|
212
|
+
score1p: match.score1p,
|
213
|
+
score2p: match.score2p,
|
214
|
+
status: match.status }
|
215
|
+
|
216
|
+
attribs[ :round_id ] = round_rec.id if round_rec
|
171
217
|
attribs[ :group_id ] = group_rec.id if group_rec
|
218
|
+
attribs[ :stage_id ] = stage_rec.id if stage_rec
|
172
219
|
|
173
|
-
rec = Model::
|
220
|
+
rec = Model::Match.create!( attribs )
|
174
221
|
else
|
175
222
|
# update - todo
|
223
|
+
puts "!! ERROR - match updates not yet supported (only inserts); sorry"
|
224
|
+
exit 1
|
176
225
|
end
|
177
226
|
rec
|
178
227
|
end
|
data/lib/sportdb/sync/version.rb
CHANGED
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
module SportDb
|
5
|
+
module Module
|
5
6
|
module Sync
|
6
7
|
|
7
8
|
MAJOR = 1 ## todo: namespace inside version or something - why? why not??
|
8
|
-
MINOR =
|
9
|
-
PATCH =
|
9
|
+
MINOR = 1
|
10
|
+
PATCH = 1
|
10
11
|
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
11
12
|
|
12
13
|
def self.version
|
@@ -22,4 +23,5 @@ module Sync
|
|
22
23
|
end
|
23
24
|
|
24
25
|
end # module Sync
|
26
|
+
end # module Module
|
25
27
|
end # module SportDb
|
data/test/helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
## note: use the local version of sportdb gems
|
2
2
|
$LOAD_PATH.unshift( File.expand_path( '../sportdb-formats/lib' ))
|
3
|
-
$LOAD_PATH.unshift( File.expand_path( '../sportdb-
|
3
|
+
$LOAD_PATH.unshift( File.expand_path( '../sportdb-catalogs/lib' ))
|
4
4
|
$LOAD_PATH.unshift( File.expand_path( '../sportdb-models/lib' ))
|
5
5
|
|
6
6
|
|
data/test/test_country.rb
CHANGED
@@ -13,8 +13,8 @@ class TestCountry < MiniTest::Test
|
|
13
13
|
Country = SportDb::Sync::Country
|
14
14
|
|
15
15
|
def test_find # note: find uses "data" structs
|
16
|
-
at = SportDb::Import::Country.new( key: 'at', name: 'Austria',
|
17
|
-
eng = SportDb::Import::Country.new( key: 'eng', name: 'England',
|
16
|
+
at = SportDb::Import::Country.new( key: 'at', name: 'Austria', code: 'AUT' )
|
17
|
+
eng = SportDb::Import::Country.new( key: 'eng', name: 'England', code: 'ENG' )
|
18
18
|
|
19
19
|
rec = Country.find_or_create( at )
|
20
20
|
rec2 = Country.find_or_create( at )
|
@@ -28,23 +28,23 @@ class TestCountry < MiniTest::Test
|
|
28
28
|
rec = Country.search_or_create!( 'at' ) ## try (iso-alpha2) key
|
29
29
|
assert_equal 'Austria', rec.name
|
30
30
|
assert_equal 'at', rec.key
|
31
|
-
assert_equal 'AUT', rec.
|
31
|
+
assert_equal 'AUT', rec.code
|
32
32
|
|
33
33
|
rec = Country.search_or_create!( 'aut' ) ## try fifa code
|
34
34
|
assert_equal 'Austria', rec.name
|
35
35
|
assert_equal 'at', rec.key
|
36
|
-
assert_equal 'AUT', rec.
|
36
|
+
assert_equal 'AUT', rec.code
|
37
37
|
|
38
38
|
|
39
39
|
rec = Country.search_or_create!( 'eng' )
|
40
40
|
assert_equal 'England', rec.name
|
41
41
|
assert_equal 'eng', rec.key
|
42
|
-
assert_equal 'ENG', rec.
|
42
|
+
assert_equal 'ENG', rec.code
|
43
43
|
|
44
44
|
rec = Country.search_or_create!( 'eng' )
|
45
45
|
assert_equal 'England', rec.name
|
46
46
|
assert_equal 'eng', rec.key
|
47
|
-
assert_equal 'ENG', rec.
|
47
|
+
assert_equal 'ENG', rec.code
|
48
48
|
end
|
49
49
|
|
50
50
|
end # class TestCountry
|
data/test/test_league.rb
CHANGED
@@ -14,25 +14,25 @@ class TestLeague < MiniTest::Test
|
|
14
14
|
|
15
15
|
def test_search
|
16
16
|
rec = League.search_or_create!( 'eng' )
|
17
|
-
assert_equal 'Premier League', rec.
|
17
|
+
assert_equal 'Premier League', rec.name
|
18
18
|
assert_equal 'eng.1', rec.key
|
19
19
|
assert_equal 'eng', rec.country.key
|
20
20
|
assert_equal 'England', rec.country.name
|
21
|
-
# assert_equal true, rec.
|
21
|
+
# assert_equal true, rec.clubs
|
22
22
|
|
23
23
|
rec = League.search!( 'eng' )
|
24
|
-
assert_equal 'Premier League', rec.
|
24
|
+
assert_equal 'Premier League', rec.name
|
25
25
|
assert_equal 'eng.1', rec.key
|
26
26
|
assert_equal 'eng', rec.country.key
|
27
27
|
assert_equal 'England', rec.country.name
|
28
|
-
## assert_equal true, rec.
|
28
|
+
## assert_equal true, rec.clubs
|
29
29
|
|
30
30
|
## try 2nd call (just lookup)
|
31
31
|
rec = League.search_or_create!( 'eng' )
|
32
|
-
assert_equal 'Premier League', rec.
|
32
|
+
assert_equal 'Premier League', rec.name
|
33
33
|
assert_equal 'eng.1', rec.key
|
34
34
|
assert_equal 'eng', rec.country.key
|
35
35
|
assert_equal 'England', rec.country.name
|
36
|
-
## assert_equal true, rec.
|
36
|
+
## assert_equal true, rec.clubs
|
37
37
|
end
|
38
38
|
end # class TestLeague
|
data/test/test_misc.rb
CHANGED
@@ -14,15 +14,15 @@ class TestMisc < MiniTest::Test
|
|
14
14
|
|
15
15
|
def test_season
|
16
16
|
rec = Season.search_or_create( '2017-18' )
|
17
|
-
assert_equal '2017/18', rec.
|
17
|
+
assert_equal '2017/18', rec.name
|
18
18
|
assert_equal '2017/18', rec.key
|
19
19
|
|
20
20
|
rec = Season.search_or_create( '2017/2018' )
|
21
|
-
assert_equal '2017/18', rec.
|
21
|
+
assert_equal '2017/18', rec.name
|
22
22
|
assert_equal '2017/18', rec.key
|
23
23
|
|
24
24
|
rec = Season.search_or_create( '2017/8' )
|
25
|
-
assert_equal '2017/18', rec.
|
25
|
+
assert_equal '2017/18', rec.name
|
26
26
|
assert_equal '2017/18', rec.key
|
27
27
|
end
|
28
28
|
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportdb-sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: sportdb-
|
14
|
+
name: sportdb-catalogs
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0.
|
19
|
+
version: 1.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0.
|
26
|
+
version: 1.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sportdb-models
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.0.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.0.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rdoc
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|