dyndoc-ruby 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dyn +1 -0
- data/bin/dyn-forever +0 -2
- data/bin/dyn-html +62 -78
- data/bin/dyn-html-onefile +143 -0
- data/bin/dyn-html-srv +19 -0
- data/bin/dyn-init +47 -8
- data/lib/dyndoc-convert.rb +12 -4
- data/lib/dyndoc-edit.rb +40 -6
- data/share/html-srv/dyn-html-srv.ru +165 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9963c5d464efaa1e487405f7281a8fc0524bfb4
|
4
|
+
data.tar.gz: 381c9fdc302fc46caf90ff3add7ef0fa4509cd25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f4be1e799a156cdc63609e0db7a5c18da45783fd8a56b390272b9a3cb2b96200e132d33f05e5c6a8220a32172a78bc895298f2ae14621de6605737ee68d1b25
|
7
|
+
data.tar.gz: 064ba3d1dc341f4b06f997d60bd12d0387ae126ddf072f43d7ab6bf80df766f5e42f40d67d2e1f5c1f35c6e469725d0c9fd7a8016d3f907ea749d001279d8a90
|
data/bin/dyn
CHANGED
data/bin/dyn-forever
CHANGED
data/bin/dyn-html
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
require 'dyndoc-convert'
|
3
3
|
require 'dyndoc-edit'
|
4
4
|
require 'dyndoc/init/home'
|
5
|
+
require 'pathname'
|
6
|
+
|
5
7
|
dyndoc_home = Dyndoc.home
|
6
8
|
#p Dyndoc.home
|
7
9
|
|
@@ -14,72 +16,49 @@ cfg=YAML::load_file(cfg_yml) if File.exist? cfg_yml
|
|
14
16
|
|
15
17
|
## To put inside yaml config file!
|
16
18
|
root = cfg["root"] || File.join(ENV["HOME"],"RCqls","RodaServer")
|
17
|
-
edit_root = File.join(root ,"edit")
|
18
|
-
|
19
|
+
edit_root = cfg["edit_root"] || File.join(root ,"edit")
|
20
|
+
public_root = cfg["public_root"] || File.join(root ,"public")
|
21
|
+
pages_root = File.join(public_root ,"pages")
|
19
22
|
current_email = cfg["email"] || "rdrouilh@gmail.com" #default email user can be overriden by -u option
|
23
|
+
base_url=cfg["base_url"] || "http://localhost:9292"
|
20
24
|
|
21
25
|
args=ARGV
|
22
|
-
args=["-h"] if args.empty?
|
23
26
|
|
24
27
|
require 'optparse'
|
25
28
|
|
26
29
|
$VERBOSE = nil
|
27
30
|
|
28
|
-
|
29
|
-
## 1) global mode:
|
30
|
-
## dyn-html /dev/R/test.dyn
|
31
|
-
## 2) user mode: relative path used instead of ~ since ~ is interpreted in bash mode!
|
32
|
-
## dyn-html cfies2017/index.dyn:index # -u <default_user_email>
|
33
|
-
## dyn-html -u remy.drouilhet@upmf-grenoble.fr cfies2017/index.dyn:index
|
34
|
-
## dyn-html -u remy.drouilhet@upmf-grenoble.fr cfies2017/index.dyn:all
|
35
|
-
|
36
|
-
options={watching: nil, refresh: :auto, first: true}
|
31
|
+
options={first: true}
|
37
32
|
|
38
33
|
OptionParser.new do |opts|
|
39
|
-
opts.banner = "Usage: dyn-html
|
40
|
-
|
41
|
-
opts.on( '-u', '--user EMAIL', 'user email' ) do |email|
|
42
|
-
current_email=email
|
43
|
-
end
|
44
|
-
|
45
|
-
opts.on( '-w', '--watch', 'watch file') do
|
46
|
-
options[:watching]=true
|
47
|
-
end
|
48
|
-
|
49
|
-
opts.on( '-r', '--refresh HTML', 'page to refresh (only for MacOsX)' ) do |html|
|
50
|
-
options[:refresh]=html
|
51
|
-
end
|
52
|
-
|
53
|
-
opts.on('--no-refresh', 'no refresh page' ) do
|
54
|
-
options[:refresh]=nil
|
55
|
-
end
|
56
|
-
|
34
|
+
opts.banner = "Usage: dyn-html"
|
57
35
|
end.parse!(args)
|
58
36
|
|
59
37
|
## Mandatory input
|
60
|
-
dyn_file
|
61
|
-
doc_tag="" unless doc_tag
|
62
|
-
doc_tag="__ALL_DOC_TAG__" if doc_tag.downcase == "all"
|
38
|
+
# dyn_file=args[0]
|
39
|
+
# doc_tag="" unless doc_tag
|
40
|
+
# doc_tag="__ALL_DOC_TAG__" if doc_tag.downcase == "all"
|
63
41
|
|
64
42
|
## Detect docs_tags_info
|
65
|
-
dyn_file=File.join(["","users",current_email],dyn_file) unless dyn_file[0,1]=="/"
|
66
|
-
filename=File.join(edit_root,dyn_file)
|
67
|
-
doc_tags_info=Dyndoc::Edit.get_doc_tags_info(File.read(filename))
|
43
|
+
# dyn_file=File.join(["","users",current_email],dyn_file) unless dyn_file[0,1]=="/"
|
44
|
+
# filename=File.join(edit_root,dyn_file)
|
68
45
|
|
69
|
-
|
46
|
+
### doc_tags_info=Dyndoc::Edit.get_doc_tags_info(File.read(filename))
|
47
|
+
|
48
|
+
### if dyn_file and (dyn_file=~/(.*)(?:\.dyn|_html.dyn)$/)
|
70
49
|
#p [:dyn_file,dyn_file,$1]
|
71
|
-
html_files=Dyndoc::Edit.html_files({doc_tags_info: doc_tags_info , dyn_file: dyn_file },current_email)
|
72
|
-
##p [:html_files,html_files]
|
73
|
-
html_file=html_files[doc_tag] || html_files[""]
|
50
|
+
### html_files=Dyndoc::Edit.html_files({doc_tags_info: doc_tags_info , dyn_file: dyn_file },current_email)
|
51
|
+
### ##p [:html_files,html_files]
|
52
|
+
### html_file=html_files[doc_tag] || html_files[""]
|
74
53
|
|
75
|
-
if options[:refresh] and options[:refresh] == :auto
|
76
|
-
|
77
|
-
end
|
54
|
+
### if options[:refresh] and options[:refresh] == :auto
|
55
|
+
### options[:refresh] = File.join(cfg["localhost_url"] || "http://localhost:9292",File.dirname(dyn_file),File.basename(dyn_file,".*"))
|
56
|
+
### end
|
78
57
|
|
79
|
-
output=""
|
80
|
-
output << "Watching "+dyn_file if options[:watching]
|
81
|
-
output << (options[:watching] ? " and refreshing " : "Refreshing ")+options[:refresh] if options[:refresh]
|
82
|
-
puts output unless output.empty?
|
58
|
+
### output=""
|
59
|
+
### output << "Watching "+dyn_file if options[:watching]
|
60
|
+
### output << (options[:watching] ? " and refreshing " : "Refreshing ")+options[:refresh] if options[:refresh]
|
61
|
+
### puts output unless output.empty?
|
83
62
|
|
84
63
|
# Ex for opts:
|
85
64
|
# rdrouilh : [:dyn_opts, {:dyn_root=>"/Users/remy/RCqls/RodaServer/edit", :html_root=>"/Users/remy/RCqls/RodaServer/public/pages", :user=>"rdrouilh@gmail.com", :doc_tag=>"bio", :html_files=>{""=>"/dev/R/test.html", "ssd"=>"/dev/R/ssd.html", "bio"=>"/dev/R/bio.html", "tmp"=>"/dev/R/tmp.html", "cours"=>"/dev/R/cours.html"}}]
|
@@ -87,37 +66,42 @@ if dyn_file and (dyn_file=~/(.*)(?:\.dyn|_html.dyn)$/)
|
|
87
66
|
opts = {
|
88
67
|
dyn_root: edit_root,
|
89
68
|
html_root: pages_root,
|
90
|
-
user: current_email
|
91
|
-
doc_tag: doc_tag,
|
92
|
-
html_files: html_files
|
69
|
+
user: current_email
|
93
70
|
}
|
94
71
|
##p opts
|
95
|
-
file_to_process=File.join(opts[:dyn_root],dyn_file)
|
72
|
+
### file_to_process=File.join(opts[:dyn_root],dyn_file)
|
96
73
|
cmd_to_open=nil
|
97
|
-
if
|
98
|
-
|
99
|
-
cmd_to_refresh='tell application "System Events"' + "\n" + 'tell process "Safari"' + "\n" + 'keystroke "r" using {command down}' + "\n" + 'delay 60' + "\n" + 'end tell' + "\n" + 'end tell'
|
74
|
+
if RUBY_PLATFORM =~ /darwin/
|
75
|
+
|
100
76
|
end
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
77
|
+
|
78
|
+
require 'filewatcher'
|
79
|
+
require 'dyndoc-linter'
|
80
|
+
puts "watching "+File.join(edit_root)
|
81
|
+
old_html_file=""
|
82
|
+
FileWatcher.new(edit_root).watch() do |filename, event|
|
83
|
+
##p [:filename,filename]
|
84
|
+
if [:changed,:new].include? event and File.extname(filename) == ".dyn"
|
85
|
+
##p [:filename_event,event,filename]
|
86
|
+
if Dyndoc::Linter.check_file(filename).empty?
|
87
|
+
## find dyn_file (relative path from root)
|
88
|
+
dyn_file="/"+Pathname(filename).relative_path_from(Pathname(edit_root)).to_s
|
89
|
+
opts_doc=Dyndoc::FileWatcher.get_dyn_html_info(filename,dyn_file,opts[:user])
|
90
|
+
opts.merge! opts_doc
|
91
|
+
##p [:html_files,html_files]
|
92
|
+
|
93
|
+
html_file=opts[:html_files][opts[:current_doc_tag]] # No more default # || html_files[""]
|
94
|
+
##p [:opts,opts,:current_doc_tag,opts[:current_doc_tag]]
|
95
|
+
Dyndoc.cli_convert_from_file(dyn_file[1..-1],html_file, opts)
|
96
|
+
puts dyn_file[1..-1]+" processed!"
|
97
|
+
if RUBY_PLATFORM =~ /darwin/
|
98
|
+
options[:first] = html_file != old_html_file
|
99
|
+
if html_file != old_html_file
|
100
|
+
old_html_file = html_file
|
101
|
+
url=File.join(base_url,html_file)
|
102
|
+
cmd_to_open='tell application "Safari" to set URL of current tab of front window to "'+url+'"'
|
103
|
+
`osascript -e '#{cmd_to_open}'`
|
104
|
+
else
|
121
105
|
%x{osascript<<ENDREFRESH
|
122
106
|
tell app "Safari" to activate
|
123
107
|
tell application "System Events"
|
@@ -125,12 +109,12 @@ tell application "System Events"
|
|
125
109
|
end tell
|
126
110
|
ENDREFRESH
|
127
111
|
}
|
128
|
-
end
|
129
112
|
end
|
130
|
-
else
|
131
|
-
puts dyn_file[1..-1]+" not well-formed!"
|
132
113
|
end
|
114
|
+
else
|
115
|
+
puts dyn_file[1..-1]+" not well-formed!"
|
133
116
|
end
|
134
117
|
end
|
135
118
|
end
|
136
|
-
|
119
|
+
|
120
|
+
### end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'dyndoc-convert'
|
3
|
+
require 'dyndoc-edit'
|
4
|
+
require 'dyndoc/init/home'
|
5
|
+
dyndoc_home = Dyndoc.home
|
6
|
+
#p Dyndoc.home
|
7
|
+
|
8
|
+
###############################################
|
9
|
+
## INFO: this file watch only one file and #
|
10
|
+
## it is now replaced with dyn-html watching #
|
11
|
+
## an entire directory! #
|
12
|
+
###############################################
|
13
|
+
cfg_yml = File.join(dyndoc_home,"etc","dyn-html.yml")
|
14
|
+
|
15
|
+
cfg={}
|
16
|
+
|
17
|
+
cfg=YAML::load_file(cfg_yml) if File.exist? cfg_yml
|
18
|
+
|
19
|
+
|
20
|
+
## To put inside yaml config file!
|
21
|
+
root = cfg["root"] || File.join(ENV["HOME"],"RCqls","RodaServer")
|
22
|
+
edit_root = cfg["edit_root"] || File.join(root ,"edit")
|
23
|
+
public_root = cfg["public_root"] || File.join(root ,"public")
|
24
|
+
pages_root = File.join(public_root ,"pages")
|
25
|
+
current_email = cfg["email"] || "rdrouilh@gmail.com" #default email user can be overriden by -u option
|
26
|
+
|
27
|
+
args=ARGV
|
28
|
+
args=["-h"] if args.empty?
|
29
|
+
|
30
|
+
require 'optparse'
|
31
|
+
|
32
|
+
$VERBOSE = nil
|
33
|
+
|
34
|
+
## Examples:
|
35
|
+
## 1) global mode:
|
36
|
+
## dyn-html /dev/R/test.dyn
|
37
|
+
## 2) user mode: relative path used instead of ~ since ~ is interpreted in bash mode!
|
38
|
+
## dyn-html cfies2017/index.dyn:index # -u <default_user_email>
|
39
|
+
## dyn-html -u remy.drouilhet@upmf-grenoble.fr cfies2017/index.dyn:index
|
40
|
+
## dyn-html -u remy.drouilhet@upmf-grenoble.fr cfies2017/index.dyn:all
|
41
|
+
|
42
|
+
options={watching: nil, refresh: :auto, first: true}
|
43
|
+
|
44
|
+
OptionParser.new do |opts|
|
45
|
+
opts.banner = "Usage: dyn-html [-u email_user] [-w] [-r <url-to-refresh-when-watched>] [/]<relative_path>/<file>.dyn"
|
46
|
+
|
47
|
+
opts.on( '-u', '--user EMAIL', 'user email' ) do |email|
|
48
|
+
current_email=email
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on( '-w', '--watch', 'watch file') do
|
52
|
+
options[:watching]=true
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on( '-r', '--refresh HTML', 'page to refresh (only for MacOsX)' ) do |html|
|
56
|
+
options[:refresh]=html
|
57
|
+
end
|
58
|
+
|
59
|
+
opts.on('--no-refresh', 'no refresh page' ) do
|
60
|
+
options[:refresh]=nil
|
61
|
+
end
|
62
|
+
|
63
|
+
end.parse!(args)
|
64
|
+
|
65
|
+
## Mandatory input
|
66
|
+
dyn_file,doc_tag=args[0].split(":")
|
67
|
+
doc_tag="" unless doc_tag
|
68
|
+
doc_tag="__ALL_DOC_TAG__" if doc_tag.downcase == "all"
|
69
|
+
|
70
|
+
## Detect docs_tags_info
|
71
|
+
dyn_file=File.join(["","users",current_email],dyn_file) unless dyn_file[0,1]=="/"
|
72
|
+
filename=File.join(edit_root,dyn_file)
|
73
|
+
|
74
|
+
doc_tags_info=Dyndoc::Edit.get_doc_tags_info(File.read(filename))
|
75
|
+
|
76
|
+
if dyn_file and (dyn_file=~/(.*)(?:\.dyn|_html.dyn)$/)
|
77
|
+
#p [:dyn_file,dyn_file,$1]
|
78
|
+
html_files=Dyndoc::Edit.html_files({doc_tags_info: doc_tags_info , dyn_file: dyn_file },current_email)
|
79
|
+
##p [:html_files,html_files]
|
80
|
+
html_file=html_files[doc_tag] || html_files[""]
|
81
|
+
|
82
|
+
if options[:refresh] and options[:refresh] == :auto
|
83
|
+
options[:refresh] = File.join(cfg["localhost_url"] || "http://localhost:9292",File.dirname(dyn_file),File.basename(dyn_file,".*"))
|
84
|
+
end
|
85
|
+
|
86
|
+
output=""
|
87
|
+
output << "Watching "+dyn_file if options[:watching]
|
88
|
+
output << (options[:watching] ? " and refreshing " : "Refreshing ")+options[:refresh] if options[:refresh]
|
89
|
+
puts output unless output.empty?
|
90
|
+
|
91
|
+
# Ex for opts:
|
92
|
+
# rdrouilh : [:dyn_opts, {:dyn_root=>"/Users/remy/RCqls/RodaServer/edit", :html_root=>"/Users/remy/RCqls/RodaServer/public/pages", :user=>"rdrouilh@gmail.com", :doc_tag=>"bio", :html_files=>{""=>"/dev/R/test.html", "ssd"=>"/dev/R/ssd.html", "bio"=>"/dev/R/bio.html", "tmp"=>"/dev/R/tmp.html", "cours"=>"/dev/R/cours.html"}}]
|
93
|
+
# remy.drouilhet : [:dyn_opts, {:dyn_root=>"/Users/remy/RCqls/RodaServer/edit", :html_root=>"/Users/remy/RCqls/RodaServer/public/pages", :user=>"remy.drouilhet@upmf-grenoble.fr", :doc_tag=>"index", :html_files=>{""=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/index.html", "index"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/index.html", "dates"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/dates.html", "sc"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/sc.html", "orga"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/orga.html"}}]
|
94
|
+
opts = {
|
95
|
+
dyn_root: edit_root,
|
96
|
+
html_root: pages_root,
|
97
|
+
user: current_email,
|
98
|
+
doc_tag: doc_tag,
|
99
|
+
html_files: html_files
|
100
|
+
}
|
101
|
+
##p opts
|
102
|
+
file_to_process=File.join(opts[:dyn_root],dyn_file)
|
103
|
+
cmd_to_open=nil
|
104
|
+
if options[:refresh] and RUBY_PLATFORM =~ /darwin/
|
105
|
+
cmd_to_open='tell application "Safari" to set URL of current tab of front window to "'+options[:refresh]+'"'
|
106
|
+
cmd_to_refresh='tell application "System Events"' + "\n" + 'tell process "Safari"' + "\n" + 'keystroke "r" using {command down}' + "\n" + 'delay 60' + "\n" + 'end tell' + "\n" + 'end tell'
|
107
|
+
end
|
108
|
+
unless options[:watching]
|
109
|
+
## dyn_file[1..-1] to have a relative path...
|
110
|
+
if Dyndoc::Linter.check_file(file_to_process).empty?
|
111
|
+
Dyndoc.cli_convert_from_file(dyn_file[1..-1],html_file, opts)
|
112
|
+
else
|
113
|
+
puts dyn_file[1..-1]+" not well-formed!"
|
114
|
+
end
|
115
|
+
else
|
116
|
+
require 'filewatcher'
|
117
|
+
require 'dyndoc-linter'
|
118
|
+
FileWatcher.new([file_to_process]).watch() do |filename, event|
|
119
|
+
if event == :changed
|
120
|
+
if Dyndoc::Linter.check_file(file_to_process).empty?
|
121
|
+
Dyndoc.cli_convert_from_file(dyn_file[1..-1],html_file, opts)
|
122
|
+
puts dyn_file[1..-1]+" processed!"
|
123
|
+
if options[:refresh] and RUBY_PLATFORM =~ /darwin/
|
124
|
+
if options[:first]
|
125
|
+
`osascript -e '#{cmd_to_open}'`
|
126
|
+
options[:first]=nil
|
127
|
+
else
|
128
|
+
%x{osascript<<ENDREFRESH
|
129
|
+
tell app "Safari" to activate
|
130
|
+
tell application "System Events"
|
131
|
+
keystroke "r" using {command down}
|
132
|
+
end tell
|
133
|
+
ENDREFRESH
|
134
|
+
}
|
135
|
+
end
|
136
|
+
end
|
137
|
+
else
|
138
|
+
puts dyn_file[1..-1]+" not well-formed!"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/bin/dyn-html-srv
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'dyndoc/init/home'
|
4
|
+
dyndoc_home = Dyndoc.home
|
5
|
+
## read config file
|
6
|
+
cfg_yml = File.join(dyndoc_home,"etc","dyn-html.yml")
|
7
|
+
cfg={}
|
8
|
+
cfg.merge! YAML::load_file(cfg_yml) if File.exist? cfg_yml
|
9
|
+
|
10
|
+
require 'thin'
|
11
|
+
arg=["-R",File.join(dyndoc_home,"html-srv","dyn-html-srv.ru")]
|
12
|
+
if cfg["html-srv-port"]
|
13
|
+
arg += ["-p",cfg["html-srv-port"].to_s]
|
14
|
+
elsif (i=ARGV.index("-p"))
|
15
|
+
arg += ["-p",ARGV[i+1]]
|
16
|
+
end
|
17
|
+
arg << "start"
|
18
|
+
p [:arg,arg]
|
19
|
+
Thin::Runner.new(arg).run!
|
data/bin/dyn-init
CHANGED
@@ -1,28 +1,67 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'fileutils'
|
3
|
+
require 'dyndoc/init/home'
|
3
4
|
|
4
5
|
arg=ARGV[0]
|
5
6
|
arg="path" if !arg or arg.empty?
|
6
7
|
|
8
|
+
share_path=File.expand_path("../../share", __FILE__)
|
9
|
+
|
7
10
|
case arg
|
8
11
|
when "help"
|
9
12
|
puts <<-DOC
|
10
13
|
Usage:
|
11
|
-
##
|
12
|
-
dyn-init
|
13
|
-
##
|
14
|
-
dyn-init
|
14
|
+
## get dyndoc home (i.e, ~/dyndoc or read config file ~/.dyndoc_home)
|
15
|
+
dyn-init home
|
16
|
+
## set dyndoc home (update ~/.dyndoc_home)
|
17
|
+
dyn-init home <other dyndoc home path>
|
18
|
+
dyn-init home <other dyndoc home path> --init #with init path
|
19
|
+
## create dyndoc home folder and initialize some sharing
|
20
|
+
dyn-init [path]
|
21
|
+
dyn-init --reset #reset dyndoc home folder
|
22
|
+
## without creating dyndoc home folder, initialize some sharing
|
23
|
+
dyn-init install [all|etc|demo|html-srv|dyndoc.yml]
|
15
24
|
DOC
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
## REMOVED from DOC above since maybe it is OBSOLETE
|
26
|
+
#### ## add room folder
|
27
|
+
#### dyn-init sync <room_id>:<room_folder_full_path>@<room_remote_wordir>
|
28
|
+
when "home"
|
29
|
+
if ARGV.length == 2 or (ARGV.length==3 and ["--init"].include? ARGV[2])
|
30
|
+
Dyndoc.home=ARGV[1]
|
31
|
+
FileUtils.mkdir_p Dyndoc.home
|
32
|
+
FileUtils.cp_r File.join(share_path,"."),Dyndoc.home if ARGV[2]=="--init"
|
33
|
+
end
|
34
|
+
unless File.directory? Dyndoc.home
|
35
|
+
puts "Folder #{Dyndoc.home} does not exist. \nDo you want to initialize (YES|no)?"
|
36
|
+
if STDIN.gets.chomp == "YES"
|
37
|
+
FileUtils.cp_r File.join(share_path,"."),Dyndoc.home
|
38
|
+
end
|
39
|
+
end
|
40
|
+
puts "dyndoc home set to #{Dyndoc.home}"+((ARGV.length==3 and ARGV[2]=="--init") ? " with paths initialization" : "" )
|
41
|
+
when "path","--reset"
|
42
|
+
dyndoc_path=Dyndoc.home
|
43
|
+
if arg=="--reset"
|
44
|
+
puts "Do you really want to reset the dyndoc home (YES|no)?"
|
45
|
+
if STDIN.gets.chomp=="YES" and File.directory? dyndoc_path
|
46
|
+
FileUtils.rm_rf dyndoc_path
|
47
|
+
end
|
48
|
+
end
|
19
49
|
unless File.exist? dyndoc_path
|
20
50
|
FileUtils.mkdir_p dyndoc_path
|
21
51
|
FileUtils.cp_r File.join(share_path,"."),dyndoc_path
|
52
|
+
puts "Your dyndoc home now contains at least the default settings!"
|
22
53
|
else
|
23
54
|
puts "Warning: #{dyndoc_path} folder already exists!"
|
55
|
+
puts "Try: dyn-init install [all|etc|demo|html-srv|dyndoc.yml]"
|
56
|
+
end
|
57
|
+
when "install"
|
58
|
+
case ARGV[1].strip
|
59
|
+
when "all"
|
60
|
+
FileUtils.cp_r File.join(share_path,"."),Dyndoc.home
|
61
|
+
when "etc","demo","html-srv","dyndoc.yml"
|
62
|
+
FileUtils.cp_r File.join(share_path,ARGV[1].strip),Dyndoc.home
|
24
63
|
end
|
25
|
-
when "sync"
|
64
|
+
when "sync" ## MAYBE OBSOLETE!
|
26
65
|
require 'fileutils'
|
27
66
|
FileUtils.mkdir_p (etc=File.join(ENV["HOME"],"dyndoc","etc"))
|
28
67
|
room_sync=File.join(etc,".room_sync")
|
data/lib/dyndoc-convert.rb
CHANGED
@@ -56,6 +56,12 @@ module Dyndoc
|
|
56
56
|
end
|
57
57
|
|
58
58
|
## TODO: a config.yml file for the site
|
59
|
+
## NOTE: Mode multipage works as follows:
|
60
|
+
## 1) "only:" can have a list of tags from "docs:" which is put inside opts[:doc_tag]
|
61
|
+
## 2) In order to process files properly for this list of tags inside opts[:doc_tag]
|
62
|
+
## cfg[:tag] and dyn_tags are replace with "__ALL_DOC_TAG__" instead of opts[:doc_tag]
|
63
|
+
## Since are __ALL_DOC_TAG__ is replaced by the current tag for each file to be processed, everything goes well!
|
64
|
+
|
59
65
|
def Dyndoc.cli_convert_from_file(dyn_file,html_file,opts={}) #ex: opts={dyn_root: , html_root:, user: , doc_tag: }
|
60
66
|
addr="127.0.0.1"
|
61
67
|
|
@@ -80,7 +86,7 @@ module Dyndoc
|
|
80
86
|
basename: File.basename(dyn_file,".*"),
|
81
87
|
long_url: html_file,
|
82
88
|
url: File.basename(html_file,".*"),
|
83
|
-
tag:
|
89
|
+
tag: opts[:doc_tag],
|
84
90
|
urls: html_files
|
85
91
|
}
|
86
92
|
|
@@ -186,6 +192,7 @@ module Dyndoc
|
|
186
192
|
|
187
193
|
## mode multi-documents
|
188
194
|
docs_tags=[]
|
195
|
+
## 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
|
189
196
|
docs_tags << opts[:doc_tag] if opts[:doc_tag]
|
190
197
|
## complete docs_tags with cfg["tags"]
|
191
198
|
docs_tags += (cfg["tags"]||"").split(",").map{|e| e.strip}
|
@@ -201,7 +208,8 @@ module Dyndoc
|
|
201
208
|
end
|
202
209
|
code += "\n" + dyn_post_code if dyn_post_code
|
203
210
|
## TO TEST!!!
|
204
|
-
##
|
211
|
+
##
|
212
|
+
Dyndoc.warn :cfg,cfg
|
205
213
|
##Dyndoc.warn :page,page
|
206
214
|
code = "[#rb<]require 'ostruct';cfg = OpenStruct.new(" + cfg.inspect + ");page = OpenStruct.new(" + page.inspect + ")[#>]" +code
|
207
215
|
code = dyn_tags + code if dyn_tags
|
@@ -220,9 +228,9 @@ module Dyndoc
|
|
220
228
|
unless opts[:doc_tag] == "__ALL_DOC_TAG__"
|
221
229
|
Dyndoc.process_html_file_from_dyn_file(code,html_file,dyn_file,dyn_layout,addr,dyndoc_start)
|
222
230
|
else
|
223
|
-
html_files.keys[1..-1].each do |doc_tag|
|
231
|
+
(opts[:current_tags] || html_files.keys[1..-1]).each do |doc_tag|
|
224
232
|
html_file=File.join(html_root,["users",opts[:user]] || [],cfg_files[:urls][doc_tag])
|
225
|
-
p [:html_multi,doc_tag,html_file]
|
233
|
+
p [:html_multi,doc_tag,html_file] #,code.gsub(/__ALL_DOC_TAG__/,doc_tag)]
|
226
234
|
Dyndoc.process_html_file_from_dyn_file(code.gsub(/__ALL_DOC_TAG__/,doc_tag),html_file,dyn_file,dyn_layout,addr,dyndoc_start)
|
227
235
|
end
|
228
236
|
end
|
data/lib/dyndoc-edit.rb
CHANGED
@@ -1,4 +1,25 @@
|
|
1
1
|
module Dyndoc
|
2
|
+
module FileWatcher ## USED by dyn-html
|
3
|
+
|
4
|
+
def FileWatcher.get_dyn_html_info(filename,dyn_file,user)
|
5
|
+
content=File.read(filename)
|
6
|
+
current_tags=[] #select current tags from doc_tags_info
|
7
|
+
doc_tags_info=Dyndoc::Edit.get_doc_tags_info(content,current_tags)
|
8
|
+
##p [:fw_current_tags, current_tags]
|
9
|
+
doc_tag=(doc_tags_info.empty? ? "" : "__ALL_DOC_TAG__")
|
10
|
+
#p [:dyn_file,dyn_file,$1]
|
11
|
+
tmp=dyn_file.split("/")
|
12
|
+
user=tmp[2] if tmp[1]=="users"
|
13
|
+
##p [:fw_user,user]
|
14
|
+
html_files=Dyndoc::Edit.html_files({doc_tags_info: doc_tags_info , dyn_file: dyn_file },user)
|
15
|
+
|
16
|
+
current_tags=html_files.keys[1..-1] if doc_tag=="__ALL_DOC_TAG__" and current_tags.empty?
|
17
|
+
current_doc_tag=(current_tags.empty? ? doc_tag : current_tags[0])
|
18
|
+
{html_files: html_files, doc_tag: doc_tag, user: user, current_doc_tag: current_doc_tag, current_tags: current_tags}
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
2
23
|
module Edit
|
3
24
|
|
4
25
|
def Edit.docs_from_doc_tags_info(doc_tags_info)
|
@@ -13,15 +34,28 @@ module Edit
|
|
13
34
|
return docs
|
14
35
|
end
|
15
36
|
|
16
|
-
|
37
|
+
## if selected_tag is an Array, allow to get current tags to proces
|
38
|
+
def Edit.get_doc_tags_info(content,current_tags=nil)
|
17
39
|
doc_tags_info=""
|
18
40
|
if content =~ /^\-{3}/
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
41
|
+
b=content.split(/^(\-{3,})/,-1)
|
42
|
+
if b[0].empty? and b.length>4
|
43
|
+
tmp=b[2].strip.split("\n").select{|e2| e2.strip =~/^docs\:/}
|
44
|
+
doc_tags_info=tmp[0] || ""
|
45
|
+
doc_tags_info=$1.strip if doc_tags_info =~ /^docs\:(.*)/
|
46
|
+
|
47
|
+
tmp=b[2].strip.split("\n").select{|e2| e2.strip =~/^only\:/}
|
48
|
+
current_tag_info=tmp[0] || ""
|
49
|
+
current_tag_info=$1.strip if current_tag_info =~ /^only\:(.*)/
|
50
|
+
p [:only_tag,current_tag_info]
|
51
|
+
## added possibility select current tags only when current_tags is provided as an Array
|
52
|
+
if tmp[0] and current_tags and current_tags.is_a? Array
|
53
|
+
doc_tags=Edit.get_doc_tags(doc_tags_info)
|
54
|
+
current_tag_info.split(",").map{|e| e.strip}.each{|e| current_tags << e if doc_tags.include? e}
|
55
|
+
##p [:only_current_tags,current_tags]
|
24
56
|
end
|
57
|
+
|
58
|
+
end
|
25
59
|
end
|
26
60
|
return doc_tags_info
|
27
61
|
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require "roda"
|
2
|
+
require "pathname"
|
3
|
+
|
4
|
+
## read config file
|
5
|
+
require 'dyndoc/init/home'
|
6
|
+
dyndoc_home = Dyndoc.home
|
7
|
+
cfg_yml = File.join(dyndoc_home,"etc","dyn-html.yml")
|
8
|
+
cfg={}
|
9
|
+
cfg.merge! YAML::load_file(cfg_yml) if File.exist? cfg_yml
|
10
|
+
root = cfg["root"] || File.join(ENV["HOME"],"RCqls","RodaServer")
|
11
|
+
$public_root = cfg["public_root"] || File.join(root ,"public")
|
12
|
+
##p [:public_root,$public_root]
|
13
|
+
|
14
|
+
class App < Roda
|
15
|
+
use Rack::Session::Cookie, :secret => (secret="Thanks like!")
|
16
|
+
plugin :static, ["/pages","/private","/tools"], :root => $public_root
|
17
|
+
#opts[:root]=File.expand_path("..",__FILE__),
|
18
|
+
#plugin :static, ["/pages","/private"]
|
19
|
+
plugin :multi_route
|
20
|
+
###Dir[File.expand_path("../routes/*.rb",__FILE__)].each{|f| require f}
|
21
|
+
plugin :header_matchers
|
22
|
+
plugin :render,
|
23
|
+
:views => File.expand_path("../views",__FILE__),
|
24
|
+
:escape=>true,
|
25
|
+
:check_paths=>true,
|
26
|
+
:allowed_paths=>[File.expand_path("../views",__FILE__),$public_root]
|
27
|
+
# plugin :csrf,
|
28
|
+
# :skip => [
|
29
|
+
# "POST:/edit/dyn",
|
30
|
+
# "POST:/edit/save",
|
31
|
+
# "POST:/edit/change-all-dyn-files",
|
32
|
+
# "POST:/edit/add_delete_dyn_file",
|
33
|
+
# "POST:/edit/add_delete_user",
|
34
|
+
# "POST:/edit/add_user_dyn_file",
|
35
|
+
# "POST:/edit/delete_user_dyn_file",
|
36
|
+
# "POST:/edit/update_doc_tags_info"
|
37
|
+
# ],
|
38
|
+
# :skip_if => lambda{|req| req.env['CONTENT_TYPE'] =~ /application\/json/}
|
39
|
+
|
40
|
+
# plugin :rodauth, :name=>:editor, :json=>true do
|
41
|
+
# db DB
|
42
|
+
# enable :login, :logout
|
43
|
+
# account_password_hash_column :ph
|
44
|
+
# session_key :user_id
|
45
|
+
# login_label 'Email'
|
46
|
+
# password_label 'Mot de passe'
|
47
|
+
# login_redirect "/editor"
|
48
|
+
# end
|
49
|
+
|
50
|
+
# plugin :rodauth, :name=>:compte, :json=>true do
|
51
|
+
# db DB
|
52
|
+
# enable :change_login, :change_password, :close_account, :create_account,
|
53
|
+
# :lockout, :login, :logout #, :remember, :reset_password,
|
54
|
+
# #:verify_account,
|
55
|
+
# #:otp, :recovery_codes, :sms_codes,
|
56
|
+
# :password_complexity #,
|
57
|
+
# #:disallow_password_reuse, :password_expiration, :password_grace_period,
|
58
|
+
# #:account_expiration,
|
59
|
+
# #:single_session,
|
60
|
+
# #:jwt, :session_expiration,
|
61
|
+
# #:verify_account_grace_period, :verify_change_login
|
62
|
+
# create_account_link do
|
63
|
+
# "<p><a href=\"/compte/create-account\">Créer un nouveau compte</a></p>"
|
64
|
+
# end
|
65
|
+
# login_redirect "/editor"
|
66
|
+
# after_login do
|
67
|
+
# puts session[:user_id]
|
68
|
+
# end
|
69
|
+
# logout_redirect "/editor"
|
70
|
+
# create_account_redirect "/compte"
|
71
|
+
# session_key :user_id
|
72
|
+
# login_label "Email"
|
73
|
+
# password_label "Mot de passe"
|
74
|
+
# login_confirm_label "Confirme Email"
|
75
|
+
# password_confirm_label "Confirme Mot de passe"
|
76
|
+
# create_account_button "Création compte"
|
77
|
+
# max_invalid_logins 2
|
78
|
+
# #allow_password_change_after 60
|
79
|
+
# #verify_account_grace_period 300
|
80
|
+
# account_password_hash_column :ph
|
81
|
+
# title_instance_variable :@page_title
|
82
|
+
# delete_account_on_close? true
|
83
|
+
# #only_json? false
|
84
|
+
# #jwt_secret secret
|
85
|
+
# # sms_send do |phone_number, message|
|
86
|
+
# # MUTEX.synchronize{SMS[session_value] = "Would have sent the following SMS to #{phone_number}: #{message}"}
|
87
|
+
# # end
|
88
|
+
# end
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
route do |r|
|
93
|
+
|
94
|
+
# GET / request
|
95
|
+
r.root do
|
96
|
+
r.redirect "/hello"
|
97
|
+
end
|
98
|
+
|
99
|
+
#r.multi_route
|
100
|
+
|
101
|
+
# /hello branch
|
102
|
+
r.on "hello" do
|
103
|
+
# Set variable for all routes in /hello branch
|
104
|
+
@greeting = 'Hello'
|
105
|
+
|
106
|
+
# GET /hello/world request
|
107
|
+
r.get "world" do
|
108
|
+
"#{@greeting} world!"
|
109
|
+
end
|
110
|
+
|
111
|
+
# /hello request
|
112
|
+
r.is do
|
113
|
+
# GET /hello request
|
114
|
+
r.get do
|
115
|
+
"#{@greeting}!"
|
116
|
+
end
|
117
|
+
|
118
|
+
# POST /hello request
|
119
|
+
r.post do
|
120
|
+
puts "Someone said #{@greeting}!"
|
121
|
+
r.redirect
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
r.on "get" do
|
127
|
+
rsrc=r.remaining_path
|
128
|
+
#p [:get,rsrc]
|
129
|
+
static_root=File.join($public_root,"tools")
|
130
|
+
if (rsrc=~/[^\.]*\.(?:css|js|rb|red|r|R|RData|rdata|rds|csv|txt|xls|xlsx|jpeg|jpg|png|gif)/)
|
131
|
+
rsrc_files=Dir[File.join(static_root,"**",rsrc)]
|
132
|
+
##p rsrc_files
|
133
|
+
unless rsrc_files.empty?
|
134
|
+
rsrc_file="/tools/"+Pathname(rsrc_files[0]).relative_path_from(Pathname(static_root)).to_s
|
135
|
+
r.redirect rsrc_file
|
136
|
+
end
|
137
|
+
end
|
138
|
+
"No resource #{rsrc} to serve!"
|
139
|
+
end
|
140
|
+
|
141
|
+
r.get do
|
142
|
+
page=r.remaining_path
|
143
|
+
static_root=File.join($public_root,"pages")
|
144
|
+
##p [:page,File.join(static_root,"**",page+".html")]
|
145
|
+
pattern=(page=~/[^\.]*\.(?:R|Rmd|css|js|html|html|rb|red|r|jpeg|jpg|png|gif)/) ? page : page+".html"
|
146
|
+
html_files=Dir[File.join(static_root,"**",pattern)]
|
147
|
+
##p html_files
|
148
|
+
unless html_files.empty?
|
149
|
+
html_file="pages/"+Pathname(html_files[0]).relative_path_from(Pathname(static_root)).to_s
|
150
|
+
if File.extname(html_file) == ".html"
|
151
|
+
html_file=File.join(File.dirname(html_file),File.basename(html_file,".html"))
|
152
|
+
p html_file
|
153
|
+
render html_file, :engine=>'html', :views=>$public_root
|
154
|
+
else
|
155
|
+
r.redirect html_file
|
156
|
+
end
|
157
|
+
else
|
158
|
+
"no #{page} to serve!"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
run App.freeze.app
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CQLS
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: R4rb
|
@@ -103,6 +103,7 @@ executables:
|
|
103
103
|
- dyn-srv
|
104
104
|
- dpm
|
105
105
|
- dyn-html
|
106
|
+
- dyn-html-srv
|
106
107
|
- dyn-init
|
107
108
|
- dyn-scan
|
108
109
|
- dyn-lint
|
@@ -115,6 +116,8 @@ files:
|
|
115
116
|
- bin/dyn-env
|
116
117
|
- bin/dyn-forever
|
117
118
|
- bin/dyn-html
|
119
|
+
- bin/dyn-html-onefile
|
120
|
+
- bin/dyn-html-srv
|
118
121
|
- bin/dyn-init
|
119
122
|
- bin/dyn-lint
|
120
123
|
- bin/dyn-scan
|
@@ -383,6 +386,7 @@ files:
|
|
383
386
|
- share/etc/uv/syntax/text.xml.syntax
|
384
387
|
- share/etc/uv/syntax/text.xml.xsl.syntax
|
385
388
|
- share/etc/uv/uv.rb
|
389
|
+
- share/html-srv/dyn-html-srv.ru
|
386
390
|
- install/README.md
|
387
391
|
- install/dyn-upstart.sh
|
388
392
|
- install/dyndoc_install_ubuntu.sh
|