kojo 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -0
- data/lib/kojo/cli.rb +0 -1
- data/lib/kojo/commands/config.rb +55 -45
- data/lib/kojo/commands/dir.rb +67 -56
- data/lib/kojo/commands/file.rb +34 -33
- data/lib/kojo/extensions/array.rb +6 -1
- data/lib/kojo/extensions/hash.rb +6 -0
- data/lib/kojo/extensions/string.rb +17 -0
- data/lib/kojo/template.rb +21 -6
- data/lib/kojo/version.rb +1 -1
- data/lib/kojo.rb +7 -8
- metadata +17 -3
- data/lib/kojo/commands.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66b59e59e2a7d874db8c30218544c194798aa8b0e0680dbc1a906f3f75f67e59
|
4
|
+
data.tar.gz: 56ff38e17c7cedd6df3373275fdacc65e9bc7fe8f2df5bdf7bdd650edea5eb37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1202ad70051723bcbeceaf4ef641704f133685177dc42f9479bb7d4391d69e0b1d6b80245b684c68788627933be382843865654a6b7766e4ad6379d5963d4c89
|
7
|
+
data.tar.gz: 312a0a592b342cef71bbe08f5c38c3db2007047fa052ae3f34faa65910d4cb41af60deb9b241804290a2ab3d2e42c269e8581ece1c543fae3ddf9c2349d94387
|
data/README.md
CHANGED
@@ -18,6 +18,19 @@ It is a command line utility, and it works on any text file format.
|
|
18
18
|
|
19
19
|
---
|
20
20
|
|
21
|
+
Table of Contents
|
22
|
+
--------------------------------------------------
|
23
|
+
|
24
|
+
- [Installation](#installation)
|
25
|
+
- [Usage](#usage)
|
26
|
+
- [Variables](#variables)
|
27
|
+
- [Import](#import)
|
28
|
+
- [One to Many Generation](#one-to-many-generation)
|
29
|
+
- [Compile an Entire Folder](#compile-an-entire-folder)
|
30
|
+
- [Conditions and Loops with ERB](#conditions-and-loops-with-erb)
|
31
|
+
|
32
|
+
---
|
33
|
+
|
21
34
|
Installation
|
22
35
|
--------------------------------------------------
|
23
36
|
|
@@ -48,6 +61,7 @@ Include variables in your configuration templates using this syntax:
|
|
48
61
|
with any additional variables that are defined in subsequent `@imports`.
|
49
62
|
|
50
63
|
|
64
|
+
|
51
65
|
### Import
|
52
66
|
|
53
67
|
![kojo](images/features-import.svg)
|
@@ -70,6 +84,7 @@ resulting configuration file.
|
|
70
84
|
The space after `filename` is optional.
|
71
85
|
|
72
86
|
|
87
|
+
|
73
88
|
### One to Many Generation
|
74
89
|
|
75
90
|
![kojo](images/features-config.svg)
|
@@ -95,9 +110,28 @@ output:
|
|
95
110
|
```
|
96
111
|
|
97
112
|
|
113
|
+
|
98
114
|
### Compile an Entire Folder
|
99
115
|
|
100
116
|
![kojo](images/features-dir.svg)
|
101
117
|
|
102
118
|
Process a folder containing templates and `@imports`, and generate a mirror
|
103
119
|
output folder, with all the variables and `@imports` evaluated.
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
### Conditions and Loops with ERB
|
124
|
+
|
125
|
+
![kojo](images/features-erb.svg)
|
126
|
+
|
127
|
+
Template files are evaluated using ERB, so you can use any Ruby code for more
|
128
|
+
advanced templates (for conditions, loops etc.).
|
129
|
+
|
130
|
+
Use this syntax for ruby code:
|
131
|
+
|
132
|
+
```erb
|
133
|
+
<%- ruby code here -%> # for code that should not be printed
|
134
|
+
<%= ruby code here -%> # for code that should be printed
|
135
|
+
```
|
136
|
+
|
137
|
+
|
data/lib/kojo/cli.rb
CHANGED
data/lib/kojo/commands/config.rb
CHANGED
@@ -1,52 +1,62 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'mister_bin'
|
2
3
|
|
3
|
-
module Kojo
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
File.write path, output
|
41
|
-
say "Saved #{path}"
|
42
|
-
else
|
43
|
-
say "\n!txtgrn!# #{file}"
|
44
|
-
say output
|
45
|
-
end
|
46
|
-
end
|
4
|
+
module Kojo::Commands
|
5
|
+
class ConfigCmd < MisterBin::Command
|
6
|
+
attr_reader :gen, :outdir, :opts
|
7
|
+
|
8
|
+
help "Generate based on instructions from a config file"
|
9
|
+
|
10
|
+
usage "kojo config CONFIG [--save DIR --args FILE] [ARGS...]"
|
11
|
+
usage "kojo config (-h|--help)"
|
12
|
+
|
13
|
+
option "-s --save DIR", "Save output to directory instead of printing"
|
14
|
+
option "-a --args FILE", "Load arguments from YAML file"
|
15
|
+
|
16
|
+
param "ARGS", "Optional key=value pairs"
|
17
|
+
|
18
|
+
example "kojo config config.yml"
|
19
|
+
example "kojo config config.yml --save output"
|
20
|
+
example "kojo config config.yml -s output scale=3"
|
21
|
+
example "kojo config config.yml -s output --args args.yml"
|
22
|
+
|
23
|
+
def run(args)
|
24
|
+
@gen = Kojo::Generator.new args['CONFIG']
|
25
|
+
@outdir = args['--save']
|
26
|
+
@opts = args['ARGS'].args_to_hash
|
27
|
+
argfile = args['--args']
|
28
|
+
|
29
|
+
if argfile
|
30
|
+
fileopts = YAML.load_file(argfile).symbolize_keys
|
31
|
+
@opts = fileopts.merge opts
|
32
|
+
end
|
33
|
+
|
34
|
+
run!
|
35
|
+
end
|
36
|
+
|
37
|
+
def run!
|
38
|
+
gen.generate opts do |file, output|
|
39
|
+
handle file, output
|
47
40
|
end
|
41
|
+
end
|
48
42
|
|
43
|
+
private
|
44
|
+
|
45
|
+
def handle(file, output)
|
46
|
+
if outdir
|
47
|
+
save "#{outdir}/#{file}", output
|
48
|
+
else
|
49
|
+
say "\n!txtgrn!# #{file}"
|
50
|
+
say output
|
51
|
+
end
|
49
52
|
end
|
53
|
+
|
54
|
+
def save(path, output)
|
55
|
+
dir = File.dirname path
|
56
|
+
FileUtils.mkdir_p dir unless Dir.exist? dir
|
57
|
+
File.write path, output
|
58
|
+
say "Saved #{path}"
|
59
|
+
end
|
60
|
+
|
50
61
|
end
|
51
62
|
end
|
52
|
-
|
data/lib/kojo/commands/dir.rb
CHANGED
@@ -1,61 +1,72 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
files = Dir["#{indir}/**/*"].reject { |file| File.directory? file }
|
35
|
-
|
36
|
-
files.each do |file|
|
37
|
-
|
38
|
-
template = Kojo::Template.new(file, opts)
|
39
|
-
template.import_base = import_base if import_base
|
40
|
-
output = template.render
|
41
|
-
|
42
|
-
if outdir
|
43
|
-
outpath = file.sub(/#{indir}/, outdir)
|
44
|
-
|
45
|
-
dir = File.dirname outpath
|
46
|
-
FileUtils.mkdir_p dir unless Dir.exist? dir
|
47
|
-
|
48
|
-
File.write outpath, output
|
49
|
-
say "Saved #{outpath}"
|
50
|
-
else
|
51
|
-
outpath = file.sub(/#{indir}/, '')
|
52
|
-
say "\n!txtgrn!# #{outpath}"
|
53
|
-
say output
|
54
|
-
end
|
55
|
-
end
|
1
|
+
require 'mister_bin'
|
2
|
+
|
3
|
+
module Kojo::Commands
|
4
|
+
class DirCmd < MisterBin::Command
|
5
|
+
attr_reader :opts, :indir, :outdir, :import_base
|
6
|
+
|
7
|
+
help "Compile a folder of templates to a similar output folder"
|
8
|
+
|
9
|
+
usage "kojo dir INDIR [--save DIR --import DIR --args FILE] [ARGS...]"
|
10
|
+
usage "kojo dir (-h|--help)"
|
11
|
+
|
12
|
+
option "-s --save DIR", "Save output to directory instead of printing"
|
13
|
+
option "-i --import DIR", "Specify base directory for @import directives"
|
14
|
+
option "-a --args FILE", "Load arguments from YAML file"
|
15
|
+
|
16
|
+
param "ARGS", "Optional key=value pairs"
|
17
|
+
|
18
|
+
example "kojo dir indir"
|
19
|
+
example "kojo dir in --save out env=production"
|
20
|
+
example "kojo dir in --save out --import snippets env=production"
|
21
|
+
example "kojo dir in -s out -i snippets -a args.yml"
|
22
|
+
|
23
|
+
def run(args)
|
24
|
+
@opts = args['ARGS'].args_to_hash
|
25
|
+
@indir = args['INDIR']
|
26
|
+
@outdir = args['--save']
|
27
|
+
@import_base = args['--import']
|
28
|
+
argfile = args['--args']
|
29
|
+
|
30
|
+
if argfile
|
31
|
+
fileopts = YAML.load_file(argfile).symbolize_keys
|
32
|
+
@opts = fileopts.merge @opts
|
56
33
|
end
|
57
34
|
|
35
|
+
run!
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def files
|
41
|
+
@files ||= Dir["#{indir}/**/*"].reject { |file| File.directory? file }
|
42
|
+
end
|
43
|
+
|
44
|
+
def run!
|
45
|
+
files.each do |file|
|
46
|
+
handle file
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def handle(file)
|
51
|
+
template = Kojo::Template.new(file, opts)
|
52
|
+
template.import_base = import_base if import_base
|
53
|
+
output = template.render
|
54
|
+
|
55
|
+
if outdir
|
56
|
+
save file, output
|
57
|
+
else
|
58
|
+
outpath = file.sub(/#{indir}/, '')
|
59
|
+
say "\n!txtgrn!# #{outpath}"
|
60
|
+
say output
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def save(file, output)
|
65
|
+
outpath = file.sub(/#{indir}/, outdir)
|
66
|
+
dir = File.dirname outpath
|
67
|
+
FileUtils.mkdir_p dir unless Dir.exist? dir
|
68
|
+
File.write outpath, output
|
69
|
+
say "Saved #{outpath}"
|
58
70
|
end
|
59
71
|
end
|
60
72
|
end
|
61
|
-
|
data/lib/kojo/commands/file.rb
CHANGED
@@ -1,47 +1,48 @@
|
|
1
|
-
require '
|
1
|
+
require 'mister_bin'
|
2
2
|
|
3
|
-
module Kojo
|
4
|
-
|
5
|
-
|
6
|
-
include Colsole
|
3
|
+
module Kojo::Commands
|
4
|
+
class FileCmd < MisterBin::Command
|
5
|
+
attr_reader :opts, :outfile, :infile
|
7
6
|
|
8
|
-
|
7
|
+
help "Compile a file from a template"
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
usage "kojo file INFILE [--save FILE --args FILE] [ARGS...]"
|
10
|
+
usage "kojo file (-h|--help)"
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
option "-s --save FILE", "Save to file instead of printing"
|
13
|
+
option "-a --args FILE", "Load arguments from YAML file"
|
15
14
|
|
16
|
-
|
15
|
+
param "ARGS", "Optional key=value pairs"
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
example "kojo file main.yml"
|
18
|
+
example "kojo file main.yml --save out.yml"
|
19
|
+
example "kojo file main.yml -s out.yml app=lause"
|
20
|
+
example "kojo file main.yml -s out.yml --args args.yml"
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
def run(args)
|
23
|
+
@opts = args['ARGS'].args_to_hash
|
24
|
+
@outfile = args['--save']
|
25
|
+
@infile = args['INFILE']
|
26
|
+
argfile = args['--args']
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
if argfile
|
29
|
+
fileopts = YAML.load_file(argfile).symbolize_keys
|
30
|
+
@opts = fileopts.merge opts
|
31
|
+
end
|
33
32
|
|
34
|
-
|
33
|
+
run!
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
say "Saved #{outfile}"
|
39
|
-
else
|
40
|
-
puts output
|
41
|
-
end
|
42
|
-
end
|
36
|
+
def run!
|
37
|
+
output = Kojo::Template.new(infile, opts).render
|
43
38
|
|
39
|
+
if outfile
|
40
|
+
File.write outfile, output
|
41
|
+
say "Saved #{outfile}"
|
42
|
+
else
|
43
|
+
puts output
|
44
|
+
end
|
44
45
|
end
|
46
|
+
|
45
47
|
end
|
46
48
|
end
|
47
|
-
|
data/lib/kojo/extensions/hash.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
class String
|
2
|
+
def to_typed
|
3
|
+
if self =~ /\A[+-]?\d+\Z/
|
4
|
+
self.to_i
|
5
|
+
|
6
|
+
elsif self =~ /\A[+-]?\d+\.\d+\Z/
|
7
|
+
self.to_f
|
8
|
+
|
9
|
+
elsif %w[yes no true false].include? self.downcase
|
10
|
+
%w[yes true].include? self.downcase
|
11
|
+
|
12
|
+
else
|
13
|
+
self
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/kojo/template.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'ostruct'
|
3
|
+
|
1
4
|
module Kojo
|
2
5
|
class Template
|
3
6
|
attr_reader :file, :extension, :args, :dir
|
@@ -17,14 +20,15 @@ module Kojo
|
|
17
20
|
|
18
21
|
private
|
19
22
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
23
|
+
def evaluate(file, args={})
|
24
|
+
content = File.read(file)
|
25
|
+
|
26
|
+
content = erb content, args
|
27
|
+
content = content % args
|
28
|
+
content = eval_imports content
|
24
29
|
end
|
25
30
|
|
26
|
-
def
|
27
|
-
content = File.read(file) % args
|
31
|
+
def eval_imports(content)
|
28
32
|
result = []
|
29
33
|
|
30
34
|
content.lines.each do |line|
|
@@ -41,9 +45,20 @@ module Kojo
|
|
41
45
|
|
42
46
|
result.push line
|
43
47
|
end
|
48
|
+
|
44
49
|
result.join "\n"
|
45
50
|
end
|
46
51
|
|
52
|
+
def import(file, import_args={})
|
53
|
+
filename = File.expand_path "#{file}#{extension}", import_base
|
54
|
+
all_args = args.merge import_args
|
55
|
+
self.class.new(filename, all_args).render
|
56
|
+
end
|
57
|
+
|
58
|
+
def erb(template, vars)
|
59
|
+
ERB.new(template, nil, '-').result(OpenStruct.new(vars).instance_eval { binding })
|
60
|
+
end
|
61
|
+
|
47
62
|
def indent(text, spaces)
|
48
63
|
text.lines.collect { |line| "#{' ' * spaces}#{line}" }.join
|
49
64
|
end
|
data/lib/kojo/version.rb
CHANGED
data/lib/kojo.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
require '
|
2
|
-
require 'kojo/extensions/hash'
|
3
|
-
|
4
|
-
require 'kojo/cli'
|
5
|
-
require 'kojo/template'
|
6
|
-
require 'kojo/generator'
|
7
|
-
require 'kojo/version'
|
8
|
-
|
1
|
+
require 'requires'
|
9
2
|
require 'byebug' if ENV['BYEBUG']
|
3
|
+
requires 'kojo'
|
4
|
+
|
5
|
+
module Kojo
|
6
|
+
module Commands
|
7
|
+
end
|
8
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kojo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mister_bin
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: requires
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.1'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: byebug
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,12 +134,12 @@ files:
|
|
120
134
|
- bin/kojo
|
121
135
|
- lib/kojo.rb
|
122
136
|
- lib/kojo/cli.rb
|
123
|
-
- lib/kojo/commands.rb
|
124
137
|
- lib/kojo/commands/config.rb
|
125
138
|
- lib/kojo/commands/dir.rb
|
126
139
|
- lib/kojo/commands/file.rb
|
127
140
|
- lib/kojo/extensions/array.rb
|
128
141
|
- lib/kojo/extensions/hash.rb
|
142
|
+
- lib/kojo/extensions/string.rb
|
129
143
|
- lib/kojo/generator.rb
|
130
144
|
- lib/kojo/template.rb
|
131
145
|
- lib/kojo/version.rb
|
data/lib/kojo/commands.rb
DELETED