catalogdb 0.1.0 → 0.1.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/Manifest.txt +5 -0
- data/lib/catalogdb/reader.rb +138 -0
- data/lib/catalogdb/version.rb +1 -1
- data/test/data/RUBY.md +157 -0
- data/test/helper.rb +9 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a16ac8ca3aa15c2aa18ae3948ef17133aaefd80
|
4
|
+
data.tar.gz: e8ee0455a183a2ac70bd0aadc3a783c1764583a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2eb5003ff87a85aa35156aeb1a66e8f1542e3443f1a750d869367d2342df45ffbd9add26b87637402c3ce8ea6cfdf5baa9ca3eec0606ae5eea189a6de6af1e83
|
7
|
+
data.tar.gz: d22cdc70923cc44d80ab3e3984523cdd1265be87d015955864ebb9eb663e8ddf629089d76361cb2d42a1bac489aff8f999038f8a9a9013fbd7647440da0f7f68
|
data/Manifest.txt
CHANGED
@@ -0,0 +1,138 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module CatalogDb
|
5
|
+
|
6
|
+
|
7
|
+
class CardReader
|
8
|
+
|
9
|
+
include LogUtils::Logging
|
10
|
+
|
11
|
+
|
12
|
+
Card = Struct.new( :links, :categories ) ## use cats for categories - why? why not?
|
13
|
+
|
14
|
+
|
15
|
+
def self.from_url( src ) # note: src assumed a string
|
16
|
+
worker = Fetcher::Worker.new
|
17
|
+
self.from_string( worker.read_utf8!( src ) )
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.from_file( path )
|
21
|
+
self.from_string( File.read_utf8( path ) )
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.from_string( text )
|
25
|
+
self.new( text )
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def initialize( text )
|
30
|
+
@text = text
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
## example:
|
36
|
+
## - [Sinatra HQ](http://sinatrarb.com)
|
37
|
+
|
38
|
+
LINK_ENTRY_REGEX = /\[
|
39
|
+
(?<title>[^\]]+) # 1st capture group (title)
|
40
|
+
\]
|
41
|
+
\(
|
42
|
+
(?<url>[^\)]+) # 2nd capture group (url)
|
43
|
+
\)
|
44
|
+
/x
|
45
|
+
|
46
|
+
|
47
|
+
def read
|
48
|
+
|
49
|
+
cards = []
|
50
|
+
stack = [] ## header/heading stack; note: last_stack is stack.size; starts w/ 0
|
51
|
+
|
52
|
+
|
53
|
+
# note: cut out; remove all html comments e.g. <!-- -->
|
54
|
+
# supports multi-line comments too (e.g. uses /m - make dot match newlines)
|
55
|
+
text = @text.gsub( /<!--.+?-->/m, '' ) ## todo/fix: track/log cut out comments!!!
|
56
|
+
|
57
|
+
text.each_line do |line|
|
58
|
+
|
59
|
+
logger.debug "line: >#{line}<"
|
60
|
+
line = line.rstrip ## remove (possible) trailing newline
|
61
|
+
|
62
|
+
## todo/fix: add to event reader too!!! - Thanks/Meta
|
63
|
+
break if line =~ /^## (More|Thanks|Meta)/ # stop when hitting >## More< or Thanks or Meta section
|
64
|
+
next if line =~ /^\s*$/ # skip blank lines
|
65
|
+
|
66
|
+
m = nil
|
67
|
+
if line =~ /^[ ]*(#+)[ ]+/ ## heading/headers - note: must escpape #
|
68
|
+
s = StringScanner.new( line )
|
69
|
+
s.skip( /[ ]*/ ) ## skip whitespaces
|
70
|
+
markers = s.scan( /#+/)
|
71
|
+
level = markers.size
|
72
|
+
s.skip( /[ ]*/ ) ## skip whitespaces
|
73
|
+
title = s.rest.rstrip
|
74
|
+
|
75
|
+
logger.debug " heading level: #{level}, title: >#{title}<"
|
76
|
+
|
77
|
+
level_diff = level - stack.size
|
78
|
+
|
79
|
+
if level_diff > 0
|
80
|
+
logger.debug "[CardReader] up +#{level_diff}"
|
81
|
+
if level_diff > 1
|
82
|
+
logger.error "fatal: level step must be one (+1) is +#{level_diff}"
|
83
|
+
fail "[CardReader] level step must be one (+1) is +#{level_diff}"
|
84
|
+
end
|
85
|
+
elsif level_diff < 0
|
86
|
+
logger.debug "[CardReader] down #{level_diff}"
|
87
|
+
level_diff.abs.times { stack.pop }
|
88
|
+
stack.pop
|
89
|
+
else
|
90
|
+
## same level
|
91
|
+
stack.pop
|
92
|
+
end
|
93
|
+
stack.push( [level,title] )
|
94
|
+
logger.debug " stack: #{stack.inspect}"
|
95
|
+
|
96
|
+
elsif line =~ /^([ ]*)-[ ]+/ ## list item
|
97
|
+
|
98
|
+
## check indent level
|
99
|
+
## note: skip sub list items for now (assume 2 or more spaces)
|
100
|
+
indent = $1.to_s
|
101
|
+
if indent.length >= 2
|
102
|
+
logger.debug " *** skip link entry w/ indent #{indent.length}: >#{line}<"
|
103
|
+
elsif( m=LINK_ENTRY_REGEX.match( line ) )
|
104
|
+
logger.debug " link entry: #{line}"
|
105
|
+
|
106
|
+
s = StringScanner.new( line )
|
107
|
+
s.skip( /[ ]*-[ ]*/ ) ## skip leading list
|
108
|
+
|
109
|
+
|
110
|
+
## collect links e.g.
|
111
|
+
## [["Lotus HQ", "http://lotusrb.org"],
|
112
|
+
## [":octocat:", "https://github.com/lotus"],
|
113
|
+
## [":gem:", "https://rubygems.org/gems/lotusrb"],
|
114
|
+
## [":book:", "http://rubydoc.info/gems/lotusrb"]]
|
115
|
+
|
116
|
+
links = s.rest.scan( LINK_ENTRY_REGEX )
|
117
|
+
pp links
|
118
|
+
|
119
|
+
categories = stack.map {|it| it[1] }.join(' › ')
|
120
|
+
logger.debug " categories: #{categories}"
|
121
|
+
|
122
|
+
card = Card.new( links, categories )
|
123
|
+
## pp card
|
124
|
+
cards << card
|
125
|
+
else
|
126
|
+
logger.debug " *** skip list item line: #{line}"
|
127
|
+
end
|
128
|
+
else
|
129
|
+
logger.debug " *** skip line: #{line}"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
cards
|
134
|
+
end
|
135
|
+
|
136
|
+
end # class CardReader
|
137
|
+
|
138
|
+
end # module CatalogDb
|
data/lib/catalogdb/version.rb
CHANGED
data/test/data/RUBY.md
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
Awesome Series @ Planet Ruby
|
2
|
+
|
3
|
+
[Rubies (Virtual Machines, Compilers, ...)](https://github.com/planetruby/awesome-rubies) •
|
4
|
+
[ActiveRecord](https://github.com/planetruby/awesome-activerecord) •
|
5
|
+
[Webframeworks (Micro, Macro, APIs, ...)](https://github.com/planetruby/awesome-webframeworks) •
|
6
|
+
[Static Generators (Sites, Books, Presentations, ...)](https://github.com/planetruby/awesome-staticgen) •
|
7
|
+
[Events (Conferences, Camps, Meetups, ...)](https://github.com/planetruby/awesome-events) •
|
8
|
+
[Blogs (News, Opinions, Podcasts, ...)](https://github.com/planetruby/awesome-blogs)
|
9
|
+
|
10
|
+
|
11
|
+
# Webframeworks
|
12
|
+
|
13
|
+
A collection of awesome Ruby web frameworks, libraries, tools, etc.
|
14
|
+
|
15
|
+
|
16
|
+
Note: :gem: stands for the RubyGems page, :octocat: stands for the GitHub page and :book: stands for the RubyDoc page.
|
17
|
+
|
18
|
+
---
|
19
|
+
|
20
|
+
[ANNOUNCEMENT] Looking for awesome Ruby Gems? See the [Ruby Gems of the Week Series @ Planet Ruby](http://planetruby.github.io/gems).
|
21
|
+
|
22
|
+
---
|
23
|
+
|
24
|
+
Contributions welcome. Anything missing? Send in a pull request. Thanks.
|
25
|
+
|
26
|
+
|
27
|
+
[Rack](#rack) •
|
28
|
+
[Rack Alternatives](#rack-alternatives) •
|
29
|
+
[Ruby on Rails](#ruby-on-rails) •
|
30
|
+
[Sinatra](#sinatra) •
|
31
|
+
[Volt](#volt) •
|
32
|
+
[Async Web (Socket) Frameworks](#async-web-socket-frameworks) •
|
33
|
+
[Web Service Frameworks](#web-service-frameworks) •
|
34
|
+
[Micro Framework Alternatives](#micro-framework-alternatives) •
|
35
|
+
["Full Stack" Macro Framework Alternatives](#full-stack-macro-framework-alternatives) •
|
36
|
+
[Meta](#meta)
|
37
|
+
|
38
|
+
|
39
|
+
## Rack
|
40
|
+
|
41
|
+
- [Rack HQ](http://rack.github.io) - [:octocat:](https://github.com/rack), [:gem:](https://rubygems.org/gems/rack), [:book:](http://rubydoc.info/gems/rack)
|
42
|
+
|
43
|
+
## Rack Alternatives
|
44
|
+
|
45
|
+
- [the_metal :octocat:](https://github.com/tenderlove/the_metal) - a spike for thoughts about Rack 2.0
|
46
|
+
|
47
|
+
## Ruby on Rails
|
48
|
+
|
49
|
+
_Batteries Included "Full Stack" Macro Framework_
|
50
|
+
|
51
|
+
- [Ruby on Rails HQ](http://rubyonrails.org) - [:octocat:](https://github.com/rails), [:gem:](https://rubygems.org/gems/rails), [:book:](http://rubydoc.info/gems/rails)
|
52
|
+
- [News & Updates](http://weblog.rubyonrails.org)
|
53
|
+
|
54
|
+
Extensions:
|
55
|
+
|
56
|
+
- [Hobo HQ](http://hobocentral.net) - [:octocat:](https://github.com/Hobo), [:gem:](https://rubygems.org/gems/hobo), [:book:](http://rubydoc.info/gems/hobo)
|
57
|
+
- [News & Updates](http://hobocentral.net/blog)
|
58
|
+
|
59
|
+
Future:
|
60
|
+
|
61
|
+
- [Trailblazer](http://trailblazerb.org), [:octocat:](https://github.com/apotonick/trailblazer), [:gem:](https://rubygems.org/gems/trailblazer), [:book:](http://rubydoc.info/gems/trailblazer) - a thin layer on top of rails - (gently) enforces encapsulation, a "more" intuitive code structure and giving you a "better" object-oriented architecture by Nick Sutterer et al
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
## Sinatra
|
66
|
+
|
67
|
+
_Micro Framework_
|
68
|
+
|
69
|
+
- [Sinatra HQ](http://sinatrarb.com) - [:octocat:](https://github.com/sinatra), [:gem:](https://rubygems.org/gems/sinatra), [:book:](http://rubydoc.info/gems/sinatra)
|
70
|
+
|
71
|
+
Extensions:
|
72
|
+
|
73
|
+
- [Padrino HQ](http://padrinorb.com) - [:octocat:](https://github.com/padrino), [:gem:](https://rubygems.org/gems/padrino), [:book:](http://rubydoc.info/gems/padrino)
|
74
|
+
- [News & Updates](http://www.padrinorb.com/blog)
|
75
|
+
|
76
|
+
Fun / Hack:
|
77
|
+
|
78
|
+
- [Almost Sinatra :octocat:](https://github.com/rkh/almost-sinatra) - Sinatra refactored, only six lines of code by Konstantin Haase
|
79
|
+
|
80
|
+
Future:
|
81
|
+
|
82
|
+
- [Mustermann](http://rkh.github.io/mustermann), [:octocat:](https://github.com/rkh/mustermann) - your personal string matching expert; can be used as a plugin for Sinatra 1.x and will power Sinatra 2.0; by Konstantin Haase et al
|
83
|
+
|
84
|
+
|
85
|
+
## Volt
|
86
|
+
|
87
|
+
_Client/Server Isomorphic Framework_
|
88
|
+
|
89
|
+
- [Volt HQ](http://voltframework.com) - [:octocat:](https://github.com/voltrb), [:gem:](https://rubygems.org/gems/volt), [:book:](http://rubydoc.info/gems/volt)
|
90
|
+
- [News & Updates](http://voltframework.com/blog)
|
91
|
+
|
92
|
+
## Async Web (Socket) Frameworks
|
93
|
+
|
94
|
+
- [Cramp :octocat:](https://github.com/lifo/cramp), [:gem:](https://rubygems.org/gems/cramp) - a fully asynchronous realtime web application framework built on top of event machine; providing full-duplex bi-directional communication by Pratik Naik
|
95
|
+
|
96
|
+
- [Lattice :octocat:](https://github.com/celluloid/lattice), [:gem:](https://rubygems.org/gems/lattice), [:book:](http://rubydoc.info/gems/lattice) - an actor-based web framework built on top of celluloid, reel, and webmachine; designed for realtime apps, end-to-end streaming, and websockets by Tony Arcieri et al
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
## Web Service Frameworks
|
101
|
+
|
102
|
+
_JSON HTTP API Builder_
|
103
|
+
|
104
|
+
- [Grape](http://intridea.github.io/grape) - [:octocat:](https://github.com/intridea/grape), [:gem:](https://rubygems.org/gems/grape), [:book:](http://rubydoc.info/gems/grape) - a micro-framework for creating REST-like APIs
|
105
|
+
- [Crêpe :octocat:](https://github.com/crepe) - [:gem:](https://rubygems.org/gems/crepe) - a thin API stack
|
106
|
+
- [Yaks :octocat:](https://github.com/plexus/yaks) - [:gem:](https://rubygems.org/gems/yaks), [:book:](http://rubydoc.info/gems/yaks) - serialize to hypermedia. HAL, JSON API, HALO, collection+JSON etc. by Arne Brasseur et al
|
107
|
+
- [Praxis](http://praxis-framework.io) - [:octocat:](https://github.com/rightscale/praxis), [:gem:](https://rubygems.org/gems/praxis), [:book:](http://rubydoc.info/gems/praxis) - a micro framework focusing on the design and coding aspects of creating good APIs quick by Josep M. Blanquer et al
|
108
|
+
|
109
|
+
## Micro Framework Alternatives
|
110
|
+
|
111
|
+
- [Rum :octocat:](https://github.com/chneukirchen/rum) - gRand Unified Mapper for rack apps by Christian Neukirchen
|
112
|
+
- [Cuba](http://cuba.is) - [:octocat:](https://github.com/soveran/cuba), [:gem:](https://rubygems.org/gems/cuba), [:book:](http://rubydoc.info/gems/cuba) - tiny but powerful mapper for rack apps by Michel Martens
|
113
|
+
- [New York, New York (NYNY)](http://alisnic.github.io/nyny) - [:octocat:](https://github.com/alisnic/nyny), [:gem:](https://rubygems.org/gems/nyny), [:book:](http://rubydoc.info/gems/nyny) - a tiny (~300 lines of code) web framework on top of rack by Andrei Lisnic
|
114
|
+
- [Roda](http://roda.jeremyevans.net) - [:octocat:](https://github.com/jeremyevans/roda), [:gem:](https://rubygems.org/gems/roda), [:book:](http://rubydoc.info/gems/roda) - a routing tree web framework toolkit by Jeremy Evans
|
115
|
+
- [Hobbit :octocat:](https://github.com/patriciomacadden/hobbit), [:gem:](https://rubygems.org/gems/hobbit), [:book:](http://rubydoc.info/gems/hobbit) - a minimalistic microframework built on top of rack by Patricio Mac Adden
|
116
|
+
- [Brooklyn :octocat:](https://github.com/luislavena/brooklyn) - a small web tool on top of rack by Luis Lavena
|
117
|
+
- [Nancy](http://guilleiguaran.github.io/nancy), [:octocat:](https://github.com/guilleiguaran/nancy), [:gem:](https://rubygems.org/gems/nancy), [:book:](http://rubydoc.info/gems/nancy) - Sinatra's little daughter by Guillermo Iguaran
|
118
|
+
- [Camping](http://camping.io), [:octocat:](https://github.com/camping), [:gem:](https://rubygems.org/gems/camping), [:book:](http://www.rubydoc.info/gems/camping) - minature rails for stay-at-home moms; the 4k pocket full-of-gags web microframework
|
119
|
+
- [Scorched](http://scorchedrb.com), [:octocat:](https://github.com/Wardrop/Scorched), [:gem:](https://rubygems.org/gems/scorched), [:book:](http://rubydoc.info/gems/scorched) - light-weight, DRY as a desert, web framework by Tom Wardrop et al
|
120
|
+
|
121
|
+
|
122
|
+
<!--
|
123
|
+
more
|
124
|
+
Kenji - https://github.com/kballenegger/kenji ??
|
125
|
+
-->
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
## "Full Stack" Macro Framework Alternatives
|
130
|
+
|
131
|
+
- [Lotus HQ](http://lotusrb.org) - [:octocat:](https://github.com/lotus), [:gem:](https://rubygems.org/gems/lotusrb), [:book:](http://rubydoc.info/gems/lotusrb) - a complete web framework; bringing back object-oriented programming to web development, leveraging a stable API, minimal DSL and plain objects by Luca Guidi et al
|
132
|
+
- [News & Updates](http://lotusrb.org/blog)
|
133
|
+
|
134
|
+
<!-- new list -->
|
135
|
+
|
136
|
+
- [Pakyow HQ](http://pakyow.org) - [:octocat:](https://github.com/pakyow), [:gem:](https://rubygems.org/gems/pakyow) - an open-source framework for the modern web with a view-first development process that's friendly to everyone whether you're a designer or a developer
|
137
|
+
- [News & Updates](http://pakyow.org/blog)
|
138
|
+
|
139
|
+
<!-- new list -->
|
140
|
+
|
141
|
+
- [Ramaze HQ](http://ramaze.net) - [:octocat:](https://github.com/Ramaze), [:gem:](https://rubygems.org/gems/ramaze), [:book:](http://rubydoc.info/gems/ramaze) - a simple, light and modular open-source web application framework by Michael Fellinger et al
|
142
|
+
- [News & Updates](http://ramaze.net/blog)
|
143
|
+
|
144
|
+
## Thanks
|
145
|
+
|
146
|
+
Josep M. Blanquer
|
147
|
+
|
148
|
+
## Meta
|
149
|
+
|
150
|
+
**License**
|
151
|
+
|
152
|
+
The awesome list is dedicated to the public domain. Use it as you please with no restrictions whatsoever.
|
153
|
+
|
154
|
+
**Questions? Comments?**
|
155
|
+
|
156
|
+
Send them along to the ruby-talk mailing list. Thanks!
|
157
|
+
|
data/test/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: catalogdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
@@ -137,7 +137,10 @@ files:
|
|
137
137
|
- README.md
|
138
138
|
- Rakefile
|
139
139
|
- lib/catalogdb.rb
|
140
|
+
- lib/catalogdb/reader.rb
|
140
141
|
- lib/catalogdb/version.rb
|
142
|
+
- test/data/RUBY.md
|
143
|
+
- test/helper.rb
|
141
144
|
- test/test_reader.rb
|
142
145
|
- test/test_version.rb
|
143
146
|
homepage: https://github.com/textkit/catalog.db
|