dyndoc-ruby 0.9.8 → 0.9.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dyn-auto +14 -0
- data/lib/dyndoc-convert.rb +195 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da77cb91f143261ef5cef6cf89d0f4016ec88580
|
4
|
+
data.tar.gz: f3c3229874249cc9854e401ed4c504d92a9ff681
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 655ae2027b9ad6ef19c9f911430db1e019d19631dcbc33018283b5246985a0393df95c4f673442c836f5d32fb5a30542c6cebc80e692a0527afd255513399e1a
|
7
|
+
data.tar.gz: 23a84c99eb88da27b1a718f72042bbe4b89d3d102a77629d2604eefdaff312824a4b4203694837bd8c11e512770611d0b652ea177ce616f48e6b05c911e55c5c
|
data/bin/dyn-auto
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'dyndoc-convert'
|
3
|
+
|
4
|
+
dyn_file=ARGV[0]
|
5
|
+
|
6
|
+
full_dyn_file=File.expand_path(File.join(Dir.pwd,dyn_file))
|
7
|
+
full_dyn_file + '.dyn' unless full_dyn_file =~ /.*\.dyn$/
|
8
|
+
|
9
|
+
|
10
|
+
if File.exists? full_dyn_file
|
11
|
+
Dyndoc.auto_convert_from_file(full_dyn_file)
|
12
|
+
else
|
13
|
+
puts "Error: #{full_dyn_file} does not exists"
|
14
|
+
end
|
data/lib/dyndoc-convert.rb
CHANGED
@@ -238,4 +238,199 @@ module Dyndoc
|
|
238
238
|
end
|
239
239
|
end
|
240
240
|
|
241
|
+
|
242
|
+
## Very similar to Dyndoc.process_html_file_from_dyn_file
|
243
|
+
def Dyndoc.auto_dyn_file(code,output_file,dyn_file,dyn_layout,addr,dyndoc_start)
|
244
|
+
cli=Dyndoc::InteractiveClient.new(code,dyn_file,addr,dyndoc_start)
|
245
|
+
|
246
|
+
if dyn_layout
|
247
|
+
cli=Dyndoc::InteractiveClient.new(File.read(dyn_layout),"",addr) #File.expand_path(dyn_layout),addr)
|
248
|
+
end
|
249
|
+
|
250
|
+
if output_file and Dir.exist? File.dirname(output_file)
|
251
|
+
File.open(output_file,"w") do |f|
|
252
|
+
f << cli.content
|
253
|
+
end
|
254
|
+
else
|
255
|
+
puts cli.content
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
###################################
|
260
|
+
## Dyndoc.auto_convert_from_file ##
|
261
|
+
###########################################################################
|
262
|
+
## Very similar to Dyndoc.cli_convert_from_file which is (badly) devoted to html file!
|
263
|
+
## This version tries to autoconvert a dyn_file of the form *_<format>.dyn to *.<format>
|
264
|
+
## Multi-documents is not considered here! The goal is to provide autoconversion for simple file (even though we can use template)
|
265
|
+
## :format_output => "html" is not a pb since it is mostly used for verbatim output and it is not the focus here!
|
266
|
+
|
267
|
+
def Dyndoc.auto_convert_from_file(dyn_file,opts={}) #ex: opts={dyn_root: , doc_tag: } #opts=obtained by commandline
|
268
|
+
## opts[:dyn_root] ||= ENV["HOME"]
|
269
|
+
|
270
|
+
dyn_libs,dyn_tags,dyn_layout,dyn_pre_code,dyn_post_code=nil,nil,nil,nil,nil
|
271
|
+
|
272
|
+
dyn_path=dyn_file.split(File::Separator)
|
273
|
+
|
274
|
+
|
275
|
+
if i=(dyn_file =~ /\_([a-z,A-Z,0-9]*)\.dyn$/)
|
276
|
+
dyn_extname = $1
|
277
|
+
dyn_dirname = File.dirname(dyn_file[0...i])
|
278
|
+
dyn_basename = dyn_file[0...i]
|
279
|
+
|
280
|
+
cfg_files={
|
281
|
+
fullname: dyn_file,
|
282
|
+
basename: File.basename(dyn_file,".*"),
|
283
|
+
tag: opts[:doc_tag],
|
284
|
+
dyn_extname: dyn_extname,
|
285
|
+
dyn_dirname: dyn_dirname,
|
286
|
+
dyn_basename: dyn_basename,
|
287
|
+
output_basename: dyn_basename+"."+dyn_extname
|
288
|
+
}
|
289
|
+
|
290
|
+
p [:cfg_files,cfg_files]
|
291
|
+
|
292
|
+
cfg={}
|
293
|
+
|
294
|
+
## find the previous config.yml in the tree folder
|
295
|
+
## TODO: read all previous config.yml and merge them from root to current
|
296
|
+
## The merge could be also to join the content when the key is the same.
|
297
|
+
## Ex: semantic-ui (1st config.yml): css_message
|
298
|
+
## semantic-ui (2nd config.yml): css_icon
|
299
|
+
## becomes: semantic-ui: css_message, css_icon
|
300
|
+
## NEEDS TO DECLARE the fields that behave like this in some other config file (keys.yml)
|
301
|
+
|
302
|
+
cfg_yml_files=dyn_path.inject([""]) {|res,e| res + [(res[-1,1]+[e]).flatten]}.map{|pa| File.join("",pa,"config.yml")}.reverse
|
303
|
+
cfg_yml_file=cfg_yml_files.select{|c| File.exists? c}[0]
|
304
|
+
cfg=YAML::load_file(cfg_yml_file) if cfg_yml_file
|
305
|
+
|
306
|
+
## add info related to dyn file
|
307
|
+
cfg.merge!(cfg_files)
|
308
|
+
|
309
|
+
## Dyn layout
|
310
|
+
dyn_layout=dyn_file[0...i]+"_#{dyn_extname}-layout.dyn" if File.exist? dyn_file[0...i]+"_#{dyn_extname}-layout.dyn"
|
311
|
+
|
312
|
+
## Dyn pre
|
313
|
+
dyn_pre_code=File.read(dyn_file[0...i]+"_#{dyn_extname}-pre.dyn") if File.exist? dyn_file[0...i]+"_#{dyn_extname}-pre.dyn"
|
314
|
+
|
315
|
+
## Dyn post
|
316
|
+
dyn_post_code=File.read(dyn_file[0...i]+"_#{dyn_extname}-post.dyn") if File.exist? dyn_file[0...i]+"_#{dyn_extname}-post.dyn"
|
317
|
+
|
318
|
+
|
319
|
+
if File.exist? dyn_file[0...i]+"_#{dyn_extname}.dyn_cfg" and (yml=YAML::load_file(dyn_file[0...i]+"_#{dyn_extname}.dyn_cfg"))
|
320
|
+
cfg.merge!(yml)
|
321
|
+
else # try do find (in the Zope spirit) a config file in the nearest folder
|
322
|
+
end
|
323
|
+
|
324
|
+
## code to evaluate
|
325
|
+
code=File.read(dyn_file)
|
326
|
+
|
327
|
+
page={}
|
328
|
+
|
329
|
+
if code =~ /^\-{3}/
|
330
|
+
b=code.split(/^(\-{3,})/,-1)
|
331
|
+
if b[0].empty? and b.length>4
|
332
|
+
require 'yaml'
|
333
|
+
page=YAML.load(b[2])
|
334
|
+
cfg.merge!(page)
|
335
|
+
code=b[4..-1].join("")
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
# dyn_root can be overwritten by cfg
|
340
|
+
# defines the root of relative predefined dyn (pre, post, ...) files
|
341
|
+
dyn_root= cfg["dyn_root"] || opts[:dyn_root] || File.expand_path("..",dyn_file)
|
342
|
+
|
343
|
+
cfg["layout"] = cfg["pre"] = cfg["post"] = cfg["model"] if cfg["model"]
|
344
|
+
|
345
|
+
if cfg["layout"]
|
346
|
+
if cfg["layout"][0] == "/"
|
347
|
+
cfg_tmp=cfg["layout"]
|
348
|
+
else
|
349
|
+
cfg_tmp=File.join(dyn_root, cfg["layout"])
|
350
|
+
end
|
351
|
+
cfg_tmp+= ".dyn" if File.extname(cfg_tmp).empty?
|
352
|
+
##Dyndoc.warn :layout,cfg_tmp
|
353
|
+
dyn_layout=cfg_tmp if !dyn_layout and File.exist? cfg_tmp
|
354
|
+
end
|
355
|
+
if cfg["pre"]
|
356
|
+
if cfg["pre"][0] == "/"
|
357
|
+
cfg_tmp=cfg["pre"]
|
358
|
+
else
|
359
|
+
cfg_tmp=File.join(dyn_root,cfg["pre"])
|
360
|
+
end
|
361
|
+
cfg_tmp+= ".dyn" if File.extname(cfg_tmp).empty?
|
362
|
+
dyn_pre_code=File.read(cfg_tmp) if !dyn_pre_code and File.exist? cfg_tmp
|
363
|
+
end
|
364
|
+
|
365
|
+
if cfg["post"]
|
366
|
+
if cfg["post"][0] == "/"
|
367
|
+
cfg_tmp=cfg["post"]
|
368
|
+
else
|
369
|
+
cfg_tmp=File.join(dyn_root,cfg["post"])
|
370
|
+
end
|
371
|
+
cfg_tmp+= ".dyn" if File.extname(cfg_tmp).empty?
|
372
|
+
dyn_post_code=File.read(cfg_tmp) if !dyn_post_code and File.exist? cfg_tmp
|
373
|
+
end
|
374
|
+
|
375
|
+
|
376
|
+
## deal with html_file
|
377
|
+
output_file=File.join(opts[:where] || cfg[:dyn_dirname],File.basename(cfg[:output_basename]))
|
378
|
+
unless File.exist? output_file
|
379
|
+
dirname=File.dirname(output_file)
|
380
|
+
require 'fileutils'
|
381
|
+
FileUtils.mkdir_p dirname
|
382
|
+
end
|
383
|
+
|
384
|
+
dyn_libs=cfg["libs"].strip if cfg["libs"]
|
385
|
+
|
386
|
+
## mode multi-documents
|
387
|
+
docs_tags=[]
|
388
|
+
## since opts[:doc_tag] can have more than one tag it is replaced with __ALL_DOC_TAG__ that is replaced before processing with the proper tag
|
389
|
+
docs_tags << opts[:doc_tag] if opts[:doc_tag]
|
390
|
+
## complete docs_tags with cfg["tags"]
|
391
|
+
docs_tags += (cfg["tags"]||"").split(",").map{|e| e.strip}
|
392
|
+
dyn_tags="[#<]{#opt]"+docs_tags.join(",")+"[#opt}[#>]" unless docs_tags.empty?
|
393
|
+
|
394
|
+
### Dyndoc.warn :dyn_tags,[docs_tags,dyn_tags]
|
395
|
+
|
396
|
+
if dyn_libs or dyn_pre_code
|
397
|
+
code_pre = ""
|
398
|
+
code_pre += dyn_pre_code + "\n" if dyn_pre_code
|
399
|
+
code_pre += '[#require]'+"\n"+dyn_libs if dyn_libs
|
400
|
+
code = code_pre + '[#main][#>]' + code
|
401
|
+
end
|
402
|
+
code += "\n" + dyn_post_code if dyn_post_code
|
403
|
+
## TO TEST!!!
|
404
|
+
##
|
405
|
+
Dyndoc.warn :cfg,cfg
|
406
|
+
##Dyndoc.warn :page,page
|
407
|
+
code = "[#rb<]require 'ostruct';cfg = OpenStruct.new(" + cfg.inspect + ")[#>]" +code
|
408
|
+
code = dyn_tags + code if dyn_tags
|
409
|
+
|
410
|
+
## add path for user
|
411
|
+
code_path = "[#path]"
|
412
|
+
code_path << "\n" << File.join(dyn_root,'dynlib')
|
413
|
+
code_path << "\n" << opts[:dynlib_root] << "\n" if opts[:dynlib_root]
|
414
|
+
code_path << "\n" << cfg[:dynlib_root] << "\n" if cfg[:dynlib_root]
|
415
|
+
code_path << "[#main][#<]\n"
|
416
|
+
code = code_path + code
|
417
|
+
|
418
|
+
### Dyndoc.warn :code,code
|
419
|
+
|
420
|
+
dyndoc_start=[:dyndoc_libs,:dyndoc_layout]
|
421
|
+
|
422
|
+
opts[:addr] ||= "127.0.0.1"
|
423
|
+
##unless cfg[:doc_tags]
|
424
|
+
Dyndoc.auto_dyn_file(code,output_file,dyn_file,dyn_layout,opts[:addr],dyndoc_start)
|
425
|
+
# else
|
426
|
+
# (cfg[:doc_tags]).each do |doc_tag|
|
427
|
+
# output_file = cfg[:outputs][doc_tag] ? (cfg[:outputs][doc_tag][0] == "/" ? cfg[:outputs][doc_tag] : File.join() ) : File.join(opts[:where] || cfg["dyn_dirname"],cfg["output_basename"])
|
428
|
+
# p [:html_multi,doc_tag,html_file] #,code.gsub(/__ALL_DOC_TAG__/,doc_tag)]
|
429
|
+
# Dyndoc.auto_dyn_file(code,html_file,dyn_file,dyn_layout,addr,dyndoc_start)
|
430
|
+
# end
|
431
|
+
# end
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
|
241
436
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyndoc-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RCqls
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: R4rb
|
@@ -121,11 +121,13 @@ executables:
|
|
121
121
|
- dyn-scan
|
122
122
|
- dyn-lint
|
123
123
|
- dyn-cli
|
124
|
+
- dyn-auto
|
124
125
|
extensions: []
|
125
126
|
extra_rdoc_files: []
|
126
127
|
files:
|
127
128
|
- bin/dpm
|
128
129
|
- bin/dyn
|
130
|
+
- bin/dyn-auto
|
129
131
|
- bin/dyn-cli
|
130
132
|
- bin/dyn-forever
|
131
133
|
- bin/dyn-html
|