eve-4 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.gitignore +0 -0
  4. data/.idea/.name +1 -0
  5. data/.idea/.rakeTasks +7 -0
  6. data/.idea/dictionaries/tylercollins.xml +3 -0
  7. data/.idea/encodings.xml +5 -0
  8. data/.idea/eve-updated.iml +58 -0
  9. data/.idea/misc.xml +5 -0
  10. data/.idea/modules.xml +9 -0
  11. data/.idea/scopes/scope_settings.xml +5 -0
  12. data/.idea/vcs.xml +7 -0
  13. data/.idea/workspace.xml +554 -0
  14. data/Gemfile +2 -0
  15. data/Gemfile.lock +108 -0
  16. data/History.txt +7 -0
  17. data/Rakefile +37 -0
  18. data/eve.gemspec +36 -0
  19. data/lib/eve.rb +26 -0
  20. data/lib/eve/api.rb +249 -0
  21. data/lib/eve/api/connectivity.rb +39 -0
  22. data/lib/eve/api/request.rb +80 -0
  23. data/lib/eve/api/response.rb +34 -0
  24. data/lib/eve/api/response/result.rb +87 -0
  25. data/lib/eve/api/response/row.rb +42 -0
  26. data/lib/eve/api/response/rowset.rb +18 -0
  27. data/lib/eve/api/services.rb +20 -0
  28. data/lib/eve/api/services/account.rb +12 -0
  29. data/lib/eve/api/services/character.rb +96 -0
  30. data/lib/eve/api/services/corporation.rb +150 -0
  31. data/lib/eve/api/services/eve.rb +76 -0
  32. data/lib/eve/api/services/map.rb +45 -0
  33. data/lib/eve/api/services/misc.rb +24 -0
  34. data/lib/eve/api/services/server.rb +20 -0
  35. data/lib/eve/dependencies.rb +48 -0
  36. data/lib/eve/deprecation.rb +3 -0
  37. data/lib/eve/errors.rb +129 -0
  38. data/lib/eve/errors/authentication_errors.rb +33 -0
  39. data/lib/eve/errors/internal_errors.rb +64 -0
  40. data/lib/eve/errors/miscellaneous_errors.rb +19 -0
  41. data/lib/eve/errors/user_input_errors.rb +62 -0
  42. data/lib/eve/javascript_helper.rb +196 -0
  43. data/lib/eve/trust.rb +87 -0
  44. data/lib/eve/trust/controller_helpers.rb +86 -0
  45. data/lib/eve/trust/igb_interface.rb +92 -0
  46. data/lib/eve/trust/mime_types.rb +4 -0
  47. data/lib/eve/version.rb +8 -0
  48. data/log/development.log +30 -0
  49. data/spec/controllers/controller_helpers_spec.rb +91 -0
  50. data/spec/helpers/javascript_helper_spec.rb +80 -0
  51. data/spec/helpers/view_helper_spec.rb +7 -0
  52. data/spec/lib/eve/api/calls/account/characters_spec.rb +22 -0
  53. data/spec/lib/eve/api/calls/character/account_balance_spec.rb +21 -0
  54. data/spec/lib/eve/api/calls/character/asset_list_spec.rb +23 -0
  55. data/spec/lib/eve/api/calls/character/character_sheet_spec.rb +51 -0
  56. data/spec/lib/eve/api/calls/character/fac_war_stats_spec.rb +31 -0
  57. data/spec/lib/eve/api/calls/character/industry_jobs_spec.rb +27 -0
  58. data/spec/lib/eve/api/calls/character/kill_log_spec.rb +27 -0
  59. data/spec/lib/eve/api/calls/character/mail_messages_spec.rb +21 -0
  60. data/spec/lib/eve/api/calls/character/mailing_lists_spec.rb +21 -0
  61. data/spec/lib/eve/api/calls/character/market_orders_spec.rb +21 -0
  62. data/spec/lib/eve/api/calls/character/medals_spec.rb +24 -0
  63. data/spec/lib/eve/api/calls/character/research_spec.rb +21 -0
  64. data/spec/lib/eve/api/calls/character/skill_in_training_spec.rb +44 -0
  65. data/spec/lib/eve/api/calls/character/skill_queue_spec.rb +21 -0
  66. data/spec/lib/eve/api/calls/character/standings_spec.rb +26 -0
  67. data/spec/lib/eve/api/calls/character/wallet_journal_spec.rb +21 -0
  68. data/spec/lib/eve/api/calls/character/wallet_transactions_spec.rb +21 -0
  69. data/spec/lib/eve/api/calls/character_portrait_spec.rb +17 -0
  70. data/spec/lib/eve/api/calls/corporation/account_balances_spec.rb +21 -0
  71. data/spec/lib/eve/api/calls/corporation/asset_list_spec.rb +25 -0
  72. data/spec/lib/eve/api/calls/corporation/container_log_spec.rb +23 -0
  73. data/spec/lib/eve/api/calls/corporation/corporation_sheet_spec.rb +36 -0
  74. data/spec/lib/eve/api/calls/corporation/fac_war_stats_spec.rb +23 -0
  75. data/spec/lib/eve/api/calls/corporation/industry_jobs_spec.rb +30 -0
  76. data/spec/lib/eve/api/calls/corporation/kill_log_spec.rb +27 -0
  77. data/spec/lib/eve/api/calls/corporation/market_orders_spec.rb +22 -0
  78. data/spec/lib/eve/api/calls/corporation/medals_spec.rb +21 -0
  79. data/spec/lib/eve/api/calls/corporation/member_medals_spec.rb +21 -0
  80. data/spec/lib/eve/api/calls/corporation/member_security_log_spec.rb +24 -0
  81. data/spec/lib/eve/api/calls/corporation/member_security_spec.rb +25 -0
  82. data/spec/lib/eve/api/calls/corporation/member_tracking_spec.rb +22 -0
  83. data/spec/lib/eve/api/calls/corporation/shareholders_spec.rb +23 -0
  84. data/spec/lib/eve/api/calls/corporation/standings_spec.rb +30 -0
  85. data/spec/lib/eve/api/calls/corporation/starbase_detail_spec.rb +32 -0
  86. data/spec/lib/eve/api/calls/corporation/starbase_list_spec.rb +22 -0
  87. data/spec/lib/eve/api/calls/corporation/titles_spec.rb +26 -0
  88. data/spec/lib/eve/api/calls/corporation/wallet_journal_spec.rb +22 -0
  89. data/spec/lib/eve/api/calls/corporation/wallet_transactions_spec.rb +22 -0
  90. data/spec/lib/eve/api/calls/empty_call_spec.rb +29 -0
  91. data/spec/lib/eve/api/calls/eve/alliance_list_spec.rb +26 -0
  92. data/spec/lib/eve/api/calls/eve/certificate_tree_spec.rb +18 -0
  93. data/spec/lib/eve/api/calls/eve/character_id_spec.rb +27 -0
  94. data/spec/lib/eve/api/calls/eve/conquerable_station_list_spec.rb +11 -0
  95. data/spec/lib/eve/api/calls/eve/error_list_spec.rb +21 -0
  96. data/spec/lib/eve/api/calls/eve/fac_war_stats_spec.rb +25 -0
  97. data/spec/lib/eve/api/calls/eve/fac_war_top_stats_spec.rb +54 -0
  98. data/spec/lib/eve/api/calls/eve/ref_types_spec.rb +11 -0
  99. data/spec/lib/eve/api/calls/eve/skill_tree_spec.rb +17 -0
  100. data/spec/lib/eve/api/calls/map/fac_war_systems_spec.rb +11 -0
  101. data/spec/lib/eve/api/calls/map/jumps_spec.rb +11 -0
  102. data/spec/lib/eve/api/calls/map/kills_spec.rb +11 -0
  103. data/spec/lib/eve/api/calls/map/sovereignty_spec.rb +11 -0
  104. data/spec/lib/eve/api/calls/server_status_spec.rb +28 -0
  105. data/spec/lib/eve/api/request_spec.rb +18 -0
  106. data/spec/lib/eve/api/response/error_spec.rb +13 -0
  107. data/spec/lib/eve/api/response_spec.rb +79 -0
  108. data/spec/lib/eve/api_spec.rb +13 -0
  109. data/spec/lib/eve/core_extensions/hash_spec.rb +23 -0
  110. data/spec/lib/eve/core_extensions/string_spec.rb +8 -0
  111. data/spec/lib/eve/trust/igb_interface_spec.rb +112 -0
  112. data/spec/log/development.log +0 -0
  113. data/spec/rcov.opts +2 -0
  114. data/spec/readme_spec.rb +36 -0
  115. data/spec/sample_api_key.yml +20 -0
  116. data/spec/spec.opts +4 -0
  117. data/spec/spec_helper.rb +63 -0
  118. data/spec/support/behaves_like_rowset.rb +50 -0
  119. data/spec/support/controllers/trust_controller.rb +24 -0
  120. data/spec/support/jpg/mock_portrait.jpg +0 -0
  121. data/spec/support/mock_api_helpers.rb +46 -0
  122. data/spec/support/views/trust/html_and_igb.html.erb +1 -0
  123. data/spec/support/views/trust/html_and_igb.igb.erb +1 -0
  124. data/spec/support/views/trust/html_only.html.erb +1 -0
  125. data/spec/support/views/trust/igb_only.igb.erb +1 -0
  126. data/spec/support/xml/account/characters.xml +15 -0
  127. data/spec/support/xml/character/account_balance.xml +10 -0
  128. data/spec/support/xml/character/asset_list.xml +50 -0
  129. data/spec/support/xml/character/character_sheet.xml +65 -0
  130. data/spec/support/xml/character/fac_war_stats.xml +20 -0
  131. data/spec/support/xml/character/industry_jobs.xml +70 -0
  132. data/spec/support/xml/character/kill_log.xml +51 -0
  133. data/spec/support/xml/character/mail_messages.xml +12 -0
  134. data/spec/support/xml/character/mailing_lists.xml +12 -0
  135. data/spec/support/xml/character/market_orders.xml +11 -0
  136. data/spec/support/xml/character/medals.xml +13 -0
  137. data/spec/support/xml/character/research.xml +13 -0
  138. data/spec/support/xml/character/skill_in_training.xml +14 -0
  139. data/spec/support/xml/character/skill_not_in_training.xml +7 -0
  140. data/spec/support/xml/character/skill_queue.xml +11 -0
  141. data/spec/support/xml/character/standings.xml +32 -0
  142. data/spec/support/xml/character/wallet_journal.xml +39 -0
  143. data/spec/support/xml/character/wallet_transactions.xml +44 -0
  144. data/spec/support/xml/corporation/account_balance.xml +15 -0
  145. data/spec/support/xml/corporation/asset_list.xml +50 -0
  146. data/spec/support/xml/corporation/container_log.xml +32 -0
  147. data/spec/support/xml/corporation/fac_war_stats.xml +19 -0
  148. data/spec/support/xml/corporation/industry_jobs.xml +70 -0
  149. data/spec/support/xml/corporation/kill_log.xml +51 -0
  150. data/spec/support/xml/corporation/market_orders.xml +37 -0
  151. data/spec/support/xml/corporation/medals.xml +8 -0
  152. data/spec/support/xml/corporation/member_corporation_sheet.xml +51 -0
  153. data/spec/support/xml/corporation/member_medals.xml +10 -0
  154. data/spec/support/xml/corporation/member_security.xml +21 -0
  155. data/spec/support/xml/corporation/member_security_log.xml +55 -0
  156. data/spec/support/xml/corporation/member_tracking.xml +18 -0
  157. data/spec/support/xml/corporation/non_member_corporation_sheet.xml +30 -0
  158. data/spec/support/xml/corporation/shareholders.xml +11 -0
  159. data/spec/support/xml/corporation/standings.xml +33 -0
  160. data/spec/support/xml/corporation/starbase_detail.xml +33 -0
  161. data/spec/support/xml/corporation/starbase_list.xml +17 -0
  162. data/spec/support/xml/corporation/titles.xml +34 -0
  163. data/spec/support/xml/corporation/wallet_journal.xml +40 -0
  164. data/spec/support/xml/corporation/wallet_transactions.xml +12 -0
  165. data/spec/support/xml/errors/106.xml +5 -0
  166. data/spec/support/xml/errors/516.xml +5 -0
  167. data/spec/support/xml/eve/alliance_list.xml +22 -0
  168. data/spec/support/xml/eve/certificate_tree.xml +49 -0
  169. data/spec/support/xml/eve/character_id.xml +15 -0
  170. data/spec/support/xml/eve/conquerable_station_list.xml +24 -0
  171. data/spec/support/xml/eve/error_list.xml +78 -0
  172. data/spec/support/xml/eve/fac_war_stats.xml +31 -0
  173. data/spec/support/xml/eve/fac_war_top_stats.xml +238 -0
  174. data/spec/support/xml/eve/ref_types.xml +105 -0
  175. data/spec/support/xml/eve/skill_tree.xml +52 -0
  176. data/spec/support/xml/map/fac_war_systems.xml +180 -0
  177. data/spec/support/xml/map/jumps.xml +166 -0
  178. data/spec/support/xml/map/kills.xml +191 -0
  179. data/spec/support/xml/map/sovereignty.xml +20 -0
  180. data/spec/support/xml/rowset_with_mismatched_attributes.xml +6 -0
  181. data/spec/support/xml/server/server_status.xml +9 -0
  182. metadata +310 -2
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,108 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ eve-4 (2.0.2)
5
+ activesupport
6
+ nokogiri
7
+ sc-core-ext
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ actionmailer (4.0.0)
13
+ actionpack (= 4.0.0)
14
+ mail (~> 2.5.3)
15
+ actionpack (4.0.0)
16
+ activesupport (= 4.0.0)
17
+ builder (~> 3.1.0)
18
+ erubis (~> 2.7.0)
19
+ rack (~> 1.5.2)
20
+ rack-test (~> 0.6.2)
21
+ activemodel (4.0.0)
22
+ activesupport (= 4.0.0)
23
+ builder (~> 3.1.0)
24
+ activerecord (4.0.0)
25
+ activemodel (= 4.0.0)
26
+ activerecord-deprecated_finders (~> 1.0.2)
27
+ activesupport (= 4.0.0)
28
+ arel (~> 4.0.0)
29
+ activerecord-deprecated_finders (1.0.3)
30
+ activesupport (4.0.0)
31
+ i18n (~> 0.6, >= 0.6.4)
32
+ minitest (~> 4.2)
33
+ multi_json (~> 1.3)
34
+ thread_safe (~> 0.1)
35
+ tzinfo (~> 0.3.37)
36
+ arel (4.0.0)
37
+ atomic (1.1.10)
38
+ builder (3.1.4)
39
+ diff-lcs (1.2.4)
40
+ erubis (2.7.0)
41
+ hike (1.2.3)
42
+ i18n (0.6.4)
43
+ mail (2.5.4)
44
+ mime-types (~> 1.16)
45
+ treetop (~> 1.4.8)
46
+ mime-types (1.23)
47
+ mini_portile (0.5.1)
48
+ minitest (4.7.5)
49
+ multi_json (1.7.7)
50
+ nokogiri (1.6.0)
51
+ mini_portile (~> 0.5.0)
52
+ polyglot (0.3.3)
53
+ rack (1.5.2)
54
+ rack-test (0.6.2)
55
+ rack (>= 1.0)
56
+ rails (4.0.0)
57
+ actionmailer (= 4.0.0)
58
+ actionpack (= 4.0.0)
59
+ activerecord (= 4.0.0)
60
+ activesupport (= 4.0.0)
61
+ bundler (>= 1.3.0, < 2.0)
62
+ railties (= 4.0.0)
63
+ sprockets-rails (~> 2.0.0)
64
+ railties (4.0.0)
65
+ actionpack (= 4.0.0)
66
+ activesupport (= 4.0.0)
67
+ rake (>= 0.8.7)
68
+ thor (>= 0.18.1, < 2.0)
69
+ rake (10.1.0)
70
+ rspec-core (2.14.4)
71
+ rspec-expectations (2.14.0)
72
+ diff-lcs (>= 1.1.3, < 2.0)
73
+ rspec-mocks (2.14.1)
74
+ rspec-rails (2.14.0)
75
+ actionpack (>= 3.0)
76
+ activesupport (>= 3.0)
77
+ railties (>= 3.0)
78
+ rspec-core (~> 2.14.0)
79
+ rspec-expectations (~> 2.14.0)
80
+ rspec-mocks (~> 2.14.0)
81
+ sc-core-ext (1.2.1)
82
+ activesupport (>= 2.3.5)
83
+ sprockets (2.10.0)
84
+ hike (~> 1.2)
85
+ multi_json (~> 1.0)
86
+ rack (~> 1.0)
87
+ tilt (~> 1.1, != 1.3.0)
88
+ sprockets-rails (2.0.0)
89
+ actionpack (>= 3.0)
90
+ activesupport (>= 3.0)
91
+ sprockets (~> 2.8)
92
+ thor (0.18.1)
93
+ thread_safe (0.1.2)
94
+ atomic
95
+ tilt (1.4.1)
96
+ treetop (1.4.14)
97
+ polyglot
98
+ polyglot (>= 0.3.1)
99
+ tzinfo (0.3.37)
100
+
101
+ PLATFORMS
102
+ ruby
103
+
104
+ DEPENDENCIES
105
+ bundler
106
+ eve-4!
107
+ rails
108
+ rspec-rails
data/History.txt ADDED
@@ -0,0 +1,7 @@
1
+ === 0.0.1 2010-03-09
2
+
3
+ * 1 bugfix:
4
+ * Resolved interference with before filters added after the gem has been loaded
5
+
6
+ * 1 major enhancement:
7
+ * Initial release
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'rubygems'
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+ Bundler.setup
6
+ rescue LoadError
7
+ puts " *** You don't seem to have Bundler installed. ***"
8
+ puts " Please run the following command:"
9
+ puts
10
+ puts " gem install bundler"
11
+ exit
12
+ end
13
+
14
+ require 'rake'
15
+ require 'rspec/core'
16
+ require 'rspec/core/rake_task'
17
+ RSpec::Core::RakeTask.new(:spec) do |spec|
18
+ spec.pattern = FileList['spec/**/*_spec.rb']
19
+ end
20
+
21
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
22
+ spec.pattern = 'spec/**/*_spec.rb'
23
+ spec.rcov = true
24
+ end
25
+
26
+ task :default => :spec
27
+
28
+ require 'rdoc/task'
29
+ RDoc::Task.new do |rdoc|
30
+ require './lib/eve/version'
31
+ version = Eve::VERSION
32
+
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = "eve #{version}"
35
+ rdoc.rdoc_files.include('README*')
36
+ rdoc.rdoc_files.include('lib/**/*.rb')
37
+ end
data/eve.gemspec ADDED
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path('lib/eve/version', File.dirname(__FILE__))
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "eve-4"
7
+ s.version = Eve::VERSION
8
+
9
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.authors = ["Colin MacKenzie IV"]
11
+ s.date = "2012-02-15"
12
+ s.description = "eve updated for rails 4"
13
+ s.email = "sinisterchipmunk@gmail.com"
14
+ s.extra_rdoc_files = [
15
+ "LICENSE.txt",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/**/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n")
21
+
22
+ s.homepage = "http://thoughtsincomputation.com"
23
+ s.licenses = ["MIT"]
24
+ s.require_paths = ["lib"]
25
+ s.rubygems_version = "1.8.10"
26
+ s.summary = "A Ruby library for interfacing with all aspects of the EVE Online MMO."
27
+
28
+ s.add_runtime_dependency 'nokogiri'
29
+ s.add_runtime_dependency 'activesupport'
30
+ s.add_runtime_dependency 'sc-core-ext'
31
+
32
+ s.add_development_dependency 'rails'
33
+ s.add_development_dependency 'rspec-rails'
34
+ s.add_development_dependency 'bundler'
35
+ end
36
+
data/lib/eve.rb ADDED
@@ -0,0 +1,26 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'eve/dependencies'
5
+
6
+ module Eve
7
+ class << self
8
+ def cache_store
9
+ @cache_store ||= [:file_store, "tmp/eve.cache"]
10
+ end
11
+
12
+ def cache_store=(a)
13
+ @cache_store = [a].flatten
14
+ @cache = ActiveSupport::Cache.lookup_store(a) if @cache
15
+ end
16
+
17
+ def cache
18
+ return @cache if @cache
19
+ @cache = begin
20
+ Rails.cache
21
+ rescue NameError
22
+ ActiveSupport::Cache.lookup_store(*cache_store)
23
+ end
24
+ end
25
+ end
26
+ end
data/lib/eve/api.rb ADDED
@@ -0,0 +1,249 @@
1
+ require 'eve/api/request'
2
+ require 'eve/api/response'
3
+ require 'eve/api/services'
4
+ require 'eve/api/connectivity'
5
+
6
+ module Eve
7
+ # = Eve API Libraries
8
+ #
9
+ # EVE Online has made available various APIs which allow for querying the server for information about the server's
10
+ # current status, general game information such as skill and certificate trees, top player rankings, and the players
11
+ # and characters themselves. This library interfaces with that API to provide an intuitive way of retrieving this
12
+ # data.
13
+ #
14
+ # == The Basics
15
+ #
16
+ # There are two forms of authentication that the API uses: a limited API key and a full API key. For some information,
17
+ # such as the server's current status, no API key at all is required; for other information, such as which characters
18
+ # are owned by a particular user account, a limited API key will suffice. For more personal information, such as
19
+ # a character's transaction history, a full API key is required. Using an inappropriate or missing API key will result
20
+ # in an error being raised.
21
+ #
22
+ # === Instantiation & [Re]Configuration
23
+ # To interface with the Eve API, you need to instantiate the API object. This is simple:
24
+ # api = Eve::API.new
25
+ #
26
+ # If you plan to make use of information requiring an API key, you'll need to pass in those options:
27
+ # api = Eve::API.new(:user_id => 'a_user_id', :api_key => 'an_api_key')
28
+ #
29
+ # If you need to make use of Character-specific API calls, then you should also pass a +:character_id+ key. Same goes
30
+ # for Corporation-specific API calls: pass a +corporation_id+ key. If you don't know those yet (for instance, because
31
+ # you need the user to make a selection), then don't fret. You can always instantiate a new API object, or simply
32
+ # set the option directly on the API object you've already got:
33
+ # api.set(:character_id => 'a_character_id')
34
+ # # -or-
35
+ # api[:character_id] = 'a_character_id'
36
+ #
37
+ # === Making API Calls
38
+ # Actually retrieving information is just as straightforward as instantiation of the API object was, though the syntax
39
+ # does sometimes vary from one call to the next. Here's how to get the current server status:
40
+ # status = api.server_status
41
+ #
42
+ # And retrieving the list of characters belonging to :user_id is done like so:
43
+ # charlist = api.account.characters
44
+ #
45
+ # === List of API Calls
46
+ # This section is split into 3 subsections, one for each level of API key required for the call in question. This
47
+ # table assumes the presence of an "api" object, which is an instantiation of the API object as shown above. For
48
+ # more information on a particular subset of calls, including the exact return values, click on the corresponding
49
+ # class name to the left.
50
+ #
51
+ # ==== No API Key
52
+ # Eve::API::Services::Corporation:: api.corporation.corporation_sheet
53
+ # Eve::API::Services::Eve:: api.eve.alliance_list
54
+ # Eve::API::Services::Eve:: api.eve.certificate_tree
55
+ # Eve::API::Services::Eve:: api.eve.conquerable_station_list
56
+ # Eve::API::Services::Eve:: api.eve.error_list
57
+ # Eve::API::Services::Eve:: api.eve.fac_war_stats / api.eve.factional_warfare_stats
58
+ # Eve::API::Services::Eve:: api.eve.fac_war_top_stats / api.eve.factional_warfare_top100
59
+ # Eve::API::Services::Eve:: api.eve.character_name(*ids)
60
+ # Eve::API::Services::Eve:: api.eve.character_id(*names)
61
+ # Eve::API::Services::Eve:: api.eve.corporation_name(*ids)
62
+ # Eve::API::Services::Eve:: api.eve.corporation_id(*names)
63
+ # Eve::API::Services::Eve:: api.eve.alliance_name(*ids)
64
+ # Eve::API::Services::Eve:: api.eve.alliance_id(*names)
65
+ # Eve::API::Services::Eve:: api.eve.ref_types
66
+ # Eve::API::Services::Eve:: api.eve.skill_tree
67
+ # Eve::API::Services::Map:: api.map.fac_war_systems / api.map.contested_systems
68
+ # Eve::API::Services::Map:: api.map.sovereignty
69
+ # Eve::API::Services::Map:: api.map.kills
70
+ # Eve::API::Services::Map:: api.map.jumps
71
+ # Eve::API::Services::Misc:: api.misc.character_portrait
72
+ # Eve::API::Services::Server:: api.server.server_status
73
+ #
74
+ # ==== Limited API Key
75
+ # Eve::API::Services::Account:: api.account.characters
76
+ # Eve::API::Services::Character:: api.character.character_sheet
77
+ # Eve::API::Services::Character:: api.character.fac_war_stats
78
+ # Eve::API::Services::Character:: api.character.medals
79
+ # Eve::API::Services::Character:: api.character.skill_in_training
80
+ # Eve::API::Services::Character:: api.character.skill_queue
81
+ # Eve::API::Services::Character:: api.character.standings
82
+ # Eve::API::Services::Corporation:: api.corporation.corporation_sheet
83
+ # Eve::API::Services::Corporation:: api.corporation.fac_war_stats
84
+ # Eve::API::Services::Corporation:: api.corporation.medals
85
+ # Eve::API::Services::Corporation:: api.corporation.member_medals
86
+ #
87
+ # ==== Full API Key
88
+ # Eve::API::Services::Character:: api.character.account_balance
89
+ # Eve::API::Services::Character:: api.character.asset_list(version = nil)
90
+ # Eve::API::Services::Character:: api.character.industry_jobs
91
+ # Eve::API::Services::Character:: api.character.kill_log(options = {})
92
+ # Eve::API::Services::Character:: api.character.mailing_lists
93
+ # Eve::API::Services::Character:: api.character.mail_messages
94
+ # Eve::API::Services::Character:: api.character.market_orders
95
+ # Eve::API::Services::Character:: api.character.notifications
96
+ # Eve::API::Services::Character:: api.character.research
97
+ # Eve::API::Services::Character:: api.character.wallet_journal(account_key = 1000, options = {})
98
+ # Eve::API::Services::Character:: api.character.journal_entries(account_key = 1000, options = {})
99
+ # Eve::API::Services::Character:: api.character.wallet_transactions(options = {})
100
+ # Eve::API::Services::Corporation:: api.corporation.account_balance
101
+ # Eve::API::Services::Corporation:: api.corporation.asset_list
102
+ # Eve::API::Services::Corporation:: api.corporation.container_log
103
+ # Eve::API::Services::Corporation:: api.corporation.corporation_sheet(corporation_id = nil)
104
+ # Eve::API::Services::Corporation:: api.corporation.fac_war_stats
105
+ # Eve::API::Services::Corporation:: api.corporation.industry_jobs
106
+ # Eve::API::Services::Corporation:: api.corporation.kill_log(options = {})
107
+ # Eve::API::Services::Corporation:: api.corporation.market_orders
108
+ # Eve::API::Services::Corporation:: api.corporation.member_security
109
+ # Eve::API::Services::Corporation:: api.corporation.member_security_log
110
+ # Eve::API::Services::Corporation:: api.corporation.member_tracking
111
+ # Eve::API::Services::Corporation:: api.corporation.starbase_detail(item_id, version = 2)
112
+ # Eve::API::Services::Corporation:: api.corporation.starbase_list
113
+ # Eve::API::Services::Corporation:: api.corporation.shareholders
114
+ # Eve::API::Services::Corporation:: api.corporation.standings
115
+ # Eve::API::Services::Corporation:: api.corporation.titles
116
+ # Eve::API::Services::Corporation:: api.corporation.wallet_journal(account_key = 1000, options = {})
117
+ # Eve::API::Services::Corporation:: api.corporation.wallet_transactions(account_key = 1000, options = {})
118
+ #
119
+ # === Interpreting Responses
120
+ # Response objects are generated automatically, and should be able to accommodate any changes in the API reasonably
121
+ # well.
122
+ #
123
+ # The classes listed above attempt to document the API calls. However, if you are unsure of
124
+ # how to process the return value of a particular API call, don't be afraid to check it out directly:
125
+ # irb(main):004:0> puts api.server_status.to_yaml
126
+ # ---
127
+ # current_time: 2010-03-14T04:41:51+00:00
128
+ # cached_until: 2010-03-14T04:44:51+00:00
129
+ # online_players: 30694
130
+ # server_open: true
131
+ # api_version: "2"
132
+ #
133
+ # In this example, #server_status provides 5 fields: #api_version, #cached_until, #current_time, #online_players,
134
+ # and #server_open.
135
+ #
136
+ # Some fields in a given response are essentially arrays with some additional fields. These are called Rowsets. For
137
+ # instance, the call to +api.account.characters+, above, returned a response with a #characters method, which
138
+ # contained up to 3 characters. Each element, or Row, in a Rowset has in turn its own fields and/or Rowsets. Each
139
+ # character in this example includes a #character_id, #corporation_id, and #corporation_name.
140
+ #
141
+ # Additionally, all responses always have a #name field. For basic responses, the #name is "(Response)", and
142
+ # probably doesn't mean much to you. For Rowsets, the #name is the name of the Rowset (for example, "characters").
143
+ # For individual Rows, the #name might mean something more useful -- the name of a character, for instance.
144
+ #
145
+ class API
146
+ include Eve::API::Connectivity
147
+ include Eve::API::Services
148
+ attr_reader :options
149
+ attr_reader :map
150
+
151
+ def initialize(options = {})
152
+ @options = default_options.merge(options)
153
+ send_includes
154
+ instantiate_submodules
155
+ end
156
+
157
+ def set(key, value = nil)
158
+ raise "Key can't be nil" unless key
159
+ if key.kind_of?(Hash)
160
+ key.each { |k, v| set(k, v) }
161
+ else
162
+ if value then @options[key] = value
163
+ else @options.delete key
164
+ end
165
+ [@options[:submodules]].flatten.each do |sub|
166
+ self.send(sub).set(key, value) if sub
167
+ end
168
+ end
169
+ end
170
+
171
+ def [](key); @options[key]; end
172
+ def []=(key, value); set(key, value); end
173
+
174
+ private
175
+ class << self
176
+ def validate_credentials(key_type, *args)
177
+ case key_type
178
+ when :limited, :full
179
+ args.flatten!
180
+ options = args.extract_options!
181
+ method_names = options.delete(:for)
182
+ raise ArgumentError, "Unexpected options: #{options.keys.inspect}" unless options.empty?
183
+
184
+ method_names.each do |method_name|
185
+ define_method "#{method_name}_with_credential_validation" do |*a|
186
+ validate_credentials(key_type, *args)
187
+ send("#{method_name}_without_credential_validation", *a)
188
+ end
189
+ alias_method_chain method_name, :credential_validation
190
+ end
191
+
192
+ else raise ArgumentError, "Expected :limited or :full credential type"
193
+ end
194
+ end
195
+ end
196
+
197
+ def validate_credentials(type, *additional_requirements)
198
+ raise ArgumentError, "key_id is required" unless options[:key_id]
199
+ raise ArgumentError, "v_code is required" unless options[:v_code]
200
+ additional_requirements.each do |r|
201
+ raise ArgumentError, "#{r} is required" unless options[r]
202
+ end
203
+
204
+ case type
205
+ when :limited, :full # currently no difference. Wish we could validate on this.
206
+ else raise ArgumentError, "Expected :limited or :full credential type"
207
+ end
208
+ end
209
+
210
+ def validate_options(options, *keys)
211
+ options.keys.each do |key|
212
+ raise ArgumentError, "Options should only include #{keys.inspect}" unless keys.include?(key)
213
+ end
214
+ end
215
+
216
+ def send_includes
217
+ [@options[:includes]].flatten.each do |mod|
218
+ next unless mod
219
+ mod = mod.to_s unless mod.kind_of?(String)
220
+ mod = "::Eve::API::Services::#{mod.camelize}".constantize
221
+ eigenclass.send(:include, mod)
222
+ end
223
+ end
224
+
225
+ def instantiate_submodules
226
+ [@options[:submodules]].flatten.each do |mod|
227
+ next unless mod
228
+ instance_variable_set("@#{mod}", ::Eve::API.new(options.merge(:includes => mod, :submodules => nil)))
229
+ eigenclass.send(:attr_reader, mod)
230
+ eigenclass.send(:public, mod)
231
+ end
232
+ end
233
+
234
+ def eigenclass
235
+ class << self; self; end
236
+ end
237
+
238
+ def default_options
239
+ {
240
+ :submodules => [:map, :eve, :account, :character, :corporation],
241
+ :cache => true
242
+ }
243
+ end
244
+
245
+ def cache_namespace
246
+ self.class.name.underscore
247
+ end
248
+ end
249
+ end