eventdb 0.7.0 → 0.7.1
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.
- checksums.yaml +4 -4
- data/{HISTORY.md → CHANGELOG.md} +0 -0
- data/Manifest.txt +20 -18
- data/Rakefile +4 -5
- data/lib/eventdb.rb +3 -2
- data/lib/eventdb/calendar.rb +2 -2
- data/lib/eventdb/database.rb +11 -40
- data/lib/eventdb/models.rb +39 -5
- data/lib/eventdb/outline_reader.rb +65 -0
- data/lib/eventdb/reader.rb +124 -59
- data/lib/eventdb/schema.rb +0 -2
- data/lib/eventdb/version.rb +1 -1
- data/test/data/RUBY.md +4 -72
- data/test/data/conferences.yml +140 -0
- data/test/templates/RUBY.md.erb +1 -1
- data/test/test_calendar.rb +2 -2
- data/test/test_database.rb +2 -2
- data/test/test_reader.rb +13 -10
- metadata +15 -32
- data/.gemtest +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c92b20bf06bb3d5a56fd77f5c0503db488782500
|
4
|
+
data.tar.gz: 5e62e9a5d2941b1e14e3de5180c1674ba4150c54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b37cea05c931afe5bc64b64701e28464ef0ce9b1145b8a523ceb76b85852c731183463bb0aeee6ba88c0cca68f672a4976640c7fccb863a08d33fc27b79c751
|
7
|
+
data.tar.gz: c1c3edf3764dd977709729f05c9521f55c12820e31bccb0865a3bf05f89fd02b9d96dbecddbec036d25bd3fed860cadf503b1975d33c45e171fe577276f3e05b
|
data/{HISTORY.md → CHANGELOG.md}
RENAMED
File without changes
|
data/Manifest.txt
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
-
|
2
|
-
Manifest.txt
|
3
|
-
README.md
|
4
|
-
Rakefile
|
5
|
-
lib/eventdb.rb
|
6
|
-
lib/eventdb/calendar.rb
|
7
|
-
lib/eventdb/database.rb
|
8
|
-
lib/eventdb/models.rb
|
9
|
-
lib/eventdb/
|
10
|
-
lib/eventdb/
|
11
|
-
lib/eventdb/
|
12
|
-
|
13
|
-
test/
|
14
|
-
test/
|
15
|
-
test/
|
16
|
-
test/
|
17
|
-
test/
|
18
|
-
test/
|
1
|
+
CHANGELOG.md
|
2
|
+
Manifest.txt
|
3
|
+
README.md
|
4
|
+
Rakefile
|
5
|
+
lib/eventdb.rb
|
6
|
+
lib/eventdb/calendar.rb
|
7
|
+
lib/eventdb/database.rb
|
8
|
+
lib/eventdb/models.rb
|
9
|
+
lib/eventdb/outline_reader.rb
|
10
|
+
lib/eventdb/reader.rb
|
11
|
+
lib/eventdb/schema.rb
|
12
|
+
lib/eventdb/version.rb
|
13
|
+
test/data/RUBY.md
|
14
|
+
test/data/conferences.yml
|
15
|
+
test/helper.rb
|
16
|
+
test/templates/RUBY.md.erb
|
17
|
+
test/test_calendar.rb
|
18
|
+
test/test_database.rb
|
19
|
+
test/test_reader.rb
|
20
|
+
test/test_version.rb
|
data/Rakefile
CHANGED
@@ -15,12 +15,11 @@ Hoe.spec 'eventdb' do
|
|
15
15
|
|
16
16
|
# switch extension to .markdown for gihub formatting
|
17
17
|
self.readme_file = 'README.md'
|
18
|
-
self.history_file = '
|
18
|
+
self.history_file = 'CHANGELOG.md'
|
19
19
|
|
20
20
|
self.extra_deps = [
|
21
|
-
['props',
|
21
|
+
['props', '>= 1.2.0'], # settings / prop(ertie)s / env / INI
|
22
22
|
['logutils', '>= 0.6.1'], # logging
|
23
|
-
['textutils', '>= 1.3.1'],
|
24
23
|
|
25
24
|
## 3rd party
|
26
25
|
['activerecord'], # NB: will include activesupport,etc.
|
@@ -28,14 +27,14 @@ Hoe.spec 'eventdb' do
|
|
28
27
|
## more activerecord utils/addons
|
29
28
|
## ['tagutils', '>= 0.3.0'], # tags n categories for activerecord
|
30
29
|
## ['activerecord-utils', '>= 0.4.0'],
|
31
|
-
['props-activerecord',
|
30
|
+
['props-activerecord', '>= 0.2.0'],
|
32
31
|
['logutils-activerecord', '>= 0.2.1'],
|
33
32
|
]
|
34
33
|
|
35
34
|
self.licenses = ['Public Domain']
|
36
35
|
|
37
36
|
self.spec_extras = {
|
38
|
-
required_ruby_version: '>=
|
37
|
+
required_ruby_version: '>= 2.2.2'
|
39
38
|
}
|
40
39
|
|
41
40
|
end
|
data/lib/eventdb.rb
CHANGED
@@ -4,12 +4,12 @@
|
|
4
4
|
require 'pp'
|
5
5
|
require 'date'
|
6
6
|
require 'strscan' ## StringScanner lib
|
7
|
+
require 'yaml'
|
7
8
|
require 'erb'
|
8
9
|
|
9
10
|
# 3rd party libs (gems)
|
10
11
|
require 'props'
|
11
12
|
require 'logutils'
|
12
|
-
require 'textutils'
|
13
13
|
|
14
14
|
require 'props/activerecord'
|
15
15
|
require 'logutils/activerecord'
|
@@ -22,6 +22,7 @@ require 'eventdb/version' ## let version always go first
|
|
22
22
|
require 'eventdb/schema'
|
23
23
|
require 'eventdb/models'
|
24
24
|
|
25
|
+
require 'eventdb/outline_reader'
|
25
26
|
require 'eventdb/reader'
|
26
27
|
require 'eventdb/calendar' # note: depends (requires) models (first)
|
27
28
|
require 'eventdb/database'
|
@@ -29,4 +30,4 @@ require 'eventdb/database'
|
|
29
30
|
|
30
31
|
|
31
32
|
# say hello
|
32
|
-
puts EventDb.banner if defined?($
|
33
|
+
puts EventDb.banner if defined?($RUBYCOCO_DEBUG) && $RUBYCOCO_DEBUG
|
data/lib/eventdb/calendar.rb
CHANGED
@@ -62,12 +62,12 @@ class EventCalendar
|
|
62
62
|
|
63
63
|
def render( opts={} )
|
64
64
|
tmpl_path = opts[:template] || './templates/CALENDAR.md.erb'
|
65
|
-
tmpl = File.
|
65
|
+
tmpl = File.open( tmpl_path, 'r:utf-8' ).read
|
66
66
|
|
67
67
|
ERB.new( tmpl, nil, '<>' ).result( binding ) # <> omit newline for lines starting with <% and ending in %>
|
68
68
|
end
|
69
69
|
|
70
|
-
# def save( path = './CALENDAR.md' ) ## use (rename to) save_as - why? why not??
|
70
|
+
# def save( path = './CALENDAR.md' ) ## use (rename to) save_as - why? why not??
|
71
71
|
# File.open( path, 'w' ) do |f|
|
72
72
|
# f.write( render )
|
73
73
|
# end
|
data/lib/eventdb/database.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module EventDb
|
4
4
|
|
5
5
|
|
6
|
-
class
|
6
|
+
class Database
|
7
7
|
def initialize( config={} )
|
8
8
|
@config = config
|
9
9
|
end
|
@@ -16,50 +16,22 @@ class DatabaseBase ## fix: rename to Database (see below)
|
|
16
16
|
CreateDb.new.up
|
17
17
|
ConfDb::Model::Prop.create!( key: 'db.schema.event.version', value: VERSION )
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def create_all
|
21
21
|
LogDb.create # add logs table
|
22
|
-
ConfDb.create
|
22
|
+
ConfDb.create
|
23
23
|
create
|
24
24
|
end
|
25
25
|
|
26
26
|
def add( events )
|
27
|
-
|
28
|
-
|
29
|
-
## note: extract title and link from line
|
30
|
-
|
31
|
-
### 1) try "new" format first e.g.
|
32
|
-
## - **European Ruby Konference - EuRuKo** (web: [euruko.org](http://euruko.org), t: [euruko](https://twitter.com/euruko)) - _since 2003_
|
33
|
-
if m = (ev.title =~ /^\*{2}([^*]+)\*{2}/) ## note: **title** must start line
|
34
|
-
title = $1
|
35
|
-
puts " adding (new/modern format) => #{title} #{ev.start_date.year}, #{ev.date}"
|
36
|
-
## 2) try "old" classic format - get title from first (markdown) link e.g.
|
37
|
-
## - [Oktoberfest ("Die Wiesn")](http://www.muenchen.de/veranstaltungen/oktoberfest.html)
|
38
|
-
elsif m = (ev.title =~ /^\[([^\]]+)\]/) ## note: [title](link) must start line
|
39
|
-
title = $1
|
40
|
-
puts " adding (old/classic format) => #{title} #{ev.start_date.year}, #{ev.date}"
|
41
|
-
else
|
42
|
-
puts "*** warn: cannot find event title in #{ev.title}"
|
43
|
-
next # skip record; todo: issue error
|
44
|
-
end
|
45
|
-
|
46
|
-
## try extract link - use first (markdown) link
|
47
|
-
## todo/fix: use shared markdown link regex!!!!!
|
48
|
-
if m = (ev.title =~ /\[[^\]]+\]\(([^\)]+)\)/)
|
49
|
-
link = $1
|
50
|
-
puts " => @ #{link}"
|
51
|
-
else
|
52
|
-
link = nil
|
53
|
-
puts "*** warn: cannot find event link in #{ev.title}"
|
54
|
-
end
|
55
|
-
|
27
|
+
## todo/fix: add check if Array and also allow single event
|
28
|
+
## change arg to event_or_events
|
56
29
|
|
30
|
+
events.each do |ev|
|
57
31
|
Model::Event.create!(
|
58
|
-
title: title,
|
59
|
-
link: link,
|
60
|
-
text: ev.title, ### "full" title - incl. markdown links
|
32
|
+
title: ev.title,
|
33
|
+
link: ev.link,
|
61
34
|
place: ev.place,
|
62
|
-
date: ev.date,
|
63
35
|
start_date: ev.start_date,
|
64
36
|
end_date: ev.end_date,
|
65
37
|
## note: (pre)calculate duration in days
|
@@ -74,8 +46,7 @@ end ## class DatabaseBase
|
|
74
46
|
|
75
47
|
|
76
48
|
## convenience class for in-memory (SQLite3) database
|
77
|
-
|
78
|
-
class Database < DatabaseBase ## fix: rename to MemDatabase or MemoryDatabase
|
49
|
+
class MemoryDatabase < Database
|
79
50
|
|
80
51
|
def initialize
|
81
52
|
## -- default to sqlite3 in-memory database
|
@@ -90,7 +61,7 @@ class Database < DatabaseBase ## fix: rename to MemDatabase or MemoryDatabase
|
|
90
61
|
|
91
62
|
end # class Database
|
92
63
|
|
93
|
-
MemDatabase =
|
64
|
+
MemDatabase = MemoryDatabase
|
65
|
+
Memory = MemoryDatabase
|
94
66
|
|
95
67
|
end # module EventDb
|
96
|
-
|
data/lib/eventdb/models.rb
CHANGED
@@ -9,13 +9,48 @@ class Event < ActiveRecord::Base
|
|
9
9
|
## move order('start_date') into its own scope ??
|
10
10
|
|
11
11
|
scope :upcoming, ->(today) { order('start_date').where( 'start_date > ?', today ) }
|
12
|
-
|
12
|
+
|
13
13
|
## rename to now_on/on_now/now_playing/running/etc. - why? why not??
|
14
14
|
scope :live, ->(today) { order('start_date').where( 'start_date <= ? AND end_date >= ?', today, today ) }
|
15
15
|
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
|
18
|
+
## todo/fix: unify / merge date and date_str !!! - add formt: or something
|
19
|
+
def date # date pretty printed as string (no weeknames)
|
20
|
+
if days == 1
|
21
|
+
buf = ''
|
22
|
+
buf << Date::ABBR_MONTHNAMES[start_date.month]
|
23
|
+
buf << '/'
|
24
|
+
buf << start_date.day.to_s
|
25
|
+
elsif days == 2
|
26
|
+
buf = ''
|
27
|
+
buf << Date::ABBR_MONTHNAMES[start_date.month]
|
28
|
+
buf << '/'
|
29
|
+
buf << start_date.day.to_s
|
30
|
+
buf << '+'
|
31
|
+
if start_date.month != end_date.month
|
32
|
+
buf << Date::ABBR_MONTHNAMES[end_date.month]
|
33
|
+
buf << '/'
|
34
|
+
end
|
35
|
+
buf << end_date.day.to_s
|
36
|
+
else ## assume multi day
|
37
|
+
buf = ''
|
38
|
+
buf << Date::ABBR_MONTHNAMES[start_date.month]
|
39
|
+
buf << '/'
|
40
|
+
buf << start_date.day.to_s
|
41
|
+
buf << '-'
|
42
|
+
if start_date.month != end_date.month
|
43
|
+
buf << Date::ABBR_MONTHNAMES[end_date.month]
|
44
|
+
buf << '/'
|
45
|
+
end
|
46
|
+
buf << end_date.day.to_s
|
47
|
+
end
|
48
|
+
|
49
|
+
buf
|
50
|
+
end
|
51
|
+
|
52
|
+
def date_str # date pretty printed (pre-formatted) as string (with weeknames)
|
53
|
+
|
19
54
|
## note: wday - (0-6, Sunday is zero).
|
20
55
|
if days == 1
|
21
56
|
buf = ''
|
@@ -63,7 +98,6 @@ class Event < ActiveRecord::Base
|
|
63
98
|
end # class Event
|
64
99
|
|
65
100
|
end # module Model
|
66
|
-
|
101
|
+
|
67
102
|
Models = Model ## note: add conveniene shortcut for models
|
68
103
|
end # module EventDb
|
69
|
-
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module EventDb
|
4
|
+
|
5
|
+
class OutlineReader
|
6
|
+
|
7
|
+
def self.read( path ) ## use - rename to read_file or from_file etc. - why? why not?
|
8
|
+
txt = File.open( path, 'r:utf-8' ).read
|
9
|
+
parse( txt )
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
HEADING_RE = /^(\#{1,}) ## leading ####
|
14
|
+
([^#]+?) ## text - note: use non-greedy e.g. +?
|
15
|
+
\#* ## (optional) trailing ##
|
16
|
+
$/x
|
17
|
+
|
18
|
+
LISTITEM_RE = /^ \s*
|
19
|
+
-\s+ ## space required after dash (-)
|
20
|
+
(.+) ## text
|
21
|
+
$/x
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
def self.parse( txt )
|
26
|
+
outline=[] ## outline structure
|
27
|
+
|
28
|
+
# note: cut out; remove all html comments e.g. <!-- -->
|
29
|
+
# supports multi-line comments too (e.g. uses /m - make dot match newlines)
|
30
|
+
txt = txt.gsub( /<!--
|
31
|
+
.+?
|
32
|
+
-->/xm, '' ) ## todo/fix: track/log cut out comments!!!
|
33
|
+
|
34
|
+
|
35
|
+
txt.each_line do |line|
|
36
|
+
line = line.strip ## todo/fix: keep leading and trailing spaces - why? why not?
|
37
|
+
|
38
|
+
next if line.empty? ## todo/fix: keep blank line nodes e.g. just remove comments and process headings?! - why? why not?
|
39
|
+
break if line == '__END__'
|
40
|
+
|
41
|
+
pp line
|
42
|
+
|
43
|
+
## note: all optional trailing ### too
|
44
|
+
if HEADING_RE.match( line )
|
45
|
+
heading_marker = $1
|
46
|
+
heading_level = $1.length ## count number of = for heading level
|
47
|
+
heading = $2.strip
|
48
|
+
|
49
|
+
puts "heading #{heading_level} >#{heading}<"
|
50
|
+
outline << [:"h#{heading_level}", heading]
|
51
|
+
elsif LISTITEM_RE.match( line )
|
52
|
+
item = $1.strip
|
53
|
+
|
54
|
+
puts "list item >#{item}<"
|
55
|
+
outline << [:li, item]
|
56
|
+
else
|
57
|
+
## assume it's a (plain/regular) text line
|
58
|
+
outline << [:l, line]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
outline
|
62
|
+
end # method read
|
63
|
+
end # class OutlineReader
|
64
|
+
|
65
|
+
end # module EventDb
|
data/lib/eventdb/reader.rb
CHANGED
@@ -6,25 +6,69 @@ module EventDb
|
|
6
6
|
|
7
7
|
class EventReader
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
Event = Struct.new( :title, :link,
|
10
|
+
:place,
|
11
|
+
:start_date, :end_date )
|
11
12
|
|
12
|
-
Event = Struct.new( :title, :place, :date, :start_date, :end_date, :days)
|
13
13
|
|
14
14
|
def self.from_url( src ) # note: src assumed a string
|
15
15
|
worker = Fetcher::Worker.new
|
16
|
-
|
16
|
+
txt = worker.read_utf8!( src )
|
17
|
+
|
18
|
+
if src.end_with?( '.yml') ||
|
19
|
+
src.end_with?( '.yaml')
|
20
|
+
YamlReader.new( txt )
|
21
|
+
else
|
22
|
+
MarkdownReader.new( txt )
|
23
|
+
end
|
17
24
|
end
|
18
25
|
|
19
26
|
def self.from_file( path )
|
20
|
-
|
27
|
+
txt = File.open( path, 'r:utf-8' ).read
|
28
|
+
|
29
|
+
if path.end_with?( '.yml') ||
|
30
|
+
path.end_with?( '.yaml')
|
31
|
+
YamlReader.new( txt )
|
32
|
+
else
|
33
|
+
MarkdownReader.new( txt )
|
34
|
+
end
|
21
35
|
end
|
22
36
|
|
23
|
-
|
24
|
-
|
37
|
+
|
38
|
+
|
39
|
+
class YamlReader ## fix/change: rename to YamlParser - why? why not?
|
40
|
+
include LogUtils::Logging
|
41
|
+
|
42
|
+
def initialize( text )
|
43
|
+
@text = text
|
44
|
+
end
|
45
|
+
|
46
|
+
def read
|
47
|
+
events = []
|
48
|
+
recs = YAML.load( @text )
|
49
|
+
recs.each do |rec|
|
50
|
+
title = rec['name']
|
51
|
+
link = rec['url']
|
52
|
+
place = rec['location']
|
53
|
+
start_date = rec['start'] # note: already parsed into a date (NOT string) by yaml parser!!
|
54
|
+
end_date = rec['end'] # note: already parsed into a date (NOT string) by yaml parser!!
|
55
|
+
|
56
|
+
event = Event.new( title, link,
|
57
|
+
place,
|
58
|
+
start_date, end_date )
|
59
|
+
## pp event
|
60
|
+
|
61
|
+
events << event
|
62
|
+
end
|
63
|
+
|
64
|
+
events
|
25
65
|
end
|
66
|
+
end # class YamlReader
|
26
67
|
|
27
68
|
|
69
|
+
class MarkdownReader ## fix/change: rename to MarkdownParser - why? why not?
|
70
|
+
include LogUtils::Logging
|
71
|
+
|
28
72
|
def initialize( text )
|
29
73
|
@text = text
|
30
74
|
end
|
@@ -50,8 +94,7 @@ class EventReader
|
|
50
94
|
## - 2015 @ Brussels / Brussel / Bruxelles; Jan/31+Feb/1
|
51
95
|
## - 2014 @ Porto de Galinhas, Pernambuco; Apr/24-27 (formerly: Abril Pro Ruby)
|
52
96
|
|
53
|
-
|
54
|
-
(?<year>20\d\d) ## year
|
97
|
+
DATE_ENTRY_RE = /(?<year>20\d\d) ## year
|
55
98
|
\s+
|
56
99
|
@ ## at location
|
57
100
|
\s+
|
@@ -75,8 +118,7 @@ class EventReader
|
|
75
118
|
## example:
|
76
119
|
## - [RubyWorld Conference - rubyworldconf](http://www.rubyworld-conf.org/en)
|
77
120
|
|
78
|
-
|
79
|
-
\[
|
121
|
+
LINK_ENTRY_RE = /\[
|
80
122
|
[^\]]+
|
81
123
|
\]
|
82
124
|
\(
|
@@ -85,48 +127,31 @@ class EventReader
|
|
85
127
|
/x
|
86
128
|
|
87
129
|
|
88
|
-
def read
|
89
130
|
|
131
|
+
def read
|
90
132
|
events = []
|
91
133
|
stack = [] ## header/heading stack; note: last_stack is stack.size; starts w/ 0
|
92
134
|
|
93
135
|
last_link_entry = nil
|
94
136
|
|
95
|
-
# note: cut out; remove all html comments e.g. <!-- -->
|
96
|
-
# supports multi-line comments too (e.g. uses /m - make dot match newlines)
|
97
|
-
text = @text.gsub( /<!--.+?-->/m, '' ) ## todo/fix: track/log cut out comments!!!
|
98
|
-
|
99
|
-
text.each_line do |line|
|
100
137
|
|
101
|
-
|
102
|
-
|
138
|
+
nodes = OutlineReader.parse( @text )
|
139
|
+
nodes.each do |node|
|
103
140
|
|
104
|
-
|
141
|
+
if [:h1,:h2,:h3,:h4,:h5,:h6].include?( node[0] )
|
142
|
+
heading = node[1]
|
143
|
+
# stop when hitting >## More< or <Calendar> or <Thanks> etc. section
|
144
|
+
# note: must escape # e.g. #{2,} must be escaped to \#{2,}
|
145
|
+
break if heading =~ /^(More|Calendar|Thanks|Meta)\b/
|
105
146
|
|
106
|
-
|
107
|
-
|
108
|
-
|
147
|
+
# skip "pseudo" headings (for contribs etc.)
|
148
|
+
## e.g. #### _Contributions welcome. Anything missing? Send in a pull request. Thanks._
|
149
|
+
next if heading =~ /Contributions welcome\.|Anything Missing\?/
|
109
150
|
|
110
|
-
# stop when hitting >## More< or <Calendar> or <Thanks> etc. section
|
111
|
-
# note: must escape # e.g. #{2,} must be escaped to \#{2,}
|
112
|
-
break if line =~ /^\#{2,} (More|Calendar|Thanks|Meta)\b/
|
113
151
|
|
152
|
+
level = node[0][1].to_i
|
114
153
|
|
115
|
-
|
116
|
-
## e.g. #### _Contributions welcome. Anything missing? Send in a pull request. Thanks._
|
117
|
-
next if line =~ /Contributions welcome\.|Anything Missing\?/
|
118
|
-
|
119
|
-
|
120
|
-
m = nil
|
121
|
-
if line =~ /^[ ]*(#+)[ ]+/ ## heading/headers - note: must escpape #
|
122
|
-
s = StringScanner.new( line )
|
123
|
-
s.skip( /[ ]*/ ) ## skip whitespaces
|
124
|
-
markers = s.scan( /#+/)
|
125
|
-
level = markers.size
|
126
|
-
s.skip( /[ ]*/ ) ## skip whitespaces
|
127
|
-
title = s.rest.rstrip
|
128
|
-
|
129
|
-
logger.debug " heading level: #{level}, title: >#{title}<"
|
154
|
+
logger.debug " heading level: #{level}, title: >#{heading}<"
|
130
155
|
|
131
156
|
level_diff = level - stack.size
|
132
157
|
|
@@ -144,19 +169,19 @@ class EventReader
|
|
144
169
|
## same level
|
145
170
|
stack.pop
|
146
171
|
end
|
147
|
-
stack.push( [level,
|
172
|
+
stack.push( [level, heading] )
|
148
173
|
logger.debug " stack: #{stack.inspect}"
|
149
174
|
|
150
|
-
elsif
|
151
|
-
|
175
|
+
elsif [:li].include?( node[0] ) ## list item
|
176
|
+
line = node[1]
|
177
|
+
|
178
|
+
if LINK_ENTRY_RE.match( line )
|
152
179
|
logger.debug " link entry: #{line}"
|
153
180
|
|
154
|
-
|
155
|
-
|
156
|
-
last_link_entry = s.rest.rstrip ## remove trailing spaces to
|
157
|
-
elsif( m=DATE_ENTRY_REGEX.match( line ) )
|
181
|
+
last_link_entry = line
|
182
|
+
elsif m=DATE_ENTRY_RE.match( line )
|
158
183
|
year = m[:year]
|
159
|
-
|
184
|
+
|
160
185
|
start_month_en = m[:start_month_en]
|
161
186
|
start_day = m[:start_day]
|
162
187
|
|
@@ -181,38 +206,78 @@ class EventReader
|
|
181
206
|
|
182
207
|
|
183
208
|
s = StringScanner.new( line )
|
184
|
-
s.skip( /[ ]*-[ ]*/ ) ## skip leading list
|
185
209
|
s.skip_until( /@/ )
|
186
210
|
|
187
211
|
place = s.scan( /[^;]+/ ) ## get place (everything until ; (separator))
|
188
|
-
place = place.strip
|
212
|
+
place = place.strip
|
189
213
|
logger.debug " place: #{place}, rest: >#{s.rest}<"
|
190
214
|
|
191
|
-
##
|
215
|
+
## todo/fix: make place uniform e.g. change
|
216
|
+
## Vienna, Austria =>
|
217
|
+
## Vienna › Austria - why? why not?
|
218
|
+
|
219
|
+
## note: cut of heading 1 (e.g. page title)
|
192
220
|
more_places = stack[1..-1].reverse.map {|it| it[1] }.join(' › ')
|
193
221
|
place = "#{place} › #{more_places}"
|
194
222
|
logger.debug " place: #{place}"
|
195
223
|
|
196
|
-
s.skip( /;/ )
|
197
|
-
s.skip( /[ ]*/ ) ## skip whitespaces
|
198
|
-
date = s.scan( /[^ ]+/ ) # e.g. everything untils first space (or end-of-line)
|
199
224
|
|
200
|
-
title = last_link_entry
|
225
|
+
title, link = find_title_and_link( last_link_entry )
|
226
|
+
|
201
227
|
|
202
|
-
event = Event.new( title,
|
228
|
+
event = Event.new( title, link,
|
229
|
+
place,
|
230
|
+
start_date, end_date )
|
203
231
|
## pp event
|
232
|
+
|
204
233
|
events << event
|
205
234
|
else
|
206
235
|
logger.debug " *** skip list item line: #{line}"
|
207
236
|
end
|
208
237
|
else
|
209
|
-
logger.debug " *** skip
|
238
|
+
logger.debug " *** skip node:"
|
239
|
+
pp node
|
210
240
|
end
|
211
241
|
end
|
212
|
-
|
242
|
+
|
213
243
|
events
|
214
244
|
end
|
215
245
|
|
246
|
+
### helper
|
247
|
+
def find_title_and_link( line )
|
248
|
+
title = nil
|
249
|
+
link = nil
|
250
|
+
|
251
|
+
## note: extract title and link from line
|
252
|
+
|
253
|
+
### 1) try "new" format first e.g.
|
254
|
+
## - **European Ruby Konference - EuRuKo** (web: [euruko.org](http://euruko.org), t: [euruko](https://twitter.com/euruko)) - _since 2003_
|
255
|
+
if m = (line =~ /^\*{2}([^*]+)\*{2}/) ## note: **title** must start line
|
256
|
+
title = $1
|
257
|
+
puts " adding (new/modern format) => #{title}"
|
258
|
+
## 2) try "old" classic format - get title from first (markdown) link e.g.
|
259
|
+
## - [Oktoberfest ("Die Wiesn")](http://www.muenchen.de/veranstaltungen/oktoberfest.html)
|
260
|
+
elsif m = (line =~ /^\[([^\]]+)\]/) ## note: [title](link) must start line
|
261
|
+
title = $1
|
262
|
+
puts " adding (old/classic format) => #{title}"
|
263
|
+
else
|
264
|
+
puts "*** !! ERROR !!: cannot find event title in #{line}"
|
265
|
+
exit 1
|
266
|
+
end
|
267
|
+
|
268
|
+
## try extract link - use first (markdown) link
|
269
|
+
## todo/fix: use shared markdown link regex!!!!!
|
270
|
+
if m = (line =~ /\[[^\]]+\]\(([^\)]+)\)/)
|
271
|
+
link = $1
|
272
|
+
puts " => @ #{link}"
|
273
|
+
else
|
274
|
+
link = nil
|
275
|
+
puts "*** !! WARN !!: cannot find event link in #{line}"
|
276
|
+
end
|
277
|
+
|
278
|
+
[title,link]
|
279
|
+
end # method find_title_and_link
|
280
|
+
end # class MarkdownReader
|
216
281
|
end # class EventReader
|
217
282
|
|
218
283
|
end # module EventDb
|
data/lib/eventdb/schema.rb
CHANGED
@@ -10,9 +10,7 @@ def up
|
|
10
10
|
create_table :events do |t|
|
11
11
|
t.string :title, null: false ## title (just the first link text)
|
12
12
|
t.string :link ## for now optional - why? why not??
|
13
|
-
t.string :text, null: false ## -- "full" title - incl. markdown link(s)
|
14
13
|
t.string :place, null: false
|
15
|
-
t.string :date, null: false # note: full date range (start to end) for now as *string*
|
16
14
|
t.date :start_date, null: false ## use (rename) to start_at - why? why not?
|
17
15
|
t.date :end_date, null: false ## use (rename) to end_at - why? why not?
|
18
16
|
t.integer :days, null: false
|
data/lib/eventdb/version.rb
CHANGED
data/test/data/RUBY.md
CHANGED
@@ -1,78 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# Awesome Events
|
2
2
|
|
3
|
-
A collection of awesome Ruby events (meetups, conferences, camps, etc.) from around the world
|
4
|
-
|
5
|
-
---
|
6
3
|
|
7
|
-
|
8
|
-
|
9
|
-
---
|
4
|
+
A collection of awesome Ruby events (meetups, conferences, camps, etc.) from around the world
|
10
5
|
|
11
6
|
#### _Contributions welcome. Anything missing? Send in a pull request. Thanks._
|
12
7
|
|
13
|
-
NOTE: A calendar page ([CALENDAR.md](CALENDAR.md)) gets auto-generated from this page listing conferences sorted by year and month.
|
14
|
-
|
15
|
-
|
16
|
-
- [World](#world)
|
17
|
-
- [Online](#online)
|
18
|
-
- [Europe](#europe)
|
19
|
-
- [Central Europe](#central-europe)
|
20
|
-
- [Austria / Österreich](#austria--%C3%96sterreich-at)
|
21
|
-
- [Switzerland / Schweiz / Suisse](#switzerland--schweiz--suisse--confoederatio-helvetica-ch)
|
22
|
-
- [Germany / Deutschland](#germany--deutschland-de)
|
23
|
-
- [Slovakia](#slovakia-sk)
|
24
|
-
- [Slovenia](#slovenia-si)
|
25
|
-
- [Czech Republic](#czech-republic-cz)
|
26
|
-
- [Poland](#poland-pl)
|
27
|
-
- [Hungary](#hungary-hu)
|
28
|
-
- [Western Europe](#western-europe)
|
29
|
-
- [England](#england-en)
|
30
|
-
- [Scotland](#scotland)
|
31
|
-
- [Ireland / Éire](#ireland--%C3%89ire-ie)
|
32
|
-
- [France](#france-fr)
|
33
|
-
- [Belgium / België / Belgique](#belgium--belgi%C3%AB--belgique-be)
|
34
|
-
- [Netherlands](#netherlands-nl)
|
35
|
-
- [Southern Europe](#southern-europe)
|
36
|
-
- [Spain / España](#spain--espa%C3%B1a-es)
|
37
|
-
- [Portugal](#portugal-pt)
|
38
|
-
- [Italy](#italy-it)
|
39
|
-
- [Croatia / Hrvatska](#croatia--hrvatska-hr)
|
40
|
-
- [Northern Europe](#northern-europe)
|
41
|
-
- [Denmark / Danmark](#denmark--danmark-dk)
|
42
|
-
- [Sweden / Sverige](#sweden--sverige-se)
|
43
|
-
- [Finland / Suomi](#finland--suomi-fi)
|
44
|
-
- [Norway / Norge](#norway--norge-no)
|
45
|
-
- [Lithuania / Lietuva](#lithuania--lietuva-lt)
|
46
|
-
- [Eastern Europe](#eastern-europe)
|
47
|
-
- [Belarus / Беларусь](#belarus--%D0%91%D0%B5%D0%BB%D0%B0%D1%80%D1%83%D1%81%D1%8C-by)
|
48
|
-
- [Russia / Россия](#russia--%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F-ru)
|
49
|
-
- [Ukraine / Україна / Украина](#ukraine--%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D0%B0--%D0%A3%D0%BA%D1%80%D0%B0%D0%B8%D0%BD%D0%B0-ua)
|
50
|
-
- [America](#america)
|
51
|
-
- [North America](#north-america)
|
52
|
-
- [Canada](#canada-ca)
|
53
|
-
- [United States](#united-states-us)
|
54
|
-
- [Mexico / México](#mexico--m%C3%A9xico-mx)
|
55
|
-
- [South America](#south-america)
|
56
|
-
- [Brazil / Brasil](#brazil--brasil-br)
|
57
|
-
- [Colombia](#colombia-co)
|
58
|
-
- [Peru / Perú](#peru--per%C3%BA-pe)
|
59
|
-
- [Uruguay](#uruguay-uy)
|
60
|
-
- [Argentina](#argentina-ar)
|
61
|
-
- [Asia](#asia)
|
62
|
-
- [Japan](#japan-jp)
|
63
|
-
- [Taiwan](#taiwan-tw)
|
64
|
-
- [Singapore](#singapore-sg)
|
65
|
-
- [Philippines / Pilipinas](#philippines--pilipinas-ph)
|
66
|
-
- [Vietnam](#vietnam-vn)
|
67
|
-
- [India](#india-in)
|
68
|
-
- [Africa](#africa)
|
69
|
-
- [Kenya](#kenya-ke)
|
70
|
-
- [South Africa](#south-africa-za)
|
71
|
-
- [Pacific / Oceania](#pacific--oceania)
|
72
|
-
- [Australia](#australia-au)
|
73
|
-
- [More](#more)
|
74
|
-
- [Friends & Family](#friends--family)
|
75
|
-
- [Meta](#meta)
|
76
8
|
|
77
9
|
## World
|
78
10
|
|
@@ -237,7 +169,7 @@ NOTE: A calendar page ([CALENDAR.md](CALENDAR.md)) gets auto-generated from this
|
|
237
169
|
|
238
170
|
- @ Amsterdam, Noord-Holland
|
239
171
|
- [Amsterdam.rb](http://amsrb.org) - [:octocat:](https://github.com/amsrb)
|
240
|
-
- @ Rotterdam, Zuid-Holland
|
172
|
+
- @ Rotterdam, Zuid-Holland
|
241
173
|
- [Rotterdam.rb](http://rtmrb.org)
|
242
174
|
|
243
175
|
|
@@ -567,7 +499,7 @@ NOTE: A calendar page ([CALENDAR.md](CALENDAR.md)) gets auto-generated from this
|
|
567
499
|
- @ Singapore
|
568
500
|
- [Ruby Singapore](http://ruby.sg) - [:octocat:](https://github.com/rubysg)
|
569
501
|
|
570
|
-
### Philippines / Pilipinas (ph)
|
502
|
+
### Philippines / Pilipinas (ph)
|
571
503
|
|
572
504
|
- [RubyConf Philippines](http://rubyconf.ph)
|
573
505
|
- 2015 @ Boracy Island; Mar/27-28
|
@@ -0,0 +1,140 @@
|
|
1
|
+
#############################
|
2
|
+
# ruby event news in 2020
|
3
|
+
|
4
|
+
- name: Rubyfuza
|
5
|
+
location: Cape Town, South Africa
|
6
|
+
start: 2020-02-06 # February 6-8, 2020
|
7
|
+
end: 2020-02-08
|
8
|
+
days: 3
|
9
|
+
month: 2
|
10
|
+
url: http://www.rubyfuza.org
|
11
|
+
twitter: rubyfuza
|
12
|
+
updated: 2019-12-03 ## note: used for feed.xml|json
|
13
|
+
|
14
|
+
- name: ParisRB Conf
|
15
|
+
location: Paris, France
|
16
|
+
start: 2020-02-18 # February 18-19, 2020
|
17
|
+
end: 2020-02-19
|
18
|
+
days: 2
|
19
|
+
month: 2
|
20
|
+
url: https://2020.rubyparis.org
|
21
|
+
twitter: parisrb
|
22
|
+
updated: 2019-12-03 ## note: used for feed.xml|json
|
23
|
+
|
24
|
+
- name: RubyConf Australia
|
25
|
+
location: Melbourne, Victoria, Australia
|
26
|
+
start: 2020-02-20
|
27
|
+
end: 2020-02-21
|
28
|
+
days: 2
|
29
|
+
month: 2
|
30
|
+
url: https://www.rubyconf.org.au/2020
|
31
|
+
twitter: rubyconf_au
|
32
|
+
updated: 2019-12-03 ## note: used for feed.xml|json
|
33
|
+
|
34
|
+
|
35
|
+
- name: Wrocław <3 Ruby (wroclove.rb)
|
36
|
+
location: Wrocław, Poland
|
37
|
+
start: 2020-03-20 # 20-22th March, 2020
|
38
|
+
end: 2020-03-22
|
39
|
+
days: 3
|
40
|
+
month: 3
|
41
|
+
url: https://wrocloverb.com
|
42
|
+
twitter: wrocloverb
|
43
|
+
|
44
|
+
|
45
|
+
- name: RubyDay Italy
|
46
|
+
location: Verona, Veneto, Italy
|
47
|
+
start: 2020-04-02
|
48
|
+
end: 2020-04-02
|
49
|
+
days: 1
|
50
|
+
month: 4
|
51
|
+
url: https://2020.rubyday.it
|
52
|
+
twitter: rubydayit
|
53
|
+
|
54
|
+
# RubyKaigi 2020: April 9th - 11th, 2020 @ Matsumoto, Nagano, Japan https://rubykaigi.org/2020
|
55
|
+
- name: RubyKaigi
|
56
|
+
location: Nagano, Japan
|
57
|
+
start: 2020-04-09
|
58
|
+
end: 2020-04-11
|
59
|
+
days: 3
|
60
|
+
month: 4
|
61
|
+
url: https://rubykaigi.org/2020
|
62
|
+
twitter: rubykaigi
|
63
|
+
|
64
|
+
- name: RubyConf India
|
65
|
+
location: Goa, India
|
66
|
+
start: 2020-04-25 # April 25-26 2020
|
67
|
+
end: 2020-04-26
|
68
|
+
days: 2
|
69
|
+
month: 4
|
70
|
+
url: http://rubyconfindia.org
|
71
|
+
twitter: rubyconfindia
|
72
|
+
|
73
|
+
|
74
|
+
# RailsConf 2020 will be in Portland, OR from May 5-7
|
75
|
+
- name: RailsConf (United States)
|
76
|
+
location: Portland, Oregon, United States
|
77
|
+
start: 2020-05-05
|
78
|
+
end: 2020-05-07
|
79
|
+
days: 3
|
80
|
+
month: 5
|
81
|
+
url: https://railsconf.com
|
82
|
+
twitter: railsconf
|
83
|
+
|
84
|
+
- name: Balkan Ruby
|
85
|
+
location: Sofia, Bulgaria
|
86
|
+
start: 2020-05-15
|
87
|
+
end: 2020-05-16
|
88
|
+
days: 2
|
89
|
+
month: 5
|
90
|
+
url: https://balkanruby.com
|
91
|
+
twitter: balkanruby
|
92
|
+
|
93
|
+
|
94
|
+
- name: Ruby Unconf Hamburg
|
95
|
+
location: Hamburg, Germany
|
96
|
+
start: 2020-06-06 ## June 6th & 7th 2020
|
97
|
+
end: 2020-06-07
|
98
|
+
days: 2
|
99
|
+
month: 6
|
100
|
+
url: http://2020.rubyunconf.eu
|
101
|
+
twitter: rubyunconfeu
|
102
|
+
|
103
|
+
|
104
|
+
- name: Brighton RubyConf
|
105
|
+
location: Brighton, Sussex, England, United Kingdom
|
106
|
+
start: 2020-07-03
|
107
|
+
end: 2020-07-03
|
108
|
+
days: 1
|
109
|
+
month: 7
|
110
|
+
url: https://brightonruby.com
|
111
|
+
twitter: brightonruby
|
112
|
+
|
113
|
+
- name: RubyConf Kenya
|
114
|
+
location: Nairobi, Kenya
|
115
|
+
start: 2020-07-23
|
116
|
+
end: 2020-07-25
|
117
|
+
days: 3
|
118
|
+
month: 7
|
119
|
+
url: http://rubyconf.nairuby.org/2020
|
120
|
+
twitter: nairubyke
|
121
|
+
|
122
|
+
|
123
|
+
- name: European Ruby Konference (EuRuKo)
|
124
|
+
location: Helsinki, Finnland
|
125
|
+
start: 2020-08-21 # 21–22.8.2020
|
126
|
+
end: 2020-08-22
|
127
|
+
days: 2
|
128
|
+
month: 8
|
129
|
+
url: https://euruko2020.org
|
130
|
+
twitter: euruko
|
131
|
+
|
132
|
+
|
133
|
+
- name: RubyConf (United States)
|
134
|
+
location: Houston, Texas, United States
|
135
|
+
start: 2020-11-17
|
136
|
+
end: 2020-11-19
|
137
|
+
days: 3
|
138
|
+
month: 11
|
139
|
+
url: https://rubyconf.org
|
140
|
+
twitter: rubyconf
|
data/test/templates/RUBY.md.erb
CHANGED
data/test/test_calendar.rb
CHANGED
@@ -14,7 +14,7 @@ class TestCalendar < MiniTest::Test
|
|
14
14
|
r = EventDb::EventReader.from_file( "#{EventDb.root}/test/data/RUBY.md" )
|
15
15
|
events = r.read
|
16
16
|
|
17
|
-
db = EventDb::
|
17
|
+
db = EventDb::Memory.new
|
18
18
|
db.add( events )
|
19
19
|
|
20
20
|
cal = EventDb::EventCalendar.new
|
@@ -38,7 +38,7 @@ on the [awesome-events](README.md) page. Anything missing? Contributions welcome
|
|
38
38
|
**May**
|
39
39
|
|
40
40
|
|
41
|
-
May/4-6 • **
|
41
|
+
May/4-6 • [**RailsConf**](http://railsconf.com) @ Kansas City, Missouri › United States (us) › North America › America
|
42
42
|
|
43
43
|
## 2015
|
44
44
|
|
data/test/test_database.rb
CHANGED
@@ -10,12 +10,12 @@ require 'helper'
|
|
10
10
|
class TestDatabase < MiniTest::Test
|
11
11
|
|
12
12
|
def test_ruby
|
13
|
-
|
13
|
+
|
14
14
|
r = EventDb::EventReader.from_file( "#{EventDb.root}/test/data/RUBY.md" )
|
15
15
|
|
16
16
|
events = r.read
|
17
17
|
|
18
|
-
db = EventDb::
|
18
|
+
db = EventDb::Memory.new
|
19
19
|
db.add( events )
|
20
20
|
|
21
21
|
## get next 17 events
|
data/test/test_reader.rb
CHANGED
@@ -10,25 +10,28 @@ require 'helper'
|
|
10
10
|
class TestReader < MiniTest::Test
|
11
11
|
|
12
12
|
def test_ruby
|
13
|
-
|
13
|
+
|
14
14
|
r = EventDb::EventReader.from_file( "#{EventDb.root}/test/data/RUBY.md" )
|
15
15
|
events = r.read
|
16
16
|
|
17
17
|
## pp events
|
18
18
|
ev1 = events[0]
|
19
19
|
|
20
|
-
assert_equal '
|
21
|
-
assert_equal '
|
22
|
-
assert_equal '
|
23
|
-
assert_equal
|
20
|
+
assert_equal 'Rails Rumble', ev1.title
|
21
|
+
assert_equal 'https://railsrumble.com', ev1.link
|
22
|
+
assert_equal 'Intertubes › Online', ev1.place
|
23
|
+
# assert_equal 'Oct/18+19', ev1.date
|
24
|
+
assert_equal Date.new(2014,10,18), ev1.start_date
|
25
|
+
assert_equal Date.new(2014,10,19), ev1.end_date
|
24
26
|
|
25
|
-
ev2 = events[1]
|
26
27
|
|
27
|
-
|
28
|
-
assert_equal 'Intertubes › Online', ev2.place
|
29
|
-
assert_equal 'May/2', ev2.date
|
30
|
-
assert_equal Date.new(2015,5,2), ev2.start_date
|
28
|
+
ev2 = events[1]
|
31
29
|
|
30
|
+
assert_equal 'JekyllConf', ev2.title
|
31
|
+
assert_equal 'http://jekyllconf.com', ev2.link
|
32
|
+
assert_equal 'Intertubes › Online', ev2.place
|
33
|
+
# assert_equal 'May/2', ev2.date
|
34
|
+
assert_equal Date.new(2015,5,2), ev2.start_date
|
32
35
|
end
|
33
36
|
|
34
37
|
end # class TestReader
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.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:
|
11
|
+
date: 2019-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: props
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.2.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.
|
26
|
+
version: 1.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: logutils
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.6.1
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: textutils
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.3.1
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.3.1
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: activerecord
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +58,14 @@ dependencies:
|
|
72
58
|
requirements:
|
73
59
|
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
61
|
+
version: 0.2.0
|
76
62
|
type: :runtime
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
68
|
+
version: 0.2.0
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: logutils-activerecord
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,25 +100,24 @@ dependencies:
|
|
114
100
|
requirements:
|
115
101
|
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '3.
|
103
|
+
version: '3.16'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version: '3.
|
110
|
+
version: '3.16'
|
125
111
|
description: eventdb - event.db schema 'n' models for easy (re)use
|
126
112
|
email: ruby-talk@ruby-lang.org
|
127
113
|
executables: []
|
128
114
|
extensions: []
|
129
115
|
extra_rdoc_files:
|
130
|
-
-
|
116
|
+
- CHANGELOG.md
|
131
117
|
- Manifest.txt
|
132
118
|
- README.md
|
133
119
|
files:
|
134
|
-
-
|
135
|
-
- HISTORY.md
|
120
|
+
- CHANGELOG.md
|
136
121
|
- Manifest.txt
|
137
122
|
- README.md
|
138
123
|
- Rakefile
|
@@ -140,10 +125,12 @@ files:
|
|
140
125
|
- lib/eventdb/calendar.rb
|
141
126
|
- lib/eventdb/database.rb
|
142
127
|
- lib/eventdb/models.rb
|
128
|
+
- lib/eventdb/outline_reader.rb
|
143
129
|
- lib/eventdb/reader.rb
|
144
130
|
- lib/eventdb/schema.rb
|
145
131
|
- lib/eventdb/version.rb
|
146
132
|
- test/data/RUBY.md
|
133
|
+
- test/data/conferences.yml
|
147
134
|
- test/helper.rb
|
148
135
|
- test/templates/RUBY.md.erb
|
149
136
|
- test/test_calendar.rb
|
@@ -164,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
151
|
requirements:
|
165
152
|
- - ">="
|
166
153
|
- !ruby/object:Gem::Version
|
167
|
-
version:
|
154
|
+
version: 2.2.2
|
168
155
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
156
|
requirements:
|
170
157
|
- - ">="
|
@@ -172,12 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
159
|
version: '0'
|
173
160
|
requirements: []
|
174
161
|
rubyforge_project:
|
175
|
-
rubygems_version: 2.
|
162
|
+
rubygems_version: 2.5.2
|
176
163
|
signing_key:
|
177
164
|
specification_version: 4
|
178
165
|
summary: eventdb - event.db schema 'n' models for easy (re)use
|
179
|
-
test_files:
|
180
|
-
- test/test_calendar.rb
|
181
|
-
- test/test_database.rb
|
182
|
-
- test/test_version.rb
|
183
|
-
- test/test_reader.rb
|
166
|
+
test_files: []
|
data/.gemtest
DELETED
File without changes
|