letter_generator 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c473dc17224fb6aaede89b093c35c91f83b220b1
4
- data.tar.gz: bd846ebe3802e27ea4708b8477936ac63b806ecb
3
+ metadata.gz: 55d5ae0c7254e841009e0dd163e80202fa384d52
4
+ data.tar.gz: 4c5041205e6b05a46702591c19cde0cdbe5fae8b
5
5
  SHA512:
6
- metadata.gz: 4179d835309fcb34a5f015622d6378b30fb95268cc246b8f527794b7146d39f9b4e62752a2b4c264c9dcc40467073f07464cfcc5188acb367eaeb93c3172fa02
7
- data.tar.gz: 29540c7b8939df77b5dbb0bade7f5a8324f51074cdfd97f8d1405e13d5acf96564190f15e2506fcfe53db93090cd14f5e78ebe136d841a17ed8689d373e83e2f
6
+ metadata.gz: 9f653c799552e577574c641bbf2bcf4f41ef7eb5f1a52ad73ae5b292b1488264e42ffeba2e9a2ab4df18db32b7ae3eacf5123714aef292965177a90c0b03b378
7
+ data.tar.gz: e0018a17dae08777113de6f664419ed3d39dbf85dbd54c1775ea3dbb190cb38eba66a242b4622dbabcfbf6192ec8addc68a00fed895e0fb8f677b800255de2af
data/Gemfile.lock CHANGED
@@ -10,9 +10,10 @@ GIT
10
10
  PATH
11
11
  remote: .
12
12
  specs:
13
- letter_generator (0.0.4)
13
+ letter_generator (0.1.1)
14
14
  activesupport
15
15
  fedux_org-stdlib
16
+ rake
16
17
  thor
17
18
  tilt
18
19
 
@@ -55,9 +56,9 @@ GEM
55
56
  concord (0.1.5)
56
57
  adamantium (~> 0.2.0)
57
58
  equalizer (~> 0.0.9)
58
- coveralls (0.7.9)
59
+ coveralls (0.7.11)
59
60
  multi_json (~> 1.10)
60
- rest-client (~> 1.7)
61
+ rest-client (>= 1.6.8, < 2)
61
62
  simplecov (~> 0.9.1)
62
63
  term-ansicolor (~> 1.3)
63
64
  thor (~> 0.19.1)
@@ -73,8 +74,8 @@ GEM
73
74
  dotenv (1.0.2)
74
75
  equalizer (0.0.9)
75
76
  erubis (2.7.0)
76
- excon (0.44.2)
77
- fedux_org-stdlib (0.11.14)
77
+ excon (0.44.4)
78
+ fedux_org-stdlib (0.11.16)
78
79
  activesupport
79
80
  ffi (1.9.6)
80
81
  filegen (0.4.3)
@@ -87,8 +88,7 @@ GEM
87
88
  ruby-progressbar (~> 1.4)
88
89
  gherkin (2.12.2)
89
90
  multi_json (~> 1.3)
90
- github-markup (1.3.1)
91
- posix-spawn (~> 0.3.8)
91
+ github-markup (1.3.3)
92
92
  httparty (0.13.3)
93
93
  json (~> 1.8)
94
94
  multi_xml (>= 0.5.2)
@@ -103,11 +103,9 @@ GEM
103
103
  launchy (2.4.3)
104
104
  addressable (~> 2.3)
105
105
  libv8 (3.16.14.7)
106
- license_finder (1.2)
106
+ license_finder (2.0.1)
107
107
  bundler
108
108
  httparty
109
- sequel
110
- sqlite3
111
109
  thor
112
110
  xml-simple
113
111
  memoizable (0.4.2)
@@ -124,10 +122,10 @@ GEM
124
122
  equalizer (~> 0.0.9)
125
123
  ice_nine (~> 0.11.0)
126
124
  procto (~> 0.0.2)
127
- multi_json (1.10.1)
125
+ multi_json (1.11.0)
128
126
  multi_test (0.1.2)
129
127
  multi_xml (0.5.5)
130
- mutant (0.7.6)
128
+ mutant (0.7.8)
131
129
  abstract_type (~> 0.0.7)
132
130
  adamantium (~> 0.2.0)
133
131
  anima (~> 0.2.0)
@@ -142,14 +140,13 @@ GEM
142
140
  parser (~> 2.2.0.2)
143
141
  procto (~> 0.0.2)
144
142
  unparser (~> 0.2.2)
145
- mutant-rspec (0.7.6)
146
- mutant (~> 0.7.6)
147
- rspec-core (>= 3.0.0, < 3.2.0)
148
- netrc (0.10.2)
149
- parallel (1.3.4)
143
+ mutant-rspec (0.7.8)
144
+ mutant (~> 0.7.8)
145
+ rspec-core (>= 3.0.0, < 3.3.0)
146
+ netrc (0.10.3)
147
+ parallel (1.4.1)
150
148
  parser (2.2.0.3)
151
149
  ast (>= 1.1, < 3.0)
152
- posix-spawn (0.3.9)
153
150
  powerpack (0.1.0)
154
151
  procto (0.0.2)
155
152
  pry (0.10.1)
@@ -166,21 +163,22 @@ GEM
166
163
  rake (10.4.2)
167
164
  redcarpet (3.2.2)
168
165
  ref (1.0.5)
169
- rest-client (1.7.2)
166
+ rest-client (1.7.3)
170
167
  mime-types (>= 1.16, < 3.0)
171
168
  netrc (~> 0.7)
172
- rspec (3.1.0)
173
- rspec-core (~> 3.1.0)
174
- rspec-expectations (~> 3.1.0)
175
- rspec-mocks (~> 3.1.0)
176
- rspec-core (3.1.7)
177
- rspec-support (~> 3.1.0)
178
- rspec-expectations (3.1.2)
169
+ rspec (3.2.0)
170
+ rspec-core (~> 3.2.0)
171
+ rspec-expectations (~> 3.2.0)
172
+ rspec-mocks (~> 3.2.0)
173
+ rspec-core (3.2.1)
174
+ rspec-support (~> 3.2.0)
175
+ rspec-expectations (3.2.0)
179
176
  diff-lcs (>= 1.2.0, < 2.0)
180
- rspec-support (~> 3.1.0)
181
- rspec-mocks (3.1.3)
182
- rspec-support (~> 3.1.0)
183
- rspec-support (3.1.2)
177
+ rspec-support (~> 3.2.0)
178
+ rspec-mocks (3.2.1)
179
+ diff-lcs (>= 1.2.0, < 2.0)
180
+ rspec-support (~> 3.2.0)
181
+ rspec-support (3.2.2)
184
182
  rubocop (0.29.1)
185
183
  astrolabe (~> 1.3)
186
184
  parser (>= 2.2.0.1, < 3.0)
@@ -189,16 +187,14 @@ GEM
189
187
  ruby-progressbar (~> 1.4)
190
188
  ruby-progressbar (1.7.1)
191
189
  rugged (0.21.4)
192
- sequel (4.19.0)
193
- simplecov (0.9.1)
190
+ simplecov (0.9.2)
194
191
  docile (~> 1.1.0)
195
192
  multi_json (~> 1.0)
196
- simplecov-html (~> 0.8.0)
197
- simplecov-html (0.8.0)
193
+ simplecov-html (~> 0.9.0)
194
+ simplecov-html (0.9.0)
198
195
  slop (3.6.0)
199
196
  smart_colored (1.1.1)
200
197
  sparkr (0.4.1)
201
- sqlite3 (1.3.10)
202
198
  stackprof (0.2.7)
203
199
  term-ansicolor (1.3.0)
204
200
  tins (~> 1.0)
@@ -209,9 +205,9 @@ GEM
209
205
  therubyrhino_jar (>= 1.7.3)
210
206
  therubyrhino_jar (1.7.4)
211
207
  thor (0.19.1)
212
- thread_safe (0.3.4)
208
+ thread_safe (0.3.5)
213
209
  tilt (2.0.1)
214
- tins (1.3.4)
210
+ tins (1.3.5)
215
211
  tmrb (1.2.7)
216
212
  thor
217
213
  travis-lint (2.0.0)
@@ -228,7 +224,7 @@ GEM
228
224
  procto (~> 0.0.2)
229
225
  versionomy (0.4.4)
230
226
  blockenspiel (>= 0.4.5)
231
- xml-simple (1.1.4)
227
+ xml-simple (1.1.5)
232
228
  yard (0.8.7.6)
233
229
 
234
230
  PLATFORMS
data/README.md CHANGED
@@ -20,6 +20,9 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
+
24
+ ### Generate letter.tex
25
+
23
26
  To invoke the letter generator, you can use `lg` or `letter_generator`.
24
27
 
25
28
  You need to place an ERB-template at any of this places
@@ -58,7 +61,7 @@ Generate letter based on template:
58
61
  letter_generator generate
59
62
  ```
60
63
 
61
- After this a tex file named "letter.tex" exists.
64
+ After this a tex file named "letter-mina-muster.tex" exists.
62
65
 
63
66
  ## Contributing
64
67
 
@@ -0,0 +1,20 @@
1
+ Feature: Generate pdf Letter
2
+
3
+ Background:
4
+ Given the default letter template exist in working directory
5
+ And the data file "data" with:
6
+ """
7
+ from:
8
+ name: Max Mustermann
9
+ street: Musterstrasse 1
10
+ city: Musterstadt
11
+ to:
12
+ name: Hans im Glück
13
+ street: Gluecksstrasse 1
14
+ city: Glueckstadt
15
+ subject: Subject
16
+ """
17
+
18
+ Scenario: Non-existing pdf
19
+ When I successfully run `letter_generator build`
20
+ Then a file named "build/letter-hans-im-gluck.pdf" should exist
@@ -1,9 +1,64 @@
1
1
  Feature: Generate Letter
2
2
 
3
3
  Background:
4
- Given the default letter template
4
+ Given the default letter template exist in working directory
5
+ And the data file "data" with:
6
+ """
7
+ from:
8
+ name: Max Mustermann
9
+ street: Musterstrasse 1
10
+ city: Musterstadt
11
+ to:
12
+ name: Hans im Glück
13
+ street: Gluecksstrasse 1
14
+ city: Glueckstadt
15
+ subject: Subject
16
+ """
5
17
 
6
18
  Scenario: Non-existing letter
7
19
  Given a letter named "letter" does not exist
8
20
  When I successfully run `letter_generator generate`
9
- Then a letter named "letter" should exist
21
+ Then a letter named "letter-hans-im-gluck" should exist
22
+
23
+ Scenario: Template in current working directory
24
+ Given a letter named "letter" does not exist
25
+ And a local letter template named "letter" with:
26
+ """
27
+ Hello world
28
+ """
29
+ When I successfully run `letter_generator generate`
30
+ Then the letter "letter-hans-im-gluck" should contain:
31
+ """
32
+ Hello world
33
+ """
34
+
35
+ Scenario: Multiple addressees
36
+ Given a letter named "letter" does not exist
37
+ And the data file "data" with:
38
+ """
39
+ from:
40
+ name: Max Mustermann
41
+ street: Musterstrasse 1
42
+ city: Musterstadt
43
+ to:
44
+ - name: Hans im Glück
45
+ street: Gluecksstrasse 1
46
+ city: Glueckstadt
47
+ - name: Maxi Mustermann
48
+ street: Gluecksstrasse 2
49
+ city: Glueckstadt
50
+ subject: Subject
51
+ """
52
+ And a local letter template named "letter" with:
53
+ """
54
+ <%= to.name %>
55
+ """
56
+ When I successfully run `letter_generator generate`
57
+ Then the letter "letter-hans-im-gluck" should contain:
58
+ """
59
+ Hans im Glück
60
+ """
61
+ And the letter "letter-maxi-mustermann" should contain:
62
+ """
63
+ Maxi Mustermann
64
+ """
@@ -1,12 +1,13 @@
1
1
  Feature: Init generator
2
2
 
3
- Background:
4
- Given the default letter template
3
+ #Background:
4
+ # Given the default letter template
5
5
 
6
- Scenario: Non-existing files
6
+ Scenario: Init local directory
7
7
  Given a data file named "data" does not exist
8
8
  When I successfully run `letter_generator init`
9
- Then a data file named "data" should contain:
9
+ Then the local letter template "letter" should exist
10
+ Then the data file "data" should contain:
10
11
  """
11
12
  from:
12
13
  name:
@@ -18,3 +19,18 @@ Feature: Init generator
18
19
  city:
19
20
  subject:
20
21
  """
22
+
23
+ Scenario: Init user directory
24
+ Given a data file named "data" does not exist
25
+ When I successfully run `letter_generator init --for user`
26
+ Then the user letter template "letter" should exist
27
+
28
+ Scenario: Init working directory (default)
29
+ Given a data file named "data" does not exist
30
+ When I successfully run `letter_generator init --for working-directory`
31
+ Then the local letter template "letter" should exist
32
+
33
+ Scenario: Init working directory (explicit)
34
+ Given a data file named "data" does not exist
35
+ When I successfully run `letter_generator init --for working-directory`
36
+ Then the local letter template "letter" should exist
@@ -1,3 +1,39 @@
1
+ Before do
2
+ @aruba_timeout_seconds = 120
3
+ step 'a valid pry configuration file'
4
+ step 'a mocked home directory'
5
+ end
6
+
7
+ Given(/^a valid pry configuration file$/) do
8
+ ENV['PRYRC'] = File.join(ENV['HOME'], '.pryrc')
9
+ end
10
+
11
+ # Clean environment
12
+ Around do |_, block|
13
+ old_env = ENV.to_h
14
+ block.call
15
+ ENV.replace old_env
16
+ end
17
+
18
+ When(/^I start debugging/) do
19
+ # rubocop:disable Lint/Debugger
20
+ require 'pry'
21
+ binding.pry
22
+ # rubocop:enable Lint/Debugger
23
+
24
+ ''
25
+ end
26
+
27
+ When(/^I run `([^`]+)` in debug mode$/) do |cmd|
28
+ in_current_dir do
29
+ # rubocop:disable Lint/Debugger
30
+ require 'pry'
31
+ binding.pry
32
+ # rubocop:enable Lint/Debugger
33
+ system(cmd)
34
+ end
35
+ end
36
+
1
37
  Given(/^a letter named "(.*?)" does not exist$/) do |name|
2
38
  in_current_dir do
3
39
  FileUtils.rm_f name
@@ -8,6 +44,14 @@ Then(/^a letter named "(.*?)" should exist$/) do |name|
8
44
  step %(a file named "#{name}.tex" should exist)
9
45
  end
10
46
 
47
+ Given(/^the data file "(.*?)" with:$/) do |name, string|
48
+ step %(a file named "#{name}.yaml" with:), string
49
+ end
50
+
51
+ Given(/^the default letter template exist in working directory$/) do
52
+ step %(a local letter template named "letter" with:), File.read(File.expand_path('../../templates/letter.tex.tt', __FILE__))
53
+ end
54
+
11
55
  Given(/^the default letter template$/) do
12
56
  step %(a letter template named "letter" with:), File.read(File.expand_path('../../templates/letter.tex.tt', __FILE__))
13
57
  end
@@ -16,6 +60,10 @@ Given(/^a letter template named "(.*?)" with:$/) do |name, string|
16
60
  step %(a file named "~/.config/letter_generator/templates/#{name}.tex.tt" with:), string
17
61
  end
18
62
 
63
+ Given(/^a local letter template named "(.*?)" with:$/) do |name, string|
64
+ step %(a file named "templates/#{name}.tex.tt" with:), string
65
+ end
66
+
19
67
  Given(/^a config file named "(.*?)" with:$/) do |name, string|
20
68
  step %(a file named "~/.config/letter_generator/#{name}" with:), string
21
69
  end
@@ -24,6 +72,18 @@ Given(/^a data file named "(.*?)" does not exist$/) do |name|
24
72
  in_current_dir { FileUtils.rm_f File.expand_path("#{name}.yaml") }
25
73
  end
26
74
 
27
- Then(/^a data file named "(.*?)" should contain:$/) do |name, string|
75
+ Then(/^the data file "(.*?)" should contain:$/) do |name, string|
28
76
  step %(the file "#{name}.yaml" should contain:), string
29
77
  end
78
+
79
+ Then(/^the letter "(.*?)" should contain:$/) do |name, string|
80
+ step %(the file "#{name}.tex" should contain:), string
81
+ end
82
+
83
+ Then(/^the local letter template "(.*?)" should exist$/) do |name|
84
+ step %(a file named "templates/#{name}.tex.tt" should exist)
85
+ end
86
+
87
+ Then(/^the user letter template "(.*?)" should exist$/) do |name|
88
+ step %(a file named "~/.config/letter_generator/templates/#{name}.tex.tt" should exist)
89
+ end
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency 'activesupport'
24
24
  spec.add_runtime_dependency 'tilt'
25
25
  spec.add_runtime_dependency 'fedux_org-stdlib'
26
+ spec.add_runtime_dependency 'rake'
26
27
  end
@@ -1,21 +1,36 @@
1
1
  require 'thor'
2
2
  require 'thor/actions'
3
+ require 'thor/group'
3
4
  require 'tilt'
4
5
  require 'psych'
6
+ require 'rake/file_list'
5
7
  require 'active_support'
6
8
  require 'active_support/core_ext'
7
9
  require 'fedux_org_stdlib/file_template'
10
+ require 'fedux_org_stdlib/directory_finder'
8
11
  require 'fedux_org_stdlib/app_config'
9
12
  require 'fedux_org_stdlib/logging/logger'
13
+ require 'fedux_org_stdlib/core_ext/string/characterize'
10
14
 
15
+ require 'letter_generator/generators/tex_file_generator'
16
+ require 'letter_generator/templates_directory'
11
17
  require 'letter_generator/letter_template'
12
18
  require 'letter_generator/logger'
13
19
  require 'letter_generator/application_config'
14
20
  require 'letter_generator/main'
21
+
22
+ LetterGenerator.enable_debug_mode if ENV.key? 'DEBUG'
23
+
15
24
  require 'letter_generator/version'
16
25
  require 'letter_generator/logger'
26
+ require 'letter_generator/sender'
27
+ require 'letter_generator/addressee'
28
+ require 'letter_generator/output_file'
29
+ require 'letter_generator/metadata_file'
30
+ require 'letter_generator/metadata_parser'
31
+ require 'letter_generator/metadata_proxy'
17
32
  require 'letter_generator/generator'
18
- require 'letter_generator/letter_content'
33
+ require 'letter_generator/metadata'
19
34
  require 'letter_generator/runner'
20
35
 
21
36
  module LetterGenerator
@@ -0,0 +1,13 @@
1
+ module LetterGenerator
2
+ class Addressee
3
+ attr_reader :data
4
+
5
+ def initialize(data)
6
+ @data = Hash(data)
7
+ end
8
+
9
+ def method_missing(*args)
10
+ data[args.flatten.first.to_sym]
11
+ end
12
+ end
13
+ end
@@ -2,6 +2,8 @@ module LetterGenerator
2
2
  class ApplicationConfig < FeduxOrgStdlib::AppConfig
3
3
  option :template, LetterTemplate.new.file
4
4
  option :debugging_libraries, %w(pry byebug)
5
+ option :debug_mode, false
6
+ option :templates_directory, TemplatesDirectory.new.directory
5
7
 
6
8
  def _application_name
7
9
  'letter_generator'
@@ -10,8 +10,14 @@ module LetterGenerator
10
10
  @template = Tilt::ErubisTemplate.new(template_file)
11
11
  end
12
12
 
13
- def run(data, file)
14
- File.write(file, template.render(data))
13
+ def run(metadata, file)
14
+ metadata.to.each do |addressee|
15
+ path = file.path_for(addressee.name)
16
+ content = template.render(MetadataProxy.new(addressee, metadata))
17
+
18
+ FileUtils.mkdir_p(File.dirname(path))
19
+ File.write(path, content)
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -0,0 +1,26 @@
1
+ module LetterGenerator
2
+ module Generators
3
+ class TexFileGenerator < Thor::Group
4
+ include Thor::Actions
5
+
6
+ def self.exit_on_failure?
7
+ true
8
+ end
9
+
10
+ class_option :output_file, required: true, desc: 'Outputfile'
11
+ argument :input_file, required: true
12
+
13
+ def generate
14
+ metadata_file = MetadataFile.new
15
+
16
+ metadata_parser = MetadataParser.new
17
+ metadata = metadata_parser.parse(metadata_file.path)
18
+
19
+ output_file = OutputFile.new(options[:output_file])
20
+
21
+ generator = Generator.new(input_file)
22
+ generator.run(metadata, output_file)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,4 +1,7 @@
1
1
  module LetterGenerator
2
2
  class LetterTemplate < FeduxOrgStdlib::FileTemplate
3
+ def fallback_template_directory
4
+ File.expand_path('../../../templates', __FILE__)
5
+ end
3
6
  end
4
7
  end
@@ -1,29 +1,21 @@
1
1
  module LetterGenerator
2
- class LetterContent
2
+ class Metadata
3
3
  private
4
4
 
5
5
  attr_reader :data
6
6
 
7
7
  public
8
8
 
9
- def initialize
10
- file = Dir.glob(File.expand_path('*.yaml')).first
11
-
12
- if file
13
- @data = Psych.load_file(file).deep_symbolize_keys
14
- else
15
- @data = {}
16
- end
17
- rescue
18
- @data = {}
9
+ def initialize(data)
10
+ @data = data
19
11
  end
20
12
 
21
13
  def from
22
- @from ||= OpenStruct.new(data[:from])
14
+ @from ||= Sender.new(data[:from])
23
15
  end
24
16
 
25
17
  def to
26
- @to ||= OpenStruct.new(data[:to])
18
+ @to ||= [data[:to]].flatten.map { |t| Addressee.new(t) }
27
19
  end
28
20
 
29
21
  def opening
@@ -0,0 +1,9 @@
1
+ module LetterGenerator
2
+ class MetadataFile
3
+ attr_reader :path
4
+
5
+ def initialize(path = Dir.glob(File.expand_path('*.yaml')).first)
6
+ @path = path
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module LetterGenerator
2
+ class MetadataParser
3
+ def parse(file)
4
+ if file
5
+ data = Psych.load_file(file).deep_symbolize_keys
6
+ else
7
+ data = {}
8
+ end
9
+
10
+ Metadata.new(**data)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module LetterGenerator
2
+ class MetadataProxy < Delegator
3
+ attr_reader :to
4
+
5
+ def initialize(to, obj)
6
+ @to = to
7
+ @delegate_sd_obj = obj
8
+ end
9
+
10
+ def __getobj__
11
+ @delegate_sd_obj
12
+ end
13
+
14
+ def __setobj__(obj)
15
+ @delegate_sd_obj = obj
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,17 @@
1
+ module LetterGenerator
2
+ class OutputFile
3
+ private
4
+
5
+ attr_reader :template
6
+
7
+ public
8
+
9
+ def initialize(template)
10
+ @template = Tilt::ErubisTemplate.new{ template }
11
+ end
12
+
13
+ def path_for(object)
14
+ Pathname.new(File.expand_path(template.render(object.to_s.characterize)))
15
+ end
16
+ end
17
+ end
@@ -6,21 +6,57 @@ module LetterGenerator
6
6
  true
7
7
  end
8
8
 
9
- option :output_file, default: 'letter.tex', desc: 'Outputfile'
9
+ class_option :debug_mode, type: :boolean, default: LetterGenerator.config.debug_mode, desc: 'Enabled debug mode'
10
10
 
11
+ option :output_file, default: 'letter-<%= to_s %>.tex', desc: 'Outputfile'
11
12
  desc 'generate', 'Generate template'
12
13
  def generate
13
- content = LetterContent.new
14
- template = LetterTemplate.new
14
+ enable_debug_mode
15
15
 
16
- generator = Generator.new(template.file)
17
- generator.run(content, options[:output_file])
16
+ invoke 'letter_generator:generators:tex_file_generator', [LetterTemplate.new.file], output_file: options[:output_file]
18
17
  end
19
18
 
20
- desc 'init', 'Init local directory'
19
+ option :build_directory, default: 'build', desc: 'Build directory'
20
+ desc 'build', 'Build letter'
21
+ def build
22
+ enable_debug_mode
23
+
24
+ invoke :generate, [], output_file: File.join(options[:build_directory], 'letter-<%= to_s %>.tex')
25
+
26
+ Dir.chdir File.expand_path(options[:build_directory]) do
27
+ Rake::FileList.new('*.tex').each do |f|
28
+ run %(pdflatex #{f})
29
+ end
30
+ end
31
+ end
32
+
33
+ desc 'init', 'Init configuration'
34
+ option :for, default: 'working-directory', enum: %(user working-directory), desc: 'Initialize user configuration'
21
35
  def init
36
+ enable_debug_mode
37
+
22
38
  source_paths << File.expand_path('../../../templates', __FILE__)
23
- template 'data', File.expand_path('data.yaml')
39
+ letter_template = LetterTemplate.new
40
+
41
+ template_path = File.expand_path(File.join('templates', File.basename(letter_template.file)))
42
+
43
+ case options[:for].to_s.to_sym
44
+ when :user || :u
45
+ copy_file letter_template.file, File.join(File.dirname(LetterGenerator.config.preferred_configuration_file), 'templates', File.basename(letter_template.file))
46
+ when :'working-directory' || :wd
47
+
48
+ template 'data', File.expand_path('data.yaml')
49
+ copy_file letter_template.file, template_path
50
+ else
51
+ fail ArgumentError, "#{options[:for]} is not a valid value for \"for\"."
52
+ end
53
+ end
54
+
55
+ no_commands do
56
+ # Enable debug mode
57
+ def enable_debug_mode
58
+ LetterGenerator.enable_debug_mode if options[:debug_mode] == true
59
+ end
24
60
  end
25
61
  end
26
62
  end
@@ -0,0 +1,13 @@
1
+ module LetterGenerator
2
+ class Sender
3
+ attr_reader :data
4
+
5
+ def initialize(data)
6
+ @data = Hash(data)
7
+ end
8
+
9
+ def method_missing(*args)
10
+ data[args.flatten.first.to_sym]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module LetterGenerator
2
+ class TemplatesDirectory < FeduxOrgStdlib::DirectoryFinder
3
+ end
4
+ end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  # LetterGenerator
3
3
  module LetterGenerator
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -0,0 +1,11 @@
1
+ template_files = Rake::FileList.new('*.tt')
2
+ tex_files = template_files.ext 'tex'
3
+ pdf_files = tex_files.ext 'pdf'
4
+
5
+ rule pdf_files => tex_files do |t|
6
+ sh %(pdflatex #{t.source})
7
+ end
8
+
9
+ rule tex_files => template_files do |t|
10
+ Generators::TexFileGenerator.invoke(t.source, output_files: t.name)
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: letter_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Meyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-14 00:00:00.000000000 Z
11
+ date: 2015-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description:
84
98
  email:
85
99
  - dev@fedux.org
@@ -102,6 +116,7 @@ files:
102
116
  - bin/letter_generator
103
117
  - bin/lg
104
118
  - cucumber.yml
119
+ - features/build_letter.feature
105
120
  - features/generate_letter.feature
106
121
  - features/init_generator.feature
107
122
  - features/step_definitions.rb
@@ -111,19 +126,28 @@ files:
111
126
  - features/support/reporting.rb
112
127
  - letter_generator.gemspec
113
128
  - lib/letter_generator.rb
129
+ - lib/letter_generator/addressee.rb
114
130
  - lib/letter_generator/application_config.rb
115
131
  - lib/letter_generator/generate.rb
116
132
  - lib/letter_generator/generator.rb
117
- - lib/letter_generator/letter_content.rb
133
+ - lib/letter_generator/generators/tex_file_generator.rb
118
134
  - lib/letter_generator/letter_template.rb
119
135
  - lib/letter_generator/logger.rb
120
136
  - lib/letter_generator/main.rb
137
+ - lib/letter_generator/metadata.rb
138
+ - lib/letter_generator/metadata_file.rb
139
+ - lib/letter_generator/metadata_parser.rb
140
+ - lib/letter_generator/metadata_proxy.rb
141
+ - lib/letter_generator/output_file.rb
121
142
  - lib/letter_generator/runner.rb
143
+ - lib/letter_generator/sender.rb
144
+ - lib/letter_generator/templates_directory.rb
122
145
  - lib/letter_generator/version.rb
123
146
  - spec/support/aruba.rb
124
147
  - spec/support/reporting.rb
125
148
  - spec/support/rspec.rb
126
149
  - spec/support/string.rb
150
+ - templates/Rakefile.tt
127
151
  - templates/data.tt
128
152
  - templates/letter.tex.tt
129
153
  homepage: https://github.com/maxmeyer/letter_generator
@@ -151,6 +175,7 @@ signing_key:
151
175
  specification_version: 4
152
176
  summary: Generate letters
153
177
  test_files:
178
+ - features/build_letter.feature
154
179
  - features/generate_letter.feature
155
180
  - features/init_generator.feature
156
181
  - features/step_definitions.rb