frender 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'tilt', '~> 2.0'
4
+ gem 'methadone', '~> 1.8'
@@ -0,0 +1,13 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ methadone (1.8.0)
5
+ bundler
6
+ tilt (2.0.1)
7
+
8
+ PLATFORMS
9
+ ruby
10
+
11
+ DEPENDENCIES
12
+ methadone
13
+ tilt (~> 2.0)
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'methadone'
5
+ require 'tilt'
6
+ require 'frender/version'
7
+ require 'frender/template_wrapper.rb'
8
+ require 'frender/renderer'
9
+ require 'frender/cli'
@@ -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
@@ -0,0 +1,3 @@
1
+ module Frender
2
+ VERSION="0.0.1"
3
+ 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: []