cvgen 0.0.2 → 0.0.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cvgen/exec.rb +55 -9
  3. data/lib/cvgen.rb +18 -0
  4. metadata +31 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 91f4620cf7dde44d7b55790837316abd7304647b
4
- data.tar.gz: f6e41ba0cfbec0135aa66ce706bb9776c06d0dba
3
+ metadata.gz: 18022dda5028a3a2ab5a1bf085040bc307ab6c26
4
+ data.tar.gz: c98151f8b89d41abd3d001ea7a72c5d9eaa12c47
5
5
  SHA512:
6
- metadata.gz: f114beeb8b9f943551f1e1a691ac9ffe1d204c003ba4ee53e4816e8d778b09f3b667dec117c27d4db78e17ccdfb63aa9367d6c9b12f6ad9de67ed75c8e48ceb1
7
- data.tar.gz: 67d18f368dd391236e22b2ce26f850f12a35438caba55069e7609a58c04f8ea79167b212201bc24e6800d113a35756a2f3d2b57800b325e4bfc4a18f0235e15b
6
+ metadata.gz: 7d764de95524cbac896e7853e9059b861290febb9b9b76d5afa341eb4095fb1e828374870d1d838298827f96d9f78205c1225c28ecdd661658ccd39390029d08
7
+ data.tar.gz: cd2df1f140864eb9b867c2b806a21b839a5f7af8c6bc4126ff242606d93394ddcd12faa82429e8c1190d6ade3972264f6382b69a7c9aba5e2296eb898802f4bd
data/lib/cvgen/exec.rb CHANGED
@@ -1,26 +1,72 @@
1
1
  require 'cvgen'
2
2
  require 'yaml'
3
+ require 'optparse'
3
4
 
4
5
  module CVGen
5
6
  module Exec
6
7
 
7
8
  def self.call
8
- input = ARGF.read
9
+ config = parse_command_line_args
10
+ watch = config.delete('watch')
9
11
 
10
- config = {}
11
- config.merge!(YAML.load_file('config.yml')) if File.exist? 'config.yml'
12
+ input_file, output_file = ARGV[0], ARGV[1]
13
+
14
+ create_output(input_file, output_file, config)
15
+
16
+ if watch
17
+ trap(:INT) { exit }
18
+
19
+ require 'listen'
20
+ Listen.to('.', :only => Regexp.new(input_file)) do |modified, added, removed|
21
+ #assume the only possibility is modification of source file
22
+ create_output(input_file, output_file, config)
23
+ end.start
24
+
25
+ puts 'Listening for changes, Ctrl-C to exit'
26
+ sleep
27
+ end
28
+ end
29
+
30
+ def self.create_output(input_file, output_file, config)
31
+ input = File.read(input_file)
32
+ merge_options(config, YAML.load_file('config.yml')) if File.exist? 'config.yml'
12
33
 
13
34
  if input.start_with? "---\n"
14
- front, input = input.split /(?<=\.{3}\n)/, 2
15
- config.merge!(YAML.load front)
35
+ input.slice!(0..3)
36
+ front, input = input.split /^(?:\.{3}|-{3})\s*$/, 2
37
+
38
+ front = YAML.load(front)
39
+
40
+ merge_options(config, front)
16
41
  end
17
42
 
18
- out = CVGen.generate input, config
43
+ pdf_data = CVGen.generate input, config
44
+ IO.binwrite(output_file, pdf_data)
45
+ end
19
46
 
20
- $stdout.write out
47
+ def self.merge_options(into, from)
48
+ if into[FEATURES_OPTION] && from[FEATURES_OPTION]
49
+ into[FEATURES_OPTION].concat(from.delete(FEATURES_OPTION))
50
+ end
21
51
 
52
+ into.merge!(from)
22
53
  end
23
54
 
24
- end
55
+ def self.parse_command_line_args
56
+ config = {}
57
+
58
+ OptionParser.new do |opts|
59
+ opts.on("-e", "--enable FEATURES", Array, "List of features to enable") do |features|
60
+ config[FEATURES_OPTION] = features
61
+ end
25
62
 
26
- end
63
+ opts.on("-w", "--watch", "Watch for changes and automatically regenerate pdf") do
64
+ config['watch'] = true
65
+ end
66
+ end.parse!
67
+
68
+ config
69
+ end
70
+
71
+ end
72
+ end
data/lib/cvgen.rb CHANGED
@@ -1,9 +1,16 @@
1
1
  require 'cvgen/parser'
2
2
  require 'cvgen/converter'
3
3
 
4
+ require 'erubis'
5
+
4
6
  module CVGen
5
7
 
8
+ FEATURES_OPTION = 'features'.freeze
9
+
6
10
  def self.generate source, opts={}
11
+
12
+ source = Erubis::Eruby.new(source).evaluate(ErbContext.new(opts.fetch(FEATURES_OPTION, [])))
13
+
7
14
  root, warnings = Parser.parse(source, opts)
8
15
  $stderr.puts warnings if warnings
9
16
  output, c_warnings = Converter.convert(root, opts)
@@ -11,4 +18,15 @@ module CVGen
11
18
  output
12
19
  end
13
20
 
21
+ class ErbContext < BasicObject
22
+
23
+ def initialize(features)
24
+ @features = features
25
+ end
26
+
27
+ def method_missing(method, *args)
28
+ @features.include?(method.to_s)
29
+ end
30
+
31
+ end
14
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cvgen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Wildig
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-10 00:00:00.000000000 Z
11
+ date: 2015-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: erubis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: listen
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.8'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.8'
55
83
  description: Because everybody hates word processors
56
84
  email: matt@mattwildig.co.uk
57
85
  executables:
@@ -83,9 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
111
  version: '0'
84
112
  requirements: []
85
113
  rubyforge_project:
86
- rubygems_version: 2.4.2
114
+ rubygems_version: 2.4.5
87
115
  signing_key:
88
116
  specification_version: 4
89
117
  summary: Generate CVs in PDF format from Markdown-like source
90
118
  test_files: []
91
- has_rdoc: