eol_rb 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b81066b3f5b19119e404b9696bfa58ba315b028020802569189e1588f488d50e
4
- data.tar.gz: 8ed604feb067e3970deb930109af1091537ea27b8d5f73cd89731ea82bc30112
3
+ metadata.gz: deb5ee5f5e55c55d103549f179b6078084153e50e5587321da7bb5dfbf83f4de
4
+ data.tar.gz: 0ab6131015550d5dda5e89b2f47daa01ccf65936f23515e6615eb01448024037
5
5
  SHA512:
6
- metadata.gz: 63c085ab185049d6cfd8e4e154975f58fded3b9846ee46d902f2c932a8cffe47d372299818c58ae8235794df7ed6e84c4ca46bb3c2de7582c75a1a0a3a412009
7
- data.tar.gz: fcdf9914a43e42fd46624986f02ad2d58899dc0788db49a4aa4bd29f24ba1bc7e913efd30ac6cef97649f59dad4ab24347d8f9538968b840302bc1a12ad9c384
6
+ metadata.gz: fd25b0ea142602354fedc7a3cb39b389757870cdee1ad1c5e6996afb29f49b5344722fad7620592f11d352036488b083c7498ae0c739a8d82374ec68bb1b8cce
7
+ data.tar.gz: 7b70b8189c4b66ead731fba5f815844cc79d37d3ac5993f81f314e0eea7ba4ca5ca884a489932abc2a05d5bb6c550a365b3b82ade92f982fd504f4453aa20925
data/README.md CHANGED
@@ -26,14 +26,27 @@ end
26
26
  EOL.products
27
27
  # => ["almalinux", "alpine", "amazon-eks", ...
28
28
 
29
- EOL.of('ruby')
29
+ EOL.info('ruby')
30
30
  # =>
31
- # [{"cycle"=>"3.1", "eol"=>"2025-12-25", "latest"=>"3.1.2", "latestReleaseDate"=>"2022-04-12", "releaseDate"=>"2021-12-25"},
32
- # {"cycle"=>"3.0", "eol"=>"2024-03-31", "latest"=>"3.0.4", "latestReleaseDate"=>"2022-04-12", "releaseDate"=>"2020-12-25"},
33
- # ...
34
-
35
- EOL.of('ruby', cycle: '3.1')
36
- # => {"eol"=>"2025-12-25", "latest"=>"3.1.2", "latestReleaseDate"=>"2022-04-12", "releaseDate"=>"2021-12-25"}
31
+ # [#<EOL::Models::Cycle:0x000000010403dd60
32
+ # @eol=#<Date: 2026-03-31 ((2461131j,0s,0n),+0s,2299161j)>,
33
+ # @is_supported=true,
34
+ # @latest=Gem::Version.new("3.2.1"),
35
+ # @latest_release_date=#<Date: 2023-02-08 ((2459984j,0s,0n),+0s,2299161j)>,
36
+ # @lts=false,
37
+ # @release_date=#<Date: 2022-12-25 ((2459939j,0s,0n),+0s,2299161j)>,
38
+ # @version=Gem::Version.new("3.2")>,
39
+
40
+ EOL.info('ruby', cycle: '3.1')
41
+ # =>
42
+ # #<EOL::Models::Cycle:0x0000000104044890
43
+ # @eol=#<Date: 2025-03-31 ((2460766j,0s,0n),+0s,2299161j)>,
44
+ # @is_supported=true,
45
+ # @latest=Gem::Version.new("3.1.3"),
46
+ # @latest_release_date=#<Date: 2022-11-24 ((2459908j,0s,0n),+0s,2299161j)>,
47
+ # @lts=false,
48
+ # @release_date=#<Date: 2021-12-25 ((2459574j,0s,0n),+0s,2299161j)>,
49
+ # @version=Gem::Version.new("3.1")>
37
50
  ```
38
51
 
39
52
  ## Development
data/lib/eol_rb/client.rb CHANGED
@@ -7,8 +7,10 @@ require "json"
7
7
  module EOL
8
8
  # HTTP client for endoflife.date API
9
9
  class Client
10
- def initialize
11
- @http = Faraday.new(
10
+ attr_reader :http
11
+
12
+ def initialize(http = nil)
13
+ @http = http || Faraday.new(
12
14
  url: "#{api.scheme}://#{api.host}",
13
15
  headers: {
14
16
  "Content-Type" => "application/json",
data/lib/eol_rb/cycle.rb CHANGED
@@ -21,7 +21,9 @@ module EOL
21
21
  "Cycle #{cycle} could not be found under product #{product}. Try any of #{available_cycles.inspect}"
22
22
  end
23
23
 
24
- JSON.parse(res.body)
24
+ specs = JSON.parse(res.body).merge({ "cycle" => cycle })
25
+
26
+ Models::Cycle.new(specs)
25
27
  end
26
28
  end
27
29
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EOL
4
+ module Models
5
+ # EOL Cycle model https://endoflife.date/docs/api
6
+ class Cycle
7
+ attr_reader :version, :eol, :latest, :latest_release_date, :release_date, :lts
8
+
9
+ def initialize(specs)
10
+ @version = Gem::Version.new(specs.fetch("cycle"))
11
+ @eol = Date.parse(specs.fetch("eol"))
12
+ @latest = Gem::Version.new(specs.fetch("latest"))
13
+ @latest_release_date = Date.parse(specs.fetch("latestReleaseDate"))
14
+ @release_date = Date.parse(specs.fetch("releaseDate"))
15
+ @lts = specs.fetch("lts")
16
+ end
17
+
18
+ def supported?
19
+ @eol > Time.now.to_date
20
+ end
21
+ end
22
+ end
23
+ end
@@ -16,7 +16,7 @@ module EOL
16
16
  res = client.get("/#{product}.json")
17
17
  raise NotFoundError, "Product #{product} could not be found in the API" if res.status == 404
18
18
 
19
- JSON.parse(res.body)
19
+ JSON.parse(res.body).map { |p| Models::Cycle.new(p) }
20
20
  end
21
21
  end
22
22
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EOL
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
data/lib/eol_rb.rb CHANGED
@@ -4,13 +4,14 @@ require_relative "eol_rb/client"
4
4
  require_relative "eol_rb/configuration"
5
5
  require_relative "eol_rb/products"
6
6
  require_relative "eol_rb/cycle"
7
+ require_relative "eol_rb/models/cycle"
7
8
 
8
9
  # Root module for EndOfLife
9
10
  module EOL
10
11
  class << self
11
12
  extend Forwardable
12
13
 
13
- def_delegators :new, :of, :products
14
+ def_delegators :new, :info, :products
14
15
 
15
16
  def new
16
17
  Instance.new
@@ -35,7 +36,7 @@ module EOL
35
36
  Products.all(@client)
36
37
  end
37
38
 
38
- def of(product, cycle: "")
39
+ def info(product, cycle: "")
39
40
  if cycle.empty?
40
41
  Products.get(@client, product)
41
42
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eol_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alejandro Colomina
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-29 00:00:00.000000000 Z
11
+ date: 2023-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -80,6 +80,7 @@ files:
80
80
  - lib/eol_rb/client.rb
81
81
  - lib/eol_rb/configuration.rb
82
82
  - lib/eol_rb/cycle.rb
83
+ - lib/eol_rb/models/cycle.rb
83
84
  - lib/eol_rb/products.rb
84
85
  - lib/eol_rb/version.rb
85
86
  homepage: https://github.com/Coolomina/eol-rb