php-composer 0.4.5 → 1.0.0.pre.alpha11

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.rbenv-gemsets +1 -0
  3. data/.rubocop.yml +131 -188
  4. data/.ruby-version +1 -0
  5. data/Gemfile +0 -9
  6. data/Rakefile +11 -0
  7. data/lib/composer.rb +52 -49
  8. data/lib/composer/json/json_file.rb +110 -83
  9. data/lib/composer/json/json_formatter.rb +43 -77
  10. data/lib/composer/json/{json_validaton_error.rb → json_validation_error.rb} +6 -2
  11. data/lib/composer/package/alias_package.rb +77 -61
  12. data/lib/composer/package/complete_package.rb +88 -18
  13. data/lib/composer/package/dumper/hash_dumper.rb +50 -118
  14. data/lib/composer/package/dumper/hash_dumper/complete_package_attribute_dumpers.rb +47 -0
  15. data/lib/composer/package/dumper/hash_dumper/package_attribute_dumpers.rb +145 -0
  16. data/lib/composer/package/dumper/hash_dumper/root_package_attribute_dumpers.rb +24 -0
  17. data/lib/composer/package/link.rb +15 -5
  18. data/lib/composer/package/loader/hash_loader.rb +92 -228
  19. data/lib/composer/package/loader/hash_loader/complete_package_attribute_loaders.rb +83 -0
  20. data/lib/composer/package/loader/hash_loader/package_attribute_loaders.rb +181 -0
  21. data/lib/composer/package/loader/hash_loader/root_package_attribute_loaders.rb +32 -0
  22. data/lib/composer/package/loader/json_loader.rb +7 -9
  23. data/lib/composer/package/package.rb +611 -43
  24. data/lib/composer/package/root_alias_package.rb +186 -15
  25. data/lib/composer/package/root_package.rb +12 -4
  26. data/lib/composer/package/version/version_parser.rb +16 -532
  27. data/lib/composer/package/version/version_selector.rb +127 -68
  28. data/lib/composer/repository/base_repository.rb +46 -3
  29. data/lib/composer/repository/composite_repository.rb +4 -4
  30. data/lib/composer/repository/filesystem_repository.rb +15 -8
  31. data/lib/composer/repository/hash_repository.rb +62 -45
  32. data/lib/composer/repository/writeable_hash_repository.rb +5 -5
  33. data/lib/composer/util/composer_mirror.rb +76 -0
  34. data/php-composer.gemspec +14 -8
  35. data/resources/composer-schema.json +12 -0
  36. metadata +117 -16
  37. data/lib/composer/error.rb +0 -8
  38. data/lib/composer/package/base_package.rb +0 -130
  39. data/lib/composer/package/link_constraint/base_constraint.rb +0 -36
  40. data/lib/composer/package/link_constraint/empty_constraint.rb +0 -35
  41. data/lib/composer/package/link_constraint/multi_constraint.rb +0 -67
  42. data/lib/composer/package/link_constraint/specific_constraint.rb +0 -41
  43. data/lib/composer/package/link_constraint/version_constraint.rb +0 -221
  44. data/lib/composer/version.rb +0 -3
@@ -18,7 +18,7 @@ module Composer
18
18
  #
19
19
  # Ruby Authors:
20
20
  # Ioannis Kappas <ikappas@devworks.gr>
21
- class WritableHashRepository < Composer::Repository::HashRepository
21
+ class WritableHashRepository < ::Composer::Repository::HashRepository
22
22
 
23
23
  def initialize(packages = [])
24
24
  super
@@ -39,15 +39,15 @@ module Composer
39
39
  packages_by_name = {}
40
40
  packages_uncanonicalized.each do |package|
41
41
  if !packages_by_name.key?(package.name) ||
42
- packages_by_name[package.name].instance_of?(Composer::Package::AliasPackage)
42
+ packages_by_name[package.name].instance_of?(::Composer::Package::AliasPackage)
43
43
  packages_by_name[package.name] = package
44
44
  end
45
45
  end
46
46
 
47
47
  # unfold aliased packages
48
48
  results = []
49
- packages_by_name.each do |name, package|
50
- while package.instance_of?(Composer::Package::AliasPackage)
49
+ packages_by_name.each do |_name, package|
50
+ while package.instance_of?(::Composer::Package::AliasPackage)
51
51
  package = package.alias_of
52
52
  end
53
53
  results.push(package)
@@ -57,4 +57,4 @@ module Composer
57
57
  end
58
58
  end
59
59
  end
60
- end
60
+ end
@@ -0,0 +1,76 @@
1
+ #
2
+ # This file was ported to ruby from Composer php source code.
3
+ # Original Source: Composer\Repository\RepositoryInterface.php
4
+ #
5
+ # (c) Nils Adermann <naderman@naderman.de>
6
+ # Jordi Boggiano <j.boggiano@seld.be>
7
+ #
8
+ # For the full copyright and license information, please view the LICENSE
9
+ # file that was distributed with this source code.
10
+ #
11
+
12
+ require 'digest'
13
+
14
+ module Composer
15
+ module Util
16
+
17
+ # Composer mirror utilities
18
+ #
19
+ # @author Jordi Boggiano <j.boggiano@seld.be>
20
+ class ComposerMirror
21
+
22
+ class << self
23
+
24
+ def process_url(mirror_url, package_name, version, reference, type)
25
+
26
+ unless reference.nil? || /^([a-f0-9]*|%reference%)$/ =~ reference
27
+ reference = Digest::MD5.hexdigest(reference)
28
+ end
29
+
30
+ unless version.nil? || version.index('/') === nil
31
+ version = Digest::MD5.hexdigest(version)
32
+ end
33
+
34
+ map = {
35
+ '%package%' => package_name,
36
+ '%version%' => version,
37
+ '%reference%' => reference,
38
+ '%type%' => type
39
+ }
40
+
41
+ re = Regexp.new(map.keys.map { |x| Regexp.escape(x) }.join('|'))
42
+
43
+ mirror_url.gsub(re, map)
44
+ end
45
+
46
+ def process_git_url(mirror_url, package_name, url, type)
47
+
48
+ case url
49
+ when /^(?:(?:https?|git):\/\/github\.com\/|git@github\.com:)([^\/]+)\/(.+?)(?:\.git)?$/
50
+ url = "gh-#{$1}/#{$2}"
51
+ when /^https:\/\/bitbucket\.org\/([^\/]+)\/(.+?)(?:\.git)?\/?$/
52
+ url = "bb-#{$1}/#{$2}"
53
+ else
54
+ url = url.gsub(/^\//, '').gsub(/\/$/, '').gsub(/[^a-z0-9_.-]/i, '-')
55
+ end
56
+
57
+ map = {
58
+ '%package%' => package_name,
59
+ '%normalizedUrl%' => url,
60
+ '%type%' => type
61
+ }
62
+
63
+ re = Regexp.new(map.keys.map { |x| Regexp.escape(x) }.join('|'))
64
+
65
+ mirror_url.gsub(re, map)
66
+ end
67
+
68
+ def process_hg_url(mirror_url, package_name, url, type)
69
+ process_git_url( mirror_url, package_name, url, type)
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -1,11 +1,12 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'composer/version'
1
+ # -*- encoding: utf-8 -*-
2
+ require 'rake'
3
+
4
+ $:.push File.expand_path('../lib', __FILE__)
5
+ require 'composer'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'php-composer'
8
- spec.version = Composer::VERSION
9
+ spec.version = Composer::GEM_VERSION
9
10
  spec.authors = ['Ioannis Kappas']
10
11
  spec.email = ['ikappas@devworks.gr']
11
12
 
@@ -14,18 +15,23 @@ Gem::Specification.new do |spec|
14
15
  spec.homepage = %q{http://github.com/ikappas/php-composer/tree/master}
15
16
  spec.license = 'MIT'
16
17
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.files = FileList['lib/**/*.rb', 'LICENSE.txt', 'README.md']
19
+ spec.test_files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
20
  spec.require_paths = ['lib']
19
21
 
20
- spec.required_ruby_version = '>= 1.8.7'
22
+ spec.required_ruby_version = '>= 2.1.7'
21
23
  spec.required_rubygems_version = '>= 1.8'
22
24
 
23
25
  spec.add_runtime_dependency 'json', '~> 1.8'
24
26
  spec.add_runtime_dependency 'json-schema', '~> 2.5'
27
+ spec.add_runtime_dependency 'php-composer-semver', '~> 1.2'
25
28
 
26
29
  spec.add_development_dependency 'bundler', '~> 1.8'
27
30
  spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'rspec', '~> 5.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.4'
29
32
  spec.add_development_dependency 'rubocop', '~> 0.35', '>= 0.35.0'
33
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.3', '>= 1.3.1'
34
+ spec.add_development_dependency 'coveralls', '~> 0.8.2'
30
35
  spec.add_development_dependency 'simplecov', '~> 0.10'
36
+ spec.add_development_dependency 'factory_girl', '~> 4.5.0'
31
37
  end
@@ -136,6 +136,11 @@
136
136
  "description": "A hash of domain name => github API oauth tokens, typically {\"github.com\":\"<token>\"}.",
137
137
  "additionalProperties": true
138
138
  },
139
+ "gitlab-oauth": {
140
+ "type": "object",
141
+ "description": "A hash of domain name => gitlab API oauth tokens, typically {\"gitlab.com\":\"<token>\"}.",
142
+ "additionalProperties": true
143
+ },
139
144
  "http-basic": {
140
145
  "type": "object",
141
146
  "description": "A hash of domain name => {\"username\": \"...\", \"password\": \"...\"}.",
@@ -221,6 +226,13 @@
221
226
  "type": "boolean",
222
227
  "description": "Defaults to true. If set to false, the OAuth tokens created to access the github API will have a date instead of the machine hostname."
223
228
  },
229
+ "gitlab-domains": {
230
+ "type": "array",
231
+ "description": "A list of domains to use in gitlab mode. This is used for custom GitLab setups, defaults to [\"gitlab.com\"].",
232
+ "items": {
233
+ "type": "string"
234
+ }
235
+ },
224
236
  "archive-format": {
225
237
  "type": "string",
226
238
  "description": "The default archiving format when not provided on cli, defaults to \"tar\"."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: php-composer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 1.0.0.pre.alpha11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ioannis Kappas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-27 00:00:00.000000000 Z
11
+ date: 2016-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: php-composer-semver
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +86,14 @@ dependencies:
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '5.0'
89
+ version: '3.4'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '5.0'
96
+ version: '3.4'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rubocop
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +114,40 @@ dependencies:
100
114
  - - ">="
101
115
  - !ruby/object:Gem::Version
102
116
  version: 0.35.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop-rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.3'
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 1.3.1
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.3'
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 1.3.1
137
+ - !ruby/object:Gem::Dependency
138
+ name: coveralls
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: 0.8.2
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: 0.8.2
103
151
  - !ruby/object:Gem::Dependency
104
152
  name: simplecov
105
153
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +162,20 @@ dependencies:
114
162
  - - "~>"
115
163
  - !ruby/object:Gem::Version
116
164
  version: '0.10'
165
+ - !ruby/object:Gem::Dependency
166
+ name: factory_girl
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: 4.5.0
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: 4.5.0
117
179
  description: A ruby gem library for consistent interactions with php composer dependency
118
180
  manager.
119
181
  email:
@@ -123,28 +185,29 @@ extensions: []
123
185
  extra_rdoc_files: []
124
186
  files:
125
187
  - ".gitignore"
188
+ - ".rbenv-gemsets"
126
189
  - ".rspec"
127
190
  - ".rubocop.yml"
191
+ - ".ruby-version"
128
192
  - Gemfile
129
193
  - LICENSE.txt
130
194
  - README.md
131
195
  - Rakefile
132
196
  - lib/composer.rb
133
- - lib/composer/error.rb
134
197
  - lib/composer/json/json_file.rb
135
198
  - lib/composer/json/json_formatter.rb
136
- - lib/composer/json/json_validaton_error.rb
199
+ - lib/composer/json/json_validation_error.rb
137
200
  - lib/composer/package/alias_package.rb
138
- - lib/composer/package/base_package.rb
139
201
  - lib/composer/package/complete_package.rb
140
202
  - lib/composer/package/dumper/hash_dumper.rb
203
+ - lib/composer/package/dumper/hash_dumper/complete_package_attribute_dumpers.rb
204
+ - lib/composer/package/dumper/hash_dumper/package_attribute_dumpers.rb
205
+ - lib/composer/package/dumper/hash_dumper/root_package_attribute_dumpers.rb
141
206
  - lib/composer/package/link.rb
142
- - lib/composer/package/link_constraint/base_constraint.rb
143
- - lib/composer/package/link_constraint/empty_constraint.rb
144
- - lib/composer/package/link_constraint/multi_constraint.rb
145
- - lib/composer/package/link_constraint/specific_constraint.rb
146
- - lib/composer/package/link_constraint/version_constraint.rb
147
207
  - lib/composer/package/loader/hash_loader.rb
208
+ - lib/composer/package/loader/hash_loader/complete_package_attribute_loaders.rb
209
+ - lib/composer/package/loader/hash_loader/package_attribute_loaders.rb
210
+ - lib/composer/package/loader/hash_loader/root_package_attribute_loaders.rb
148
211
  - lib/composer/package/loader/json_loader.rb
149
212
  - lib/composer/package/package.rb
150
213
  - lib/composer/package/root_alias_package.rb
@@ -156,7 +219,7 @@ files:
156
219
  - lib/composer/repository/filesystem_repository.rb
157
220
  - lib/composer/repository/hash_repository.rb
158
221
  - lib/composer/repository/writeable_hash_repository.rb
159
- - lib/composer/version.rb
222
+ - lib/composer/util/composer_mirror.rb
160
223
  - php-composer.gemspec
161
224
  - resources/composer-schema.json
162
225
  homepage: http://github.com/ikappas/php-composer/tree/master
@@ -171,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
234
  requirements:
172
235
  - - ">="
173
236
  - !ruby/object:Gem::Version
174
- version: 1.8.7
237
+ version: 2.1.7
175
238
  required_rubygems_version: !ruby/object:Gem::Requirement
176
239
  requirements:
177
240
  - - ">="
@@ -179,8 +242,46 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
242
  version: '1.8'
180
243
  requirements: []
181
244
  rubyforge_project:
182
- rubygems_version: 2.2.2
245
+ rubygems_version: 2.2.5
183
246
  signing_key:
184
247
  specification_version: 4
185
248
  summary: PHP Composer Ruby Gem
186
- test_files: []
249
+ test_files:
250
+ - ".gitignore"
251
+ - ".rbenv-gemsets"
252
+ - ".rspec"
253
+ - ".rubocop.yml"
254
+ - ".ruby-version"
255
+ - Gemfile
256
+ - LICENSE.txt
257
+ - README.md
258
+ - Rakefile
259
+ - lib/composer.rb
260
+ - lib/composer/json/json_file.rb
261
+ - lib/composer/json/json_formatter.rb
262
+ - lib/composer/json/json_validation_error.rb
263
+ - lib/composer/package/alias_package.rb
264
+ - lib/composer/package/complete_package.rb
265
+ - lib/composer/package/dumper/hash_dumper.rb
266
+ - lib/composer/package/dumper/hash_dumper/complete_package_attribute_dumpers.rb
267
+ - lib/composer/package/dumper/hash_dumper/package_attribute_dumpers.rb
268
+ - lib/composer/package/dumper/hash_dumper/root_package_attribute_dumpers.rb
269
+ - lib/composer/package/link.rb
270
+ - lib/composer/package/loader/hash_loader.rb
271
+ - lib/composer/package/loader/hash_loader/complete_package_attribute_loaders.rb
272
+ - lib/composer/package/loader/hash_loader/package_attribute_loaders.rb
273
+ - lib/composer/package/loader/hash_loader/root_package_attribute_loaders.rb
274
+ - lib/composer/package/loader/json_loader.rb
275
+ - lib/composer/package/package.rb
276
+ - lib/composer/package/root_alias_package.rb
277
+ - lib/composer/package/root_package.rb
278
+ - lib/composer/package/version/version_parser.rb
279
+ - lib/composer/package/version/version_selector.rb
280
+ - lib/composer/repository/base_repository.rb
281
+ - lib/composer/repository/composite_repository.rb
282
+ - lib/composer/repository/filesystem_repository.rb
283
+ - lib/composer/repository/hash_repository.rb
284
+ - lib/composer/repository/writeable_hash_repository.rb
285
+ - lib/composer/util/composer_mirror.rb
286
+ - php-composer.gemspec
287
+ - resources/composer-schema.json
@@ -1,8 +0,0 @@
1
- module Composer
2
- class Error < ::StandardError; end
3
- class ArgumentError < Error; end
4
- class TypeError < Error; end
5
- class UnexpectedValueError < Error; end
6
- class LogicError < Error; end
7
- class InvalidRepositoryError < Error; end
8
- end
@@ -1,130 +0,0 @@
1
- #
2
- # This file was ported to ruby from Composer php source code.
3
- # Original Source: Composer\Package\BasePackage.php
4
- #
5
- # (c) Nils Adermann <naderman@naderman.de>
6
- # Jordi Boggiano <j.boggiano@seld.be>
7
- #
8
- # For the full copyright and license information, please view the LICENSE
9
- # file that was distributed with this source code.
10
- #
11
-
12
- module Composer
13
- module Package
14
-
15
- # Base class for packages providing name storage
16
- # and default match implementation
17
- # @php_author Nils Adermann <naderman@naderman.de>
18
- # @author Ioannis Kappas <ikappas@devworks.gr>
19
- class BasePackage
20
-
21
- # base package attributes
22
- attr_accessor :id, :repository, :transport_options
23
- attr_reader :name, :pretty_name, :version, :pretty_version, :stability
24
-
25
- STABILITY_STABLE = 0
26
- STABILITY_RC = 5
27
- STABILITY_BETA = 10
28
- STABILITY_ALPHA = 15
29
- STABILITY_DEV = 20
30
-
31
- SUPPORTED_LINK_TYPES = {
32
- 'require' => {
33
- 'description' => 'requires',
34
- 'method' => 'requires'
35
- },
36
- 'conflict' => {
37
- 'description' => 'conflicts',
38
- 'method' => 'conflicts'
39
- },
40
- 'provide' => {
41
- 'description' => 'provides',
42
- 'method' => 'provides'
43
- },
44
- 'replace' => {
45
- 'description' => 'replaces',
46
- 'method' => 'replaces'
47
- },
48
- 'require-dev' => {
49
- 'description' => 'requires (for development)',
50
- 'method' => 'dev_requires'
51
- }
52
- }.freeze()
53
-
54
- class << self
55
-
56
- def stabilities
57
- @stabilities ||= {
58
- 'stable' => STABILITY_STABLE,
59
- 'RC' => STABILITY_RC,
60
- 'beta' => STABILITY_BETA,
61
- 'alpha' => STABILITY_ALPHA,
62
- 'dev' => STABILITY_DEV,
63
- }.freeze()
64
- end
65
-
66
- end
67
-
68
- # Creates a new in memory package.
69
- # Param: string name The package's name
70
- # Param: string version The package's version
71
- # Param: string pretty_version The package's non-normalized version
72
- def initialize(name)
73
- @pretty_name = name
74
- @name = name.downcase
75
- @id = -1
76
- @transport_options = []
77
- end
78
-
79
- def attributes
80
- dumper = Composer::Package::Dumper::HashDumper.new
81
- dumper.dump(self)
82
- end
83
-
84
- # Set package type
85
- # Param: string type
86
- def type=(type)
87
- @type = type
88
- end
89
-
90
- # Get package type
91
- # Return: string
92
- def type
93
- @type ? @type : 'library'
94
- end
95
-
96
- # Set package repository
97
- def repository=(repository)
98
- if (@repository && repository != @repository)
99
- raise LogicError, 'A package can only be added to one repository'
100
- end
101
- @repository = repository
102
- end
103
-
104
- # Get package repository
105
- def repository
106
- @repository
107
- end
108
-
109
- # def is_platform?
110
- # @repository && @repository.instance_of?(PlatformRepository)
111
- # end
112
-
113
- # Returns package unique name, constructed from name, version and
114
- # release type.
115
- # Return: string
116
- def unique_name
117
- "#{name}-#{version}"
118
- end
119
-
120
- def pretty_string
121
- "#{pretty_name} #{pretty_version}"
122
- end
123
-
124
- def to_s
125
- unique_name
126
- end
127
-
128
- end
129
- end
130
- end