zonebie 0.0.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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