eve_online 0.23.0 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_rspec.yml +4 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +6 -8
  5. data/CHANGELOG.md +15 -0
  6. data/Gemfile.lock +7 -7
  7. data/Gemfile.mutant.lock +4 -4
  8. data/README.md +37 -33
  9. data/lib/eve_online.rb +1 -0
  10. data/lib/eve_online/esi/alliance.rb +2 -2
  11. data/lib/eve_online/esi/alliance_corporations.rb +2 -2
  12. data/lib/eve_online/esi/alliance_icon.rb +2 -2
  13. data/lib/eve_online/esi/alliances.rb +2 -2
  14. data/lib/eve_online/esi/base.rb +22 -0
  15. data/lib/eve_online/esi/character.rb +2 -2
  16. data/lib/eve_online/esi/character_assets.rb +2 -2
  17. data/lib/eve_online/esi/character_assets_locations.rb +2 -2
  18. data/lib/eve_online/esi/character_assets_names.rb +2 -2
  19. data/lib/eve_online/esi/character_attributes.rb +2 -2
  20. data/lib/eve_online/esi/character_blueprints.rb +2 -2
  21. data/lib/eve_online/esi/character_bookmark_folders.rb +2 -2
  22. data/lib/eve_online/esi/character_bookmarks.rb +2 -2
  23. data/lib/eve_online/esi/character_calendar.rb +4 -2
  24. data/lib/eve_online/esi/character_clones.rb +2 -2
  25. data/lib/eve_online/esi/character_fatigue.rb +2 -2
  26. data/lib/eve_online/esi/character_implants.rb +2 -2
  27. data/lib/eve_online/esi/character_industry_jobs.rb +2 -2
  28. data/lib/eve_online/esi/character_killmails_recent.rb +2 -2
  29. data/lib/eve_online/esi/character_location.rb +2 -2
  30. data/lib/eve_online/esi/character_loyalty_points.rb +2 -2
  31. data/lib/eve_online/esi/character_notifications.rb +2 -2
  32. data/lib/eve_online/esi/character_online.rb +2 -2
  33. data/lib/eve_online/esi/character_orders.rb +2 -2
  34. data/lib/eve_online/esi/character_portrait.rb +2 -2
  35. data/lib/eve_online/esi/character_ship.rb +2 -2
  36. data/lib/eve_online/esi/character_skill_queue.rb +2 -2
  37. data/lib/eve_online/esi/character_skills.rb +2 -2
  38. data/lib/eve_online/esi/character_standings.rb +2 -2
  39. data/lib/eve_online/esi/character_wallet.rb +2 -2
  40. data/lib/eve_online/esi/character_wallet_journal.rb +2 -2
  41. data/lib/eve_online/esi/corporation.rb +2 -2
  42. data/lib/eve_online/esi/corporation_blueprints.rb +2 -2
  43. data/lib/eve_online/esi/corporation_industry_jobs.rb +2 -2
  44. data/lib/eve_online/esi/corporation_killmails_recent.rb +2 -2
  45. data/lib/eve_online/esi/corporation_orders.rb +2 -2
  46. data/lib/eve_online/esi/dogma_attribute.rb +2 -2
  47. data/lib/eve_online/esi/dogma_attributes.rb +2 -2
  48. data/lib/eve_online/esi/dogma_effect.rb +2 -2
  49. data/lib/eve_online/esi/dogma_effects.rb +2 -2
  50. data/lib/eve_online/esi/market_history.rb +2 -2
  51. data/lib/eve_online/esi/models/bookmark.rb +5 -15
  52. data/lib/eve_online/esi/models/coordinates.rb +30 -0
  53. data/lib/eve_online/esi/models/jump_clone.rb +1 -2
  54. data/lib/eve_online/esi/server_status.rb +2 -2
  55. data/lib/eve_online/esi/universe_ancestries.rb +2 -2
  56. data/lib/eve_online/esi/universe_asteroid_belt.rb +2 -2
  57. data/lib/eve_online/esi/universe_bloodlines.rb +2 -2
  58. data/lib/eve_online/esi/universe_categories.rb +2 -2
  59. data/lib/eve_online/esi/universe_category.rb +2 -2
  60. data/lib/eve_online/esi/universe_constellation.rb +2 -2
  61. data/lib/eve_online/esi/universe_constellations.rb +2 -2
  62. data/lib/eve_online/esi/universe_factions.rb +2 -2
  63. data/lib/eve_online/esi/universe_graphic.rb +2 -2
  64. data/lib/eve_online/esi/universe_graphics.rb +2 -2
  65. data/lib/eve_online/esi/universe_group.rb +2 -2
  66. data/lib/eve_online/esi/universe_groups.rb +2 -2
  67. data/lib/eve_online/esi/universe_moon.rb +2 -2
  68. data/lib/eve_online/esi/universe_planet.rb +2 -2
  69. data/lib/eve_online/esi/universe_races.rb +2 -2
  70. data/lib/eve_online/esi/universe_region.rb +2 -2
  71. data/lib/eve_online/esi/universe_regions.rb +2 -2
  72. data/lib/eve_online/esi/universe_star.rb +2 -2
  73. data/lib/eve_online/esi/universe_stargate.rb +2 -2
  74. data/lib/eve_online/esi/universe_station.rb +2 -2
  75. data/lib/eve_online/esi/universe_structures.rb +2 -2
  76. data/lib/eve_online/esi/universe_system.rb +2 -2
  77. data/lib/eve_online/esi/universe_system_jumps.rb +2 -2
  78. data/lib/eve_online/esi/universe_system_kills.rb +2 -2
  79. data/lib/eve_online/esi/universe_systems.rb +2 -2
  80. data/lib/eve_online/esi/universe_type.rb +2 -2
  81. data/lib/eve_online/esi/universe_types.rb +2 -2
  82. data/lib/eve_online/esi/war_killmails.rb +2 -2
  83. data/lib/eve_online/esi/wars.rb +7 -2
  84. data/lib/eve_online/version.rb +1 -1
  85. metadata +3 -2
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class CharacterWallet < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/characters/%<character_id>s/wallet/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/characters/%<character_id>s/wallet/?datasource=%<datasource>s'
7
7
 
8
8
  attr_reader :character_id
9
9
 
@@ -28,7 +28,7 @@ module EveOnline
28
28
  end
29
29
 
30
30
  def url
31
- format(API_ENDPOINT, character_id: character_id, datasource: datasource)
31
+ format("#{ API_HOST }#{ API_PATH }", character_id: character_id, datasource: datasource)
32
32
  end
33
33
  end
34
34
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class CharacterWalletJournal < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v5/characters/%<character_id>s/wallet/journal/?datasource=%<datasource>s&page=%<page>s'
6
+ API_PATH = '/v5/characters/%<character_id>s/wallet/journal/?datasource=%<datasource>s&page=%<page>s'
7
7
 
8
8
  attr_reader :character_id, :page
9
9
 
@@ -30,7 +30,7 @@ module EveOnline
30
30
  end
31
31
 
32
32
  def url
33
- format(API_ENDPOINT, character_id: character_id, datasource: datasource, page: page)
33
+ format("#{ API_HOST }#{ API_PATH }", character_id: character_id, datasource: datasource, page: page)
34
34
  end
35
35
  end
36
36
  end
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class Corporation < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v4/corporations/%<corporation_id>s/?datasource=%<datasource>s'
10
+ API_PATH = '/v4/corporations/%<corporation_id>s/?datasource=%<datasource>s'
11
11
 
12
12
  attr_reader :corporation_id
13
13
 
@@ -29,7 +29,7 @@ module EveOnline
29
29
  def scope; end
30
30
 
31
31
  def url
32
- format(API_ENDPOINT, corporation_id: corporation_id, datasource: datasource)
32
+ format("#{ API_HOST }#{ API_PATH }", corporation_id: corporation_id, datasource: datasource)
33
33
  end
34
34
  end
35
35
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class CorporationBlueprints < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v2/corporations/%<corporation_id>s/blueprints/?datasource=%<datasource>s&page=%<page>s'
6
+ API_PATH = '/v2/corporations/%<corporation_id>s/blueprints/?datasource=%<datasource>s&page=%<page>s'
7
7
 
8
8
  attr_reader :corporation_id, :page
9
9
 
@@ -30,7 +30,7 @@ module EveOnline
30
30
  end
31
31
 
32
32
  def url
33
- format(API_ENDPOINT, corporation_id: corporation_id, datasource: datasource, page: page)
33
+ format("#{ API_HOST }#{ API_PATH }", corporation_id: corporation_id, datasource: datasource, page: page)
34
34
  end
35
35
  end
36
36
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class CorporationIndustryJobs < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/corporations/%<corporation_id>s/industry/jobs/?datasource=%<datasource>s&include_completed=%<include_completed>s&page=%<page>s'
6
+ API_PATH = '/v1/corporations/%<corporation_id>s/industry/jobs/?datasource=%<datasource>s&include_completed=%<include_completed>s&page=%<page>s'
7
7
 
8
8
  attr_reader :corporation_id, :include_completed, :page
9
9
 
@@ -31,7 +31,7 @@ module EveOnline
31
31
  end
32
32
 
33
33
  def url
34
- format(API_ENDPOINT, corporation_id: corporation_id, include_completed: include_completed, datasource: datasource, page: page)
34
+ format("#{ API_HOST }#{ API_PATH }", corporation_id: corporation_id, include_completed: include_completed, datasource: datasource, page: page)
35
35
  end
36
36
  end
37
37
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class CorporationKillmailsRecent < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/corporations/%<corporation_id>s/killmails/recent/?datasource=%<datasource>s&page=%<page>s'
6
+ API_PATH = '/v1/corporations/%<corporation_id>s/killmails/recent/?datasource=%<datasource>s&page=%<page>s'
7
7
 
8
8
  attr_reader :corporation_id, :page
9
9
 
@@ -30,7 +30,7 @@ module EveOnline
30
30
  end
31
31
 
32
32
  def url
33
- format(API_ENDPOINT, corporation_id: corporation_id, datasource: datasource, page: page)
33
+ format("#{ API_HOST }#{ API_PATH }", corporation_id: corporation_id, datasource: datasource, page: page)
34
34
  end
35
35
  end
36
36
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class CorporationOrders < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v3/corporations/%<corporation_id>s/orders/?datasource=%<datasource>s&page=%<page>s'
6
+ API_PATH = '/v3/corporations/%<corporation_id>s/orders/?datasource=%<datasource>s&page=%<page>s'
7
7
 
8
8
  attr_reader :corporation_id, :page
9
9
 
@@ -35,7 +35,7 @@ module EveOnline
35
35
  # end
36
36
 
37
37
  def url
38
- format(API_ENDPOINT, corporation_id: corporation_id, datasource: datasource, page: page)
38
+ format("#{ API_HOST }#{ API_PATH }", corporation_id: corporation_id, datasource: datasource, page: page)
39
39
  end
40
40
  end
41
41
  end
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class DogmaAttribute < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v1/dogma/attributes/%<attribute_id>s/?datasource=%<datasource>s'
10
+ API_PATH = '/v1/dogma/attributes/%<attribute_id>s/?datasource=%<datasource>s'
11
11
 
12
12
  attr_reader :id
13
13
 
@@ -28,7 +28,7 @@ module EveOnline
28
28
  def scope; end
29
29
 
30
30
  def url
31
- format(API_ENDPOINT, attribute_id: id, datasource: datasource)
31
+ format("#{ API_HOST }#{ API_PATH }", attribute_id: id, datasource: datasource)
32
32
  end
33
33
  end
34
34
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class DogmaAttributes < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/dogma/attributes/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/dogma/attributes/?datasource=%<datasource>s'
7
7
 
8
8
  def attribute_ids
9
9
  response
@@ -12,7 +12,7 @@ module EveOnline
12
12
  def scope; end
13
13
 
14
14
  def url
15
- format(API_ENDPOINT, datasource: datasource)
15
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
16
16
  end
17
17
  end
18
18
  end
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class DogmaEffect < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v2/dogma/effects/%<effect_id>s/?datasource=%<datasource>s'
10
+ API_PATH = '/v2/dogma/effects/%<effect_id>s/?datasource=%<datasource>s'
11
11
 
12
12
  attr_reader :id
13
13
 
@@ -33,7 +33,7 @@ module EveOnline
33
33
  def scope; end
34
34
 
35
35
  def url
36
- format(API_ENDPOINT, effect_id: id, datasource: datasource)
36
+ format("#{ API_HOST }#{ API_PATH }", effect_id: id, datasource: datasource)
37
37
  end
38
38
  end
39
39
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class DogmaEffects < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/dogma/effects/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/dogma/effects/?datasource=%<datasource>s'
7
7
 
8
8
  def effect_ids
9
9
  response
@@ -12,7 +12,7 @@ module EveOnline
12
12
  def scope; end
13
13
 
14
14
  def url
15
- format(API_ENDPOINT, datasource: datasource)
15
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
16
16
  end
17
17
  end
18
18
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class MarketHistory < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/markets/%<region_id>s/history/?datasource=%<datasource>s&type_id=%<type_id>s'
6
+ API_PATH = '/v1/markets/%<region_id>s/history/?datasource=%<datasource>s&type_id=%<type_id>s'
7
7
 
8
8
  attr_reader :region_id, :type_id
9
9
 
@@ -28,7 +28,7 @@ module EveOnline
28
28
  def scope; end
29
29
 
30
30
  def url
31
- format(API_ENDPOINT, region_id: region_id, type_id: type_id, datasource: datasource)
31
+ format("#{ API_HOST }#{ API_PATH }", region_id: region_id, type_id: type_id, datasource: datasource)
32
32
  end
33
33
  end
34
34
  end
@@ -7,9 +7,6 @@ module EveOnline
7
7
  def as_json
8
8
  {
9
9
  bookmark_id: bookmark_id,
10
- coordinate_x: coordinate_x,
11
- coordinate_y: coordinate_y,
12
- coordinate_z: coordinate_z,
13
10
  created: created,
14
11
  creator_id: creator_id,
15
12
  folder_id: folder_id,
@@ -25,18 +22,6 @@ module EveOnline
25
22
  options['bookmark_id']
26
23
  end
27
24
 
28
- def coordinate_x
29
- options['coordinates']['x'] if options['coordinates']
30
- end
31
-
32
- def coordinate_y
33
- options['coordinates']['y'] if options['coordinates']
34
- end
35
-
36
- def coordinate_z
37
- options['coordinates']['z'] if options['coordinates']
38
- end
39
-
40
25
  def created
41
26
  created = options['created']
42
27
 
@@ -51,6 +36,7 @@ module EveOnline
51
36
  options['folder_id']
52
37
  end
53
38
 
39
+ # TODO: extract to class Item
54
40
  def item_id
55
41
  options['item']['item_id'] if options['item']
56
42
  end
@@ -70,6 +56,10 @@ module EveOnline
70
56
  def notes
71
57
  options['notes']
72
58
  end
59
+
60
+ def coordinates
61
+ @coordinates ||= Coordinates.new(options['coordinates'])
62
+ end
73
63
  end
74
64
  end
75
65
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EveOnline
4
+ module ESI
5
+ module Models
6
+ class Coordinates < Base
7
+ def as_json
8
+ {
9
+ x: x,
10
+ y: y,
11
+ z: z
12
+ }
13
+ end
14
+
15
+ # TODO: check 'options && '
16
+ def x
17
+ options && options['x']
18
+ end
19
+
20
+ def y
21
+ options && options['y']
22
+ end
23
+
24
+ def z
25
+ options && options['z']
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -6,7 +6,6 @@ module EveOnline
6
6
  class JumpClone < Base
7
7
  def as_json
8
8
  {
9
- implants: implants,
10
9
  jump_clone_id: jump_clone_id,
11
10
  location_id: location_id,
12
11
  location_type: location_type,
@@ -14,7 +13,7 @@ module EveOnline
14
13
  }
15
14
  end
16
15
 
17
- def implants
16
+ def implant_ids
18
17
  options['implants']
19
18
  end
20
19
 
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class ServerStatus < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v1/status/?datasource=%<datasource>s'
10
+ API_PATH = '/v1/status/?datasource=%<datasource>s'
11
11
 
12
12
  def_delegators :model, :as_json, :players, :server_version, :start_time, :vip
13
13
 
@@ -18,7 +18,7 @@ module EveOnline
18
18
  def scope; end
19
19
 
20
20
  def url
21
- format(API_ENDPOINT, datasource: datasource)
21
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
22
22
  end
23
23
  end
24
24
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class UniverseAncestries < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/ancestries/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/universe/ancestries/?datasource=%<datasource>s'
7
7
 
8
8
  def ancestries
9
9
  @ancestries ||=
@@ -19,7 +19,7 @@ module EveOnline
19
19
  def scope; end
20
20
 
21
21
  def url
22
- format(API_ENDPOINT, datasource: datasource)
22
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
23
23
  end
24
24
  end
25
25
  end
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class UniverseAsteroidBelt < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/asteroid_belts/%<asteroid_belt_id>s/?datasource=%<datasource>s'
10
+ API_PATH = '/v1/universe/asteroid_belts/%<asteroid_belt_id>s/?datasource=%<datasource>s'
11
11
 
12
12
  attr_reader :id
13
13
 
@@ -26,7 +26,7 @@ module EveOnline
26
26
  def scope; end
27
27
 
28
28
  def url
29
- format(API_ENDPOINT, asteroid_belt_id: id, datasource: datasource)
29
+ format("#{ API_HOST }#{ API_PATH }", asteroid_belt_id: id, datasource: datasource)
30
30
  end
31
31
  end
32
32
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class UniverseBloodlines < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/bloodlines/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/universe/bloodlines/?datasource=%<datasource>s'
7
7
 
8
8
  def bloodlines
9
9
  @bloodlines ||=
@@ -19,7 +19,7 @@ module EveOnline
19
19
  def scope; end
20
20
 
21
21
  def url
22
- format(API_ENDPOINT, datasource: datasource)
22
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
23
23
  end
24
24
  end
25
25
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class UniverseCategories < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/categories/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/universe/categories/?datasource=%<datasource>s'
7
7
 
8
8
  def category_ids
9
9
  response
@@ -12,7 +12,7 @@ module EveOnline
12
12
  def scope; end
13
13
 
14
14
  def url
15
- format(API_ENDPOINT, datasource: datasource)
15
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
16
16
  end
17
17
  end
18
18
  end
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class UniverseCategory < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/categories/%<category_id>s/?datasource=%<datasource>s'
10
+ API_PATH = '/v1/universe/categories/%<category_id>s/?datasource=%<datasource>s'
11
11
 
12
12
  attr_reader :id
13
13
 
@@ -27,7 +27,7 @@ module EveOnline
27
27
  def scope; end
28
28
 
29
29
  def url
30
- format(API_ENDPOINT, category_id: id, datasource: datasource)
30
+ format("#{ API_HOST }#{ API_PATH }", category_id: id, datasource: datasource)
31
31
  end
32
32
  end
33
33
  end
@@ -7,7 +7,7 @@ module EveOnline
7
7
  class UniverseConstellation < Base
8
8
  extend Forwardable
9
9
 
10
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/constellations/%<constellation_id>s/?datasource=%<datasource>s'
10
+ API_PATH = '/v1/universe/constellations/%<constellation_id>s/?datasource=%<datasource>s'
11
11
 
12
12
  attr_reader :id
13
13
 
@@ -27,7 +27,7 @@ module EveOnline
27
27
  def scope; end
28
28
 
29
29
  def url
30
- format(API_ENDPOINT, constellation_id: id, datasource: datasource)
30
+ format("#{ API_HOST }#{ API_PATH }", constellation_id: id, datasource: datasource)
31
31
  end
32
32
  end
33
33
  end
@@ -3,7 +3,7 @@
3
3
  module EveOnline
4
4
  module ESI
5
5
  class UniverseConstellations < Base
6
- API_ENDPOINT = 'https://esi.evetech.net/v1/universe/constellations/?datasource=%<datasource>s'
6
+ API_PATH = '/v1/universe/constellations/?datasource=%<datasource>s'
7
7
 
8
8
  def constellation_ids
9
9
  response
@@ -12,7 +12,7 @@ module EveOnline
12
12
  def scope; end
13
13
 
14
14
  def url
15
- format(API_ENDPOINT, datasource: datasource)
15
+ format("#{ API_HOST }#{ API_PATH }", datasource: datasource)
16
16
  end
17
17
  end
18
18
  end