templater 0.2 → 0.2.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.
data/Rakefile CHANGED
@@ -14,6 +14,19 @@ HOMEPAGE = "http://templater.rubyforge.org/"
14
14
  SUMMARY = "File generation system"
15
15
 
16
16
 
17
+ # Used by release task
18
+ RUBY_FORGE_PROJECT = "templater"
19
+ GEM_NAME = NAME
20
+ PROJECT_URL = HOMEPAGE
21
+ PROJECT_SUMMARY = SUMMARY
22
+ PROJECT_DESCRIPTION = SUMMARY
23
+
24
+ PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
25
+ GEM_VERSION = Templater::VERSION + PKG_BUILD
26
+ RELEASE_NAME = "REL #{GEM_VERSION}"
27
+
28
+ require "extlib/tasks/release"
29
+
17
30
  #
18
31
  # ==== Gemspec and installation
19
32
  #
@@ -124,7 +137,6 @@ namespace :spec do
124
137
  t.spec_opts = ["--format", "html:doc/reports/specs.html"]
125
138
  t.fail_on_error = false
126
139
  end
127
-
128
140
  end
129
141
 
130
142
  desc 'Default: run unit tests.'
@@ -16,12 +16,12 @@ module Templater
16
16
  self.options = options
17
17
  end
18
18
 
19
- # Returns the contents of the source file as a String
19
+ # Returns an empty String: there's nothing to read from.
20
20
  #
21
21
  # === Returns
22
22
  # String:: The source file.
23
23
  def render
24
- ::File.read(source)
24
+ ''
25
25
  end
26
26
 
27
27
  # Checks if the destination file already exists.
@@ -42,9 +42,9 @@ module Templater
42
42
 
43
43
  # Renders the template and copies it to the destination.
44
44
  def invoke!
45
- @generator.send(@options[:before], self) if @options[:before]
45
+ callback(:before)
46
46
  ::FileUtils.mkdir_p(destination)
47
- @generator.send(@options[:after], self) if @options[:after]
47
+ callback(:after)
48
48
  end
49
49
 
50
50
  # removes the destination file
@@ -44,10 +44,10 @@ module Templater
44
44
 
45
45
  # Renders the template and copies it to the destination.
46
46
  def invoke!
47
- @generator.send(@options[:before], self) if @options[:before]
47
+ callback(:before)
48
48
  ::FileUtils.mkdir_p(::File.dirname(destination))
49
49
  ::File.open(destination, 'w') {|f| f.write render }
50
- @generator.send(@options[:after], self) if @options[:after]
50
+ callback(:after)
51
51
  end
52
52
 
53
53
  # removes the destination file
@@ -44,6 +44,23 @@ module Templater
44
44
  end
45
45
  end
46
46
 
47
+ def extract(argument)
48
+ case options[:as]
49
+ when :hash
50
+ if argument.is_a?(String)
51
+ return argument.split(',').inject({}) do |h, pair|
52
+ key, value = pair.split(':')
53
+ raise Templater::MalformattedArgumentError, "Expected '#{argument.inspect}' to be a key/value pair" unless key and value
54
+ h[key] = value
55
+ h
56
+ end
57
+ end
58
+ when :array
59
+ return argument.split(',') if argument.is_a?(String)
60
+ end
61
+ return argument
62
+ end
63
+
47
64
  end
48
65
 
49
66
  class InvocationDescription < Description
@@ -401,14 +401,16 @@ module Templater
401
401
  @options[option.name] ||= option.options[:default]
402
402
  end
403
403
 
404
- extract_arguments(*args)
404
+ args.each_with_index do |arg, n|
405
+ set_argument(n, arg)
406
+ end
405
407
 
406
- # Initialize arguments to their default values.
407
408
  self.class.arguments.each_with_index do |argument, i|
409
+ # Initialize arguments to their default values.
408
410
  @arguments[i] ||= argument.options[:default]
411
+ # Check if all arguments are valid.
412
+ argument.valid?(@arguments[i])
409
413
  end
410
-
411
- valid_arguments?
412
414
  end
413
415
 
414
416
  # Finds and returns the template of the given name. If that template's options don't match the generator
@@ -538,7 +540,12 @@ module Templater
538
540
  protected
539
541
 
540
542
  def set_argument(n, value)
541
- self.class.arguments[n].valid?(value)
543
+ expected = self.class.arguments[n]
544
+ raise Templater::TooManyArgumentsError, "This generator does not take this many Arguments" if expected.nil?
545
+
546
+ value = expected.extract(value)
547
+
548
+ expected.valid?(value)
542
549
  @arguments[n] = value
543
550
  end
544
551
 
@@ -559,45 +566,7 @@ module Templater
559
566
  key.to_sym.in?(Templater::ACTION_RESERVED_OPTIONS) or self.send(key) == value
560
567
  end
561
568
  end
562
-
563
- def valid_arguments?
564
- self.class.arguments.each_with_index do |arg, i|
565
- arg.valid?(@arguments[i])
566
- end
567
- end
568
569
 
569
- # from a list of arguments, walk through that list and assign it to this generator, taking into account
570
- # that an argument could be a hash or array that consumes the remaining arguments.
571
- def extract_arguments(*args)
572
- args.each_with_index do |arg, i|
573
- expected = self.class.arguments[i]
574
- raise Templater::TooManyArgumentsError, "This generator does not take this many Arguments" if expected.nil?
575
-
576
- # When one of the arguments has :as set to :hash or :list, the remaining arguments should be consumed
577
- # and converted to a Hash or an Array respectively
578
- case expected.options[:as]
579
- when :hash
580
- if arg.is_a?(String)
581
- pairs = args[i..-1]
582
-
583
- hash = pairs.inject({}) do |h, pair|
584
- key, value = pair.split(':')
585
- raise Templater::MalformattedArgumentError, "Expected '#{arg.inspect}' to be a key/value pair" unless key and value
586
- h[key] = value
587
- h
588
- end
589
-
590
- set_argument(i, hash) and return
591
- else
592
- set_argument(i, arg)
593
- end
594
- when :array
595
- set_argument(i, args[i..-1].flatten) and return
596
- else
597
- set_argument(i, arg)
598
- end
599
- end
600
- end
601
570
  end
602
571
 
603
572
  end
data/lib/templater.rb CHANGED
@@ -42,6 +42,6 @@ module Templater
42
42
  class MalformattedArgumentError < ArgumentError #:nodoc:
43
43
  end
44
44
 
45
- VERSION = '0.2'
45
+ VERSION = '0.2.1'
46
46
 
47
47
  end
@@ -1,5 +1,5 @@
1
- require File.dirname(__FILE__) / '..' / 'spec_helper'
2
-
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
3
  describe Templater::Actions::EmptyDirectory do
4
4
 
5
5
  before do
@@ -29,7 +29,10 @@ describe Templater::Actions::EmptyDirectory do
29
29
  end
30
30
 
31
31
  describe '#render' do
32
- it 'does nothing for empty directories?'
32
+ it 'should return an empty string' do
33
+ file = Templater::Actions::EmptyDirectory.new(@generator, :monkey, '/path/to/destination')
34
+ file.render.should == ''
35
+ end
33
36
  end
34
37
 
35
38
  describe '#exists?' do
@@ -102,4 +105,4 @@ describe Templater::Actions::EmptyDirectory do
102
105
  end
103
106
  end
104
107
 
105
- end
108
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) / '..' / 'spec_helper'
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe Templater::Actions::File do
4
4
 
@@ -109,4 +109,4 @@ describe Templater::Actions::File do
109
109
  end
110
110
  end
111
111
 
112
- end
112
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) / '..' / 'spec_helper'
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe Templater::Actions::Template do
4
4
 
@@ -138,4 +138,4 @@ describe Templater::Actions::Template do
138
138
  end
139
139
  end
140
140
 
141
- end
141
+ end
@@ -160,8 +160,8 @@ describe Templater::Generator, '.argument as array' do
160
160
  instance.llama[0].should == 'test'
161
161
  end
162
162
 
163
- it "should consume the remaining arguments and convert them to an array" do
164
- instance = @generator_class.new('/tmp', {}, 'a monkey', 'test', 'silver', 'river')
163
+ it "should split the remaining arguments by comma and convert them to an array" do
164
+ instance = @generator_class.new('/tmp', {}, 'a monkey', 'test,silver,river')
165
165
  instance.llama[0].should == 'test'
166
166
  instance.llama[1].should == 'silver'
167
167
  instance.llama[2].should == 'river'
@@ -197,15 +197,15 @@ describe Templater::Generator, '.argument as hash' do
197
197
  instance.llama['test'].should == 'unit'
198
198
  end
199
199
 
200
- it "should consume the remaining arguments and convert them to a hash if they are key/value pairs" do
201
- instance = @generator_class.new('/tmp', {}, 'a monkey', 'test:unit', 'john:silver', 'river:road')
200
+ it "should split by comma and convert them to a hash if they are key/value pairs" do
201
+ instance = @generator_class.new('/tmp', {}, 'a monkey', 'test:unit,john:silver,river:road')
202
202
  instance.llama['test'].should == 'unit'
203
203
  instance.llama['john'].should == 'silver'
204
204
  instance.llama['river'].should == 'road'
205
205
  end
206
206
 
207
207
  it "should raise an error if one of the remaining arguments is not a key/value pair" do
208
- lambda { @generator_class.new('/tmp', {}, 'a monkey', 'a:llama', 'duck:llama', 'not_a_pair', 'pair:blah') }.should raise_error(Templater::MalformattedArgumentError)
208
+ lambda { @generator_class.new('/tmp', {}, 'a monkey', 'a:llama,duck:llama,not_a_pair,pair:blah') }.should raise_error(Templater::MalformattedArgumentError)
209
209
  end
210
210
 
211
211
  it "should raise error if the argument is neither a hash nor a key/value pair" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: templater
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
@@ -9,7 +9,7 @@ autorequire: templater
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-09 00:00:00 +03:00
12
+ date: 2008-09-28 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -103,9 +103,6 @@ files:
103
103
  - spec/results
104
104
  - spec/results/erb.rbs
105
105
  - spec/results/file.rbs
106
- - spec/results/path
107
- - spec/results/path/to
108
- - spec/results/path/to/subdir
109
106
  - spec/results/random.rbs
110
107
  - spec/results/simple_erb.rbs
111
108
  - spec/spec_helper.rb