eve_online 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -1
  3. data/.rubocop-thread_safety.yml +9 -0
  4. data/.rubocop.yml +26 -102
  5. data/.rubocop_general.yml +94 -0
  6. data/.rubocop_rspec.yml +61 -0
  7. data/.rubocop_todo.yml +0 -0
  8. data/.travis.yml +14 -29
  9. data/CHANGELOG.md +329 -0
  10. data/Gemfile +1 -2
  11. data/README.md +840 -1088
  12. data/eve_online.gemspec +8 -8
  13. data/lib/eve_online.rb +45 -59
  14. data/lib/eve_online/esi/alliance.rb +33 -0
  15. data/lib/eve_online/esi/alliance_icon.rb +32 -0
  16. data/lib/eve_online/esi/base.rb +3 -2
  17. data/lib/eve_online/esi/bloodlines.rb +22 -0
  18. data/lib/eve_online/esi/character.rb +13 -56
  19. data/lib/eve_online/esi/character_assets.rb +32 -0
  20. data/lib/eve_online/esi/character_attributes.rb +36 -0
  21. data/lib/eve_online/esi/character_blueprints.rb +32 -0
  22. data/lib/eve_online/esi/character_clones.rb +43 -0
  23. data/lib/eve_online/esi/character_fatigue.rb +35 -0
  24. data/lib/eve_online/esi/character_implants.rb +27 -0
  25. data/lib/eve_online/esi/character_industry_jobs.rb +33 -0
  26. data/lib/eve_online/esi/character_loyalty_points.rb +4 -3
  27. data/lib/eve_online/esi/character_portrait.rb +12 -40
  28. data/lib/eve_online/esi/character_skill_queue.rb +6 -5
  29. data/lib/eve_online/esi/character_skills.rb +6 -5
  30. data/lib/eve_online/esi/character_standings.rb +32 -0
  31. data/lib/eve_online/esi/character_wallet.rb +33 -0
  32. data/lib/eve_online/esi/corporation.rb +35 -0
  33. data/lib/eve_online/esi/corporation_industry_jobs.rb +33 -0
  34. data/lib/eve_online/esi/dogma_attribute.rb +34 -0
  35. data/lib/eve_online/esi/dogma_attributes.rb +17 -0
  36. data/lib/eve_online/esi/factions.rb +22 -0
  37. data/lib/eve_online/esi/models/alliance.rb +34 -0
  38. data/lib/eve_online/esi/models/alliance_icon.rb +22 -0
  39. data/lib/eve_online/esi/models/asset.rb +47 -0
  40. data/lib/eve_online/esi/models/attributes.rb +56 -0
  41. data/lib/eve_online/esi/models/base.rb +21 -0
  42. data/lib/eve_online/esi/models/bloodline.rb +67 -0
  43. data/lib/eve_online/esi/models/blueprint.rb +52 -0
  44. data/lib/eve_online/esi/models/character.rb +64 -0
  45. data/lib/eve_online/esi/models/character_portrait.rb +48 -0
  46. data/lib/eve_online/esi/models/corporation.rb +69 -0
  47. data/lib/eve_online/esi/models/dogma_attribute.rb +62 -0
  48. data/lib/eve_online/esi/models/faction.rb +62 -0
  49. data/lib/eve_online/esi/models/fatigue.rb +33 -0
  50. data/lib/eve_online/esi/models/home_location.rb +22 -0
  51. data/lib/eve_online/esi/models/industry_job.rb +130 -0
  52. data/lib/eve_online/esi/models/jump_clone.rb +27 -0
  53. data/lib/eve_online/esi/models/loyalty_point.rb +1 -7
  54. data/lib/eve_online/esi/models/race.rb +32 -0
  55. data/lib/eve_online/esi/models/server_status.rb +34 -0
  56. data/lib/eve_online/esi/models/skill.rb +1 -7
  57. data/lib/eve_online/esi/models/skill_queue_entry.rb +13 -17
  58. data/lib/eve_online/esi/models/standing.rb +27 -0
  59. data/lib/eve_online/esi/races.rb +22 -0
  60. data/lib/eve_online/esi/server_status.rb +8 -24
  61. data/lib/eve_online/version.rb +1 -1
  62. metadata +67 -83
  63. data/.codeclimate.yml +0 -11
  64. data/.editorconfig +0 -10
  65. data/.rspec +0 -1
  66. data/lib/eve_online/base_crest.rb +0 -11
  67. data/lib/eve_online/blueprint.rb +0 -60
  68. data/lib/eve_online/character.rb +0 -54
  69. data/lib/eve_online/character_implants.rb +0 -29
  70. data/lib/eve_online/character_jump_clone_implants.rb +0 -29
  71. data/lib/eve_online/character_jump_clones.rb +0 -29
  72. data/lib/eve_online/character_skills.rb +0 -29
  73. data/lib/eve_online/eve/character_id.rb +0 -41
  74. data/lib/eve_online/implant.rb +0 -24
  75. data/lib/eve_online/item.rb +0 -49
  76. data/lib/eve_online/jump_clone.rb +0 -34
  77. data/lib/eve_online/jump_clone_implant.rb +0 -29
  78. data/lib/eve_online/sde/chr_races.rb +0 -14
  79. data/lib/eve_online/sde/models/chr_race.rb +0 -38
  80. data/lib/eve_online/skill.rb +0 -34
  81. data/lib/eve_online/sovereignty/campaigns.rb +0 -28
  82. data/lib/eve_online/standing.rb +0 -29
  83. data/lib/eve_online/xml/account_characters.rb +0 -48
  84. data/lib/eve_online/xml/account_status.rb +0 -31
  85. data/lib/eve_online/xml/api_key_info.rb +0 -63
  86. data/lib/eve_online/xml/character_account_balance.rb +0 -59
  87. data/lib/eve_online/xml/character_asset_list.rb +0 -54
  88. data/lib/eve_online/xml/character_blueprints.rb +0 -53
  89. data/lib/eve_online/xml/character_calendar_event_attendees.rb +0 -24
  90. data/lib/eve_online/xml/character_chat_channels.rb +0 -25
  91. data/lib/eve_online/xml/character_contact_list.rb +0 -25
  92. data/lib/eve_online/xml/character_contract_bids.rb +0 -23
  93. data/lib/eve_online/xml/character_contract_items.rb +0 -24
  94. data/lib/eve_online/xml/character_contracts.rb +0 -26
  95. data/lib/eve_online/xml/character_fac_war_stats.rb +0 -23
  96. data/lib/eve_online/xml/character_industry_jobs.rb +0 -23
  97. data/lib/eve_online/xml/character_industry_jobs_history.rb +0 -23
  98. data/lib/eve_online/xml/character_kill_mails.rb +0 -25
  99. data/lib/eve_online/xml/character_locations.rb +0 -32
  100. data/lib/eve_online/xml/character_mail_bodies.rb +0 -30
  101. data/lib/eve_online/xml/character_mail_messages.rb +0 -23
  102. data/lib/eve_online/xml/character_mailing_lists.rb +0 -23
  103. data/lib/eve_online/xml/character_medals.rb +0 -23
  104. data/lib/eve_online/xml/character_notification_texts.rb +0 -32
  105. data/lib/eve_online/xml/character_notifications.rb +0 -23
  106. data/lib/eve_online/xml/character_planetary_colonies.rb +0 -23
  107. data/lib/eve_online/xml/character_planetary_links.rb +0 -24
  108. data/lib/eve_online/xml/character_planetary_pins.rb +0 -24
  109. data/lib/eve_online/xml/character_planetary_routes.rb +0 -24
  110. data/lib/eve_online/xml/character_research.rb +0 -23
  111. data/lib/eve_online/xml/character_sheet.rb +0 -231
  112. data/lib/eve_online/xml/character_skill_in_training.rb +0 -68
  113. data/lib/eve_online/xml/character_skill_queue.rb +0 -51
  114. data/lib/eve_online/xml/character_standings.rb +0 -67
  115. data/lib/eve_online/xml/character_wallet_transactions.rb +0 -24
  116. data/lib/eve_online/xml/models/account_status.rb +0 -40
  117. data/lib/eve_online/xml/models/account_type_object.rb +0 -22
  118. data/lib/eve_online/xml/models/api_key_info.rb +0 -35
  119. data/lib/eve_online/xml/models/skill_queue_entry.rb +0 -55
  120. data/lib/eve_online/xml/server_status.rb +0 -31
@@ -8,28 +8,28 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Igor Zubkov']
9
9
  spec.email = ['igor.zubkov@gmail.com']
10
10
 
11
- spec.summary = 'EveOnline API. XML, CREST and ESI. And SDE.'
12
- spec.description = 'EveOnline API. XML, CREST and ESI. And SDE.'
11
+ spec.summary = 'EveOnline API. XML, ESI and SDE.'
12
+ spec.description = 'EveOnline API. XML, ESI and SDE.'
13
13
  spec.homepage = 'https://github.com/biow0lf/eve_online'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|bin)/}) }
17
17
  spec.require_paths = ['lib']
18
18
 
19
- spec.required_ruby_version = '>= 1.9.3'
19
+ spec.required_ruby_version = '>= 2.2'
20
20
 
21
- spec.add_development_dependency 'bundler', '~> 1.10'
21
+ spec.add_development_dependency 'bundler'
22
+ spec.add_development_dependency 'codeclimate-test-reporter'
22
23
  spec.add_development_dependency 'rake'
23
24
  spec.add_development_dependency 'rspec'
24
25
  spec.add_development_dependency 'rspec-its'
25
26
  spec.add_development_dependency 'simplecov'
26
- spec.add_development_dependency 'codeclimate-test-reporter'
27
27
 
28
28
  spec.add_runtime_dependency 'activesupport', '>= 3.0.0'
29
- spec.add_runtime_dependency 'nori', '~> 2.6'
29
+ spec.add_runtime_dependency 'faraday'
30
30
  spec.add_runtime_dependency 'json'
31
+ spec.add_runtime_dependency 'memoist'
32
+ spec.add_runtime_dependency 'nori', '~> 2.6'
31
33
  # spec.add_runtime_dependency 'bitset'
32
34
  # spec.add_runtime_dependency 'hashformer'
33
- spec.add_runtime_dependency 'memoist'
34
- spec.add_runtime_dependency 'faraday'
35
35
  end
@@ -7,82 +7,25 @@ require 'eve_online/exceptions/invalid_character_id_exception'
7
7
 
8
8
  require 'eve_online/base'
9
9
  require 'eve_online/base_xml'
10
- require 'eve_online/base_crest'
11
10
 
12
- require 'eve_online/blueprint'
13
11
  require 'eve_online/bookmark'
14
12
  require 'eve_online/bookmark_folder'
15
- require 'eve_online/character'
16
13
  require 'eve_online/event'
17
14
  require 'eve_online/event_response_object'
18
- require 'eve_online/item'
19
- require 'eve_online/implant'
20
- require 'eve_online/skill'
21
- require 'eve_online/jump_clone'
22
- require 'eve_online/jump_clone_implant'
23
- require 'eve_online/character_skills'
24
- require 'eve_online/character_implants'
25
- require 'eve_online/character_jump_clones'
26
- require 'eve_online/character_jump_clone_implants'
27
- require 'eve_online/standing'
28
15
  require 'eve_online/contact_notification'
29
16
  require 'eve_online/wallet_journal_entry'
30
17
  require 'eve_online/market_order'
31
18
 
32
- require 'eve_online/eve/character_id'
33
-
34
- require 'eve_online/sovereignty/campaigns'
35
-
36
19
  # XML API
37
20
  require 'eve_online/xml/base'
38
- require 'eve_online/xml/account_status'
39
- require 'eve_online/xml/api_key_info'
40
- require 'eve_online/xml/account_characters'
41
- require 'eve_online/xml/character_account_balance'
42
- require 'eve_online/xml/character_asset_list'
43
- require 'eve_online/xml/character_blueprints'
44
21
  require 'eve_online/xml/character_bookmarks'
45
- require 'eve_online/xml/character_sheet'
46
- require 'eve_online/xml/character_medals'
47
- require 'eve_online/xml/character_skill_queue'
48
- require 'eve_online/xml/character_chat_channels'
49
- require 'eve_online/xml/character_calendar_event_attendees'
50
- require 'eve_online/xml/character_contact_list'
51
22
  require 'eve_online/xml/character_contact_notifications'
52
23
  require 'eve_online/xml/character_upcoming_calendar_events'
53
- require 'eve_online/xml/character_skill_in_training'
54
- require 'eve_online/xml/character_standings'
55
- require 'eve_online/xml/character_contracts'
56
- require 'eve_online/xml/character_contract_bids'
57
- require 'eve_online/xml/character_contract_items'
58
- require 'eve_online/xml/character_fac_war_stats'
59
- require 'eve_online/xml/character_industry_jobs'
60
- require 'eve_online/xml/character_industry_jobs_history'
61
- require 'eve_online/xml/character_kill_mails'
62
- require 'eve_online/xml/character_locations'
63
- require 'eve_online/xml/character_mail_bodies'
64
- require 'eve_online/xml/character_mailing_lists'
65
- require 'eve_online/xml/character_mail_messages'
66
24
  require 'eve_online/xml/character_market_orders'
67
- require 'eve_online/xml/character_notifications'
68
- require 'eve_online/xml/character_notification_texts'
69
- require 'eve_online/xml/character_planetary_colonies'
70
- require 'eve_online/xml/character_planetary_links'
71
- require 'eve_online/xml/character_planetary_pins'
72
- require 'eve_online/xml/character_planetary_routes'
73
- require 'eve_online/xml/character_research'
74
25
  require 'eve_online/xml/character_wallet_journal'
75
- require 'eve_online/xml/character_wallet_transactions'
76
-
77
- require 'eve_online/xml/server_status'
78
26
 
79
27
  require 'eve_online/xml/corporation_market_orders'
80
28
 
81
- require 'eve_online/xml/models/account_status'
82
- require 'eve_online/xml/models/api_key_info'
83
- require 'eve_online/xml/models/skill_queue_entry'
84
- require 'eve_online/xml/models/account_type_object'
85
-
86
29
  # ESI API
87
30
  require 'eve_online/esi/base'
88
31
 
@@ -91,11 +34,56 @@ require 'eve_online/esi/character_portrait'
91
34
  require 'eve_online/esi/character_skills'
92
35
  require 'eve_online/esi/character_skill_queue'
93
36
  require 'eve_online/esi/character_loyalty_points'
37
+ require 'eve_online/esi/character_wallet'
38
+ require 'eve_online/esi/character_assets'
39
+ require 'eve_online/esi/character_attributes'
40
+ require 'eve_online/esi/character_industry_jobs'
41
+ require 'eve_online/esi/character_clones'
42
+ require 'eve_online/esi/character_implants'
43
+ require 'eve_online/esi/character_blueprints'
44
+ require 'eve_online/esi/character_standings'
45
+ require 'eve_online/esi/character_fatigue'
46
+
47
+ require 'eve_online/esi/corporation'
48
+ require 'eve_online/esi/corporation_industry_jobs'
49
+
50
+ require 'eve_online/esi/alliance'
51
+ require 'eve_online/esi/alliance_icon'
52
+
53
+ require 'eve_online/esi/dogma_attributes'
54
+ require 'eve_online/esi/dogma_attribute'
55
+
94
56
  require 'eve_online/esi/server_status'
57
+ require 'eve_online/esi/races'
58
+ require 'eve_online/esi/bloodlines'
59
+ require 'eve_online/esi/factions'
95
60
 
61
+ require 'eve_online/esi/models/base'
96
62
  require 'eve_online/esi/models/loyalty_point'
97
63
  require 'eve_online/esi/models/skill_queue_entry'
98
64
  require 'eve_online/esi/models/skill'
65
+ require 'eve_online/esi/models/asset'
66
+ require 'eve_online/esi/models/attributes'
67
+ require 'eve_online/esi/models/character'
68
+ require 'eve_online/esi/models/industry_job'
69
+ require 'eve_online/esi/models/character_portrait'
70
+ require 'eve_online/esi/models/blueprint'
71
+ require 'eve_online/esi/models/standing'
72
+ require 'eve_online/esi/models/fatigue'
73
+ require 'eve_online/esi/models/jump_clone'
74
+ require 'eve_online/esi/models/home_location'
75
+ require 'eve_online/esi/models/server_status'
76
+
77
+ require 'eve_online/esi/models/corporation'
78
+
79
+ require 'eve_online/esi/models/alliance'
80
+ require 'eve_online/esi/models/alliance_icon'
81
+
82
+ require 'eve_online/esi/models/dogma_attribute'
83
+
84
+ require 'eve_online/esi/models/race'
85
+ require 'eve_online/esi/models/bloodline'
86
+ require 'eve_online/esi/models/faction'
99
87
 
100
88
  # SDE
101
89
  require 'eve_online/sde/base'
@@ -103,7 +91,6 @@ require 'eve_online/sde/base'
103
91
  require 'eve_online/sde/agt_agent_types'
104
92
  require 'eve_online/sde/agt_agents'
105
93
  require 'eve_online/sde/agt_research_agents'
106
- require 'eve_online/sde/chr_races'
107
94
  require 'eve_online/sde/inv_flags'
108
95
  require 'eve_online/sde/inv_items'
109
96
  require 'eve_online/sde/inv_names'
@@ -112,7 +99,6 @@ require 'eve_online/sde/inv_positions'
112
99
  require 'eve_online/sde/models/agt_agent_type'
113
100
  require 'eve_online/sde/models/agt_agent'
114
101
  require 'eve_online/sde/models/agt_research_agent'
115
- require 'eve_online/sde/models/chr_race'
116
102
  require 'eve_online/sde/models/inv_flag'
117
103
  require 'eve_online/sde/models/inv_item'
118
104
  require 'eve_online/sde/models/inv_name'
@@ -0,0 +1,33 @@
1
+ require 'forwardable'
2
+
3
+ module EveOnline
4
+ module ESI
5
+ class Alliance < Base
6
+ extend Forwardable
7
+
8
+ API_ENDPOINT = 'https://esi.tech.ccp.is/v2/alliances/%s/?datasource=tranquility'.freeze
9
+
10
+ attr_reader :alliance_id
11
+
12
+ def initialize(options)
13
+ super
14
+
15
+ @alliance_id = options[:alliance_id]
16
+ end
17
+
18
+ def_delegators :model, :as_json, :alliance_name,
19
+ :ticker, :date_founded, :executor_corp
20
+
21
+ def model
22
+ Models::Alliance.new(response)
23
+ end
24
+ memoize :model
25
+
26
+ def scope; end
27
+
28
+ def url
29
+ API_ENDPOINT % alliance_id
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require 'forwardable'
2
+
3
+ module EveOnline
4
+ module ESI
5
+ class AllianceIcon < Base
6
+ extend Forwardable
7
+
8
+ API_ENDPOINT = 'https://esi.tech.ccp.is/v1/alliances/%s/icons/?datasource=tranquility'.freeze
9
+
10
+ attr_reader :alliance_id
11
+
12
+ def initialize(options)
13
+ super
14
+
15
+ @alliance_id = options[:alliance_id]
16
+ end
17
+
18
+ def_delegators :model, :as_json, :small, :medium
19
+
20
+ def model
21
+ Models::AllianceIcon.new(response)
22
+ end
23
+ memoize :model
24
+
25
+ def scope; end
26
+
27
+ def url
28
+ API_ENDPOINT % alliance_id
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,4 @@
1
+ require 'json'
1
2
  require 'memoist'
2
3
  require 'active_support/time'
3
4
 
@@ -8,8 +9,8 @@ module EveOnline
8
9
 
9
10
  attr_reader :token, :parser
10
11
 
11
- def initialize(token = nil)
12
- @token = token
12
+ def initialize(options = {})
13
+ @token = options[:token]
13
14
  @parser = JSON
14
15
  end
15
16
 
@@ -0,0 +1,22 @@
1
+ module EveOnline
2
+ module ESI
3
+ class Bloodlines < Base
4
+ API_ENDPOINT = 'https://esi.tech.ccp.is/v1/universe/bloodlines/?datasource=tranquility&language=en-us'.freeze
5
+
6
+ def bloodlines
7
+ output = []
8
+ response.each do |bloodline|
9
+ output << Models::Bloodline.new(bloodline)
10
+ end
11
+ output
12
+ end
13
+ memoize :bloodlines
14
+
15
+ def scope; end
16
+
17
+ def url
18
+ API_ENDPOINT
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,71 +1,28 @@
1
+ require 'forwardable'
2
+
1
3
  module EveOnline
2
4
  module ESI
3
5
  class Character < Base
6
+ extend Forwardable
7
+
4
8
  API_ENDPOINT = 'https://esi.tech.ccp.is/v4/characters/%s/?datasource=tranquility'.freeze
5
9
 
6
10
  attr_reader :character_id
7
11
 
8
- def initialize(character_id)
9
- super()
10
- @character_id = character_id
11
- end
12
-
13
- def as_json
14
- {
15
- corporation_id: corporation_id,
16
- birthday: birthday,
17
- name: name,
18
- gender: gender,
19
- race_id: race_id,
20
- bloodline_id: bloodline_id,
21
- description: description,
22
- alliance_id: alliance_id,
23
- ancestry_id: ancestry_id,
24
- security_status: security_status
25
- }
26
- end
12
+ def initialize(options)
13
+ super
27
14
 
28
- def corporation_id
29
- response['corporation_id']
15
+ @character_id = options[:character_id]
30
16
  end
31
17
 
32
- def birthday
33
- birthday = response['birthday']
34
-
35
- parse_datetime_with_timezone(birthday) if birthday
36
- end
37
-
38
- def name
39
- response['name']
40
- end
41
-
42
- def gender
43
- response['gender']
44
- end
45
-
46
- def race_id
47
- response['race_id']
48
- end
49
-
50
- def bloodline_id
51
- response['bloodline_id']
52
- end
53
-
54
- def description
55
- response['description']
56
- end
57
-
58
- def alliance_id
59
- response['alliance_id']
60
- end
61
-
62
- def ancestry_id
63
- response['ancestry_id']
64
- end
18
+ def_delegators :model, :as_json, :corporation_id, :birthday, :name,
19
+ :gender, :race_id, :bloodline_id, :description,
20
+ :alliance_id, :ancestry_id, :security_status
65
21
 
66
- def security_status
67
- response['security_status']
22
+ def model
23
+ Models::Character.new(response)
68
24
  end
25
+ memoize :model
69
26
 
70
27
  def scope; end
71
28
 
@@ -0,0 +1,32 @@
1
+ module EveOnline
2
+ module ESI
3
+ class CharacterAssets < Base
4
+ API_ENDPOINT = 'https://esi.tech.ccp.is/v1/characters/%s/assets/?datasource=tranquility&page=1'.freeze
5
+
6
+ attr_reader :character_id
7
+
8
+ def initialize(options)
9
+ super
10
+
11
+ @character_id = options[:character_id]
12
+ end
13
+
14
+ def assets
15
+ output = []
16
+ response.each do |asset|
17
+ output << Models::Asset.new(asset)
18
+ end
19
+ output
20
+ end
21
+ memoize :assets
22
+
23
+ def scope
24
+ 'esi-assets.read_assets.v1'
25
+ end
26
+
27
+ def url
28
+ API_ENDPOINT % character_id
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,36 @@
1
+ require 'forwardable'
2
+
3
+ module EveOnline
4
+ module ESI
5
+ class CharacterAttributes < Base
6
+ extend Forwardable
7
+
8
+ API_ENDPOINT = 'https://esi.tech.ccp.is/v1/characters/%s/attributes/?datasource=tranquility'.freeze
9
+
10
+ attr_reader :character_id
11
+
12
+ def initialize(options)
13
+ super
14
+
15
+ @character_id = options[:character_id]
16
+ end
17
+
18
+ def_delegators :model, :as_json, :charisma, :intelligence, :memory,
19
+ :perception, :willpower, :bonus_remaps,
20
+ :last_remap_date, :accrued_remap_cooldown_date
21
+
22
+ def model
23
+ Models::Attributes.new(response)
24
+ end
25
+ memoize :model
26
+
27
+ def scope
28
+ 'esi-skills.read_skills.v1'
29
+ end
30
+
31
+ def url
32
+ API_ENDPOINT % character_id
33
+ end
34
+ end
35
+ end
36
+ end