schemadoc 1.0.2 → 1.1.0
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 +6 -0
- data/lib/schemadoc/cli/runner.rb +23 -2
- data/lib/schemadoc/version.rb +2 -2
- data/lib/schemadoc/worker.rb +127 -3
- data/test/config/beer.rb +28 -0
- data/test/config/beer.yuml +10 -0
- data/test/config/feed.yuml +6 -0
- data/test/config/football.yml +1 -0
- data/test/config/football.yuml +30 -0
- data/test/config/pluto.yuml +8 -0
- data/test/config/world.yuml +25 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cacde4f0b3b4f232bd4f0550af241286b658e89
|
4
|
+
data.tar.gz: 22f4a46c61f170f65bbc34caf94c825f3018c5d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 933310973794c021b4351996d879e37b599991dbf510124102fe0cf745fd91eddd0673d4ea1af270e8da706676f98a4f791aac9ec4375a2979c47656322ca7db
|
7
|
+
data.tar.gz: a33e66989fc88c0d4e17e6cb8e500b96c850e882fe951aff1d77bf4fa3952e0d203f15449506425f8fdabbadb715559684545cb80c0637f011377bf3d76df65f
|
data/Manifest.txt
CHANGED
@@ -8,5 +8,11 @@ lib/schemadoc/cli/opts.rb
|
|
8
8
|
lib/schemadoc/cli/runner.rb
|
9
9
|
lib/schemadoc/version.rb
|
10
10
|
lib/schemadoc/worker.rb
|
11
|
+
test/config/beer.rb
|
11
12
|
test/config/beer.yml
|
13
|
+
test/config/beer.yuml
|
14
|
+
test/config/feed.yuml
|
12
15
|
test/config/football.yml
|
16
|
+
test/config/football.yuml
|
17
|
+
test/config/pluto.yuml
|
18
|
+
test/config/world.yuml
|
data/lib/schemadoc/cli/runner.rb
CHANGED
@@ -65,9 +65,30 @@ EOS
|
|
65
65
|
|
66
66
|
arg = args[0] || './schemadoc.yml'
|
67
67
|
config = YAML.load_file( arg )
|
68
|
-
pp config
|
68
|
+
pp config
|
69
|
+
|
70
|
+
## check for .rb file w/ same name but .rb extension
|
71
|
+
## require/load if present
|
72
|
+
boot_path = arg.sub( '.yml', '.rb' )
|
73
|
+
if File.exists?( boot_path )
|
74
|
+
puts "try to boot (load) '#{boot_path}'..."
|
75
|
+
|
76
|
+
## note: for now always add ./ current workdir
|
77
|
+
## fix - check if path is absolute; if not only add ./ current if not absolute
|
78
|
+
require "./#{boot_path}"
|
79
|
+
puts 'ok'
|
80
|
+
end
|
81
|
+
|
82
|
+
if defined?(MODELS)
|
83
|
+
models = MODELS
|
84
|
+
models.each do |model| # double check model classes if present (loaded)
|
85
|
+
puts "#{model.name}... ok"
|
86
|
+
end
|
87
|
+
else
|
88
|
+
models = []
|
89
|
+
end
|
69
90
|
|
70
|
-
worker = Worker.new( config ).run
|
91
|
+
worker = Worker.new( config, models ).run
|
71
92
|
|
72
93
|
puts 'Done.'
|
73
94
|
|
data/lib/schemadoc/version.rb
CHANGED
data/lib/schemadoc/worker.rb
CHANGED
@@ -11,10 +11,10 @@ module SchemaDoc
|
|
11
11
|
|
12
12
|
class Worker
|
13
13
|
|
14
|
-
def initialize( config )
|
14
|
+
def initialize( config, models=[] )
|
15
15
|
## split into db config (for connection) and
|
16
16
|
## schemadoc config
|
17
|
-
|
17
|
+
|
18
18
|
@config = {}
|
19
19
|
@db_config = {}
|
20
20
|
|
@@ -28,11 +28,16 @@ class Worker
|
|
28
28
|
|
29
29
|
puts "database connection spec:"
|
30
30
|
pp @db_config
|
31
|
+
|
32
|
+
@models = models
|
31
33
|
end
|
32
34
|
|
33
35
|
|
34
36
|
def connect
|
35
|
-
|
37
|
+
##@con = AbstractModel.connection_for( @db_config )
|
38
|
+
|
39
|
+
ActiveRecord::Base.establish_connection( @db_config )
|
40
|
+
@con = ActiveRecord::Base.connection
|
36
41
|
end
|
37
42
|
|
38
43
|
def dump_schema
|
@@ -52,6 +57,7 @@ class Worker
|
|
52
57
|
end
|
53
58
|
end
|
54
59
|
|
60
|
+
|
55
61
|
def build_schema
|
56
62
|
####
|
57
63
|
# build schema hash
|
@@ -93,6 +99,73 @@ class Worker
|
|
93
99
|
end
|
94
100
|
|
95
101
|
|
102
|
+
def dump_models
|
103
|
+
@models.each do |model|
|
104
|
+
## pp model
|
105
|
+
|
106
|
+
puts model.name
|
107
|
+
puts "=" * model.name.size
|
108
|
+
puts " table_name: #{model.table_name}"
|
109
|
+
pp model.columns
|
110
|
+
|
111
|
+
## check assocs
|
112
|
+
assocs = model.reflections.values
|
113
|
+
## pp assocs
|
114
|
+
assocs.each do |assoc|
|
115
|
+
puts "#{assoc.macro} #{assoc.name}"
|
116
|
+
puts "options:"
|
117
|
+
pp assoc.options
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
def build_models
|
124
|
+
#########################
|
125
|
+
# build models hash
|
126
|
+
|
127
|
+
models = []
|
128
|
+
|
129
|
+
@models.each do |model|
|
130
|
+
|
131
|
+
puts model.name
|
132
|
+
puts "=" * model.name.size
|
133
|
+
|
134
|
+
m = {
|
135
|
+
name: model.name, ## todo: split into name and module/package name ??
|
136
|
+
table_name: model.table_name,
|
137
|
+
columns: [],
|
138
|
+
assocs: [],
|
139
|
+
}
|
140
|
+
|
141
|
+
model.columns.each do |column|
|
142
|
+
c = {
|
143
|
+
name: column.name,
|
144
|
+
null: column.null,
|
145
|
+
default: column.default,
|
146
|
+
sql_type: column.sql_type,
|
147
|
+
cast_type: column.cast_type.class.name,
|
148
|
+
}
|
149
|
+
m[:columns] << c
|
150
|
+
end
|
151
|
+
|
152
|
+
## check assocs
|
153
|
+
assocs = model.reflections.values
|
154
|
+
assocs.each do |assoc|
|
155
|
+
a = {
|
156
|
+
macro: assoc.macro, ## rename to rel or something - why, why not??
|
157
|
+
name: assoc.name,
|
158
|
+
options: assoc.options ## filter options - why, why not??
|
159
|
+
}
|
160
|
+
m[:assocs] << a
|
161
|
+
end
|
162
|
+
|
163
|
+
models << m
|
164
|
+
end # each model
|
165
|
+
models
|
166
|
+
end # method build_models
|
167
|
+
|
168
|
+
|
96
169
|
def build_index
|
97
170
|
####
|
98
171
|
# build symbol index hash
|
@@ -148,9 +221,47 @@ class Worker
|
|
148
221
|
end
|
149
222
|
|
150
223
|
|
224
|
+
def models_to_yuml( models )
|
225
|
+
|
226
|
+
## todo: move to script !!!
|
227
|
+
## check
|
228
|
+
## how to deal w/ singular,plural,
|
229
|
+
## add to model
|
230
|
+
## singular,plural - to keep it simple???
|
231
|
+
## use name and full_name and module ??
|
232
|
+
## e.g. BeerDb::Model::Brewery ???
|
233
|
+
|
234
|
+
buf = ''
|
235
|
+
models.each do |model|
|
236
|
+
|
237
|
+
assocs = model[:assocs]
|
238
|
+
if assocs.empty?
|
239
|
+
buf << "// skipping #{model[:name]}; no assocs found/n"
|
240
|
+
next
|
241
|
+
end
|
242
|
+
|
243
|
+
assocs.each do |assoc|
|
244
|
+
## skip assocs w/ option through for now
|
245
|
+
if assoc[:options][:through]
|
246
|
+
buf << "// skipping assoc #{assoc[:macro]} #{assoc[:name]} w/ option through\n"
|
247
|
+
next
|
248
|
+
end
|
249
|
+
|
250
|
+
buf << "[#{model[:name]}] - [#{assoc[:name]}]\n"
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
buf
|
255
|
+
end
|
256
|
+
|
257
|
+
|
151
258
|
def run( opts={} )
|
152
259
|
connect()
|
153
260
|
dump_schema()
|
261
|
+
dump_models()
|
262
|
+
|
263
|
+
models = build_models()
|
264
|
+
pp models
|
154
265
|
|
155
266
|
schema = build_schema()
|
156
267
|
index = build_index()
|
@@ -161,6 +272,15 @@ class Worker
|
|
161
272
|
f.write JSON.pretty_generate( schema )
|
162
273
|
end
|
163
274
|
|
275
|
+
File.open( 'models.json', 'w') do |f|
|
276
|
+
f.write JSON.pretty_generate( models )
|
277
|
+
end
|
278
|
+
|
279
|
+
### fix: move to script !!!
|
280
|
+
File.open( 'models.yuml', 'w' ) do |f|
|
281
|
+
f.write models_to_yuml( models )
|
282
|
+
end
|
283
|
+
|
164
284
|
File.open( 'symbols.json', 'w') do |f|
|
165
285
|
f.write JSON.pretty_generate( index )
|
166
286
|
end
|
@@ -169,6 +289,10 @@ class Worker
|
|
169
289
|
|
170
290
|
private
|
171
291
|
|
292
|
+
###
|
293
|
+
## fix: not really needed - remove ???
|
294
|
+
## just use ActiveRecord::Base.establish_connection() directly ??
|
295
|
+
|
172
296
|
class AbstractModel < ActiveRecord::Base
|
173
297
|
self.abstract_class = true # no table; class just used for getting db connection
|
174
298
|
|
data/test/config/beer.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
puts '[boot] hello from beer.rb'
|
4
|
+
|
5
|
+
## get all beer.db models
|
6
|
+
require 'beerdb'
|
7
|
+
|
8
|
+
|
9
|
+
### use Schemadoc::MODELS ???
|
10
|
+
|
11
|
+
## configure all models to document
|
12
|
+
|
13
|
+
MODELS = [
|
14
|
+
BeerDb::Model::Beer,
|
15
|
+
BeerDb::Model::Brand,
|
16
|
+
BeerDb::Model::Brewery,
|
17
|
+
|
18
|
+
WorldDb::Model::Continent,
|
19
|
+
WorldDb::Model::Country,
|
20
|
+
WorldDb::Model::Region,
|
21
|
+
WorldDb::Model::City,
|
22
|
+
|
23
|
+
TagDb::Model::Tag, ### check - is TaxoDb ??
|
24
|
+
TagDb::Model::Tagging,
|
25
|
+
]
|
26
|
+
|
27
|
+
### needs an established connection
|
28
|
+
# pp MODELS
|
@@ -0,0 +1,10 @@
|
|
1
|
+
////////
|
2
|
+
// yuml.me model class diagram (yuml.me/diagram/scruffy/class/draw)
|
3
|
+
|
4
|
+
|
5
|
+
[Brewery|key;name;address;web] -> [Brand|key;name]
|
6
|
+
[Brand] -> [Beer|key;name;abv;og]
|
7
|
+
[Brewery] -> [Beer]
|
8
|
+
|
9
|
+
[Beer] - [note: Use tags for styles e.g. ale lager stout lambic and more {bg:wheat}]
|
10
|
+
|
data/test/config/football.yml
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
////////
|
2
|
+
// yuml.me model class diagram (yuml.me/diagram/scruffy/class/draw)
|
3
|
+
|
4
|
+
// note: use small size
|
5
|
+
|
6
|
+
|
7
|
+
[Season|key;title] -> [Competition|key;title;start_at;end_at;num]
|
8
|
+
|
9
|
+
[League|key;title] -> [Competition]
|
10
|
+
|
11
|
+
[Competition] -> [Team|key;title;code;address;web]
|
12
|
+
|
13
|
+
[Competition] -> [Round|title;start_at;end_at;num]
|
14
|
+
|
15
|
+
[Competition] -> [Group|title;num]
|
16
|
+
|
17
|
+
[Round] -> [Match|num;play_at;knockout;home;score1;score2;score1et;score2et;score1p;score2p;winner]
|
18
|
+
|
19
|
+
[Group] -> [Match]
|
20
|
+
|
21
|
+
[Team] -> [Match]
|
22
|
+
|
23
|
+
[Match] -> [Goal|minute;offset;penalty;owngoal]
|
24
|
+
|
25
|
+
[Goal] <- [Player|name]
|
26
|
+
|
27
|
+
[Team] -> [Squad|num;pos]
|
28
|
+
|
29
|
+
[Squad] <- [Player]
|
30
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
////////
|
2
|
+
// yuml.me model class diagram (yuml.me/diagram/scruffy/class/draw)
|
3
|
+
|
4
|
+
|
5
|
+
[Site|key;title;author;updated;url;fetched;] -> [Subscription]
|
6
|
+
[Subscription] <- [Feed|key;encoding;format;title;url;feed_url;generator;summary;updated;published;author;fetched]
|
7
|
+
[Feed] -> [Item|guid;url;title;summary;content;updated;published;fetched]
|
8
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
////////
|
3
|
+
// yuml.me model class diagram (yuml.me/diagram/scruffy/class/draw)
|
4
|
+
|
5
|
+
////
|
6
|
+
// Everything is a place. use inheritance w/ ^
|
7
|
+
|
8
|
+
[Place|name;lat;lng;type] ^ [City Town Village]
|
9
|
+
[Place] ^ [State Province]
|
10
|
+
[Place] ^ [Country Territory]
|
11
|
+
[Place] ^ [Continent]
|
12
|
+
|
13
|
+
////
|
14
|
+
// [Place] -> [Name|name;lang]
|
15
|
+
|
16
|
+
///////
|
17
|
+
|
18
|
+
[Continent|key;name;area;pop] -> [Country|key;name;area;pop]
|
19
|
+
[Country] -> [State|key;name;area;pop]
|
20
|
+
[State] -> [City|key;name;area;pop]
|
21
|
+
|
22
|
+
////
|
23
|
+
//[Country] -> [Country Codes|name;type]
|
24
|
+
|
25
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schemadoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logutils
|
@@ -87,8 +87,14 @@ files:
|
|
87
87
|
- lib/schemadoc/cli/runner.rb
|
88
88
|
- lib/schemadoc/version.rb
|
89
89
|
- lib/schemadoc/worker.rb
|
90
|
+
- test/config/beer.rb
|
90
91
|
- test/config/beer.yml
|
92
|
+
- test/config/beer.yuml
|
93
|
+
- test/config/feed.yuml
|
91
94
|
- test/config/football.yml
|
95
|
+
- test/config/football.yuml
|
96
|
+
- test/config/pluto.yuml
|
97
|
+
- test/config/world.yuml
|
92
98
|
homepage: https://github.com/rubylibs/schemadoc
|
93
99
|
licenses:
|
94
100
|
- Public Domain
|