frender 0.0.1

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.
@@ -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: []