tesler 0.2.6 → 0.2.7

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.
@@ -1,81 +1,81 @@
1
- module Tesler
2
- # This the class which receives the DSL commands.
3
- class Copier
4
- include Tesler::Operators::Base
5
- include Tesler::Operators::Logger
6
- include Tesler::Operators::Run
7
-
8
- def initialize(directory_name)
9
- @directory_name = directory_name
10
- self.as(Tesler::Config.operator).set_directory(@directory_name)
11
- end
12
-
13
- # Method called by the DSL method 'copy'
14
- def copy(file_name, options={})
15
- filename = file_name.tesler
16
- if not Tesler::Config.source_directory.blank?
17
- filename = "#{Tesler::Config.source_directory}/#{filename}"
18
- end
19
-
20
- # if the file's name contains a star, then it is considered as a regular expression
21
- if filename.include? "*"
22
- regexp_copy(filename, options)
23
-
24
- # the file's name is not a regular expression, so we copy it directly
25
- else
26
- direct_copy(filename, options)
27
- end
28
- end
29
-
30
- # This method create a sub-directory
31
- def directory(directory_name, &block)
32
- copier = Copier.new("#{@directory_name}/#{directory_name}")
33
- copier.instance_eval(&block)
34
- end
35
-
36
- # Method called by the DSL method 'directory'
37
- def self.directory(directory_name, &block)
38
- copier = Copier.new(directory_name)
39
- copier.instance_eval(&block)
40
- end
41
-
42
- private
43
-
44
- # Analyses a regular expression and generate the list of file to copy
45
- def regexp_copy(filename, options)
46
- dirname = File.dirname(filename)
47
- basename = File.basename(filename)
48
-
49
- # generation of the ruby regexp corresponding to the file regexp
50
- r = Regexp.new('^' + basename.gsub(/\./, '\.').gsub(/\*/, '(.*)') + '$')
51
-
52
- # check if the directory exists
53
- if not File.exists?(dirname)
54
- Tesler::Config.output.puts "\tnot found\t#{dirname}"
55
- return
56
- end
57
-
58
- Dir.entries(dirname).each do |entry|
59
- next if %(. ..).include?(entry)
60
-
61
- # when were processing regular expressions, the :rename option is ignored
62
- options.delete(:rename)
63
- direct_copy("#{dirname}/#{entry}", options) if entry =~ r
64
- end
65
- end
66
-
67
- # This method checks if we're working whith a file or a directory and perform the corresponding copy operation
68
- def direct_copy(filename, options)
69
- if File.directory? filename
70
- self.as(Tesler::Config.operator).copy_dir(filename, options)
71
-
72
- elsif File.exists? filename
73
- self.as(Tesler::Config.operator).copy_file(filename, options)
74
-
75
- else
76
- Tesler::Config.output.puts "\tnot found\t#{filename}"
77
- end
78
- end
79
- end
80
- end
81
-
1
+ module Tesler
2
+ # This the class which receives the DSL commands.
3
+ class Copier
4
+ include Tesler::Operators::Base
5
+ include Tesler::Operators::Logger
6
+ include Tesler::Operators::Run
7
+
8
+ def initialize(directory_name)
9
+ @directory_name = directory_name
10
+ self.as(Tesler::Config.operator).set_directory(@directory_name)
11
+ end
12
+
13
+ # Method called by the DSL method 'copy'
14
+ def copy(file_name, options={})
15
+ filename = file_name.tesler
16
+ if not Tesler::Config.source_directory.blank?
17
+ filename = "#{Tesler::Config.source_directory}/#{filename}"
18
+ end
19
+
20
+ # if the file's name contains a star, then it is considered as a regular expression
21
+ if filename.include? "*"
22
+ regexp_copy(filename, options)
23
+
24
+ # the file's name is not a regular expression, so we copy it directly
25
+ else
26
+ direct_copy(filename, options)
27
+ end
28
+ end
29
+
30
+ # This method create a sub-directory
31
+ def directory(directory_name, &block)
32
+ copier = Copier.new("#{@directory_name}/#{directory_name}")
33
+ copier.instance_eval(&block)
34
+ end
35
+
36
+ # Method called by the DSL method 'directory'
37
+ def self.directory(directory_name, &block)
38
+ copier = Copier.new(directory_name)
39
+ copier.instance_eval(&block)
40
+ end
41
+
42
+ private
43
+
44
+ # Analyses a regular expression and generate the list of file to copy
45
+ def regexp_copy(filename, options)
46
+ dirname = File.dirname(filename)
47
+ basename = File.basename(filename)
48
+
49
+ # generation of the ruby regexp corresponding to the file regexp
50
+ r = Regexp.new('^' + basename.gsub(/\./, '\.').gsub(/\*/, '(.*)') + '$')
51
+
52
+ # check if the directory exists
53
+ if not File.exists?(dirname)
54
+ Tesler::Config.output.puts "\tnot found\t#{dirname}"
55
+ return
56
+ end
57
+
58
+ Dir.entries(dirname).each do |entry|
59
+ next if %(. ..).include?(entry)
60
+
61
+ # when were processing regular expressions, the :rename option is ignored
62
+ options.delete(:rename)
63
+ direct_copy("#{dirname}/#{entry}", options) if entry =~ r
64
+ end
65
+ end
66
+
67
+ # This method checks if we're working whith a file or a directory and perform the corresponding copy operation
68
+ def direct_copy(filename, options)
69
+ if File.directory? filename
70
+ self.as(Tesler::Config.operator).copy_dir(filename, options)
71
+
72
+ elsif File.exists? filename
73
+ self.as(Tesler::Config.operator).copy_file(filename, options)
74
+
75
+ else
76
+ Tesler::Config.output.puts "\tnot found\t#{filename}"
77
+ end
78
+ end
79
+ end
80
+ end
81
+
@@ -1,20 +1,20 @@
1
- # sets a directory where to copy files. If this directory doesn't exist, it is created
2
- def directory(directory_name, &block)
3
- Tesler::Copier.directory(directory_name.tesler, &block)
4
- end
5
-
6
- # sets the directory where the file that we are copying, are taken from
7
- def source_directory(directory_name)
8
- Tesler::Config.source_directory = directory_name
9
- end
10
-
11
- # reinitializes the configuration
12
- def reset_config
13
- Tesler::Config.reset
14
- end
15
-
16
- # in test mode, tesler only logs its actions without effectively copying the files
17
- def run_in_test_mode
18
- Tesler::Config.operator = Tesler::Operators::Logger
19
- end
20
-
1
+ # sets a directory where to copy files. If this directory doesn't exist, it is created
2
+ def directory(directory_name, &block)
3
+ Tesler::Copier.directory(directory_name.tesler, &block)
4
+ end
5
+
6
+ # sets the directory where the file that we are copying, are taken from
7
+ def source_directory(directory_name)
8
+ Tesler::Config.source_directory = directory_name
9
+ end
10
+
11
+ # reinitializes the configuration
12
+ def reset_config
13
+ Tesler::Config.reset
14
+ end
15
+
16
+ # in test mode, tesler only logs its actions without effectively copying the files
17
+ def run_in_test_mode
18
+ Tesler::Config.operator = Tesler::Operators::Logger
19
+ end
20
+
@@ -1,29 +1,29 @@
1
- # define an extension for the Object class
2
- class Object
3
- # stolen from activesupport.
4
- def blank?
5
- respond_to?(:empty?) ? empty? : !self
6
- end
7
- end
8
-
9
- # define an extension for the String class
10
- class String
11
- # actions :
12
- # * replace the Windows directory separtor (\) by the unix separator (/)
13
- # * replace tokens matching the format %TOKEN% by an environment variable
14
- def tesler
15
- # replace separators
16
- s = File.join self.split("\\")
17
-
18
- # environment variables
19
- env_vars = self.scan(/%([a-zA-Z_]+)%/).map { |array| array.first }
20
- env_vars.each do |var|
21
- s.gsub!(Regexp.new("%#{var}%"), ENV[var])
22
- end
23
-
24
- File.join s.split("\\")
25
- end
26
-
27
-
28
- end
29
-
1
+ # define an extension for the Object class
2
+ class Object
3
+ # stolen from activesupport.
4
+ def blank?
5
+ respond_to?(:empty?) ? empty? : !self
6
+ end
7
+ end
8
+
9
+ # define an extension for the String class
10
+ class String
11
+ # actions :
12
+ # * replace the Windows directory separtor (\) by the unix separator (/)
13
+ # * replace tokens matching the format %TOKEN% by an environment variable
14
+ def tesler
15
+ # replace separators
16
+ s = File.join self.split("\\")
17
+
18
+ # environment variables
19
+ env_vars = self.scan(/%([a-zA-Z_]+)%/).map { |array| array.first }
20
+ env_vars.each do |var|
21
+ s.gsub!(Regexp.new("%#{var}%"), ENV[var])
22
+ end
23
+
24
+ File.join s.split("\\")
25
+ end
26
+
27
+
28
+ end
29
+
@@ -1,19 +1,19 @@
1
- module Tesler
2
- module Operators
3
- module Base
4
- def destination_name(file_name, options)
5
- base_name = options[:rename]
6
- base_name = File.basename(file_name) if base_name.nil?
7
- destination = "#{@directory_name}/#{base_name}"
8
-
9
- # if the directory option is set, create the sub-directory if necessary
10
- if options[:directory]
11
- FileUtils.mkdir_p "#{@directory_name}/#{options[:directory]}"
12
- destination = "#{@directory_name}/#{options[:directory]}/#{base_name}"
13
- end
14
-
15
- destination
16
- end
17
- end
18
- end
19
- end
1
+ module Tesler
2
+ module Operators
3
+ module Base
4
+ def destination_name(file_name, options)
5
+ base_name = options[:rename]
6
+ base_name = File.basename(file_name) if base_name.nil?
7
+ destination = "#{@directory_name}/#{base_name}"
8
+
9
+ # if the directory option is set, create the sub-directory if necessary
10
+ if options[:directory]
11
+ FileUtils.mkdir_p "#{@directory_name}/#{options[:directory]}"
12
+ destination = "#{@directory_name}/#{options[:directory]}/#{base_name}"
13
+ end
14
+
15
+ destination
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,39 +1,39 @@
1
- module Tesler
2
- module Operators
3
- # This module only logs the actions
4
- module Logger
5
- extend self
6
-
7
- def set_directory(directory_name)
8
- if File.exists? directory_name
9
- Tesler::Config.output.puts "\texists\t#{directory_name}"
10
- else
11
- Tesler::Config.output.puts "\tcreate\t#{directory_name}"
12
- end
13
- end
14
-
15
- def copy_file(file_name, options)
16
- self.as(Tesler::Config.operator).copy_dir(file_name, options)
17
- end
18
-
19
- def copy_dir(file_name, options)
20
- Tesler::Config.output.puts "\tcopy\t#{file_name}\t#{destination_name(file_name, options)}"
21
- end
22
-
23
- def self.destination_name(file_name, options)
24
- base_name = options[:rename]
25
- base_name = File.basename(file_name) if base_name.nil?
26
- destination = "#{options[:destination]}/#{base_name}"
27
-
28
- # if the directory option is set, create the sub-directory if necessary
29
- if options[:directory]
30
- FileUtils.mkdir_p "#{options[:destination]}/#{options[:directory]}"
31
- destination = "#{options[:destination]}/#{options[:directory]}/#{base_name}"
32
- end
33
-
34
- destination
35
- end
36
- end
37
- end
38
- end
39
-
1
+ module Tesler
2
+ module Operators
3
+ # This module only logs the actions
4
+ module Logger
5
+ extend self
6
+
7
+ def set_directory(directory_name)
8
+ if File.exists? directory_name
9
+ Tesler::Config.output.puts "\texists\t#{directory_name}"
10
+ else
11
+ Tesler::Config.output.puts "\tcreate\t#{directory_name}"
12
+ end
13
+ end
14
+
15
+ def copy_file(file_name, options)
16
+ self.as(Tesler::Config.operator).copy_dir(file_name, options)
17
+ end
18
+
19
+ def copy_dir(file_name, options)
20
+ Tesler::Config.output.puts "\tcopy\t#{file_name}\t#{destination_name(file_name, options)}"
21
+ end
22
+
23
+ def self.destination_name(file_name, options)
24
+ base_name = options[:rename]
25
+ base_name = File.basename(file_name) if base_name.nil?
26
+ destination = "#{options[:destination]}/#{base_name}"
27
+
28
+ # if the directory option is set, create the sub-directory if necessary
29
+ if options[:directory]
30
+ FileUtils.mkdir_p "#{options[:destination]}/#{options[:directory]}"
31
+ destination = "#{options[:destination]}/#{options[:directory]}/#{base_name}"
32
+ end
33
+
34
+ destination
35
+ end
36
+ end
37
+ end
38
+ end
39
+
@@ -1,26 +1,26 @@
1
- require 'fileutils'
2
-
3
- module Tesler
4
- module Operators
5
- # This class defines the effective copy operations
6
- module Run
7
- def set_directory(directory_name)
8
- Tesler::Operators::Logger.set_directory(directory_name)
9
- FileUtils.mkdir_p @directory_name
10
- end
11
-
12
- def copy_file(file_name, options)
13
- self.as(Tesler::Config.operator).copy_dir(file_name, options)
14
- end
15
-
16
- def copy_dir(file_name, options)
17
- # we add the destination in the options for the logger because it can't find it itself
18
- Tesler::Operators::Logger.copy_dir(file_name, options.merge({:destination => @directory_name}))
19
-
20
- # recursive copy
21
- FileUtils.cp_r file_name, "#{destination_name(file_name, options)}"
22
- end
23
- end
24
- end
25
- end
26
-
1
+ require 'fileutils'
2
+
3
+ module Tesler
4
+ module Operators
5
+ # This class defines the effective copy operations
6
+ module Run
7
+ def set_directory(directory_name)
8
+ Tesler::Operators::Logger.set_directory(directory_name)
9
+ FileUtils.mkdir_p @directory_name
10
+ end
11
+
12
+ def copy_file(file_name, options)
13
+ self.as(Tesler::Config.operator).copy_dir(file_name, options)
14
+ end
15
+
16
+ def copy_dir(file_name, options)
17
+ # we add the destination in the options for the logger because it can't find it itself
18
+ Tesler::Operators::Logger.copy_dir(file_name, options.merge({:destination => @directory_name}))
19
+
20
+ # recursive copy
21
+ FileUtils.cp_r file_name, "#{destination_name(file_name, options)}"
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -1,22 +1,22 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
-
5
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
- $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- require 'tesler'
8
-
9
- class Test::Unit::TestCase
10
- end
11
-
12
- # This class simulate the standard output
13
- class Output
14
- def messages
15
- @messages ||= []
16
- end
17
-
18
- def puts(message)
19
- messages << message
20
- end
21
- end
22
-
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'tesler'
8
+
9
+ class Test::Unit::TestCase
10
+ end
11
+
12
+ # This class simulate the standard output
13
+ class Output
14
+ def messages
15
+ @messages ||= []
16
+ end
17
+
18
+ def puts(message)
19
+ messages << message
20
+ end
21
+ end
22
+