filegen 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/.rubocop.yml CHANGED
@@ -8,3 +8,4 @@ AllCops:
8
8
  - '**/Rakefile'
9
9
  Excludes:
10
10
  - vendor/**
11
+ - lib/filegen/version.rb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ 0.2.2: 2014-01-14
2
+ * Better error messages if template file name is missing
3
+ * Refactoring of ui messages
4
+ * Cleaning up rubocop offences
5
+
1
6
  0.2.1: 2014-01-14
2
7
  * Add documentation for default value support
3
8
 
@@ -0,0 +1,28 @@
1
+ Feature: Error handling
2
+
3
+ As a user
4
+ I want to get good error message
5
+ In order to fix my mistakes
6
+
7
+ Scenario: Missing file name
8
+ When I run `filegen`
9
+ Then the output should contain:
10
+ """
11
+ Template file name is missing.
12
+ """
13
+
14
+ Scenario: Non existing file
15
+ When I run `filegen template1.erb`
16
+ Then the stderr should contain:
17
+ """
18
+ File "template1.erb" does not exist
19
+ """
20
+
21
+ Scenario: Non erb file
22
+ Given an empty file named "template1.abc"
23
+ When I run `filegen template1.abc`
24
+ Then the stderr should contain:
25
+ """
26
+ File "template1.abc" is not a valid erb template: file ending erb
27
+ """
28
+
@@ -29,21 +29,6 @@ Feature: Evaluate Template
29
29
  Hello Karl
30
30
  """
31
31
 
32
- Scenario: Non existing file
33
- When I run `filegen template1.erb`
34
- Then the stderr should contain:
35
- """
36
- File "template1.erb" does not exist
37
- """
38
-
39
- Scenario: Non erb file
40
- Given an empty file named "template1.abc"
41
- When I run `filegen template1.abc`
42
- Then the stderr should contain:
43
- """
44
- File "template1.abc" is not a valid erb template: file ending erb
45
- """
46
-
47
32
  Scenario: YAML file as input (short)
48
33
  Given a file named "template.erb" with:
49
34
  """
data/lib/filegen.rb CHANGED
@@ -4,8 +4,10 @@ require 'moneta'
4
4
  require 'optparse'
5
5
  require 'forwardable'
6
6
  require 'ostruct'
7
+ require 'logger'
7
8
 
8
9
  require 'filegen/version'
10
+ require 'filegen/ui'
9
11
  require 'filegen/runner'
10
12
  require 'filegen/options'
11
13
  require 'filegen/data'
data/lib/filegen/data.rb CHANGED
@@ -23,7 +23,7 @@ module Filegen
23
23
  # The variable to lookup
24
24
  # @return [String]
25
25
  # The value of the variable
26
- def lookup(variable, default_value='')
26
+ def lookup(variable, default_value = '')
27
27
  try_to_fetch_unless_found_or_end(variable) || default_value
28
28
  end
29
29
 
@@ -43,7 +43,7 @@ module Filegen
43
43
 
44
44
  def validate_data_sources
45
45
  invalid_data_sources = chosen_data_sources - allowed_data_sources
46
- fail Exceptions::InvalidDataSources, "Unknown data source#{invalid_data_sources.size > 1 ? 's' : ''} \"#{invalid_data_sources.join(', ')}\" found." unless invalid_data_sources.empty?
46
+ fail Exceptions::DataSourcesAreInvalid, "Unknown data source#{invalid_data_sources.size > 1 ? 's' : ''} \"#{invalid_data_sources.join(', ')}\" found." unless invalid_data_sources.empty?
47
47
  end
48
48
  end
49
49
  end
@@ -3,6 +3,15 @@ module Filegen
3
3
  # Exceptions
4
4
  module Exceptions
5
5
  # raised if order arguments are invalid
6
- class InvalidDataSources < Exception; end
6
+ class DataSourcesAreInvalid < RuntimeError; end
7
+
8
+ # raised if one forgot to tell the script the template name
9
+ class TemplateNameIsMissing < RuntimeError; end
10
+
11
+ # raised if template given on commandline does not exist
12
+ class TemplateDoesNotExist < RuntimeError; end
13
+
14
+ # raised if one uses an invalid template name (missing erb)
15
+ class TemplateNameIsInvalid < RuntimeError; end
7
16
  end
8
17
  end
@@ -14,6 +14,8 @@ module Filegen
14
14
  # The array which contains the commandline arguments
15
15
  def initialize(argv)
16
16
  @params = parse_options(argv)
17
+
18
+ validate_params
17
19
  end
18
20
 
19
21
  # Source template
@@ -21,8 +23,6 @@ module Filegen
21
23
  # @return [File]
22
24
  # Returns a file handle for the template
23
25
  def source
24
- validate_source
25
-
26
26
  File.new(params.template)
27
27
  end
28
28
 
@@ -44,10 +44,20 @@ module Filegen
44
44
 
45
45
  private
46
46
 
47
+ def validate_params
48
+ validate_source
49
+ end
50
+
51
+ # rubocop:disable MethodLength
47
52
  def parse_options(argv)
48
53
  params = OpenStruct.new
49
54
  parser = OptionParser.new
50
55
 
56
+ parser.banner = 'Usage: filegen [options] <template>'
57
+
58
+ parser.separator ''
59
+ parser.separator 'Specific options:'
60
+
51
61
  params.data_sources = [:env]
52
62
  params.data_source_builders = {}
53
63
  params.data_source_builders[:env] = DataSources::Environment.new
@@ -62,6 +72,9 @@ module Filegen
62
72
  params.data_sources = l.map(&:to_sym)
63
73
  end
64
74
 
75
+ parser.separator ''
76
+ parser.separator 'Common options:'
77
+
65
78
  parser.on_tail('-h', '--help', 'Show this message') do
66
79
  $stderr.puts parser
67
80
  exit
@@ -76,10 +89,16 @@ module Filegen
76
89
 
77
90
  params
78
91
  end
92
+ # rubocop:enable MethodLength
79
93
 
80
94
  def validate_source
81
- fail "File \"#{params.template}\" does not exist" unless exists?
82
- fail "File \"#{params.template}\" is not a valid erb template: file ending erb" unless erb_template?
95
+ fail Exceptions::TemplateNameIsMissing, 'Template file name is missing.' if empty?
96
+ fail Exceptions::TemplateDoesNotExist, "File \"#{params.template}\" does not exist" unless exists?
97
+ fail Exceptions::TemplateNameIsInvalid, "File \"#{params.template}\" is not a valid erb template: file ending erb" unless erb_template?
98
+ end
99
+
100
+ def empty?
101
+ params.template.nil?
83
102
  end
84
103
 
85
104
  def exists?
@@ -4,7 +4,7 @@ module Filegen
4
4
  class Runner
5
5
  private
6
6
 
7
- attr_reader :options, :generator
7
+ attr_reader :argv
8
8
 
9
9
  public
10
10
 
@@ -20,19 +20,20 @@ module Filegen
20
20
  # @param [Kernel] kernel
21
21
  # Kernel class
22
22
  def initialize(argv, stdin = $stdin, stdout = $stdout, stderr = $stderr, kernel = Kernel)
23
- $stdin, $stdout, $stderr, @kernel = stdin, stdout, stderr, kernel
24
-
25
- @options = Options.new(argv)
26
- @generator = ErbGenerator.new(Data.new(@options.data_sources))
23
+ @argv, $stdin, $stdout, Ui.logger, @kernel = argv, stdin, stdout, stderr, kernel
27
24
  end
28
25
 
29
26
  # Execute runner
30
27
  def execute!
31
28
  begin
29
+ options = Options.new(argv)
30
+
31
+ generator = ErbGenerator.new(Data.new(options.data_sources))
32
32
  generator.compile(options.source, options.destination)
33
+
33
34
  exitstatus = 0
34
35
  rescue RuntimeError => e
35
- $stderr.puts e.message
36
+ Filegen::Ui.error e.message
36
37
  exitstatus = 1
37
38
  end
38
39
 
data/lib/filegen/ui.rb ADDED
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ module Filegen
3
+ # Methods for ui
4
+ module Ui
5
+ @logger = ::Logger.new($stderr)
6
+
7
+ class << self
8
+ attr_reader :logger
9
+
10
+ def formated_logger
11
+ logger.formatter = proc { |severity, datetime, _, msg|
12
+ sprintf("%s %s: %s\n", datetime, severity, msg)
13
+ }
14
+
15
+ logger
16
+ end
17
+
18
+ def logger=(output = $stderr)
19
+ @logger = ::Logger.new(output)
20
+ end
21
+
22
+ # Output warnings
23
+ def warning(*args)
24
+ formated_logger.warn(*args)
25
+ end
26
+
27
+ # Output messages
28
+ def message(*args)
29
+ formated_logger.info(*args)
30
+ end
31
+
32
+ # Output errors
33
+ def error(*args)
34
+ formated_logger.error(*args)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,4 +1,4 @@
1
1
  #main Filegen
2
2
  module Filegen
3
- VERSION = '0.2.1'
3
+ VERSION = '0.2.2'
4
4
  end
@@ -21,7 +21,7 @@ describe DataSourceBuilder do
21
21
  allow(params).to receive(:data_source_builders).and_return({})
22
22
  allow(params).to receive(:yaml_file).and_return('')
23
23
 
24
- expect { DataSourceBuilder.new(params) }.to raise_error Exceptions::InvalidDataSources
24
+ expect { DataSourceBuilder.new(params) }.to raise_error Exceptions::DataSourcesAreInvalid
25
25
  end
26
26
 
27
27
  it 'supports order of data sources: env first' do
data/spec/options_spec.rb CHANGED
@@ -4,7 +4,8 @@ require 'spec_helper'
4
4
  describe Options do
5
5
  context '#destination' do
6
6
  it 'returns an io handle' do
7
- options = Options.new([])
7
+ template_file = create_file('template.erb')
8
+ options = Options.new([template_file])
8
9
  expect(options.destination).to respond_to(:puts)
9
10
  end
10
11
  end
@@ -18,15 +19,12 @@ describe Options do
18
19
  end
19
20
 
20
21
  it 'raises an exception if file does not exist' do
21
- options = Options.new(['template_file'])
22
- expect { options.source }.to raise_error RuntimeError
22
+ expect { Options.new(['template_file']) }.to raise_error Exceptions::TemplateDoesNotExist
23
23
  end
24
24
 
25
25
  it 'raises an exception if file does not have a erb-extension' do
26
26
  template_file = create_file('template')
27
-
28
- options = Options.new([template_file])
29
- expect { options.source }.to raise_error RuntimeError
27
+ expect { Options.new([template_file]) }.to raise_error Exceptions::TemplateNameIsInvalid
30
28
  end
31
29
  end
32
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filegen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -52,6 +52,7 @@ files:
52
52
  - config/rubocop-disabled.yml
53
53
  - config/rubocop-enabled.yml
54
54
  - cucumber.yml
55
+ - features/error_handling.feature
55
56
  - features/evaluate_template.feature
56
57
  - features/output_meta_data.feature
57
58
  - features/step_definitions.rb
@@ -67,6 +68,7 @@ files:
67
68
  - lib/filegen/exceptions.rb
68
69
  - lib/filegen/options.rb
69
70
  - lib/filegen/runner.rb
71
+ - lib/filegen/ui.rb
70
72
  - lib/filegen/version.rb
71
73
  - rubocop-todo.yml
72
74
  - scripts/terminal
@@ -109,6 +111,7 @@ specification_version: 3
109
111
  summary: This helper takes an erb template and provides access to environment variables
110
112
  and a yaml file within that template
111
113
  test_files:
114
+ - features/error_handling.feature
112
115
  - features/evaluate_template.feature
113
116
  - features/output_meta_data.feature
114
117
  - features/step_definitions.rb