frender 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +13 -0
- data/bin/frender +9 -0
- data/lib/frender/cli.rb +23 -0
- data/lib/frender/renderer.rb +62 -0
- data/lib/frender/template_wrapper.rb +26 -0
- data/lib/frender/version.rb +3 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 050926cd8dcbe62d2aecffdf9bd6173b130773c2
|
4
|
+
data.tar.gz: b1a7adf85cc81038008d8e8594b19380df24b195
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 788c2f2496e008228b9780081047a93abc54593ea1ac1f734a12f947e2037d85f329d5feac28aa8fc90de0fae1dffe050434fcb33c93fe83aab2c510152feac6
|
7
|
+
data.tar.gz: 1e6b0d5eab49cfd0233dfb935a189d5a389e5ff831031ef347f803a94ede1f80713eab3bcbca38a73e244c96e9c26c82f76c08858a191796ebd4e807f8417c79
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/bin/frender
ADDED
data/lib/frender/cli.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Frender
|
2
|
+
class CLI
|
3
|
+
include Methadone::Main
|
4
|
+
include Methadone::CLILogging
|
5
|
+
|
6
|
+
version Frender::VERSION
|
7
|
+
|
8
|
+
description "Renders config files from input data in YAML format"
|
9
|
+
|
10
|
+
arg :spec, "Specification of files that should be built"
|
11
|
+
|
12
|
+
on("--stat", "Show git stats after rendering files")
|
13
|
+
on("--scope YAML", "Override the scope defined in the specification")
|
14
|
+
|
15
|
+
use_log_level_option
|
16
|
+
|
17
|
+
main do |spec|
|
18
|
+
Renderer.new(spec, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
go!
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Frender
|
2
|
+
class Renderer
|
3
|
+
include Methadone::CLILogging
|
4
|
+
|
5
|
+
def initialize(spec_file, options={})
|
6
|
+
@spec_file = spec_file
|
7
|
+
@options = options
|
8
|
+
|
9
|
+
load_spec
|
10
|
+
load_scope
|
11
|
+
render!
|
12
|
+
end
|
13
|
+
|
14
|
+
def scope
|
15
|
+
Marshal.load(Marshal.dump(@scope))
|
16
|
+
end
|
17
|
+
|
18
|
+
def render!
|
19
|
+
@spec[:files].each do |file, options|
|
20
|
+
TemplateWrapper::render(options, scope, file)
|
21
|
+
end
|
22
|
+
|
23
|
+
if @options[:stat]
|
24
|
+
puts
|
25
|
+
c = "git diff --color --stat %s" % @spec[:files].map{|f,_| f}.join(" ")
|
26
|
+
system(c)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def load_spec
|
31
|
+
raise("Cannot find spec file %s" % @spec_file) unless File.exist?(@spec_file)
|
32
|
+
raise("Cannot read spec file %s" % @spec_file) unless File.readable?(@spec_file)
|
33
|
+
|
34
|
+
info "Reading specification file %s" % @spec_file
|
35
|
+
|
36
|
+
@spec = YAML.load(File.read(@spec_file))
|
37
|
+
|
38
|
+
if !@spec[:frender].is_a?(Hash) || @spec[:frender].empty?
|
39
|
+
raise "No :frender: found in the spec loaded from %s" % @spec_file
|
40
|
+
end
|
41
|
+
|
42
|
+
@spec = @spec[:frender]
|
43
|
+
|
44
|
+
if !@spec[:files].is_a?(Hash)
|
45
|
+
raise "No :files: found in the spec loaded from %s" % @spec_file
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def load_scope
|
50
|
+
if @scope_file = @options[:scope]
|
51
|
+
debug "Using scope file %s from options hash" % @options[:scope]
|
52
|
+
else
|
53
|
+
debug "Using scope file %s from specification" % @spec[:yaml_scope]
|
54
|
+
@scope_file = @spec[:yaml_scope]
|
55
|
+
end
|
56
|
+
|
57
|
+
info "Reading scope file %s" % @scope_file
|
58
|
+
|
59
|
+
@scope = YAML.load(File.read(@scope_file))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Frender
|
2
|
+
class TemplateWrapper
|
3
|
+
include Methadone::CLILogging
|
4
|
+
|
5
|
+
def self.render(options, scope, outfile=nil)
|
6
|
+
if !File.exist?(options[:template]) && !File.readable?(options[:template])
|
7
|
+
raise("Cannot render %s, template %s does not exist or is not readable" % [outfile, options[:template]])
|
8
|
+
end
|
9
|
+
|
10
|
+
content = TemplateWrapper.new.render_partial(options[:template], scope)
|
11
|
+
|
12
|
+
if outfile
|
13
|
+
info "Rendering file %s using template %s" % [outfile, options[:template]]
|
14
|
+
File.open(outfile, "w") {|f| f.puts content}
|
15
|
+
else
|
16
|
+
info "Rendering using template %s" % options[:template]
|
17
|
+
end
|
18
|
+
|
19
|
+
content
|
20
|
+
end
|
21
|
+
|
22
|
+
def render_partial(template, scope)
|
23
|
+
Tilt.new(template, :trim => "-").render(TemplateWrapper.new, scope)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: frender
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- R.I.Pienaar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tilt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: methadone
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
41
|
+
description: 'description: Renders config files from input data in YAML format using
|
42
|
+
a variety of template languages'
|
43
|
+
email: rip@devco.net
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/frender/cli.rb
|
49
|
+
- lib/frender/template_wrapper.rb
|
50
|
+
- lib/frender/renderer.rb
|
51
|
+
- lib/frender/version.rb
|
52
|
+
- bin/frender
|
53
|
+
- Gemfile
|
54
|
+
- Gemfile.lock
|
55
|
+
homepage: http://devco.net/
|
56
|
+
licenses:
|
57
|
+
- Apache-2
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.0.14
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: frender
|
79
|
+
test_files: []
|