warframe 0.3.1 → 1.0.0

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/README.md +39 -34
  4. data/lib/warframe/api/alerts.rb +14 -0
  5. data/lib/warframe/api/cambion_drift.rb +16 -0
  6. data/lib/warframe/api/cetus.rb +16 -0
  7. data/lib/warframe/api/conclave_challenges.rb +16 -0
  8. data/lib/warframe/api/global_upgrades.rb +16 -0
  9. data/lib/warframe/api/invasions.rb +16 -0
  10. data/lib/warframe/api/news.rb +16 -0
  11. data/lib/warframe/api/nightwave.rb +16 -0
  12. data/lib/warframe/api/sortie.rb +16 -0
  13. data/lib/warframe/api/steel_path.rb +16 -0
  14. data/lib/warframe/api/syndicate_missions.rb +16 -0
  15. data/lib/warframe/api/vallis_cycle.rb +16 -0
  16. data/lib/warframe/api.rb +24 -0
  17. data/lib/warframe/cache.rb +3 -3
  18. data/lib/warframe/client.rb +98 -0
  19. data/lib/warframe/models/alert.rb +16 -23
  20. data/lib/warframe/models/attributes/active.rb +2 -2
  21. data/lib/warframe/models/attributes/description.rb +12 -16
  22. data/lib/warframe/models/attributes/eta.rb +6 -10
  23. data/lib/warframe/models/attributes/expiry.rb +20 -24
  24. data/lib/warframe/models/attributes/id.rb +6 -10
  25. data/lib/warframe/models/attributes/reward_types.rb +6 -10
  26. data/lib/warframe/models/attributes/start_string.rb +6 -10
  27. data/lib/warframe/models/attributes/translations.rb +9 -13
  28. data/lib/warframe/models/base.rb +5 -30
  29. data/lib/warframe/models/cambion_drift.rb +14 -19
  30. data/lib/warframe/models/cetus.rb +25 -30
  31. data/lib/warframe/models/conclave_challenge.rb +43 -50
  32. data/lib/warframe/models/global_upgrade.rb +33 -37
  33. data/lib/warframe/models/invasion.rb +58 -67
  34. data/lib/warframe/models/news.rb +45 -50
  35. data/lib/warframe/models/nightwave.rb +24 -30
  36. data/lib/warframe/models/objectified_hash.rb +74 -0
  37. data/lib/warframe/models/sortie.rb +21 -27
  38. data/lib/warframe/models/steel_path.rb +22 -24
  39. data/lib/warframe/models/syndicate_mission.rb +18 -24
  40. data/lib/warframe/models/vallis_cycle.rb +30 -0
  41. data/lib/warframe/models.rb +6 -0
  42. data/lib/warframe/version.rb +1 -1
  43. data/lib/warframe.rb +4 -2
  44. data/warframe.gemspec +41 -0
  45. metadata +42 -106
  46. data/lib/warframe/client_wrapper.rb +0 -39
  47. data/lib/warframe/rest/api/alerts.rb +0 -23
  48. data/lib/warframe/rest/api/cambion_drift.rb +0 -23
  49. data/lib/warframe/rest/api/cetus.rb +0 -23
  50. data/lib/warframe/rest/api/conclave_challenges.rb +0 -23
  51. data/lib/warframe/rest/api/global_upgrades.rb +0 -23
  52. data/lib/warframe/rest/api/invasions.rb +0 -23
  53. data/lib/warframe/rest/api/news.rb +0 -23
  54. data/lib/warframe/rest/api/nightwave.rb +0 -23
  55. data/lib/warframe/rest/api/sortie.rb +0 -23
  56. data/lib/warframe/rest/api/steel_path.rb +0 -23
  57. data/lib/warframe/rest/api/syndicate_missions.rb +0 -23
  58. data/lib/warframe/rest/api.rb +0 -37
  59. data/lib/warframe/rest/client.rb +0 -42
  60. data/lib/warframe/rest/request.rb +0 -61
  61. data/lib/warframe/rest/utils.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d14b695f778a8720be1940cede86886f31104f9d0760ff6fc2ec83c38234fc0d
4
- data.tar.gz: 5d06096041b3915849b52d18df667e98c441373fb7fef054d0d9b77aa9117b6a
3
+ metadata.gz: c41bb2e150afd7f4885bf7c988a9f4b62b4a7867ec22bcb11b1b868fcd5ec68e
4
+ data.tar.gz: eb8aa4b8f9125a7b5fb3871f741569f0b7cd331ba007e3fa7dad39b0993c8a99
5
5
  SHA512:
6
- metadata.gz: 924f6fd8fb604b19dbb77a2f9088f3c0e4f2edfe27df2df16dd08fe3fafb4273b89a81feedf512998fc7509c2dcc88c05aa1abe3d84242e48607f4ad4757420b
7
- data.tar.gz: a87e8635e2b5983344cea2b6ae92fe16ec378d3f42c431638322034ed732f4b0f8b1c37c0eed2cd749614f641ac0d0bd771d5ce845f16d732341a07a34053bfe
6
+ metadata.gz: 70dfc7b98ee37259ee69ad87ab3a5b8d08db227b1c999037a19e21f1d38c86bc49110f99d3a88695dd7bb27c82119bffe5c5a02a29f9916fe9a87fd20dce508e
7
+ data.tar.gz: f581f1e361862ae0760b73f1fadea8883a9d8f8a696db8e08a84aae7f9b3de9d51099cd40d9ab598d753a3a9b78410b4b1165b223977817e785b8dfb0b9ab540
data/CHANGELOG.md ADDED
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ ### [1.0.0](https://www.gitlab.com/aj-rom/warframe-ruby/compare/v0.4.0...v1.0.0) (2022-06-1)
4
+
5
+ #### Breaking Changes
6
+
7
+ - **dependencies** use require_all to load moudlar project ([72359701](https://gitlab.com/aj-rom/warframe-ruby/-/merge_requests/65/diffs?commit_id=72359701addd0f588757a4a9122e94b275c490f3))
8
+ - **repository:** Moved to https://gitlab.com/aj-rom/warframe-ruby which in turn broke some pre-existing lings on older versions.
9
+ - **refactor:**
10
+ - remove no longer used helper files ([f312f5f7](https://gitlab.com/aj-rom/warframe-ruby/-/merge_requests/65/diffs?commit_id=fef7852d7a255093fb6e2e7a1209614bd5dfa914))
11
+ - Remodularize 'Rest' into main module ([9d681b4b](https://gitlab.com/aj-rom/warframe-ruby/-/merge_requests/65/diffs?commit_id=9d681b4b91f53e0f06a1d0b62dd851aef56248b1))
12
+ - Remove unecessary client wrapper ([8956cfe6](https://gitlab.com/aj-rom/warframe-ruby/-/merge_requests/65/diffs?commit_id=8956cfe63465594a860d8df1c42fd5c899ab4a88))
13
+
14
+ #### Features
15
+
16
+ - **cache:** allow cache to be instantiated from hash ([fef7852](https://gitlab.com/aj-rom/warframe-ruby/commit/fef7852d7a255093fb6e2e7a1209614bd5dfa914))
17
+ - **dependencies:** Update runtime dependencies ([65086ca](https://gitlab.com/aj-rom/warframe-ruby/commit/65086ca6795d4d8352adc8926bda9938ffde152a))
18
+ - **refactor:** Remodularize 'Models' to include attributes ([e3eae5d](https://gitlab.com/aj-rom/warframe-ruby/commit/e3eae5de6cd4be7ec88643038d3d8d6a9ab49bf4))
19
+
20
+ #### Bug Fixes
21
+
22
+ - **Gem:** resolve ruby versions less than 2.5 being unable to install ([b53247c](https://gitlab.com/aj-rom/warframe-ruby/commit/b53247c23524c28a890114208a9ecd6ec22468d2))
23
+ - **README:** update README for v1.0.0 ([c623c2a](https://gitlab.com/aj-rom/warframe-ruby/commit/c623c2aa75e73ed1becdbad01a8ce7fa770a4a9e))
24
+
25
+ ### [0.4.0](https://www.gitlab.com/aj-rom/warframe-ruby/compare/v0.3.2...v0.4.0) (2022-01-02)
26
+
27
+ #### Features
28
+
29
+ - **REST:** add `vallisCycle` route. ([#61](https://www.gitlab.com/aj-rom/warframe-ruby/issues/61)) ([f81577f](https://www.gitlab.com/aj-rom/warframe-ruby/commit/f81577fc6af0ec45948cfd57cc1d67de684ce03c))
30
+
31
+ ### [0.3.2](https://www.gitlab.com/aj-rom/warframe-ruby/compare/v0.3.1...v0.3.2) (2021-12-29)
32
+
33
+ #### Bug Fixes
34
+
35
+ - **changelog:** added changelog to gemspec. [#54](https://www.gitlab.com/aj-rom/warframe-ruby/issues/54) ([0164546](https://www.gitlab.com/aj-rom/warframe-ruby/commit/01645466c75069800b2f69f1146625e5dc6f6775))
36
+ - **dependencies:** add support for no bundler ([741aff8](https://www.gitlab.com/aj-rom/warframe-ruby/commit/741aff8c9d271c80419d1c8046aab37889443514))
37
+ - **dependencies:** remove lock file ([86890fe](https://www.gitlab.com/aj-rom/warframe-ruby/commit/86890fec76e702db5d8ee397d875aae28299a262))
38
+ - **docs:** fix incorrect attribute module ([cad978b](https://www.gitlab.com/aj-rom/warframe-ruby/commit/cad978bc42679e6a7240b5f6045b70e0fc157f3c))
39
+
40
+ ### [0.3.1](https://www.gitlab.com/aj-rom/warframe-ruby/compare/v0.3.0...v0.3.1) (2021-12-14)
41
+
42
+ #### Bug Fixes
43
+
44
+ - **dependencies:** generify runtime bundler dependency ([d0bd8ad](https://www.gitlab.com/aj-rom/warframe-ruby/commit/d0bd8ad2f4096dade9175461c0c4a1c8cc2114ca))
45
+ - **dependencies:** update thor to v1.1.0 ([2598318](https://www.gitlab.com/aj-rom/warframe-ruby/commit/2598318b351cfd07f7a691305cc1141681db598b))
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # warframe-ruby
2
+
2
3
  [![Supported by Warframe Community Developers](https://warframestat.us/wfcd.png)](https://github.com/WFCD/banner/blob/main/PROJECTS.md "Supported by Warframe Community Developers")
3
4
  [![Ruby Gem Version](https://badgen.net/rubygems/v/warframe)](https://rubygems.org/gems/warframe)
4
5
  [![Downloads](https://badgen.net/rubygems/dt/warframe)](https://rubygems.org/gems/warframe)
5
6
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)
6
7
  [![Platform](https://badgen.net/rubygems/p/warframe)](https://www.ruby-lang.org/en/)
7
8
 
8
-
9
9
  A Ruby client for [Warframe Stat](https://warframestat.us) bringing you live modeled data from their API.
10
10
 
11
11
  ## Installation
@@ -18,81 +18,86 @@ gem 'warframe'
18
18
 
19
19
  And then execute:
20
20
 
21
- $ bundle install
21
+ ```console
22
+ bundle install
23
+ ```
22
24
 
23
25
  Or install it yourself as:
24
26
 
25
- $ gem install warframe
27
+ ```console
28
+ gem install warframe
29
+ ```
26
30
 
27
31
  ## Usage
28
32
 
29
- To get started accessing live data, you must instantiate a new `Warframe::REST::Client`
33
+ To get started accessing live data, you must instantiate a new `Warframe::Client`
34
+
30
35
  ```ruby
31
36
  require 'warframe'
32
37
 
33
- client = Warframe::REST::Client.new # => <Warframe::REST::Client platform='pc' language='en'>
38
+ Warframe::Client.new # => <Warframe::Client platform='pc' language='en'>
39
+
40
+ Warframe::Client.new(platform: 'xb1', language: 'fr') # => <Warframe::Client platform='xb1' language='fr'>
34
41
 
35
42
  # You can supply a hash to set your preferred platform or language.
36
43
  my_custom_options = { platform: 'ps4', language: 'de' }
37
- german_ps4 = Warframe::REST:Client.new my_custom_options # => <Warframe::REST::Client platform='ps4' language='de'>
44
+ Warframe::Client.new my_custom_options # => <Warframe::Client platform='ps4' language='de'>
38
45
  ```
39
46
 
40
47
  This gives us access to a plethora of methods, check out the [documentation](https://rubydoc.info/gems/warframe) for more info.
41
- ```ruby
42
48
 
43
- client = Warframe::REST::Client.new
49
+ ```ruby
50
+ client = Warframe::Client.new
44
51
  client.nightwave # => <Warframe::Models::Nightwave>
45
52
  client.alerts # => [ <Warframe::Models::Alert>, <Warframe::Models::Alert> ]
46
53
  ```
47
54
 
48
55
  ## Documentation
49
56
 
50
- Documentation is currently provided by [rubydoc.info](https://rubydoc.info), check out the current versions documentation at https://rubydoc.info/gems/warframe.
57
+ Documentation is currently provided by [rubydoc.info](https://rubydoc.info), check out the current versions documentation at <https://rubydoc.info/gems/warframe>.
51
58
 
52
59
  ## Development
53
60
 
61
+ ### Ruby Versions
62
+
63
+ We plan to support only support *stable* Ruby versions that have yet to reach [end of life](https://endoflife.date/ruby).
64
+ Although leave the required Ruby version to the lowest of our runtime dependencies in case anyone would like to use an older version.
65
+
66
+ | Version | Tested | Status |
67
+ | --- | --- | --- |
68
+ | `3.1` | :white_check_mark: | :white_check_mark: |
69
+ | `3.0` | :white_check_mark: | :white_check_mark: |
70
+ | `2.7` | :white_check_mark: | :white_check_mark: |
71
+ | `2.3+` | :no_entry_sign: | :white_check_mark: |
72
+ | `2.2-` | :no_entry_sign: | :no_entry_sign: |
73
+
54
74
  ### Dependency Management
55
- After checking out the repo, run:
56
75
 
57
- $ bundle install
58
-
76
+ After checking out the repo, run:
77
+
78
+ - ```bundle install```
79
+
59
80
  > This will install all required dependencies for this gem to run.
60
81
 
61
82
  ### Testing
83
+
62
84
  To check if your changes are passing tests, run:
63
85
 
64
- $ thor test:rspec
86
+ - ```bundle exec rspec```
65
87
 
66
88
  > Testing framework provided by [RSpec](https://rspec.info/).
67
89
 
68
90
  ### Linting
69
- To auto-correct styling offenses, run:
70
91
 
71
- $ thor style:fix
92
+ To auto-correct styling offenses, run:
72
93
 
73
- > All linting is provided by [RuboCop](https://github.com/rubocop/rubocop).
94
+ - ```bundle exec rubocop -A```
74
95
 
75
- ### Generating New Routes / Models with Thor
76
- Using Thor allows us to create new routes and models via the command line, making it very simple to add new elements.
77
-
78
- For example if we wanted to add, [conclaveChallenges](https://docs.warframestat.us/#tag/Worldstate/paths/~1{platform}~1conclaveChallenges/get) we run:
79
-
80
- $ thor generate conclaveChallenges
81
-
82
- > create lib/warframe/models/conclave_challenge.rb
83
- > create lib/warframe/rest/api/conclave_challenges.rb
84
- > conflict lib/warframe/rest/api.rb
85
- > Overwrite ~/warframe/lib/warframe/rest/api.rb? (enter "h" for help) [Ynaqdh]
86
-
87
- $ Y
88
-
89
- > force lib/warframe/rest/api.rb
90
-
91
- This creates a blank [model](/lib/warframe/models) for the data and a [route](/lib/warframe/rest/api) with a name spaced method for it, and then adds this method to our [REST::API](/lib/warframe/rest/api). Add attributes to the corresponding model and then write associated tests.
96
+ > All linting is provided by [RuboCop](https://github.com/rubocop/rubocop).
92
97
 
93
98
  ## Contributing
94
99
 
95
- Bug reports and pull requests are welcome on GitHub at https://github.com/aj-rom/warframe-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/aj-rom/warframe-ruby/blob/master/CODE_OF_CONDUCT.md).
100
+ Bug reports and pull requests are welcome on GitLab at <https://gitlab.com/aj-rom/warframe-ruby>. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://gitlab.com/aj-rom/warframe-ruby/blob/master/CODE_OF_CONDUCT.md).
96
101
 
97
102
  ## License
98
103
 
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Warframe::API
4
+ # API endpoint for getting information on current Alerts data.
5
+ #
6
+ # {https://api.warframestat.us/pc/alerts Example Response}
7
+ module Alerts
8
+ # Gets the current Alerts data.
9
+ # @return [Array<[Warframe::Models::Alert]>]
10
+ def alerts
11
+ get('/alerts', Warframe::Models::Alert)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/cambion_drift'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current Cambion Drift data.
7
+ #
8
+ # {https://api.warframestat.us/pc/cambionDrift Example Response}
9
+ module CambionDrift
10
+ # Gets the current cambionDrift Data.
11
+ # @return Warframe::Models::CambionDrift
12
+ def cambion_drift
13
+ get('/cambionCycle', Warframe::Models::CambionDrift)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/cetus'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current Cetus data.
7
+ #
8
+ # {https://api.warframestat.us/pc/cetusCycle Example Response}
9
+ module Cetus
10
+ # Gets the current cetusCycle Data.
11
+ # @return [Warframe::Models::Cetus]
12
+ def cetus
13
+ get('/cetusCycle', Warframe::Models::Cetus)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/conclave_challenge'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current Conclave Challenge data.
7
+ #
8
+ # {https://api.warframestat.us/pc/conclaveChallenges Example Response}
9
+ module ConclaveChallenges
10
+ # Gets the current conclave challenges.
11
+ # @return [Array<Warframe::Models::ConclaveChallenge>]
12
+ def conclave_challenges
13
+ get('/conclaveChallenges', Warframe::Models::ConclaveChallenge)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/global_upgrade'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current Global Upgrades data.
7
+ #
8
+ # {https://api.warframestat.us/pc/globalUpgrades Example Response}
9
+ module GlobalUpgrades
10
+ # Gets the current Global Upgrades data.
11
+ # @return [Array<[Warframe::Models::GlobalUpgrade]>]
12
+ def global_upgrades
13
+ get('/globalUpgrades', Warframe::Models::GlobalUpgrade)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/invasion'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current Invasions data.
7
+ #
8
+ # {https://api.warframestat.us/pc/invasions Example Response}
9
+ module Invasions
10
+ # Gets the current Invasions data.
11
+ # @return [Array<[Warframe::Models::Invasion]>]
12
+ def invasions
13
+ get('/invasions', Warframe::Models::Invasion)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/news'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information from the News route.
7
+ #
8
+ # {https://api.warframestat.us/pc/news Example Response}
9
+ module News
10
+ # Gets the current news data.
11
+ # @return [Array<Warframe::Models::News>]
12
+ def news
13
+ get('/news', Warframe::Models::News)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/nightwave'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information from the Nightwave route.
7
+ #
8
+ # {https://api.warframestat.us/pc/nightwave Example Response}
9
+ module Nightwave
10
+ # Gets the current Nightwave Mission data.
11
+ # @return [Warframe::Models::Nightwave]
12
+ def nightwave
13
+ get('/nightwave', Warframe::Models::Nightwave)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/sortie'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current Sortie data.
7
+ #
8
+ # {https://api.warframestat.us/pc/sortie Example Response}
9
+ module Sortie
10
+ # Gets the current sortie missions.
11
+ # @return [Array<Warframe::Models::Sortie>]
12
+ def sortie
13
+ get('/sortie', Warframe::Models::Sortie)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/steel_path'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current SteelPath data.
7
+ #
8
+ # {https://api.warframestat.us/pc/steelPath Example Response}
9
+ module SteelPath
10
+ # Steel Path data
11
+ # @return [Warframe::Models::SteelPath]
12
+ def steel_path
13
+ get('/steelPath', Warframe::Models::SteelPath)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/syndicate_mission'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current SyndicateMission data.
7
+ #
8
+ # {https://api.warframestat.us/pc/syndicateMissions Example Response}
9
+ module SyndicateMissions
10
+ # Gets the current syndicateMissions Data.
11
+ # @return [Array<Warframe::Models::SyndicateMission>]
12
+ def syndicate_missions
13
+ get('/syndicateMissions', Warframe::Models::SyndicateMission)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel '../models/vallis_cycle'
4
+
5
+ module Warframe::API
6
+ # API endpoint for getting information on current VallisCycle data.
7
+ #
8
+ # {https://api.warframestat.us/pc/vallisCycle Example Response}
9
+ module VallisCycle
10
+ # Gets the current vallisCycle Data.
11
+ # @return [Warframe::Models::VallisCycle]
12
+ def vallis_cycle
13
+ get('/vallisCycle', Warframe::Models::VallisCycle)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel 'api'
4
+ require_rel 'models'
5
+
6
+ # The API Router for getting live data.
7
+ #
8
+ # Attempting to have every accessible route from {https://docs.warframestat.us Warframe Stat}.
9
+ #
10
+ # Module names are 'routes' to this API. See {Warframe::API::Alerts Alerts} for example.
11
+ module Warframe::API
12
+ include Alerts
13
+ include CambionDrift
14
+ include Cetus
15
+ include ConclaveChallenges
16
+ include GlobalUpgrades
17
+ include Invasions
18
+ include News
19
+ include Nightwave
20
+ include Sortie
21
+ include SteelPath
22
+ include SyndicateMissions
23
+ include VallisCycle
24
+ end
@@ -7,12 +7,12 @@ module Warframe
7
7
  EXPIRATION_TIME = 5 * 60
8
8
  attr_accessor :cache
9
9
 
10
- def initialize
11
- @cache = {}
10
+ def initialize(cache = {})
11
+ @cache = cache
12
12
  end
13
13
 
14
14
  def get_from_cache(key)
15
- cache[key][:result]
15
+ cache[key][:result] if exist?(key)
16
16
  end
17
17
 
18
18
  def find_in_cache(key)
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_rel 'api'
4
+ require_rel 'cache'
5
+
6
+ module Warframe
7
+ # The main application Client for access live feed data.
8
+ #
9
+ # == Example Usage
10
+ #
11
+ # client = Warframe::Client.new
12
+ # client.nightwave.tag # => 'Radio Legion Intermission'
13
+ #
14
+ # == Accepted Platforms
15
+ #
16
+ # default = 'pc'
17
+ # all_platorms = [ 'pc', 'ps4', 'xb1', 'swi' ]
18
+ #
19
+ # client = Waframe::Client.new(platform: 'ps4')
20
+ # client.platform # => 'ps4'
21
+ # client.language # => 'en'
22
+ #
23
+ # == Accepted Languages
24
+ #
25
+ # default = 'en'
26
+ # all_languages = [ 'de', 'es', 'en', 'fr', 'it', 'ko', 'pl', 'pt', 'ru', 'zh' ]
27
+ #
28
+ # client = Warframe::Client.new(language: 'fr')
29
+ # client.language # => 'fr'
30
+ # client.platform # => 'pc'
31
+ #
32
+ # == Setting both Platform and Language
33
+ #
34
+ # client = Warframe::Client.new(platform: 'ps4', language: 'de')
35
+ # client.platform # => 'ps4'
36
+ # client.language # => 'de'
37
+ class Client < Cache
38
+ include API
39
+
40
+ # The base Warframe Stat API link
41
+ BASE_URL = 'https://api.warframestat.us/'
42
+ # Default attributes
43
+ DEFAULT_OPTIONS = { platform: 'pc', language: 'en' }.freeze
44
+
45
+ # The Client Cache
46
+ attr_accessor :platform, :language
47
+
48
+ # Initialize the client.
49
+ #
50
+ # @param platform: [String] 'pc', 'ps4', 'xb1', or 'swi'
51
+ # @param language: [String] 'de', 'es', 'en', 'fr', 'it', 'ko', 'pl', 'pt', 'ru', or 'zh'
52
+ #
53
+ # @return [Warframe::Client] The client instance.
54
+ def initialize(platform: 'pc', language: 'en')
55
+ super({})
56
+ @platform = platform
57
+ @language = language
58
+ end
59
+
60
+ # @return [String] the base url and platform combined.
61
+ def base_url
62
+ "#{BASE_URL}#{platform}"
63
+ end
64
+
65
+ # Performs a get operation on the requested path, and returns a mapped response of the requested model.
66
+ # @param path [String]
67
+ # @param klass [Warframe::Models]
68
+ def get(path, klass)
69
+ return get_from_cache(path) if find_in_cache(path)
70
+
71
+ result = get_request(path, klass)
72
+ add_to_cache(path, result)
73
+ end
74
+
75
+ private
76
+
77
+ def get_request(path, klass)
78
+ url = "#{base_url}#{path}?language=#{language}"
79
+ begin
80
+ response = RestClient.get(url)
81
+ rescue StandardError => e
82
+ raise e
83
+ end
84
+
85
+ return_parsed(response.body, klass)
86
+ end
87
+
88
+ # Returns the parsed JSON response in the form of a [Warframe::Models] or an array of [Warframe::Models]
89
+ # @param resp [Net::HTTP.get]
90
+ # @return [Warframe::Models, Array<[Warframe::Models]>]
91
+ def return_parsed(resp, klass)
92
+ parsed = JSON.parse(resp)
93
+ return klass.from_array(parsed) if parsed.is_a?(Array)
94
+
95
+ klass.new(parsed)
96
+ end
97
+ end
98
+ end
@@ -1,30 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './base'
4
- require_relative './attributes/expiry'
5
- require_relative './attributes/active'
6
- require_relative './attributes/eta'
7
- require_relative './attributes/reward_types'
8
- require_relative './attributes/start_string'
3
+ require_rel 'base'
9
4
 
10
- module Warframe
11
- module Models
12
- # Model for Alert data.
13
- # {https://api.warframestat.hub/pc/alerts /:platform/alerts}
14
- class Alert < Warframe::Models::Base
15
- include Warframe::Models::Attributes::Expired
16
- include Warframe::Models::Attributes::Active
17
- include Warframe::Models::Attributes::ETA
18
- include Warframe::Models::Attributes::RewardTypes
19
- include Warframe::Models::Attributes::StartString
5
+ module Warframe::Models
6
+ # Model for Alert data.
7
+ # {https://api.warframestat.hub/pc/alerts /:platform/alerts}
8
+ class Alert < Base
9
+ include Attributes::Expired
10
+ include Attributes::Active
11
+ include Attributes::ETA
12
+ include Attributes::RewardTypes
13
+ include Attributes::StartString
20
14
 
21
- # The id of the Alert.
22
- # @return [String]
23
- attr_reader :id
15
+ # The id of the Alert.
16
+ # @return [String]
17
+ attr_reader :id
24
18
 
25
- # The mission data of this alert.
26
- # @return [OpenStruct]
27
- attr_reader :mission
28
- end
19
+ # The mission data of this alert.
20
+ # @return [OpenStruct]
21
+ attr_reader :mission
29
22
  end
30
23
  end
@@ -18,8 +18,8 @@ module Warframe
18
18
  attr_reader :activation
19
19
  end
20
20
 
21
- # For models that require both {Warframe::Models::Common::Active Common::Active}
22
- # and {Warframe::Models::Common::Activation Common::Activation}
21
+ # For models that require both {Warframe::Models::Attributes::Active Attributes::Active}
22
+ # and {Warframe::Models::Attributes::Activation Attributes::Activation}
23
23
  #
24
24
  # Includes both the active? and activation methods.
25
25
  module ActiveBoth
@@ -1,21 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Warframe
4
- module Models
5
- module Attributes
6
- # Includes the desc attribute
7
- module Desc
8
- # The description of the data requested
9
- # @return [String]
10
- attr_reader :desc
11
- end
3
+ module Warframe::Models::Attributes
4
+ # Includes the desc attribute
5
+ module Desc
6
+ # The description of the data requested
7
+ # @return [String]
8
+ attr_reader :desc
9
+ end
12
10
 
13
- # Includes the description attribute.
14
- module Description
15
- # The description of the data requested.
16
- # @return [String]
17
- attr_reader :description
18
- end
19
- end
11
+ # Includes the description attribute.
12
+ module Description
13
+ # The description of the data requested.
14
+ # @return [String]
15
+ attr_reader :description
20
16
  end
21
17
  end
@@ -1,14 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Warframe
4
- module Models
5
- module Attributes
6
- # Adds the eta attribute.
7
- module ETA
8
- # The estimated time until arrival.
9
- # @return [String]
10
- attr_reader :eta
11
- end
12
- end
3
+ module Warframe::Models::Attributes
4
+ # Adds the eta attribute.
5
+ module ETA
6
+ # The estimated time until arrival.
7
+ # @return [String]
8
+ attr_reader :eta
13
9
  end
14
10
  end