pattern 0.9.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.
data/DOCS/todolist.txt ADDED
@@ -0,0 +1,10 @@
1
+ 1. 制作为rubygem
2
+ 1.1. 添加可执行文件 OK
3
+ 1.2. 添加环境路径 OK
4
+ 1.3. 一些bugs OK
5
+ 2. 上传
6
+ 3. 如果文件已经存在,不进行覆盖 OK
7
+ 4. 支持建立文件夹 X
8
+ 5. 支持默认模式
9
+ 6. 支持添加template目录
10
+ 7.
data/LICENSE ADDED
File without changes
data/README ADDED
@@ -0,0 +1,32 @@
1
+ == EasyPattern
2
+
3
+ Rubygem for building Pattern/Data Structure .
4
+ Supports custom templates by any language.
5
+ Good tools for learning Pattern/Data Structure.
6
+
7
+ == Useage
8
+
9
+ simple model
10
+ *pattern [-t tempate_dir] [main_class_name]
11
+ *pattern [-t tempate_dir] [-d target_dir("." is default)] [-c classes_name] [-op operations_name]
12
+ complex model (not support now.)
13
+ *pattern -f pattern_file
14
+
15
+ == example:
16
+
17
+ simple model:
18
+ *pattern -t ruby.composite Task
19
+ *pattern -t ruby.composite -d target -c Task;compositeTask;AddDryIngredientsTask,MixTask;MakeBatterTask -op execute
20
+ complex model(pattern_file):
21
+
22
+ == Future
23
+ Sharing pattern templates on website.
24
+
25
+ == Author
26
+
27
+ Copyright 2010 @ weizhao
28
+ mailto: azhao.1981@gmail.com
29
+
30
+ == licese
31
+
32
+ This library and all associated materials are releassse under the terms of version 2 of the GNU Public License(http://www.gnu.org/copyleft/gpl.html).
data/README.cn ADDED
@@ -0,0 +1,26 @@
1
+ == EasyPattern
2
+ 这是一个用于自动生成设计模式/数据结构的rubygem工具,其特点是支持自定义模板,这使您学习设计模式和数据结构更加方便。
3
+
4
+ == Useage
5
+ 简单模式
6
+ pattern [-t tempate_dir] [main_class_name]
7
+ pattern [-t tempate_dir] [-d target_dir("." is default)] [-c classes_name] [-op operations_name]
8
+ 复杂模式 (未支持)
9
+ pattern -f pattern_file
10
+
11
+ == 命令示例:
12
+ 简单模式:
13
+ pattern -t ruby.composite Task
14
+ pattern -t ruby.composite -d target -c Task;compositeTask;AddDryIngredientsTask,MixTask;MakeBatterTask -op execute
15
+ 复杂模式(pattern_file):
16
+
17
+ == 未来工作
18
+ 1. 支持复杂模式
19
+ 2. 通过网站支持模板分享
20
+
21
+ == Author
22
+ Copyright @ weizhao 2010
23
+ mailto: azhao.1981@gmail.com
24
+
25
+ == licese
26
+ This library and all associated materials are releassse under the terms of version 2 of the GNU Public License(http://www.gnu.org/copyleft/gpl.html).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ task :install do
5
+ `cp -R lib /usr/lib/ruby/gems/1.8/gems/pattern-0.9.0/`
6
+ `cp bin/pattern /usr/bin`
7
+ end
8
+
data/bin/pattern ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ current_dir = File.dirname(__FILE__)
4
+
5
+ require current_dir + '/../lib/version'
6
+ if %w(--version -v).include? ARGV.first
7
+ puts "pattern #{Pattern::VERSION::STRING}"
8
+ exit(0)
9
+ end
10
+ require current_dir + '/../lib/compositecode'
11
+ pattern = CompositeCode.new(Command.new(ARGV))
12
+ pattern.execute
@@ -0,0 +1,2 @@
1
+ ../templates
2
+ E:/dev/easypattern/templates2
data/lib/code.rb ADDED
@@ -0,0 +1,34 @@
1
+ #--
2
+ # Copyright (c) 2010 weizhao
3
+ #
4
+ class Code
5
+ attr_accessor :template_file_name,:target_file_name,:replace_values
6
+ def initialize(template_file_name,target_file_bame,replace_values)
7
+ @template_file_name = template_file_name
8
+ @target_file_name = target_file_bame
9
+ @replace_values = replace_values
10
+ end
11
+ def replace_template
12
+ template_string = File.open(@template_file_name).readlines.join
13
+
14
+ @replace_values.each do |key,value|
15
+ template_string = template_string.gsub("##{key}#",value)
16
+ end
17
+ return template_string
18
+ end
19
+
20
+ def generate_code
21
+ if File.exist?(@target_file_name)
22
+ puts "* File #{@target_file_name} exist."
23
+ return false
24
+ end
25
+ File.open(@target_file_name,"w") do |file|
26
+ puts "* Create new file #{@target_file_name}."
27
+ file.puts replace_template
28
+ end
29
+ end
30
+
31
+ def execute
32
+ generate_code
33
+ end
34
+ end
data/lib/command.rb ADDED
@@ -0,0 +1,51 @@
1
+ # commad for send parameter to CompositeCode
2
+ require "pathname"
3
+
4
+ class Command
5
+ attr_accessor :template_dir,:target_dir,:classes,:operations,:base_name
6
+ def initialize(params)
7
+ @params = params
8
+ get_template_dir
9
+ get_target_dir
10
+ get_classes
11
+ get_operations
12
+ end
13
+ def get_template_dir
14
+ get_templates_dirs(get_template_dir_from_params).each do |dir|
15
+ @template_dir = dir if File.directory?(dir)
16
+ end
17
+ end
18
+ def get_classes
19
+ classes = get_param("-c")
20
+ if classes
21
+ @classes = parse_string( classes )
22
+ else
23
+ @base_name = @params[1]
24
+ @classes = nil
25
+ end
26
+ end
27
+ def get_operations
28
+ @operations = parse_string( operations = get_param("-op") || " " )
29
+ end
30
+ def get_templates_dirs(template)
31
+ File.open("#{File.dirname(__FILE__)}/../etc/templates_path.conf").readlines.collect do |line|
32
+ line = absolute_path(File.join(line.chomp,template),File.dirname(__FILE__))
33
+ end
34
+ end
35
+ def get_target_dir
36
+ @target_dir = absolute_path(get_param("-d") || ".")
37
+ end
38
+ def get_template_dir_from_params
39
+ return get_param("-t") || @params[0]
40
+ end
41
+ def get_param(option)
42
+ index = @params.index(option)
43
+ return index ? @params[index+1] : nil
44
+ end
45
+ def absolute_path(path,dir=Dir.pwd)
46
+ Pathname.new(path).relative? ? File.expand_path(path,dir) : path
47
+ end
48
+ def parse_string(string)
49
+ string.split(';').collect { |classes| classes.split(',') }
50
+ end
51
+ end
@@ -0,0 +1,80 @@
1
+ #--
2
+ # Copyright (c) 2010 weizhao
3
+ #
4
+ require File.dirname(__FILE__)+'/code'
5
+ require File.dirname(__FILE__)+'/command'
6
+
7
+ class CompositeCode < Code
8
+ attr_accessor :codes
9
+
10
+ def initialize(command)
11
+ @template_dir = command.template_dir
12
+ @classes = command.classes
13
+ @operations = command.operations
14
+ @target_dir = command.target_dir
15
+ @base_name = command.base_name
16
+
17
+ @template_files = Array.new
18
+ @template_replace_keys = Array.new
19
+
20
+ @codes = []
21
+ end
22
+ def load_readme
23
+ eval(File.read( File.join(@template_dir,"readme") ))
24
+ end
25
+
26
+ def classes_to_codes
27
+ @classes = @classes || @default_classes
28
+ default_replace_values = get_default_replace_values
29
+ operations = @operations[0]
30
+ operations_template = File.open(File.join(@template_dir,"operations")).readlines.join
31
+ x = 0
32
+
33
+ @classes.each do |template_classes|
34
+ template = @template_files[x] || template
35
+ key = @template_replace_keys[x] || key
36
+ operations = @operations[x] || operations
37
+ x+=1
38
+
39
+ template_classes.each do |class_name|
40
+ replace_values = default_replace_values.clone
41
+ replace_values["#{key}"] = class_name
42
+ replace_values["operations"] = ""
43
+ operations.each do |operation|
44
+ replace_values["operations"] << operations_template.gsub("#operation#",operation) unless operation == " "
45
+ end
46
+
47
+ @codes << Code.new( template,
48
+ File.join(@target_dir,"#{class_name.downcase}#{File.extname(template)}"),
49
+ replace_values )
50
+ end
51
+ end
52
+ return @codes
53
+ end
54
+
55
+ def get_default_replace_values
56
+ x = -1
57
+ default_replace_values = Hash.new
58
+ @template_replace_keys.each do |key|
59
+ default_replace_values["#{key}"] = @classes[x+=1][0]
60
+ end
61
+ return default_replace_values
62
+ end
63
+
64
+ def template(template_name,replace_key)
65
+ @template_files << File.join(@template_dir,template_name)
66
+ @template_replace_keys << replace_key
67
+ end
68
+ def default(*classes_name)
69
+ @default_classes = []
70
+ classes_name.each do |class_name|
71
+ @default_classes << [class_name]
72
+ end
73
+ end
74
+ def execute
75
+ load_readme
76
+ classes_to_codes
77
+ @codes.each { |code| code.execute }
78
+ end
79
+ end
80
+
@@ -0,0 +1,7 @@
1
+ #--
2
+ # Copyright (c) 2010 weizhao
3
+ #
4
+ require 'code'
5
+ class PatternCode < Code
6
+
7
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Pattern
2
+ module VERSION #:nodoc:
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 0
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
data/pattern.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ require 'rake'
2
+ spec = Gem::Specification.new
3
+ #-----------------------------
4
+ # Package information
5
+ #-----------------------------
6
+ spec.name = 'pattern'
7
+ spec.version = '0.9.0'
8
+ spec.executables << 'pattern'
9
+ spec.has_rdoc = true
10
+ spec.rdoc_options << '--title' << 'Pattern' <<
11
+ '--line-numbers'
12
+ spec.rubyforge_project = 'pattern'
13
+ spec.homepage = 'http://pattern.rubyforge.org'
14
+ spec.files = FileList['lib/*.rb', 'bin/*', '[A-Z]*', 'test/*','templates/**/*','etc/*','DOCS/*'].to_a
15
+ spec.test_files = Dir.glob('test/*_spec.rb')
16
+ spec.summary = 'auto code tools.'
17
+ spec.description = <<-EOF
18
+ Tool for coding/learning pattern/data structure
19
+ EOF
20
+ #-----------------------------
21
+ # Author information
22
+ #-----------------------------
23
+ spec.author = 'weizhao'
24
+ spec.email = 'azhao.1981@gmail.com'
25
+
26
+
27
+
@@ -0,0 +1,10 @@
1
+ # This is code of composite pattern . Generated by easypattern.
2
+ #
3
+
4
+ class #class_name#
5
+ def initialize
6
+
7
+ end
8
+ # TODO: operations
9
+ #operations#
10
+ end
@@ -0,0 +1,10 @@
1
+ # This is code of composite pattern . Generated by easypattern.
2
+ #
3
+
4
+ class #composite_name#
5
+ def initialize
6
+
7
+ end
8
+ # TODO: operations
9
+ #operations#
10
+ end
@@ -0,0 +1,10 @@
1
+ # This is code of composite pattern . Generated by easypattern.
2
+ #
3
+
4
+ class #composite_object_name#
5
+ def initialize
6
+
7
+ end
8
+ # TODO: operations
9
+ #operations#
10
+ end
@@ -0,0 +1,10 @@
1
+ # This is code of composite pattern . Generated by easypattern.
2
+ #
3
+
4
+ class #leaf_name#
5
+ def initialize
6
+
7
+ end
8
+ # TODO: operations
9
+ #operations#
10
+ end
@@ -0,0 +1,3 @@
1
+ def #operation#
2
+
3
+ end
@@ -0,0 +1,5 @@
1
+ template "component.rb","class_name"
2
+ template "composite.rb","composite_name"
3
+ template "leaf.rb","leaf_name"
4
+ template "compositeobject.rb","composite_object_name"
5
+ default @base_name,"Composite#{@base_name}","Leaf#{@base_name}","CompositeObject#{@base_name}"
data/test/code_spec.rb ADDED
@@ -0,0 +1,33 @@
1
+ #--
2
+ # Copyright (c) 2010 weizhao
3
+ #
4
+ require File.dirname(__FILE__) + '/../lib/code'
5
+
6
+ describe Code do
7
+ before(:each) do
8
+ template_file_name = "E:/dev/easypattern/templates/ruby.composite/component.rb"
9
+ target_file_name = "E:/dev/easypattern/temp/task.rb"
10
+ @target_file_name_test = target_file_name
11
+ replace_values = {"class_name"=>"Task","operations"=>" def execute\n \t\n end\n"}
12
+ @component_code = Code.new(template_file_name,target_file_name,replace_values)
13
+ end
14
+ it "1. replace_template should return template contain 'Task' & 'execute' " do
15
+ template = @component_code.replace_template
16
+ (/Task/ =~ template).should > 0
17
+ (/execute/ =~ template).should > 0
18
+ end
19
+
20
+ it "2. generate_code should create a new file" do
21
+ @component_code.generate_code
22
+ template = File.open(@target_file_name_test).readlines.join
23
+ (/Task/ =~ template).should be > 0
24
+ (/execute/ =~ template).should be > 0
25
+ end
26
+
27
+ it "3. execute will do generate_code " do
28
+ @component_code.execute
29
+ template = File.open(@target_file_name_test).readlines.join
30
+ (/Task/ =~ template).should be > 0
31
+ (/execute/ =~ template).should be > 0
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../lib/command'
2
+
3
+ describe Command do
4
+ before(:each) do
5
+ params = "-t ruby.composite -c Task;compositeTask;AddDryIngredientsTask,MixTask;MakeBatterTask -op execute".split(" ")
6
+ @command = Command.new(params)
7
+ end
8
+ it "1. get_template_dir_from_params should return 'ruby.composite' " do
9
+ @command.get_template_dir_from_params.should == "ruby.composite"
10
+ end
11
+ it "2. get_templates_dirs should return ['../templates','../templates2']" do
12
+ @command.get_templates_dirs(@command.get_template_dir_from_params).should ==
13
+ ['E:/dev/easypattern/templates/ruby.composite',
14
+ 'E:/dev/easypattern/templates2/ruby.composite']
15
+ end
16
+ it "3. Command.new should get right parameter form param" do
17
+ @command.template_dir.should == "E:/dev/easypattern/templates/ruby.composite"
18
+ @command.classes.should == [["Task"],["compositeTask"],
19
+ ["AddDryIngredientsTask","MixTask"],["MakeBatterTask"]]
20
+ @command.operations.should == [['execute']]
21
+ @command.target_dir.should == "E:/dev/easypattern"
22
+ end
23
+ it "4. absolute_path should return absolute path " do
24
+ @command.absolute_path("../templates/ruby.composite","./bin/../lib").should == "E:/dev/easypattern/templates/ruby.composite"
25
+ end
26
+ end
27
+
@@ -0,0 +1,103 @@
1
+ require File.dirname(__FILE__) + '/../lib/compositecode'
2
+
3
+ describe CompositeCode do
4
+ before(:each) do
5
+ params = "-t ruby.composite -d E:/dev/easypattern/target -c Task;CompositeTask;AddDryIngredientsTask,MixTask;MakeBatterTask -op execute,test".split(" ")
6
+ @command = Command.new(params)
7
+ @target_dir = "E:/dev/easypattern/target"
8
+ @compositecode = CompositeCode.new(@command)
9
+ end
10
+ it "1. classes_to_codes should return codes " do
11
+ @compositecode.load_readme
12
+ @compositecode.classes_to_codes.length.should == 5
13
+ code = @compositecode.codes[0]
14
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/component.rb"
15
+ code.target_file_name.should == "E:/dev/easypattern/target/task.rb"
16
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
17
+ "leaf_name"=>"AddDryIngredientsTask",
18
+ "composite_object_name"=>"MakeBatterTask",
19
+ "operations"=>" def execute\n \t\n end\n def test\n \t\n end\n"
20
+ }
21
+ code = @compositecode.codes[1]
22
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/composite.rb"
23
+ code.target_file_name.should == "E:/dev/easypattern/target/compositetask.rb"
24
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
25
+ "leaf_name"=>"AddDryIngredientsTask",
26
+ "composite_object_name"=>"MakeBatterTask",
27
+ "operations"=>" def execute\n \t\n end\n def test\n \t\n end\n"
28
+ }
29
+ code = @compositecode.codes[2]
30
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/leaf.rb"
31
+ code.target_file_name.should == "E:/dev/easypattern/target/adddryingredientstask.rb"
32
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
33
+ "leaf_name"=>"AddDryIngredientsTask",
34
+ "composite_object_name"=>"MakeBatterTask",
35
+ "operations"=>" def execute\n \t\n end\n def test\n \t\n end\n"
36
+ }
37
+ code = @compositecode.codes[3]
38
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/leaf.rb"
39
+ code.target_file_name.should == "E:/dev/easypattern/target/mixtask.rb"
40
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
41
+ "leaf_name"=>"MixTask",
42
+ "composite_object_name"=>"MakeBatterTask",
43
+ "operations"=>" def execute\n \t\n end\n def test\n \t\n end\n"
44
+ }
45
+ code = @compositecode.codes[4]
46
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/compositeobject.rb"
47
+ code.target_file_name.should == "E:/dev/easypattern/target/makebattertask.rb"
48
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
49
+ "leaf_name"=>"AddDryIngredientsTask",
50
+ "composite_object_name"=>"MakeBatterTask",
51
+ "operations"=>" def execute\n \t\n end\n def test\n \t\n end\n"
52
+ }
53
+ end
54
+ it "2. default params should return base_name and default_classes " do
55
+ params = "ruby.composite Task -d E:/dev/easypattern/target".split(" ")
56
+ @compositecode = CompositeCode.new(Command.new(params))
57
+ @compositecode.load_readme
58
+ @compositecode.classes_to_codes.length.should == 4
59
+ code = @compositecode.codes[0]
60
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/component.rb"
61
+ code.target_file_name.should == "E:/dev/easypattern/target/task.rb"
62
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
63
+ "leaf_name"=>"LeafTask",
64
+ "composite_object_name"=>"CompositeObjectTask",
65
+ "operations"=>""
66
+ }
67
+ code = @compositecode.codes[1]
68
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/composite.rb"
69
+ code.target_file_name.should == "E:/dev/easypattern/target/compositetask.rb"
70
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
71
+ "leaf_name"=>"LeafTask",
72
+ "composite_object_name"=>"CompositeObjectTask",
73
+ "operations"=>""
74
+ }
75
+ code = @compositecode.codes[2]
76
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/leaf.rb"
77
+ code.target_file_name.should == "E:/dev/easypattern/target/leaftask.rb"
78
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
79
+ "leaf_name"=>"LeafTask",
80
+ "composite_object_name"=>"CompositeObjectTask",
81
+ "operations"=>""
82
+ }
83
+ code = @compositecode.codes[3]
84
+ code.template_file_name.should == "E:/dev/easypattern/templates/ruby.composite/compositeobject.rb"
85
+ code.target_file_name.should == "E:/dev/easypattern/target/compositeobjecttask.rb"
86
+ code.replace_values.should == {"class_name"=>"Task","composite_name"=>"CompositeTask",
87
+ "leaf_name"=>"LeafTask",
88
+ "composite_object_name"=>"CompositeObjectTask",
89
+ "operations"=>""
90
+ }
91
+ end
92
+
93
+ end
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
@@ -0,0 +1,33 @@
1
+ #--
2
+ # Copyright (c) 2010 weizhao
3
+ #
4
+ require File.dirname(__FILE__) + '/../lib/patterncode'
5
+
6
+ describe PatternCode do
7
+ before(:each) do
8
+ template_file_name = "E:/dev/easypattern/templates/ruby.composite/component.rb"
9
+ target_file_name = "E:/dev/easypattern/temp/task.rb"
10
+ @target_file_name_test = target_file_name
11
+ replace_values = {"class_name"=>"Task","operations"=>" def execute\n \t\n end\n"}
12
+ @component_code = PatternCode.new(template_file_name,target_file_name,replace_values)
13
+ end
14
+ it "1. replace_template should return template contain 'Task' & 'execute' " do
15
+ template = @component_code.replace_template
16
+ (/Task/ =~ template).should be > 0
17
+ (/execute/ =~ template).should be > 0
18
+ end
19
+
20
+ it "2. generate_code should create a new file" do
21
+ @component_code.generate_code
22
+ template = File.open(@target_file_name_test).readlines.join
23
+ (/Task/ =~ template).should be > 0
24
+ (/execute/ =~ template).should be > 0
25
+ end
26
+
27
+ it "3. execute will do generate_code " do
28
+ @component_code.execute
29
+ template = File.open(@target_file_name_test).readlines.join
30
+ (/Task/ =~ template).should be > 0
31
+ (/execute/ =~ template).should be > 0
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pattern
3
+ version: !ruby/object:Gem::Version
4
+ hash: 59
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 0
10
+ version: 0.9.0
11
+ platform: ruby
12
+ authors:
13
+ - weizhao
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-05 00:00:00 +08:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: " Tool for coding/learning pattern/data structure\n"
23
+ email: azhao.1981@gmail.com
24
+ executables:
25
+ - pattern
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/code.rb
32
+ - lib/command.rb
33
+ - lib/compositecode.rb
34
+ - lib/patterncode.rb
35
+ - lib/version.rb
36
+ - bin/pattern
37
+ - LICENSE
38
+ - pattern-0.9.0.gem
39
+ - pattern.gemspec
40
+ - Rakefile
41
+ - README
42
+ - README.cn
43
+ - test/code_spec.rb
44
+ - test/command_spec.rb
45
+ - test/compositecode_spec.rb
46
+ - test/patterncode_spec.rb
47
+ - templates/ruby.composite/component.rb
48
+ - templates/ruby.composite/composite.rb
49
+ - templates/ruby.composite/compositeobject.rb
50
+ - templates/ruby.composite/leaf.rb
51
+ - templates/ruby.composite/operations
52
+ - templates/ruby.composite/readme
53
+ - etc/templates_path.conf
54
+ - DOCS/todolist.txt
55
+ has_rdoc: true
56
+ homepage: http://pattern.rubyforge.org
57
+ licenses: []
58
+
59
+ post_install_message:
60
+ rdoc_options:
61
+ - --title
62
+ - Pattern
63
+ - --line-numbers
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ hash: 3
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ requirements: []
85
+
86
+ rubyforge_project: pattern
87
+ rubygems_version: 1.3.7
88
+ signing_key:
89
+ specification_version: 3
90
+ summary: auto code tools.
91
+ test_files:
92
+ - test/code_spec.rb
93
+ - test/command_spec.rb
94
+ - test/compositecode_spec.rb
95
+ - test/patterncode_spec.rb