scaffolder 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
data/Gemfile CHANGED
@@ -5,11 +5,13 @@ group :default do
5
5
  end
6
6
 
7
7
  group :development do
8
- gem "bundler", "~> 1.0"
9
- gem "shoulda", "~> 2.11"
10
- gem "mocha", "~> 0.9"
11
- gem "yard", "~> 0.6"
12
- gem "cucumber", "~> 0.9"
13
- gem "jeweler", "~> 1.5"
14
- gem "redgreen", "~> 1.2"
8
+ gem "bundler", "~> 1.0"
9
+ gem "shoulda", "~> 2.11"
10
+ gem "rspec", "~> 2.4"
11
+ gem "mocha", "~> 0.9"
12
+ gem "yard", "~> 0.6"
13
+ gem "cucumber", "~> 0.9"
14
+ gem "aruba", "~> 0.2"
15
+ gem "jeweler", "~> 1.5"
16
+ gem "mynyml-redgreen", "~> 0.7.1", :require => 'redgreen'
15
17
  end
@@ -22,13 +22,14 @@ the command line using:
22
22
 
23
23
  == Documentation
24
24
 
25
- See the Scaffolder class for getting started with Scaffolder.
25
+ See the Scaffolder[http://rubydoc.info/gems/scaffolder/Scaffolder] class for
26
+ getting started with Scaffolder.
26
27
 
27
28
  == Contact
28
29
 
29
30
  Scaffolder was developed by Michael Barton (www.michaelbarton.me.uk). Pull
30
31
  requests, patches and bug reports are welcome. The source code is available on
31
- github[http://github.com/michaelbarton/scaffolder]. Bug reports and feature
32
+ github[http://github.com/scaffolder/scaffolder]. Bug reports and feature
32
33
  requests may also be made there.
33
34
 
34
35
  == Copyright
data/Rakefile CHANGED
@@ -12,11 +12,11 @@ require 'rake'
12
12
  require 'jeweler'
13
13
  Jeweler::Tasks.new do |gem|
14
14
  gem.name = "scaffolder"
15
- gem.homepage = "http://www.michaelbarton.me.uk/projects/scaffolder/"
15
+ gem.homepage = "http://next.gs"
16
16
  gem.license = "MIT"
17
17
  gem.summary = %Q{Genome scaffolding for human beings.}
18
18
  gem.description = %Q{Organise sequence contigs into genome scaffolds using simple human-readable YAML files.}
19
- gem.email = "mail@michaelbarton.me.uk"
19
+ gem.email = "mail@next.gs"
20
20
  gem.authors = ["Michael Barton"]
21
21
  gem.test_files = Dir['test/**/*.rb']
22
22
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.3
1
+ 0.4.4
@@ -3,13 +3,26 @@ Feature: The insert keyword
3
3
  A user can use the insert keyword
4
4
 
5
5
  Scenario: A scaffold with a single insert keyword
6
- Given the scaffold file has the sequences:
7
- | name | nucleotides |
8
- | seq | ATGCCGCGTAA |
9
- And the first scaffold sequence has the inserts:
10
- | name | nucleotides | open | close |
11
- | ins | AAAA | 4 | 6 |
12
- When creating a scaffolder object
6
+ Given a file named "sequence.fna" with:
7
+ """
8
+ >seq
9
+ TTTTTTTTT
10
+ >insert
11
+ AAA
12
+ """
13
+ Given a file named "scaffold.yml" with:
14
+ """
15
+ ---
16
+ -
17
+ sequence:
18
+ source: "seq"
19
+ inserts:
20
+ -
21
+ source: "insert"
22
+ open: 4
23
+ close: 6
24
+ """
25
+ When creating a scaffold with the files "scaffold.yml" and "sequence.fna"
13
26
  Then the scaffold should contain 1 sequence entries
14
27
  Then the scaffold should contain 1 insert entries
15
- And the scaffold sequence should be ATGAAAACGTAA
28
+ And the scaffold sequence should be TTTAAATTT
@@ -3,18 +3,40 @@ Feature: The sequence keyword
3
3
  A user can use the sequence keyword
4
4
 
5
5
  Scenario: A scaffold with a single sequence keyword
6
- Given the scaffold file has the sequences:
7
- | name | nucleotides |
8
- | seq | ATGCC |
9
- When creating a scaffolder object
6
+ Given a file named "sequence.fna" with:
7
+ """
8
+ >seq
9
+ TTTTT
10
+ """
11
+ Given a file named "scaffold.yml" with:
12
+ """
13
+ ---
14
+ -
15
+ sequence:
16
+ source: "seq"
17
+ """
18
+ When creating a scaffold with the files "scaffold.yml" and "sequence.fna"
10
19
  Then the scaffold should contain 1 sequence entries
11
- And the scaffold sequence should be ATGCC
20
+ And the scaffold sequence should be TTTTT
12
21
 
13
22
  Scenario: A scaffold with a two sequence keywords
14
- Given the scaffold file has the sequences:
15
- | name | nucleotides |
16
- | seq1 | ATGCC |
17
- | seq2 | ATGCC |
18
- When creating a scaffolder object
23
+ Given a file named "sequence.fna" with:
24
+ """
25
+ >seq1
26
+ TTT
27
+ >seq2
28
+ AAA
29
+ """
30
+ Given a file named "scaffold.yml" with:
31
+ """
32
+ ---
33
+ -
34
+ sequence:
35
+ source: "seq1"
36
+ -
37
+ sequence:
38
+ source: "seq2"
39
+ """
40
+ When creating a scaffold with the files "scaffold.yml" and "sequence.fna"
19
41
  Then the scaffold should contain 2 sequence entries
20
- And the scaffold sequence should be ATGCCATGCC
42
+ And the scaffold sequence should be TTTAAA
@@ -1,33 +1,7 @@
1
- Given /^the scaffold file has the sequences:$/ do |sequences|
2
- @entries ||= Array.new
3
- @sequences ||= Array.new
4
-
5
- sequences.hashes.each do |seq|
6
- @entries << {'sequence' => {'source' => seq['name']}}
7
- end
8
- sequences.hashes.map do |seq|
9
- @sequences << {:name => seq['name'], :sequence => seq['nucleotides']}
10
- end
11
- end
12
-
13
- Given /^the first scaffold sequence has the inserts:$/ do |inserts|
14
- sequence = @entries.detect{|s| s.keys.first == 'sequence' }
15
- sequence['sequence']['inserts'] = (inserts.hashes.map do |insert|
16
- i = {'source' => insert['name']}
17
- i['open'] = insert['open'].to_i if insert['open']
18
- i['close'] = insert['close'].to_i if insert['close']
19
- i
20
- end)
21
- inserts.hashes.map do |insert|
22
- @sequences << {:name => insert['name'], :sequence => insert['nucleotides']}
23
- end
24
- end
25
-
26
- When /^creating a scaffolder object$/ do
27
- @scf_file = write_scaffold_file(@entries)
28
- @seq_file = write_sequence_file(@sequences)
29
-
30
- @scaffold = Scaffolder.new(YAML.load(File.read(@scf_file)),@seq_file)
1
+ When /^creating a scaffold with the files "([^"]*)" and "([^"]*)"$/ do |x, y|
2
+ scf_file = File.join(TMP,x)
3
+ seq_file = File.join(TMP,y)
4
+ @scaffold = Scaffolder.new( YAML.load(File.read(scf_file)), seq_file)
31
5
  end
32
6
 
33
7
  Then /^the scaffold should contain (.*) sequence entries$/ do |n|
@@ -7,24 +7,14 @@ rescue Bundler::BundlerError => e
7
7
  exit e.status_code
8
8
  end
9
9
 
10
- require 'tempfile'
10
+ require 'rspec/expectations'
11
+ require 'aruba/cucumber'
11
12
 
12
13
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
13
14
  require 'scaffolder'
14
15
 
15
- def write_sequence_file(*sequences)
16
- file = Tempfile.new("sequence").path
17
- File.open(file,'w') do |tmp|
18
- sequences.flatten.each do |sequence|
19
- seq = Bio::Sequence.new(sequence[:sequence])
20
- tmp.print(seq.output(:fasta,:header => sequence[:name]))
21
- end
22
- end
23
- file
24
- end
16
+ TMP = "/tmp"
25
17
 
26
- def write_scaffold_file(scaffold)
27
- file = Tempfile.new("scaffold").path
28
- File.open(file,'w'){|tmp| tmp.print(YAML.dump(scaffold))}
29
- file
18
+ Before do
19
+ @dirs = [TMP]
30
20
  end
@@ -5,19 +5,20 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{scaffolder}
8
- s.version = "0.4.3"
8
+ s.version = "0.4.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Barton"]
12
- s.date = %q{2011-06-03}
12
+ s.date = %q{2011-08-11}
13
13
  s.description = %q{Organise sequence contigs into genome scaffolds using simple human-readable YAML files.}
14
- s.email = %q{mail@michaelbarton.me.uk}
14
+ s.email = %q{mail@next.gs}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
17
  "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ ".travis.yml",
21
22
  "Gemfile",
22
23
  "LICENSE",
23
24
  "README.rdoc",
@@ -43,45 +44,50 @@ Gem::Specification.new do |s|
43
44
  "test/test_unresolved.rb",
44
45
  "yard/attribute_handler.rb"
45
46
  ]
46
- s.homepage = %q{http://www.michaelbarton.me.uk/projects/scaffolder/}
47
+ s.homepage = %q{http://next.gs}
47
48
  s.licenses = ["MIT"]
48
49
  s.require_paths = ["lib"]
49
- s.rubygems_version = %q{1.3.7}
50
+ s.rubygems_version = %q{1.6.2}
50
51
  s.summary = %q{Genome scaffolding for human beings.}
51
52
  s.test_files = ["test/helper.rb", "test/test_insert.rb", "test/test_region.rb", "test/test_scaffolder.rb", "test/test_sequence.rb", "test/test_unresolved.rb"]
52
53
 
53
54
  if s.respond_to? :specification_version then
54
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
55
55
  s.specification_version = 3
56
56
 
57
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
58
  s.add_runtime_dependency(%q<bio>, ["~> 1.4"])
59
59
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
60
60
  s.add_development_dependency(%q<shoulda>, ["~> 2.11"])
61
+ s.add_development_dependency(%q<rspec>, ["~> 2.4"])
61
62
  s.add_development_dependency(%q<mocha>, ["~> 0.9"])
62
63
  s.add_development_dependency(%q<yard>, ["~> 0.6"])
63
64
  s.add_development_dependency(%q<cucumber>, ["~> 0.9"])
65
+ s.add_development_dependency(%q<aruba>, ["~> 0.2"])
64
66
  s.add_development_dependency(%q<jeweler>, ["~> 1.5"])
65
- s.add_development_dependency(%q<redgreen>, ["~> 1.2"])
67
+ s.add_development_dependency(%q<mynyml-redgreen>, ["~> 0.7.1"])
66
68
  else
67
69
  s.add_dependency(%q<bio>, ["~> 1.4"])
68
70
  s.add_dependency(%q<bundler>, ["~> 1.0"])
69
71
  s.add_dependency(%q<shoulda>, ["~> 2.11"])
72
+ s.add_dependency(%q<rspec>, ["~> 2.4"])
70
73
  s.add_dependency(%q<mocha>, ["~> 0.9"])
71
74
  s.add_dependency(%q<yard>, ["~> 0.6"])
72
75
  s.add_dependency(%q<cucumber>, ["~> 0.9"])
76
+ s.add_dependency(%q<aruba>, ["~> 0.2"])
73
77
  s.add_dependency(%q<jeweler>, ["~> 1.5"])
74
- s.add_dependency(%q<redgreen>, ["~> 1.2"])
78
+ s.add_dependency(%q<mynyml-redgreen>, ["~> 0.7.1"])
75
79
  end
76
80
  else
77
81
  s.add_dependency(%q<bio>, ["~> 1.4"])
78
82
  s.add_dependency(%q<bundler>, ["~> 1.0"])
79
83
  s.add_dependency(%q<shoulda>, ["~> 2.11"])
84
+ s.add_dependency(%q<rspec>, ["~> 2.4"])
80
85
  s.add_dependency(%q<mocha>, ["~> 0.9"])
81
86
  s.add_dependency(%q<yard>, ["~> 0.6"])
82
87
  s.add_dependency(%q<cucumber>, ["~> 0.9"])
88
+ s.add_dependency(%q<aruba>, ["~> 0.2"])
83
89
  s.add_dependency(%q<jeweler>, ["~> 1.5"])
84
- s.add_dependency(%q<redgreen>, ["~> 1.2"])
90
+ s.add_dependency(%q<mynyml-redgreen>, ["~> 0.7.1"])
85
91
  end
86
92
  end
87
93
 
@@ -45,17 +45,17 @@ class TestInsert < Test::Unit::TestCase
45
45
 
46
46
  should "return a negative diff for a sequence smaller than insert site" do
47
47
  @insert.raw_sequence 'TT'
48
- assert(@insert.size_diff,-1)
48
+ assert_equal(@insert.size_diff,-1)
49
49
  end
50
50
 
51
51
  should "return 0 for a sequence equal to the insert site" do
52
- @insert.raw_sequence 'TT'
53
- assert(@insert.size_diff,0)
52
+ @insert.raw_sequence 'TTT'
53
+ assert_equal(@insert.size_diff,0)
54
54
  end
55
55
 
56
56
  should "return a positive diff for a sequence larger than insert site" do
57
57
  @insert.raw_sequence 'TTTT'
58
- assert(@insert.size_diff,1)
58
+ assert_equal(@insert.size_diff,1)
59
59
  end
60
60
 
61
61
  end
@@ -11,7 +11,8 @@ class TestScaffolder < Test::Unit::TestCase
11
11
 
12
12
  should "create a single accessor attribute" do
13
13
  Scaffolder::Region.attribute @attr
14
- assert(Scaffolder::Region.instance_methods.include? @attr.to_s)
14
+ methods = Scaffolder::Region.instance_methods.map{|m| m.to_s}
15
+ assert(methods.include?(@attr.to_s))
15
16
  end
16
17
 
17
18
  should "return nil until attribute value is stored" do
metadata CHANGED
@@ -1,154 +1,138 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: scaffolder
3
- version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 4
9
- - 3
10
- version: 0.4.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.4
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Michael Barton
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-06-03 00:00:00 -04:00
12
+ date: 2011-08-11 00:00:00.000000000 -04:00
19
13
  default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bio
17
+ requirement: &2153752620 !ruby/object:Gem::Requirement
23
18
  none: false
24
- requirements:
19
+ requirements:
25
20
  - - ~>
26
- - !ruby/object:Gem::Version
27
- hash: 7
28
- segments:
29
- - 1
30
- - 4
31
- version: "1.4"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.4'
32
23
  type: :runtime
33
- name: bio
34
24
  prerelease: false
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *2153752620
26
+ - !ruby/object:Gem::Dependency
27
+ name: bundler
28
+ requirement: &2153750940 !ruby/object:Gem::Requirement
38
29
  none: false
39
- requirements:
30
+ requirements:
40
31
  - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 15
43
- segments:
44
- - 1
45
- - 0
46
- version: "1.0"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
47
34
  type: :development
48
- name: bundler
49
35
  prerelease: false
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- requirement: &id003 !ruby/object:Gem::Requirement
36
+ version_requirements: *2153750940
37
+ - !ruby/object:Gem::Dependency
38
+ name: shoulda
39
+ requirement: &2153748000 !ruby/object:Gem::Requirement
53
40
  none: false
54
- requirements:
41
+ requirements:
55
42
  - - ~>
56
- - !ruby/object:Gem::Version
57
- hash: 21
58
- segments:
59
- - 2
60
- - 11
61
- version: "2.11"
43
+ - !ruby/object:Gem::Version
44
+ version: '2.11'
62
45
  type: :development
63
- name: shoulda
64
46
  prerelease: false
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- requirement: &id004 !ruby/object:Gem::Requirement
47
+ version_requirements: *2153748000
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: &2153746760 !ruby/object:Gem::Requirement
68
51
  none: false
69
- requirements:
52
+ requirements:
70
53
  - - ~>
71
- - !ruby/object:Gem::Version
72
- hash: 25
73
- segments:
74
- - 0
75
- - 9
76
- version: "0.9"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.4'
77
56
  type: :development
78
- name: mocha
79
57
  prerelease: false
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- requirement: &id005 !ruby/object:Gem::Requirement
58
+ version_requirements: *2153746760
59
+ - !ruby/object:Gem::Dependency
60
+ name: mocha
61
+ requirement: &2153746240 !ruby/object:Gem::Requirement
83
62
  none: false
84
- requirements:
63
+ requirements:
85
64
  - - ~>
86
- - !ruby/object:Gem::Version
87
- hash: 7
88
- segments:
89
- - 0
90
- - 6
91
- version: "0.6"
65
+ - !ruby/object:Gem::Version
66
+ version: '0.9'
92
67
  type: :development
93
- name: yard
94
68
  prerelease: false
95
- version_requirements: *id005
96
- - !ruby/object:Gem::Dependency
97
- requirement: &id006 !ruby/object:Gem::Requirement
69
+ version_requirements: *2153746240
70
+ - !ruby/object:Gem::Dependency
71
+ name: yard
72
+ requirement: &2153743100 !ruby/object:Gem::Requirement
98
73
  none: false
99
- requirements:
74
+ requirements:
100
75
  - - ~>
101
- - !ruby/object:Gem::Version
102
- hash: 25
103
- segments:
104
- - 0
105
- - 9
106
- version: "0.9"
76
+ - !ruby/object:Gem::Version
77
+ version: '0.6'
107
78
  type: :development
79
+ prerelease: false
80
+ version_requirements: *2153743100
81
+ - !ruby/object:Gem::Dependency
108
82
  name: cucumber
83
+ requirement: &2153742480 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
89
+ type: :development
109
90
  prerelease: false
110
- version_requirements: *id006
111
- - !ruby/object:Gem::Dependency
112
- requirement: &id007 !ruby/object:Gem::Requirement
91
+ version_requirements: *2153742480
92
+ - !ruby/object:Gem::Dependency
93
+ name: aruba
94
+ requirement: &2153741780 !ruby/object:Gem::Requirement
113
95
  none: false
114
- requirements:
96
+ requirements:
115
97
  - - ~>
116
- - !ruby/object:Gem::Version
117
- hash: 5
118
- segments:
119
- - 1
120
- - 5
121
- version: "1.5"
98
+ - !ruby/object:Gem::Version
99
+ version: '0.2'
122
100
  type: :development
101
+ prerelease: false
102
+ version_requirements: *2153741780
103
+ - !ruby/object:Gem::Dependency
123
104
  name: jeweler
105
+ requirement: &2153741080 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '1.5'
111
+ type: :development
124
112
  prerelease: false
125
- version_requirements: *id007
126
- - !ruby/object:Gem::Dependency
127
- requirement: &id008 !ruby/object:Gem::Requirement
113
+ version_requirements: *2153741080
114
+ - !ruby/object:Gem::Dependency
115
+ name: mynyml-redgreen
116
+ requirement: &2153740340 !ruby/object:Gem::Requirement
128
117
  none: false
129
- requirements:
118
+ requirements:
130
119
  - - ~>
131
- - !ruby/object:Gem::Version
132
- hash: 11
133
- segments:
134
- - 1
135
- - 2
136
- version: "1.2"
120
+ - !ruby/object:Gem::Version
121
+ version: 0.7.1
137
122
  type: :development
138
- name: redgreen
139
123
  prerelease: false
140
- version_requirements: *id008
141
- description: Organise sequence contigs into genome scaffolds using simple human-readable YAML files.
142
- email: mail@michaelbarton.me.uk
124
+ version_requirements: *2153740340
125
+ description: Organise sequence contigs into genome scaffolds using simple human-readable
126
+ YAML files.
127
+ email: mail@next.gs
143
128
  executables: []
144
-
145
129
  extensions: []
146
-
147
- extra_rdoc_files:
130
+ extra_rdoc_files:
148
131
  - LICENSE
149
132
  - README.rdoc
150
- files:
133
+ files:
151
134
  - .document
135
+ - .travis.yml
152
136
  - Gemfile
153
137
  - LICENSE
154
138
  - README.rdoc
@@ -174,40 +158,35 @@ files:
174
158
  - test/test_unresolved.rb
175
159
  - yard/attribute_handler.rb
176
160
  has_rdoc: true
177
- homepage: http://www.michaelbarton.me.uk/projects/scaffolder/
178
- licenses:
161
+ homepage: http://next.gs
162
+ licenses:
179
163
  - MIT
180
164
  post_install_message:
181
165
  rdoc_options: []
182
-
183
- require_paths:
166
+ require_paths:
184
167
  - lib
185
- required_ruby_version: !ruby/object:Gem::Requirement
168
+ required_ruby_version: !ruby/object:Gem::Requirement
186
169
  none: false
187
- requirements:
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- hash: 3
191
- segments:
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ segments:
192
175
  - 0
193
- version: "0"
194
- required_rubygems_version: !ruby/object:Gem::Requirement
176
+ hash: -4011958643952341412
177
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
178
  none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
- version: "0"
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
203
183
  requirements: []
204
-
205
184
  rubyforge_project:
206
- rubygems_version: 1.3.7
185
+ rubygems_version: 1.6.2
207
186
  signing_key:
208
187
  specification_version: 3
209
188
  summary: Genome scaffolding for human beings.
210
- test_files:
189
+ test_files:
211
190
  - test/helper.rb
212
191
  - test/test_insert.rb
213
192
  - test/test_region.rb