zonebie 0.0.4 → 0.5.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 490ab23147f9d6c4f43d468666ad83481dca7289
4
+ data.tar.gz: aaed4c34a214caff9c5f2616f523dd0ee3cdab38
5
+ SHA512:
6
+ metadata.gz: 92afb08fe8ad7fcdb9ffbd0b1209cb6f0673f7edc7f871ca5d3ca9ea9425da55fc63c23ad5f8bbd35192624b08e766f333f299d6a85d3e77a3e808bd5344b64f
7
+ data.tar.gz: 4d4c6052a63fa47fc108f0e97b2c00ea11d24a2b96142c1597ee3a19b94bbdb651d7b97c07e074ce8fb4063058ab115436276f648967427f7f2cc5061f83533b
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ rvm:
3
3
  - 1.8.7
4
4
  - 1.9.2
5
5
  - 1.9.3
6
+ - 2.0.0
6
7
  - jruby-18mode
7
8
  - jruby-19mode
8
9
  - rbx-18mode
@@ -10,6 +11,3 @@ rvm:
10
11
  branches:
11
12
  only:
12
13
  - master
13
- notifications:
14
- email:
15
- - alindeman@gmail.com
data/README.md CHANGED
@@ -1,21 +1,25 @@
1
1
  # Zonebie
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/highgroove/zonebie.png)](http://travis-ci.org/highgroove/zonebie)
3
+ [![Build Status](https://secure.travis-ci.org/alindeman/zonebie.png)](http://travis-ci.org/alindeman/zonebie)
4
4
 
5
5
  Zonebie prevents bugs in code that deals with timezones by randomly assigning a
6
6
  zone on every run.
7
7
 
8
+ If Zonebie helps trigger a timezone-related bug, you can temporarily assign the
9
+ `ZONEBIE_TZ` environment variable to make your tests deterministic while you
10
+ debug (more information below).
11
+
8
12
  ## Requirements
9
13
 
10
- * MRI (1.8.7, 1.9.2, 1.9.3)
11
- * JRuby (1.6)
14
+ * MRI (1.8.7, 1.9.2, 1.9.3, 2.0.0)
15
+ * JRuby (1.6, 1.7)
12
16
  * Rubinius (1.2, 2.0)
13
17
 
14
18
  ***
15
19
 
16
20
  And **either** of these gems which adds timezone support to Ruby:
17
21
 
18
- * `activesupport` >= 2.3 (Rails 2.3, 3.0, 3.1, 3.2)
22
+ * `activesupport` >= 2.3 (Rails 2.3, 3.0, 3.1, 3.2, 4.0)
19
23
  * `tzinfo` >= 0.3
20
24
 
21
25
  ## Installation
@@ -82,76 +86,22 @@ When `Zonebie.set_random_timezone` is called, Zonebie assigns a timezone and
82
86
  prints a message to STDOUT:
83
87
 
84
88
  ```
85
- [Zonebie] Setting timezone to "Eastern Time (US & Canada)"
89
+ [Zonebie] Setting timezone: ZONEBIE_TZ="Eastern Time (US & Canada)"
86
90
  ```
87
91
 
88
- If you would rather that Zonebie not print out this information during your tests,
89
- put Zonebie in quiet mode before calling `set_random_timezone`:
92
+ If you would rather that Zonebie not print out this information during your
93
+ tests, put Zonebie in quiet mode before calling `set_random_timezone`:
90
94
 
91
95
  ```ruby
92
96
  Zonebie.quiet = true
93
97
  ```
94
98
 
95
99
  To rerun tests with a specific timezone (e.g., to reproduce a bug that only
96
- seems present in one zone), set the `TZ` environment variable:
100
+ seems present in one zone), set the `ZONEBIE_TZ` environment variable:
97
101
 
98
102
  ```ruby
99
103
  # Assuming tests run with simply `rake`
100
- TZ="Eastern Time (US & Canada)" rake
101
- ```
102
-
103
- ## For the Geographically Impaired
104
-
105
- Zonebie can generate an ASCII map that shows where on the globe your tests are
106
- running.
107
-
108
- Note that this makes a request to Google Maps, so it's likely not a good idea
109
- to run on each test run :)
110
-
111
- ```
112
- ..... ......
113
- ..... ........... .
114
- . . .. ........... . .
115
- . .. .. ........... . ..
116
- .. .. . ........ . .......
117
- ..... .... . ... ....... .. . . ...................
118
- ............ ........ ... ... .. ..... ...............................
119
- ... ......... . .. ..... ............................ .
120
- ........... ... . .. ..................... ......
121
- ............. ........ .. ...................
122
- ........... .. . ..... ............... .
123
- ... . .............. ................
124
- ... ............. .. .. ... .
125
- ..... .. .......... . .
126
- .......... ...... .
127
- ....... ..... . .....
128
- ..... ... .........
129
- .... ..
130
- ..
131
- .
132
-
133
- .
134
- .. .......... ...................
135
- . .... .... ..........................................
136
- ............... . ............................................
137
- .................. . .............................................
138
- ..................... .............................................
139
- .........................................................................
140
- ...........................................................................
141
- ```
142
-
143
- Enable the map by setting the `:ascii_map` option to `true`. Again, because it
144
- makes an HTTP request, you likely only want to enable it in certain
145
- circumstances (e.g., on a CI server or when you explicitly request it):
146
-
147
- ```ruby
148
- Zonebie.set_random_timezone(:ascii_map => ENV['CI'] || ENV['MAP'])
149
- ```
150
-
151
- And run with:
152
-
153
- ```ruby
154
- MAP=1 rake
104
+ ZONEBIE_TZ="Eastern Time (US & Canada)" rake
155
105
  ```
156
106
 
157
107
  ## Contributing
@@ -1,3 +1,3 @@
1
1
  module Zonebie
2
- VERSION = "0.0.4"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/zonebie.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require File.expand_path("zonebie/version", File.dirname(__FILE__))
2
- require File.expand_path("zonebie/extras", File.dirname(__FILE__))
3
2
 
4
3
  module Zonebie
5
4
  class << self
@@ -37,13 +36,10 @@ module Zonebie
37
36
  @backends[backend.name] = backend
38
37
  end
39
38
 
40
- def set_random_timezone(options = {})
41
- zone = ENV['TZ'] || random_timezone
39
+ def set_random_timezone
40
+ zone = ENV['ZONEBIE_TZ'] || random_timezone
42
41
 
43
- unless quiet
44
- $stdout.puts("[Zonebie] Setting timezone to \"#{zone}\"")
45
- $stdout.puts(Zonebie::Extras::AsciiMap.new(zone).to_s) if options[:ascii_map]
46
- end
42
+ $stdout.puts("[Zonebie] Setting timezone: ZONEBIE_TZ=\"#{zone}\"") unless quiet
47
43
  backend.zone = zone
48
44
  end
49
45
 
@@ -54,17 +54,10 @@ describe Zonebie do
54
54
  end
55
55
 
56
56
  it "outputs the timezone to STDOUT" do
57
- $stdout.expects(:puts).with("[Zonebie] Setting timezone to \"Eastern Time (US & Canada)\"")
57
+ $stdout.expects(:puts).with("[Zonebie] Setting timezone: ZONEBIE_TZ=\"Eastern Time (US & Canada)\"")
58
58
  Zonebie.set_random_timezone
59
59
  end
60
60
 
61
- it "outputs the ascii map to STDOUT if the option is present" do
62
- Zonebie::Extras::AsciiMap.any_instance.stubs(:to_s).returns('ascii map')
63
- $stdout.expects(:puts).with("[Zonebie] Setting timezone to \"Eastern Time (US & Canada)\"")
64
- $stdout.expects(:puts).with('ascii map')
65
- Zonebie.set_random_timezone(:ascii_map => true)
66
- end
67
-
68
61
  it "does not output the timezone to STDOUT if quiet mode is enabled" do
69
62
  $stdout.expects(:puts).never
70
63
 
@@ -76,12 +69,12 @@ describe Zonebie do
76
69
  end
77
70
  end
78
71
 
79
- it "sends the timezone as ENV[TZ] if present" do
72
+ it "sends the timezone as ENV[ZONEBIE_TZ] if present" do
80
73
  $stdout.stubs(:puts)
81
74
 
82
75
  backend.expects(:zone=).with("Pacific Time (US & Canada)")
83
76
 
84
- ENV['TZ'] = "Pacific Time (US & Canada)"
77
+ ENV['ZONEBIE_TZ'] = "Pacific Time (US & Canada)"
85
78
  Zonebie.set_random_timezone
86
79
  end
87
80
  end
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,10 @@
1
1
  require File.expand_path("../lib/zonebie", File.dirname(__FILE__))
2
2
 
3
- require "mocha"
4
3
  RSpec.configure do |c|
5
4
  c.mock_with :mocha
6
5
 
7
6
  c.before do
8
- ENV.delete('TZ')
7
+ ENV.delete('ZONEBIE_TZ')
9
8
  Zonebie.backend = nil # reset to default
10
9
  end
11
10
  end
data/zonebie.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
  require File.expand_path('../lib/zonebie/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Andy Lindeman"]
6
- gem.email = ["alindeman@gmail.com"]
5
+ gem.authors = ['Andy Lindeman', 'Steven Harman', 'Patrick Van Stee']
6
+ gem.email = ['andy@andylindeman.com', 'steveharman@gmail.com', 'patrickvanstee@gmail.com']
7
7
  gem.description = %q{Runs your tests in a random timezone}
8
8
  gem.summary = %q{Zonebie prevents bugs in code that deals with timezones by randomly assigning a zone on every run}
9
- gem.homepage = "https://github.com/highgroove/zonebie"
9
+ gem.homepage = "https://github.com/alindeman/zonebie"
10
10
 
11
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
12
  gem.files = `git ls-files`.split("\n")
@@ -16,12 +16,10 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Zonebie::VERSION
17
17
 
18
18
  gem.add_development_dependency "rake"
19
- gem.add_development_dependency "rspec", "~>2.8"
20
- gem.add_development_dependency "mocha", "~>0.10.0"
19
+ gem.add_development_dependency "rspec", "~>2.14"
20
+ gem.add_development_dependency "mocha", "~>0.14.0"
21
21
 
22
22
  gem.add_development_dependency "activesupport", ">=2.3"
23
- gem.add_development_dependency "tzinfo", ">=0.3"
24
-
25
- gem.add_dependency "chunky_png"
26
- gem.add_dependency "rainbow"
23
+ gem.add_development_dependency "tzinfo", "~>1.0", ">= 1.0.1"
24
+ gem.add_development_dependency "tzinfo-data", ">= 1.2013.4"
27
25
  end
metadata CHANGED
@@ -1,135 +1,116 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: zonebie
3
- version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 4
10
- version: 0.0.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Andy Lindeman
8
+ - Steven Harman
9
+ - Patrick Van Stee
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2012-03-20 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 0
30
- version: "0"
31
- requirement: *id001
32
- type: :development
13
+ date: 2013-08-15 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
33
16
  name: rake
34
- - !ruby/object:Gem::Dependency
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
35
23
  prerelease: false
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
- none: false
38
- requirements:
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rspec
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
39
33
  - - ~>
40
- - !ruby/object:Gem::Version
41
- hash: 19
42
- segments:
43
- - 2
44
- - 8
45
- version: "2.8"
46
- requirement: *id002
34
+ - !ruby/object:Gem::Version
35
+ version: '2.14'
47
36
  type: :development
48
- name: rspec
49
- - !ruby/object:Gem::Dependency
50
37
  prerelease: false
51
- version_requirements: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
54
40
  - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 55
57
- segments:
58
- - 0
59
- - 10
60
- - 0
61
- version: 0.10.0
62
- requirement: *id003
63
- type: :development
41
+ - !ruby/object:Gem::Version
42
+ version: '2.14'
43
+ - !ruby/object:Gem::Dependency
64
44
  name: mocha
65
- - !ruby/object:Gem::Dependency
66
- prerelease: false
67
- version_requirements: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 5
73
- segments:
74
- - 2
75
- - 3
76
- version: "2.3"
77
- requirement: *id004
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ version: 0.14.0
78
50
  type: :development
79
- name: activesupport
80
- - !ruby/object:Gem::Dependency
81
51
  prerelease: false
82
- version_requirements: &id005 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 13
88
- segments:
89
- - 0
90
- - 3
91
- version: "0.3"
92
- requirement: *id005
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 0.14.0
57
+ - !ruby/object:Gem::Dependency
58
+ name: activesupport
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '2.3'
93
64
  type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '2.3'
71
+ - !ruby/object:Gem::Dependency
94
72
  name: tzinfo
95
- - !ruby/object:Gem::Dependency
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.0'
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 1.0.1
81
+ type: :development
96
82
  prerelease: false
97
- version_requirements: &id006 !ruby/object:Gem::Requirement
98
- none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
- version: "0"
106
- requirement: *id006
107
- type: :runtime
108
- name: chunky_png
109
- - !ruby/object:Gem::Dependency
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '1.0'
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: 1.0.1
91
+ - !ruby/object:Gem::Dependency
92
+ name: tzinfo-data
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: 1.2013.4
98
+ type: :development
110
99
  prerelease: false
111
- version_requirements: &id007 !ruby/object:Gem::Requirement
112
- none: false
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- hash: 3
117
- segments:
118
- - 0
119
- version: "0"
120
- requirement: *id007
121
- type: :runtime
122
- name: rainbow
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: 1.2013.4
123
105
  description: Runs your tests in a random timezone
124
- email:
125
- - alindeman@gmail.com
106
+ email:
107
+ - andy@andylindeman.com
108
+ - steveharman@gmail.com
109
+ - patrickvanstee@gmail.com
126
110
  executables: []
127
-
128
111
  extensions: []
129
-
130
112
  extra_rdoc_files: []
131
-
132
- files:
113
+ files:
133
114
  - .gitignore
134
115
  - .travis.yml
135
116
  - Gemfile
@@ -140,56 +121,37 @@ files:
140
121
  - lib/zonebie/backends.rb
141
122
  - lib/zonebie/backends/active_support.rb
142
123
  - lib/zonebie/backends/tzinfo.rb
143
- - lib/zonebie/extras.rb
144
- - lib/zonebie/extras/ascii_map.rb
145
124
  - lib/zonebie/rspec.rb
146
125
  - lib/zonebie/version.rb
147
- - spec/fixtures/ascii_map.png
148
126
  - spec/integrations/activesupport_spec.rb
149
127
  - spec/lib/zonebie/backends/active_support_spec.rb
150
128
  - spec/lib/zonebie/backends/tzinfo_spec.rb
151
- - spec/lib/zonebie/extras/ascii_map_spec.rb
152
129
  - spec/lib/zonebie_spec.rb
153
130
  - spec/spec_helper.rb
154
131
  - zonebie.gemspec
155
- homepage: https://github.com/highgroove/zonebie
132
+ homepage: https://github.com/alindeman/zonebie
156
133
  licenses: []
157
-
134
+ metadata: {}
158
135
  post_install_message:
159
136
  rdoc_options: []
160
-
161
- require_paths:
137
+ require_paths:
162
138
  - lib
163
- required_ruby_version: !ruby/object:Gem::Requirement
164
- none: false
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- hash: 3
169
- segments:
170
- - 0
171
- version: "0"
172
- required_rubygems_version: !ruby/object:Gem::Requirement
173
- none: false
174
- requirements:
175
- - - ">="
176
- - !ruby/object:Gem::Version
177
- hash: 3
178
- segments:
179
- - 0
180
- version: "0"
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
181
149
  requirements: []
182
-
183
150
  rubyforge_project:
184
- rubygems_version: 1.8.15
151
+ rubygems_version: 2.0.3
185
152
  signing_key:
186
- specification_version: 3
187
- summary: Zonebie prevents bugs in code that deals with timezones by randomly assigning a zone on every run
188
- test_files:
189
- - spec/fixtures/ascii_map.png
190
- - spec/integrations/activesupport_spec.rb
191
- - spec/lib/zonebie/backends/active_support_spec.rb
192
- - spec/lib/zonebie/backends/tzinfo_spec.rb
193
- - spec/lib/zonebie/extras/ascii_map_spec.rb
194
- - spec/lib/zonebie_spec.rb
195
- - spec/spec_helper.rb
153
+ specification_version: 4
154
+ summary: Zonebie prevents bugs in code that deals with timezones by randomly assigning
155
+ a zone on every run
156
+ test_files: []
157
+ has_rdoc:
@@ -1,72 +0,0 @@
1
- require 'net/http'
2
- require 'open-uri'
3
- require 'chunky_png'
4
- require 'rainbow'
5
-
6
- Sickill::Rainbow.enabled = true
7
-
8
- module Zonebie
9
- module Extras
10
- class AsciiMap
11
- attr_accessor :zone, :image, :ascii, :mark
12
-
13
- def initialize(zone)
14
- self.zone = zone
15
- self.mark = false
16
- self.ascii = map_to_ascii
17
- end
18
-
19
- def to_s
20
- ascii
21
- end
22
-
23
- private
24
-
25
- def disable_webmock
26
- if defined? WebMock
27
- allow_net_connect_was = WebMock::Config.instance.allow_net_connect
28
- WebMock::Config.instance.allow_net_connect = true
29
- yield
30
- WebMock::Config.instance.allow_net_connect = allow_net_connect_was
31
- else
32
- yield
33
- end
34
- end
35
-
36
- def google_maps_request
37
- "http://maps.googleapis.com/maps/api/staticmap?format=png8&zoom=1&maptype=roadmap&sensor=false&center=0,0&size=500x500&markers=size:large%7Ccolor:red%7C#{URI.encode(zone)}&style=feature:all%7Celement:labels%7Cvisibility:off&style=feature:all%7Celement:geometry%7Clightness:100&style=feature:water%7Celement:geometry%7Clightness:-100"
38
- end
39
-
40
- def map_to_ascii
41
- image = nil
42
-
43
- disable_webmock do
44
- open google_maps_request do |f|
45
- image = ChunkyPNG::Image.from_blob(f.read)
46
- end
47
- end
48
-
49
- image.resample_nearest_neighbor!(80, 30)
50
- dots = image.pixels.map{ |p| colored_dot(p) }
51
- dots.each_slice(80).map{ |d| d.join }.join("\n")
52
- end
53
-
54
- def colored_dot(color)
55
- if ChunkyPNG::Color.grayscale? color
56
- if ChunkyPNG::Color.r(color) > (255 / 2)
57
- '.'
58
- else
59
- ' '
60
- end
61
- else
62
- if mark
63
- '.'
64
- else
65
- self.mark = true
66
- 'X'.color(:red)
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1 +0,0 @@
1
- require File.expand_path("extras/ascii_map", File.dirname(__FILE__))
Binary file
@@ -1,42 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Zonebie::Extras::AsciiMap do
4
- describe "#to_s" do
5
- it "prints a map of the world" do
6
- map = File.open(File.expand_path('../../../fixtures/ascii_map.png', File.dirname(__FILE__)))
7
- Zonebie::Extras::AsciiMap.any_instance.expects(:open).yields(map)
8
-
9
- Zonebie::Extras::AsciiMap.new('International Date Line West').to_s.should ==
10
- %{
11
- ..... ......
12
- ..... ........... .
13
- . . .. ........... . .
14
- . .. .. ........... . ..
15
- .. .. . ........ . .......
16
- ..... .... . ... ....... .. . . ...................
17
- ............ ........ ... ... .. ..... ...............................
18
- ... ......... . .. ..... ............................ .
19
- ........... \e[31mX\e[0m.. . .. ..................... ......
20
- ............ ........ .. ...................
21
- ........... .. . ..... ............... .
22
- ... . .............. ................
23
- ... ............. .. .. ... .
24
- ..... .. .......... . .
25
- .......... ...... .
26
- ....... ..... . .....
27
- ..... ... .........
28
- .... ..
29
- ..
30
- .
31
-
32
- .
33
- .. .......... ...................
34
- . .... .... ..........................................
35
- ............... . ............................................
36
- .................. . .............................................
37
- ..................... .............................................
38
- .........................................................................
39
- ...........................................................................}
40
- end
41
- end
42
- end