lono 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9236c10e7fcf57b75bbbb57b7ad87ada43f7c1d
4
- data.tar.gz: c453a06115c4263f8955c97e566c5a6261365195
3
+ metadata.gz: 4bf114ffb03f191da26a05fc80c4709f2eca37e0
4
+ data.tar.gz: 942454c20cf254b21236a8508aa71ccecd371da4
5
5
  SHA512:
6
- metadata.gz: dae90a7b3e39be326fedd087551570cfb0b33ce5081befccfa53f14b6e04868735b6b2d1de5c2d463cf66e53ccbffa58e672fb5b730a73307a0f1d797622deb7
7
- data.tar.gz: 0bd752bb836cc1567be6be4fb20ebdc8509f7ca068ab59905299ca828764b931f956523bedc8e8309ecec7aafcfed08e57d2bd647edd49b6fbe25d53a546db4d
6
+ metadata.gz: 4506033e8b011e45aac50e3f1d65ed28990e531d2ff2a39ee036a8587e67f29fe0c69d9128bc79e0d0bd32e733c01a4a95435dd72da7978349fec80cff1d60b0
7
+ data.tar.gz: 56d90a0893be4bf743154aca21647ada77b9dfef3668a457e33a7b9a6ecc369e13d4a57ac625bf4193d80d4bc06d26cac77ec1f59890f62c8a17d490d02462a2
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [1.1.0]
7
+ - useful ERB render error messages
8
+
6
9
  ## [1.0.2]
7
10
  - remove blank lines from yaml output
8
11
 
data/lib/lono/template.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'erb'
2
2
  require 'json'
3
- require "base64"
3
+ require 'base64'
4
4
 
5
5
  module Lono
6
6
  class Template
@@ -16,7 +16,7 @@ module Lono
16
16
  def build
17
17
  instance_eval(&@block)
18
18
  template = IO.read(@source)
19
- erb_result(template)
19
+ erb_result(@source, template)
20
20
  end
21
21
 
22
22
  def source(path)
@@ -33,7 +33,7 @@ module Lono
33
33
  path = "#{@options[:project_root]}/templates/partial/#{path}"
34
34
  template = IO.read(path)
35
35
  variables(vars)
36
- result = erb_result(template)
36
+ result = erb_result(path, template)
37
37
  result = indent(result, options[:indent]) if options[:indent]
38
38
  result
39
39
  end
@@ -45,15 +45,42 @@ module Lono
45
45
  end.join("\n")
46
46
  end
47
47
 
48
- def erb_result(template)
49
- ERB.new(template, nil, "-").result(binding)
48
+ def erb_result(path, template)
49
+ begin
50
+ ERB.new(template, nil, "-").result(binding)
51
+ rescue Exception => e
52
+ puts e
53
+
54
+ # how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
55
+ # syntax errors have the (erb):xxx info in e.message
56
+ # undefined variables have (erb):xxx info in e.backtrac
57
+ error_info = e.message.split("\n").grep(/\(erb\)/)[0]
58
+ error_info ||= e.backtrace.grep(/\(erb\)/)[0]
59
+ raise unless error_info # unable to find the (erb):xxx: error line
60
+ line = error_info.split(':')[1].to_i
61
+ puts "Error evaluating ERB template on line #{line.to_s.colorize(:red)} of: #{path.sub(/^\.\//, '')}"
62
+
63
+ template_lines = template.split("\n")
64
+ context = 5 # lines of context
65
+ top, bottom = [line-context, 0].max, line+context
66
+ spacing = template_lines.size.to_s.size
67
+ template_lines[top..bottom].each_with_index do |line_content, index|
68
+ line_number = top+index+1
69
+ if line_number == line
70
+ printf("%#{spacing}d %s\n".colorize(:red), line_number, line_content)
71
+ else
72
+ printf("%#{spacing}d %s\n", line_number, line_content)
73
+ end
74
+ end
75
+ exit 1 unless ENV['TEST']
76
+ end
50
77
  end
51
78
 
52
79
  def user_data(path, vars={})
53
80
  path = "#{@options[:project_root]}/templates/user_data/#{path}"
54
81
  template = IO.read(path)
55
82
  variables(vars)
56
- result = erb_result(template)
83
+ result = erb_result(path, template)
57
84
  output = []
58
85
  result.split("\n").each do |line|
59
86
  output += transform(line)
data/lib/lono/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lono
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -0,0 +1,46 @@
1
+ require File.expand_path("../../../spec_helper", __FILE__)
2
+
3
+ describe Lono::Template do
4
+ let(:template) do
5
+ block = Proc.new {}
6
+ template = Lono::Template.new("output_name.yml", block)
7
+
8
+ # override the puts and printf methods within the test
9
+ def template.messages
10
+ @messages
11
+ end
12
+
13
+ def template.puts(msg)
14
+ @messages ||= []
15
+ @messages << msg
16
+ nil
17
+ end
18
+
19
+ def template.printf(*args)
20
+ @messages ||= []
21
+ @messages << args
22
+ end
23
+
24
+ template
25
+ end
26
+
27
+ context "valid erb template" do
28
+ it "should be able to lono generate" do
29
+ template.erb_result("path", "template")
30
+ end
31
+ end
32
+
33
+ context "invalid erb template" do
34
+ it "should print out useful error message about undefined variable" do
35
+ template.erb_result("path", "variable does not exist\n<% variable %>\nanother line")
36
+ errors = template.messages.grep(/Error evaluating ERB template on line/)
37
+ expect(errors).not_to be_empty
38
+ end
39
+
40
+ it "should print out useful error message about syntax error" do
41
+ template.erb_result("path", "<%s dsfds ?%>\nanother line")
42
+ errors = template.messages.grep(/Error evaluating ERB template on line/)
43
+ expect(errors).not_to be_empty
44
+ end
45
+ end
46
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,8 @@ require "pp"
2
2
  require "byebug"
3
3
  require "bundler"
4
4
 
5
+ ENV['TEST'] = '1'
6
+
5
7
  Bundler.require(:development)
6
8
 
7
9
  $root = File.expand_path('../../', __FILE__)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lono
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-10 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -232,6 +232,7 @@ files:
232
232
  - spec/fixtures/cfn.json
233
233
  - spec/lib/lono/dsl_spec.rb
234
234
  - spec/lib/lono/new_spec.rb
235
+ - spec/lib/lono/template_spec.rb
235
236
  - spec/lib/lono_spec.rb
236
237
  - spec/spec_helper.rb
237
238
  homepage: http://github.com/tongueroo/lono
@@ -263,5 +264,6 @@ test_files:
263
264
  - spec/fixtures/cfn.json
264
265
  - spec/lib/lono/dsl_spec.rb
265
266
  - spec/lib/lono/new_spec.rb
267
+ - spec/lib/lono/template_spec.rb
266
268
  - spec/lib/lono_spec.rb
267
269
  - spec/spec_helper.rb