diglossa 0.2.24 → 0.2.27
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.
- data/README.md +25 -10
- data/bin/dg-author +5 -0
- data/diglossa.gemspec +2 -2
- data/lib/diglossa/author.rb +106 -0
- data/lib/diglossa/cli.rb +97 -69
- data/lib/diglossa/parse.rb +129 -52
- data/lib/diglossa/remote.rb +60 -22
- data/lib/diglossa/version.rb +1 -1
- data/lib/diglossa.rb +1 -0
- data/nginx-last.conf +201 -0
- metadata +21 -2
data/README.md
CHANGED
@@ -20,19 +20,34 @@ The examples and descriptions below does not cover all the options available via
|
|
20
20
|
Commands:
|
21
21
|
|
22
22
|
dg help [COMMAND] # Describe available commands or one specific command
|
23
|
-
dg
|
23
|
+
dg generate [APPDIR] # generate .couchapprc
|
24
24
|
|
25
|
-
|
25
|
+
get:
|
26
|
+
dg get [OBJ] [PARAM], ex:
|
27
|
+
dg get id _ID, i.e: get id lib-tree or get id 05b33841744f209d3342bbfcf76cb574
|
28
|
+
dg get book by root file-path or url, i.e:
|
29
|
+
dg get book Greek/Plato/Dialogues (url) or get NT/Greek/Plato/Dialogues (file-path)
|
30
|
+
dg get texts by root path or url
|
31
|
+
dg get coms by root path or url
|
26
32
|
|
27
|
-
|
28
|
-
dg
|
29
|
-
dg
|
30
|
-
dg
|
33
|
+
build:
|
34
|
+
dg build [OBJ] [PATH], ex:
|
35
|
+
dg build json obj, i.e.: build json authors/psell.json
|
36
|
+
dg build book path, ex: dg build book NT/Palama/Triads
|
37
|
+
dg build urls path (array of the urls in a book)
|
38
|
+
no build for text and comments, use push and then get
|
31
39
|
|
32
|
-
|
40
|
+
warns:
|
41
|
+
dg warns book [PATH], ex:
|
42
|
+
dg warns book NT/Palama/Triads
|
43
|
+
|
44
|
+
push:
|
45
|
+
dg push [OBJ] [PATH] env, ex:
|
46
|
+
dg push json/book/texts,
|
47
|
+
dg push book NT/Palama/Triads
|
48
|
+
dg push book NT/Palama/Triads production
|
49
|
+
dg push texts NT/Palama/Triads (pushes all texts and comms at once)
|
33
50
|
|
34
|
-
dg gettexts [URL, delete] # get or delete! text docs by exact URL: dg gettexts "Psell/Chronographia/Part-1" N...
|
35
|
-
dg pushtexts [PATH] # parse texts for root PATH, ex: dg docs "NT/Palama/Triads"
|
36
51
|
|
37
52
|
|
38
53
|
## .couchapprc
|
@@ -58,7 +73,7 @@ Do not forget to generate .couchapprc file with <tt>dg gen your_appname</tt> and
|
|
58
73
|
|
59
74
|
## ToDo
|
60
75
|
|
61
|
-
dg
|
76
|
+
dg delete [OBJ] [PATH]
|
62
77
|
|
63
78
|
## Community
|
64
79
|
|
data/bin/dg-author
ADDED
data/diglossa.gemspec
CHANGED
@@ -13,12 +13,11 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.homepage = ""
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
|
+
#gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.executables = ["dg"]
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
#gem.add_development_dependency "redcarpet", "~> 1.17"
|
22
21
|
gem.add_development_dependency "yard", "~> 0.7.5"
|
23
22
|
gem.add_development_dependency "rspec-core", "~> 2.0"
|
24
23
|
gem.add_development_dependency "rspec-expectations", "~> 2.0"
|
@@ -28,6 +27,7 @@ Gem::Specification.new do |gem|
|
|
28
27
|
gem.add_runtime_dependency(%q<mime-types>, ["~> 1.16"])
|
29
28
|
#gem.add_runtime_dependency(%q<typhoeus>, ["~> 0.6.3"])
|
30
29
|
gem.add_runtime_dependency(%q<rest-client>)
|
30
|
+
gem.add_runtime_dependency(%q<addressable>)
|
31
31
|
gem.add_runtime_dependency(%q<thor>, ["~> 0.15"])
|
32
32
|
#gem.add_runtime_dependency(%q<thor>, ["~> 0.15"])
|
33
33
|
gem.add_runtime_dependency(%q<uuidtools>, ["~> 2.1"])
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'thor'
|
3
|
+
require 'thor/actions'
|
4
|
+
require 'uuidtools'
|
5
|
+
require 'rest_client'
|
6
|
+
require 'yaml'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
module Diglossa
|
10
|
+
class Author < ::Thor
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
attr_accessor :appdir, :config_file, :debug
|
14
|
+
attr_reader :config
|
15
|
+
|
16
|
+
class_option "appdir",
|
17
|
+
:type => :string,
|
18
|
+
:banner => "set the application directory to work with. assumes the current directory"
|
19
|
+
|
20
|
+
method_option "appname",
|
21
|
+
:type => :string,
|
22
|
+
:banner => "set the name of the application for templating. defaults to the basename of the appdir"
|
23
|
+
|
24
|
+
default_task :help
|
25
|
+
|
26
|
+
desc 'get [PATH/URL]', 'get BOOK tree by root path or url, i.e. "Greek/Plato/Dialogues" or "NT/Greek/Plato/Dialogues" '
|
27
|
+
def get(path, env = 'default')
|
28
|
+
size = path.split("/").size
|
29
|
+
url = size < 3 ? path : path.to_url
|
30
|
+
resp = remote(env).get_book url
|
31
|
+
resp ? pp(resp) : say("no book by url #{url}", :red)
|
32
|
+
end
|
33
|
+
|
34
|
+
desc 'build [PATH]', 'parse author.json by PATH(.json/.yml) and build hash, ex: dg-author build "authors/psell"'
|
35
|
+
def build(path = 'authors/author')
|
36
|
+
fn = File.expand_path(File.join(appdir, path))
|
37
|
+
readable = File.readable?("#{fn}.json") ? "#{fn}.json" : File.readable?("#{fn}.yml") ? "#{fn}.yml" : false
|
38
|
+
if readable
|
39
|
+
hash = JSON.parse(File.read(readable))
|
40
|
+
pp hash
|
41
|
+
else
|
42
|
+
say "Could not find author.json or author.yml at '#{fn}'. "
|
43
|
+
end
|
44
|
+
#return nil unless fullname
|
45
|
+
|
46
|
+
# if File.readable?(config_path)
|
47
|
+
# @config = JSON.parse(File.read(config_path))
|
48
|
+
# else
|
49
|
+
# raise "Could not find config at '#{config_path}'. Run `soca init`"
|
50
|
+
# end
|
51
|
+
|
52
|
+
# #hash = parse.author_build path
|
53
|
+
# pp hash
|
54
|
+
#book = parse.seed_build path
|
55
|
+
#book ? pp(book) : say("can not build book by path #{path}", :red)
|
56
|
+
end
|
57
|
+
|
58
|
+
desc 'push [PATH]', 'builds, checks and pushes BOOK to couchdb by root PATH'
|
59
|
+
def push(path, env = 'default')
|
60
|
+
books = parse.build path, "book"
|
61
|
+
resp = remote(env).push_book books
|
62
|
+
resp ? pp(resp) : say("WARN: no book to push by #{path}", :red)
|
63
|
+
end
|
64
|
+
|
65
|
+
# choose seeds directory
|
66
|
+
desc 'author_ [NIC, push]', 'get author by NIC'
|
67
|
+
def author(nic, push=false, env = 'default')
|
68
|
+
response = remote(env).author nic
|
69
|
+
response.empty? ? say("WARN: no author #{nic}", :red) : pp(response)
|
70
|
+
return unless push
|
71
|
+
doc = parse.parse_author(nic)
|
72
|
+
dbdoc = response.find{|d|d["nic"] == nic}
|
73
|
+
if dbdoc
|
74
|
+
doc["_id"] = dbdoc["_id"]
|
75
|
+
doc["_rev"] = dbdoc["_rev"]
|
76
|
+
end
|
77
|
+
response = remote(env).push_docs doc
|
78
|
+
pp response
|
79
|
+
end
|
80
|
+
|
81
|
+
def initialize(*)
|
82
|
+
super
|
83
|
+
self.appdir = options[:appdir] || File.expand_path(Dir.pwd)
|
84
|
+
# self.config_file = options[:config]
|
85
|
+
self.source_paths << File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def remote(env)
|
91
|
+
Diglossa::Remote.new appdir, env
|
92
|
+
rescue => e
|
93
|
+
say e.message, :red
|
94
|
+
exit
|
95
|
+
end
|
96
|
+
|
97
|
+
def parse
|
98
|
+
Diglossa::Parse.new appdir
|
99
|
+
rescue => e
|
100
|
+
say e.message, :red
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
data/lib/diglossa/cli.rb
CHANGED
@@ -6,7 +6,8 @@ require 'uuidtools'
|
|
6
6
|
require 'rest_client'
|
7
7
|
require 'yaml'
|
8
8
|
require 'pp'
|
9
|
-
#require '
|
9
|
+
#require 'addressable'
|
10
|
+
require "addressable/uri"
|
10
11
|
|
11
12
|
module Diglossa
|
12
13
|
class CLI < ::Thor
|
@@ -26,64 +27,109 @@ module Diglossa
|
|
26
27
|
|
27
28
|
default_task :help
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
desc 'get [OBJ] [PARAM]', 'get author nic
|
31
|
+
get id _ID, i.e:
|
32
|
+
get id lib-tree or get id 05b33841744f209d3342bbfcf76cb574
|
33
|
+
get book by root file-path or url, i.e:
|
34
|
+
get book Greek/Plato/Dialogues (url) or get NT/Greek/Plato/Dialogues (file-path)
|
35
|
+
get texts by root path or url
|
36
|
+
get coms by root path or url
|
37
|
+
'
|
38
|
+
def get(obj, path, env = 'default')
|
32
39
|
size = path.split("/").size
|
33
40
|
url = size < 3 ? path : path.to_url
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
41
|
+
puts "URL: #{url}" unless path == url
|
42
|
+
case obj
|
43
|
+
when "author"
|
44
|
+
resp = remote(env).author path
|
45
|
+
when "id"
|
46
|
+
resp = remote(env).get_id path
|
47
|
+
when "texts"
|
48
|
+
urls = build "urls", path, false
|
49
|
+
urls.each do |url|
|
50
|
+
resp = remote(env).get_texts url
|
51
|
+
end
|
52
|
+
when "coms"
|
53
|
+
urls = build "urls", path, false
|
54
|
+
urls.each do |url|
|
55
|
+
puts "get coms by url: #{url}"
|
56
|
+
resp = remote(env).get_coms url
|
57
|
+
end
|
58
|
+
when ""
|
59
|
+
when ""
|
60
|
+
when "book"
|
61
|
+
resp = remote(env).get_book url
|
62
|
+
end
|
63
|
+
resp ? pp(resp) : say("no #{obj} by PARAM #{path}", :red)
|
55
64
|
end
|
56
65
|
|
57
|
-
desc '
|
58
|
-
|
59
|
-
|
60
|
-
|
66
|
+
desc 'warns book [PATH]', 'warns book PATH, ex:
|
67
|
+
dg warns book NT/Palama/Triads
|
68
|
+
'
|
69
|
+
def warns(obj, path)
|
70
|
+
case obj
|
71
|
+
#when "blog"
|
72
|
+
#hash = parse.build_blog path
|
73
|
+
when "book"
|
74
|
+
hash = parse.build_book path, "warns"
|
75
|
+
when ""
|
76
|
+
else
|
77
|
+
hash = false
|
78
|
+
end
|
79
|
+
#hash ? pp(hash) : say("can not build OBJ by path #{path}", :red)
|
80
|
+
hash ? pp(hash) : say("use: warns _book_ path", :red)
|
61
81
|
end
|
62
82
|
|
63
|
-
desc '
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
83
|
+
desc 'build [OBJ] [PATH]', 'build json obj, i.e.
|
84
|
+
build json authors/psell.json
|
85
|
+
build book path, ex: dg build book NT/Palama/Triads
|
86
|
+
build urls path - array of the urls in a book
|
87
|
+
no build for text and comments, use push and then get
|
88
|
+
'
|
89
|
+
def build(obj, path, print = true)
|
90
|
+
case obj
|
91
|
+
when "blog"
|
92
|
+
hash = parse.build_blog path
|
93
|
+
when "json"
|
94
|
+
hash = parse.build_json path
|
95
|
+
when "book"
|
96
|
+
hash = parse.build_book path, "book"
|
97
|
+
when "urls"
|
98
|
+
hash = parse.build_book_urls path
|
99
|
+
when "texts"
|
100
|
+
hash = "use dg push texts PATH"
|
101
|
+
when ""
|
102
|
+
when ""
|
103
|
+
else
|
104
|
+
hash = false
|
105
|
+
end
|
106
|
+
if print
|
107
|
+
hash ? pp(hash) : say("can not build OBJ by path #{path}", :red)
|
108
|
+
else
|
109
|
+
hash
|
110
|
+
end
|
71
111
|
end
|
72
112
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
113
|
+
desc 'push [OBJ] [PATH] env', 'push json/book/texts,
|
114
|
+
dg push book NT/Palama/Triads
|
115
|
+
dg push book NT/Palama/Triads production
|
116
|
+
dg push texts NT/Palama/Triads (pushes all texts and comms at once)
|
117
|
+
|
118
|
+
'
|
119
|
+
def push(obj, path, env = 'default')
|
120
|
+
case obj
|
121
|
+
when "blog"
|
122
|
+
#resp = remote(env).push_docs docs
|
123
|
+
when "json"
|
124
|
+
resp = remote(env).push_docs docs
|
125
|
+
when "book"
|
126
|
+
docs = parse.build_book path, "book"
|
127
|
+
resp = remote(env).push_book docs
|
128
|
+
when "texts"
|
129
|
+
resp = parse.build_book path, "texts"
|
130
|
+
else
|
84
131
|
end
|
85
|
-
|
86
|
-
pp response
|
132
|
+
resp ? pp(resp) : say("ERR: no book to push by #{path}", :red)
|
87
133
|
end
|
88
134
|
|
89
135
|
def initialize(*)
|
@@ -93,25 +139,7 @@ module Diglossa
|
|
93
139
|
self.source_paths << File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
94
140
|
end
|
95
141
|
|
96
|
-
|
97
|
-
# def consts(env = 'default')
|
98
|
-
# say DIGLOSSA::lib
|
99
|
-
# end
|
100
|
-
|
101
|
-
|
102
|
-
# desc 'blog [FILE]', 'parse blog FILE.en or FILE.ru'
|
103
|
-
# def blog(fname = 'default')
|
104
|
-
# parse.blog fname
|
105
|
-
# end
|
106
|
-
|
107
|
-
# desc 'get [URL]', 'get URL'
|
108
|
-
# def get(url, env = 'default')
|
109
|
-
# remote(env).get url
|
110
|
-
# end
|
111
|
-
|
112
|
-
# end
|
113
|
-
|
114
|
-
desc 'generate [APPDIR]', 'generates .couchapprc'
|
142
|
+
desc 'generate [APPDIR]', 'generate .couchapprc'
|
115
143
|
def generate(to = nil)
|
116
144
|
self.appdir = to if to
|
117
145
|
self.destination_root = appdir
|
data/lib/diglossa/parse.rb
CHANGED
@@ -10,7 +10,7 @@ module Diglossa
|
|
10
10
|
|
11
11
|
def initialize(app_dir) #, config_path = nil)
|
12
12
|
self.app_dir = File.expand_path(app_dir) + '/'
|
13
|
-
@warns = {file:[], size:[]}
|
13
|
+
@warns = {file:[], size:[], fn:[]}
|
14
14
|
@counter = []
|
15
15
|
#load_couchapprc
|
16
16
|
end
|
@@ -24,7 +24,55 @@ module Diglossa
|
|
24
24
|
doc
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def readable path
|
28
|
+
fn = File.expand_path(File.join(app_dir, path))
|
29
|
+
#File.readable?("#{fn}.json") ? "#{fn}.json" : File.readable?("#{fn}.yml") ? "#{fn}.yml" : File.readable?(fn) ? fn : false
|
30
|
+
puts "app_dir: #{app_dir}"
|
31
|
+
puts "readable: #{fn}"
|
32
|
+
File.readable?(fn) ? fn : false
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_blog path
|
36
|
+
readable_file = readable path
|
37
|
+
return false unless readable_file
|
38
|
+
doc = {type:"blog", body:[], more:[]}
|
39
|
+
time = Time.new
|
40
|
+
date = time.strftime("%d-%m-%Y")
|
41
|
+
doc[:date] = date
|
42
|
+
uuid = UUIDTools::UUID.sha1_create UUIDTools::UUID_DNS_NAMESPACE, "#{path}-#{date}"
|
43
|
+
doc[:_id] = uuid.to_s
|
44
|
+
head = true
|
45
|
+
body = false
|
46
|
+
lines = File.readlines readable_file
|
47
|
+
lines.each do |line|
|
48
|
+
line.strip!
|
49
|
+
next if line.empty?
|
50
|
+
if head && line.start_with?("---")
|
51
|
+
head = false
|
52
|
+
body = true
|
53
|
+
next
|
54
|
+
end
|
55
|
+
if head
|
56
|
+
parts = line.split(":")
|
57
|
+
key = parts[0].to_sym
|
58
|
+
val = parts[1..-1].join(":")
|
59
|
+
doc[key] = val
|
60
|
+
next
|
61
|
+
end
|
62
|
+
body ? doc[:body].push(line) : doc[:more].push(line)
|
63
|
+
body = false if body && line.start_with?("---")
|
64
|
+
|
65
|
+
end
|
66
|
+
doc
|
67
|
+
end
|
68
|
+
|
69
|
+
def build_json path
|
70
|
+
readable_file = readable path
|
71
|
+
return false unless readable_file
|
72
|
+
JSON.parse(File.read(readable_file))
|
73
|
+
end
|
74
|
+
|
75
|
+
def build_book root, push=false
|
28
76
|
remote = Diglossa::Remote.new(app_dir)
|
29
77
|
data_dir = remote.config["data"]
|
30
78
|
#puts "locales #{remote.config["locales"]}"
|
@@ -34,11 +82,13 @@ module Diglossa
|
|
34
82
|
doc = fullname ? YAML.load_file(fullname) : "no .json or .yml file at #{root}"
|
35
83
|
@nics = doc["authors"]
|
36
84
|
@rpp = {}
|
37
|
-
@dbauthors = remote.author(doc["authors"])
|
85
|
+
@dbauthors = remote.author(doc["authors"]) rescue(return false) # return("no authors from server")
|
86
|
+
return false unless dbauthors
|
38
87
|
@author_nic = root.split("/")[1].downcase
|
39
88
|
#lang = root.split('/').first.downcase
|
40
89
|
@locale = "ru"
|
41
90
|
title = root.split("/").last # .gsub("_", " ")
|
91
|
+
title = false
|
42
92
|
if push == "book"
|
43
93
|
jsru = {isFolder:true, expand: true, children:[]}
|
44
94
|
jsen = {isFolder:true, expand: true, children:[]}
|
@@ -47,13 +97,20 @@ module Diglossa
|
|
47
97
|
end
|
48
98
|
@locale = "en"
|
49
99
|
traverse jsen, doc["tree"], root, title
|
50
|
-
[
|
51
|
-
|
52
|
-
|
100
|
+
# traverse jsen, doc["tree"], root, title do |path|
|
101
|
+
# parallels path # cause of rpp, alas
|
102
|
+
# end
|
103
|
+
ru = jsru[:title] ? {type:"book", url:root.to_url, jstree:jsru, rpp:rpp, locale:"ru"} : nil
|
104
|
+
en = jsen[:title] ? {type:"book", url:root.to_url, jstree:jsen, rpp:rpp, locale:"en"} : nil
|
105
|
+
# [{type:"book", url:root.to_url, jstree:jsru, rpp:rpp, locale:"ru"},
|
106
|
+
# {type:"book", url:root.to_url, jstree:jsen, rpp:rpp, locale:"en"}]
|
107
|
+
[ru, en]
|
108
|
+
elsif push == "texts"
|
53
109
|
jsru = {url:root.to_url, isFolder:true, expand: true, children:[]}
|
54
110
|
traverse jsru, doc["tree"], root, title do |path|
|
55
|
-
parallels
|
111
|
+
parallels(path, true)
|
56
112
|
end
|
113
|
+
return "texts pushed"
|
57
114
|
elsif push == "warns"
|
58
115
|
jsru = {url:root.to_url, isFolder:true, expand: true, children:[]}
|
59
116
|
traverse jsru, doc["tree"], root, title do |path|
|
@@ -61,6 +118,12 @@ module Diglossa
|
|
61
118
|
end
|
62
119
|
warns
|
63
120
|
end
|
121
|
+
#return true
|
122
|
+
end
|
123
|
+
|
124
|
+
def build_book_urls root
|
125
|
+
books = build_book root, "book"
|
126
|
+
books[0][:rpp].keys
|
64
127
|
end
|
65
128
|
|
66
129
|
private
|
@@ -72,39 +135,63 @@ module Diglossa
|
|
72
135
|
return if File.directory?(dpath)
|
73
136
|
@counter = []
|
74
137
|
docs = []
|
138
|
+
coms = []
|
75
139
|
nics.each do |nic|
|
76
140
|
author = dbauthors.find{|a|a["nic"] == nic}
|
77
141
|
fpath = "#{dpath}.#{nic}"
|
78
|
-
unless File.
|
142
|
+
unless File.readable?(fpath)
|
79
143
|
warns[:file].push fpath
|
80
144
|
next
|
81
145
|
end
|
82
|
-
|
146
|
+
docobj, comobj = paragraphs(fpath, path.to_url, nic, author["lang"])
|
147
|
+
docs += docobj
|
148
|
+
coms += comobj if comobj
|
83
149
|
end
|
84
150
|
if push
|
85
|
-
|
86
|
-
|
151
|
+
comsize = coms ? coms.size : 0
|
152
|
+
puts "pushing path #{path} docs #{docs.size} coms #{comsize}"
|
153
|
+
remote.push_texts path.to_url, docs
|
154
|
+
remote.push_coms path.to_url, coms
|
87
155
|
end
|
88
156
|
# some stupid heuristique for rpp
|
89
157
|
vol = docs.inject(0){|vol,doc| vol + doc[:text].size}
|
90
158
|
rows_per_page = vol == 0 ? 25 : (10000*(docs.size)/vol).round
|
91
|
-
rpp[path.to_url] = rows_per_page
|
159
|
+
rpp[path.to_url] = rows_per_page
|
92
160
|
|
93
161
|
if (nics.size != counter.size) || (counter.uniq.size != 1)
|
94
162
|
warns[:size].push "#{path} - #{counter.inspect}"
|
95
163
|
end
|
96
164
|
end
|
97
165
|
|
98
|
-
def paragraphs fpath, url, nic, lang
|
166
|
+
def paragraphs fpath, url, nic, lang
|
99
167
|
docs = []
|
100
168
|
lines = File.readlines fpath
|
101
169
|
counter.push lines.size
|
102
170
|
lines.each do |line|
|
103
171
|
line.gsub!(/\s+/, " ").strip! #.gsub!("*", " *").gsub!(" /", "/")
|
104
172
|
next if line.empty?
|
105
|
-
|
173
|
+
docs << {type:'text', url:url, nic:nic, lang:lang, text:line}
|
106
174
|
end
|
107
175
|
docs.each_with_index.map{|doc, index| doc[:pos] = index; doc}
|
176
|
+
return [docs] unless File.readable?("#{fpath}-com")
|
177
|
+
coms = []
|
178
|
+
comlines = File.readlines "#{fpath}-com"
|
179
|
+
comlines.each do |line|
|
180
|
+
line.gsub!(/\s+/, " ").strip!
|
181
|
+
x, anchor, comment = line.split(/(\*\d*) /)
|
182
|
+
next unless anchor
|
183
|
+
#puts "#{line.inspect}" unless anchor
|
184
|
+
#puts "a: #{anchor} => l: #{line}"
|
185
|
+
re_anchor = Regexp.new anchor.sub("*","\\*"), true
|
186
|
+
par = docs.detect{|doc| doc[:text].match(re_anchor)}
|
187
|
+
if par
|
188
|
+
pos = par[:pos]
|
189
|
+
coms << {type:'comment', url:url, nic:nic, lang:lang, pos:pos, anchor:anchor, text:comment}
|
190
|
+
else
|
191
|
+
warns[:fn] << "#{anchor} -> #{fpath}"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
[docs, coms]
|
108
195
|
end
|
109
196
|
|
110
197
|
def parse_nics narrow = true, nics = nil
|
@@ -124,11 +211,14 @@ module Diglossa
|
|
124
211
|
case doc
|
125
212
|
when Hash
|
126
213
|
hash = {}
|
127
|
-
if doc["title"] == title
|
214
|
+
#if doc["title"].gsub(" ","_") == title
|
215
|
+
unless title
|
128
216
|
hash = jstree
|
129
217
|
@nics = doc["authors"] if doc["authors"]
|
130
218
|
hash["nics"] = parse_nics false
|
131
|
-
|
219
|
+
title = doc[locale]
|
220
|
+
return unless title
|
221
|
+
hash[:title] = title
|
132
222
|
else
|
133
223
|
path += "/#{doc["title"].gsub(" ","_")}"
|
134
224
|
title = doc[locale]
|
@@ -136,7 +226,7 @@ module Diglossa
|
|
136
226
|
authors = parse_nics nics
|
137
227
|
dir = doc["children"].nil?
|
138
228
|
hash = dir ? {url: path.to_url, title: title, nics: authors} : {url: path.to_url, title: title, isFolder: true, expand: true, children:[]}
|
139
|
-
jstree[:children].push hash unless doc["title"] == title
|
229
|
+
jstree[:children].push hash #unless doc["title"] == title
|
140
230
|
end
|
141
231
|
traverse(hash, doc["children"], path, title, &blk)
|
142
232
|
when Array
|
@@ -146,42 +236,29 @@ module Diglossa
|
|
146
236
|
end
|
147
237
|
end
|
148
238
|
|
149
|
-
# def print_warns
|
150
|
-
# unless warns_file.empty?
|
151
|
-
# puts "NO FILE: " # тут непонятка - при отключении paragraphs выводятся warnings, что не нужно
|
152
|
-
# pp warns_file
|
153
|
-
# end
|
154
|
-
# unless warns_size.empty?
|
155
|
-
# puts "NON EQUAL SIZES: "
|
156
|
-
# pp warns_size
|
157
|
-
# end
|
158
|
-
# end
|
159
|
-
|
160
|
-
|
161
239
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
end
|
240
|
+
# def json fname # это для блога
|
241
|
+
# #
|
242
|
+
# document = {}
|
243
|
+
# puts "building DOC fname: #{fname}"
|
244
|
+
# puts "APDIR.self #{self.app_dir}"
|
245
|
+
# puts "APDIR #{app_dir}"
|
246
|
+
# path = File.expand_path(File.join(app_dir, fname))
|
247
|
+
# puts "path #{path}"
|
248
|
+
# uuid = UUIDTools::UUID.sha1_create UUIDTools::UUID_DNS_NAMESPACE, "#{fname}"
|
249
|
+
# puts "_ID = #{path} - #{uuid}"
|
250
|
+
# lines = File.readlines path
|
251
|
+
# lines.reject!{|c|c.empty? || c == "\n"}
|
252
|
+
# document[:_id] = uuid.to_s
|
253
|
+
# document[:title] = lines.shift.strip
|
254
|
+
# document[:tags] = lines.shift.strip.split(/[[:punct:]]| /).reject!{|c|c.empty?}
|
255
|
+
# #markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
|
256
|
+
# #body = markdown.render lines.join("\n")
|
257
|
+
# document[:body] = "body"
|
258
|
+
# puts "----------"
|
259
|
+
# pp document
|
260
|
+
# document
|
261
|
+
# end
|
185
262
|
|
186
263
|
|
187
264
|
end
|
data/lib/diglossa/remote.rb
CHANGED
@@ -25,7 +25,6 @@ module Diglossa
|
|
25
25
|
# end
|
26
26
|
|
27
27
|
def load_couchapprc
|
28
|
-
# тут есть теперь "data-dir", но она нужна в parse, а не здесь. Как загружать один раз эту хрень?
|
29
28
|
@config ||= {}
|
30
29
|
@config = JSON.parse(File.read(File.join(app_dir, '.couchapprc')))
|
31
30
|
@config['couchapprc'] = JSON.parse(File.read(File.join(app_dir, '.couchapprc')))
|
@@ -41,10 +40,22 @@ module Diglossa
|
|
41
40
|
end
|
42
41
|
end
|
43
42
|
|
43
|
+
def get_id id
|
44
|
+
path = "#{db_url}/#{id}?include_docs=true"
|
45
|
+
response = RestClient.get path, :content_type => :json, :accept => :json # rescue nil
|
46
|
+
return "no _id #{id}" unless response.code == 200
|
47
|
+
result = JSON.parse(response.body)
|
48
|
+
response.code == 200 ? result : nil
|
49
|
+
end
|
50
|
+
|
44
51
|
def author(nic = "abelard")
|
52
|
+
# FIXME: для dbauthors нужен отдельный метод?
|
53
|
+
# gem needs authors info for building book-tree
|
45
54
|
nics = nic.kind_of?(Array) ? nic : [nic]
|
46
|
-
path = "#{db_url}/_design/diglossa.coffee/_view/byAuthor?include_docs=true"
|
47
|
-
|
55
|
+
#path = "#{db_url}/_design/diglossa.coffee/_view/byAuthor?include_docs=true"
|
56
|
+
path = "http://diglossa.ru:5984/diglossa/_design/diglossa.coffee/_view/byAuthor?include_docs=true"
|
57
|
+
response = RestClient.post path, {"keys"=> nics}.to_json, :content_type => :json, :accept => :json rescue nil
|
58
|
+
return "no connection to diglossa.ru" unless response
|
48
59
|
return "no authors with nics #{nics}" unless response.code == 200
|
49
60
|
authors = JSON.parse(response.body)["rows"].map{|r|r['doc']}
|
50
61
|
#pp authors
|
@@ -53,9 +64,12 @@ module Diglossa
|
|
53
64
|
|
54
65
|
def push_docs docs
|
55
66
|
docs = docs.kind_of?(Array) ? docs : [docs]
|
56
|
-
|
57
|
-
|
58
|
-
|
67
|
+
docs.each_slice(1000) do |chunk|
|
68
|
+
json =RestClient.post "#{db_url}/_bulk_docs", {"docs" => chunk}.to_json, :content_type => :json, :accept => :json
|
69
|
+
JSON.parse(json)
|
70
|
+
puts "pushed #{chunk.size}"
|
71
|
+
end
|
72
|
+
true
|
59
73
|
end
|
60
74
|
|
61
75
|
def get_book url
|
@@ -77,46 +91,70 @@ module Diglossa
|
|
77
91
|
book["_rev"] = dbbooks[index]["_rev"]
|
78
92
|
end
|
79
93
|
end
|
80
|
-
#pp books
|
81
94
|
push_docs books
|
82
95
|
end
|
83
96
|
|
84
|
-
def
|
97
|
+
def get_texts url
|
85
98
|
response = RestClient.get("#{db_url}/_design/diglossa.coffee/_view/byUrl?key=%22#{url}%22&include_docs=true")
|
86
99
|
JSON.parse(response)['rows'].map{|r|r['doc']} || []
|
87
100
|
end
|
88
101
|
|
89
|
-
def
|
90
|
-
dbdocs =
|
102
|
+
def del_texts url
|
103
|
+
dbdocs = get_texts url
|
91
104
|
return if dbdocs.empty?
|
92
105
|
dbdocs.each{|doc|doc["_deleted"] = true}
|
93
106
|
push_docs dbdocs
|
94
107
|
end
|
95
108
|
|
96
|
-
def
|
97
|
-
dbdocs =
|
109
|
+
def push_texts url, docs
|
110
|
+
dbdocs = get_texts url
|
98
111
|
if dbdocs.size == docs.size
|
99
112
|
docs.each_with_index do |doc, index|
|
100
113
|
doc["_id"] = dbdocs[index]["_id"]
|
101
114
|
doc["_rev"] = dbdocs[index]["_rev"]
|
102
115
|
end
|
103
116
|
else
|
104
|
-
|
117
|
+
del_texts url
|
105
118
|
end
|
106
119
|
push_docs docs
|
107
120
|
end
|
108
121
|
|
109
|
-
def
|
110
|
-
|
111
|
-
response
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
122
|
+
def get_coms url
|
123
|
+
response = RestClient.get("#{db_url}/_design/diglossa.coffee/_view/comsByUrl?key=%22#{url}%22&include_docs=true")
|
124
|
+
JSON.parse(response)['rows'].map{|r|r['doc']} || []
|
125
|
+
end
|
126
|
+
|
127
|
+
def del_coms url
|
128
|
+
dbdocs = get_coms url
|
129
|
+
return if dbdocs.empty?
|
130
|
+
dbdocs.each{|doc|doc["_deleted"] = true}
|
131
|
+
push_docs dbdocs
|
118
132
|
end
|
119
133
|
|
134
|
+
def push_coms url, docs
|
135
|
+
dbdocs = get_coms url
|
136
|
+
if dbdocs.size == docs.size
|
137
|
+
docs.each_with_index do |doc, index|
|
138
|
+
doc["_id"] = dbdocs[index]["_id"]
|
139
|
+
doc["_rev"] = dbdocs[index]["_rev"]
|
140
|
+
end
|
141
|
+
else
|
142
|
+
del_coms url
|
143
|
+
end
|
144
|
+
push_docs docs
|
145
|
+
end
|
146
|
+
|
147
|
+
# def seeds(name = "authors", push = false)
|
148
|
+
# path = "#{db_url}/_design/diglossa.coffee/_view/byAuthor?include_docs=true"
|
149
|
+
# response = RestClient.get "#{db_url}/_design/diglossa.coffee/_view/byAuthor?key=%22#{path.to_url}%22&include_docs=true", :content_type => :json, :accept => :json
|
150
|
+
# #JSON.parse( RestClient.get( "#{Diglossa::DBD}/_design/diglossa.coffee/_view/byAuthor?include_docs=true"))['rows'].map{|r|r['doc']} rescue nil
|
151
|
+
# response = RestClient.post path, {"keys"=> nics}.to_json, :content_type => :json, :accept => :json
|
152
|
+
# return "no authors with nics #{nics}" unless response.code == 200
|
153
|
+
# authors = JSON.parse(response.body)["rows"].map{|r|r['doc']}
|
154
|
+
# #pp authors
|
155
|
+
# response.code == 200 ? authors : nil
|
156
|
+
# end
|
157
|
+
|
120
158
|
|
121
159
|
end
|
122
160
|
end
|
data/lib/diglossa/version.rb
CHANGED
data/lib/diglossa.rb
CHANGED
data/nginx-last.conf
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
worker_processes 10;
|
2
|
+
|
3
|
+
#user michael;
|
4
|
+
|
5
|
+
error_log /var/log/nginx/error.log;
|
6
|
+
|
7
|
+
events {
|
8
|
+
worker_connections 1024;
|
9
|
+
}
|
10
|
+
|
11
|
+
http {
|
12
|
+
proxy_temp_path /var/spool/nginx/tmp/proxy;
|
13
|
+
fastcgi_temp_path /var/spool/nginx/tmp/fastcgi;
|
14
|
+
client_body_temp_path /var/spool/nginx/tmp/client;
|
15
|
+
|
16
|
+
include /etc/nginx/mime.types;
|
17
|
+
default_type application/octet-stream;
|
18
|
+
|
19
|
+
sendfile on;
|
20
|
+
|
21
|
+
gzip on;
|
22
|
+
#types_hash_bucket_size 64;
|
23
|
+
|
24
|
+
# text/html don't need to be defined there, it always compressed
|
25
|
+
gzip_types text/plain text/css text/xml application/x-javascript application/atom+xml;
|
26
|
+
#gzip_types text/css text/xml application/x-javascript application/atom+xml;
|
27
|
+
|
28
|
+
# gzip_comp_level 9;
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
server {
|
33
|
+
#listen localhost:80;
|
34
|
+
#isten 127.0.0.1:80;
|
35
|
+
#listen ru.dig.loc:80;
|
36
|
+
#server_name ru.dig.loc en.dig.loc dev.dig.loc;
|
37
|
+
listen 195.54.209.42:80;
|
38
|
+
server_name ru.diglossa.org en.diglossa.org;
|
39
|
+
|
40
|
+
#rewrite ^/js/(.*)$ /js/$1 last;
|
41
|
+
rewrite ^/js/(.*)$ /diglossa/_design/diglossa.coffee/js/$1 last;
|
42
|
+
rewrite ^/diglossa/(.*)$ /diglossa/$1 last;
|
43
|
+
rewrite ^/css/(.*)$ /diglossa/_design/diglossa.coffee/css/$1 last;
|
44
|
+
rewrite ^/templates/(.*)$ /diglossa/_design/diglossa.coffee/templates/$1 last;
|
45
|
+
rewrite ^/_view/(.*)$ /diglossa/_design/diglossa.coffee/_view/$1 last;
|
46
|
+
rewrite ^/(.*)$ /diglossa/_design/diglossa.coffee/_list/index/byUrl?key=%22$1%22&include_docs=true last;
|
47
|
+
|
48
|
+
location / {
|
49
|
+
proxy_pass http://127.0.0.1:5984;
|
50
|
+
#proxy_redirect default;
|
51
|
+
proxy_redirect off;
|
52
|
+
#proxy_set_header Accept-Encoding "";
|
53
|
+
proxy_set_header Host $host;
|
54
|
+
proxy_set_header X-Real-IP $remote_addr;
|
55
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
56
|
+
}
|
57
|
+
charset utf-8;
|
58
|
+
access_log /var/log/nginx/diglossa.log;
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
# MAIN
|
66
|
+
server {
|
67
|
+
listen 195.54.209.42:80;
|
68
|
+
server_name ru1.diglossa.org en1.diglossa.org;
|
69
|
+
|
70
|
+
# location ~* ^.+\.(ogg|gz){
|
71
|
+
# root /home/michael/web/diglossa.media/;
|
72
|
+
# }
|
73
|
+
# location ~* \.js$ {
|
74
|
+
# # # Some basic cache-control for static files to be sent to the browser
|
75
|
+
# expires max;
|
76
|
+
# add_header Pragma public;
|
77
|
+
# add_header Cache-Control "public, must-revalidate, proxy-revalidate";
|
78
|
+
# root /home/michael/web/socadimo/diglossa.coffee;
|
79
|
+
# }
|
80
|
+
# #
|
81
|
+
location / {
|
82
|
+
proxy_pass http://127.0.0.1:5984;
|
83
|
+
#proxy_redirect default;
|
84
|
+
proxy_set_header Accept-Encoding "";
|
85
|
+
proxy_set_header Host $host;
|
86
|
+
proxy_set_header X-Real-IP $remote_addr;
|
87
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
88
|
+
proxy_redirect off;
|
89
|
+
}
|
90
|
+
charset utf-8;
|
91
|
+
access_log /var/log/nginx/diglossa.log;
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
# DEVEL
|
96
|
+
server {
|
97
|
+
listen 195.54.209.42:80;
|
98
|
+
server_name dev.diglossa.org;
|
99
|
+
|
100
|
+
# location ~* ^.+\.(ogg|gz){
|
101
|
+
# root /home/michael/web/diglossa.media/;
|
102
|
+
# }
|
103
|
+
# location ~* \.js$ {
|
104
|
+
# # # Some basic cache-control for static files to be sent to the browser
|
105
|
+
# expires max;
|
106
|
+
# add_header Pragma public;
|
107
|
+
# add_header Cache-Control "public, must-revalidate, proxy-revalidate";
|
108
|
+
# root /home/michael/web/diglossa.coffee;
|
109
|
+
# }
|
110
|
+
# #
|
111
|
+
location / {
|
112
|
+
proxy_pass http://127.0.0.1:5984;
|
113
|
+
#proxy_redirect default;
|
114
|
+
proxy_set_header Accept-Encoding "";
|
115
|
+
proxy_set_header Host $host;
|
116
|
+
proxy_set_header X-Real-IP $remote_addr;
|
117
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
118
|
+
proxy_redirect off;
|
119
|
+
}
|
120
|
+
charset utf-8;
|
121
|
+
access_log /var/log/nginx/diglossa-coffee.log;
|
122
|
+
}
|
123
|
+
|
124
|
+
|
125
|
+
# server {
|
126
|
+
# listen 195.54.209.42:80;
|
127
|
+
# server_name diglossa.org www.diglossa.org;
|
128
|
+
# location /robots.txt {
|
129
|
+
# #alias /;
|
130
|
+
# #alias http://127.0.0.1:5984/diglossa/_design/diglossa/robots.txt;
|
131
|
+
# #root /diglossa/_design/diglossa;
|
132
|
+
# #root /;
|
133
|
+
# #rewrite ^/robots.txt$ /diglossa/_design/diglossa/robots.txt last;
|
134
|
+
# proxy_pass http://127.0.0.1:5984/diglossa/_design/diglossa/robots.txt;
|
135
|
+
# #proxy_redirect default;
|
136
|
+
# proxy_redirect off;
|
137
|
+
# #proxy_set_header Host $host;
|
138
|
+
# #proxy_set_header X-Real-IP $remote_addr;
|
139
|
+
# }
|
140
|
+
# location / {
|
141
|
+
# rewrite ^/(.*)$ http://en.diglossa.org/$1 permanent;
|
142
|
+
# }
|
143
|
+
# }
|
144
|
+
|
145
|
+
server {
|
146
|
+
listen 195.54.209.42:80;
|
147
|
+
server_name diglossa.ru www.diglossa.ru;
|
148
|
+
rewrite ^/(.*)$ http://ru.diglossa.org/$1 permanent;
|
149
|
+
location / {
|
150
|
+
}
|
151
|
+
}
|
152
|
+
server {
|
153
|
+
listen 195.54.209.42:80;
|
154
|
+
server_name diglossa.org www.diglossa.org;
|
155
|
+
rewrite ^/(.*)$ http://en.diglossa.org/$1 permanent;
|
156
|
+
location / {
|
157
|
+
}
|
158
|
+
}
|
159
|
+
|
160
|
+
|
161
|
+
server {
|
162
|
+
listen 195.54.209.42:5984;
|
163
|
+
server_name diglossa.ru;
|
164
|
+
|
165
|
+
location / {
|
166
|
+
proxy_pass http://127.0.0.1:5984/;
|
167
|
+
proxy_redirect off;
|
168
|
+
}
|
169
|
+
|
170
|
+
access_log /var/log/nginx/morpheus.log;
|
171
|
+
}
|
172
|
+
|
173
|
+
|
174
|
+
server {
|
175
|
+
listen 195.54.209.42:9001;
|
176
|
+
server_name diglossa.ru;
|
177
|
+
|
178
|
+
location / {
|
179
|
+
proxy_pass http://127.0.0.1:9001/;
|
180
|
+
#proxy_pass http://localhost:9001;
|
181
|
+
proxy_redirect default;
|
182
|
+
#proxy_redirect off;
|
183
|
+
}
|
184
|
+
charset utf-8;
|
185
|
+
access_log /var/log/nginx/morpheus.log;
|
186
|
+
}
|
187
|
+
|
188
|
+
# server {
|
189
|
+
# listen 195.54.209.42:9001;
|
190
|
+
# server_name diglossa.ru;
|
191
|
+
|
192
|
+
# location / {
|
193
|
+
# proxy_pass http://127.0.0.1:9001/;
|
194
|
+
# proxy_redirect off;
|
195
|
+
# }
|
196
|
+
# access_log /var/log/nginx/morpheus.log;
|
197
|
+
# }
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diglossa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.27
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yard
|
@@ -123,6 +123,22 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: addressable
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
126
142
|
- !ruby/object:Gem::Dependency
|
127
143
|
name: thor
|
128
144
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,8 +185,10 @@ files:
|
|
169
185
|
- README.md
|
170
186
|
- Rakefile
|
171
187
|
- bin/dg
|
188
|
+
- bin/dg-author
|
172
189
|
- diglossa.gemspec
|
173
190
|
- lib/diglossa.rb
|
191
|
+
- lib/diglossa/author.rb
|
174
192
|
- lib/diglossa/classext.rb
|
175
193
|
- lib/diglossa/cli.rb
|
176
194
|
- lib/diglossa/parse.rb
|
@@ -179,6 +197,7 @@ files:
|
|
179
197
|
- lib/diglossa/templates/blog/04-02-2013-blog
|
180
198
|
- lib/diglossa/templates/couchapprc.erb
|
181
199
|
- lib/diglossa/version.rb
|
200
|
+
- nginx-last.conf
|
182
201
|
- spec/spec_helper.rb
|
183
202
|
homepage: ''
|
184
203
|
licenses: []
|