gems-validator 0.1.3 → 0.2.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: 4df4699ba5c8041c4914b850518597b09266c9c2d6da73ed27bb2638c3095967
4
- data.tar.gz: 5a388881aa540451eabc6b73aeb718678559c69d4ed964f9a8b73e6c9724e1a3
3
+ metadata.gz: ce4b940ae3ec03ef697466cea01274581f36826366548115a9266d4535362874
4
+ data.tar.gz: 3ecfb26f8a2b69dfb509f6034bbeb00f63a9234442ff389d1742f89582bffbc5
5
5
  SHA512:
6
- metadata.gz: 5337c007439bf594d884c112fa8a385fb81db644528874a2b393353e7693df3845c8d2137452c805486f46aebedf0276efafb010f24d2273359a03b8e6bfe1c9
7
- data.tar.gz: '0059dc66b395fde2ca5d61d5ed1386fc9523d4f7bd7ce0e267fd5618e2244f10754ba3ebf5e0562ac12b41be793a288ac3e5b7ec2f3992b1325aa6e0244afcce'
6
+ metadata.gz: 39d8cf53126bc3799572862576e3c21a5c32d2348e63f8ff4d928ddcbc3b0e0a8a343f5dbe34d4d54a397284a25012208c5bbc1cba0a2876c26a7f9b339761ae
7
+ data.tar.gz: 548344408cbce8728823d0564f61b3d7e7015f2181260e73eaffa63b3f734e1e679ae320a79e140a765bdea9132248cf3b037735909157a5e6579e3e941bcc39
data/.env ADDED
@@ -0,0 +1 @@
1
+ GET_TOKEN=eG5hJT9SZUQyYXpyLUBUX2pqJVU0eiRmVjl5RisjdUV0WmY4LTRWanZ2Rz1VVyo3VHlYXndCbms4V3dkLU1MWA==
data/Gemfile CHANGED
@@ -6,3 +6,4 @@ source "https://rubygems.org"
6
6
  gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
+ gem "dotenv"
data/Gemfile.lock CHANGED
@@ -1,17 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gems-validator (0.1.1)
4
+ gems-validator (0.1.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ dotenv (2.7.6)
9
10
  rake (13.0.6)
10
11
 
11
12
  PLATFORMS
12
13
  x86_64-linux
13
14
 
14
15
  DEPENDENCIES
16
+ dotenv
15
17
  gems-validator!
16
18
  rake (~> 13.0)
17
19
 
@@ -0,0 +1,7 @@
1
+ module GemsValidator
2
+ class FormatError < StandardError
3
+ def initialize(gem:, message:)
4
+ super("[Gems Validator] - Não foi possível instalar a gem #{gem}. Motivo: #{message}")
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,38 @@
1
+ module GemsValidator
2
+ class GemsService
3
+ def initialize()
4
+ @access_token = ENV['GET_TOKEN']
5
+ end
6
+
7
+ # Response:
8
+ # {
9
+ # available_gems: {
10
+ # [name]: {
11
+ # approved_at: Date,
12
+ # version?: String
13
+ # }
14
+ # },
15
+ # blocked_gems: {
16
+ # [name]: {
17
+ # blocked_at: Date,
18
+ # version?: String
19
+ # }
20
+ # },
21
+ # gems_pending_approval: {
22
+ # [name]: {
23
+ # requested_at: Date
24
+ # }
25
+ # }
26
+ # }
27
+ def get_gems()
28
+ response = request
29
+ JSON.parse(response.body)["data"]
30
+ end
31
+
32
+ private
33
+ def request
34
+ uri = URI('http://localhost:3030/gems/formatted')
35
+ Net::HTTP.get_response(uri, { "Authorization" => "Bearer #{@access_token}" })
36
+ end
37
+ end
38
+ end
@@ -4,12 +4,63 @@ module GemsValidator
4
4
  module Validate
5
5
  class << self
6
6
  def exec(gem)
7
- if gem.name == "rake"
8
- puts "Não pode instalar"
9
- raise "NÃO PODE INSTALAR"
7
+ @gem = gem
8
+ begin
9
+ is_blocked?
10
+ is_pending?
11
+ is_available?
12
+ p "[Gems Validator] - A gem #{gem} foi instalada com sucesso!"
13
+ rescue => error
14
+ raise GemsValidator::FormatError.new(gem: @gem.name, message: error.to_s)
10
15
  end
11
- puts "Pode instalar"
12
- puts gem
16
+ end
17
+
18
+ private
19
+ def is_blocked?
20
+ if gems_from_service["blocked_gems"].keys.include?(@gem.name)
21
+ is_version_blocked?
22
+ raise "Essa gem foi bloqueada."
23
+ end
24
+ end
25
+
26
+ def is_version_blocked?
27
+ if gems_from_service["blocked_gems"][@gem.name]["version"]
28
+ blocked_version = gems_from_service["blocked_gems"][@gem.name]["version"]
29
+ if @gem.version.to_s == blocked_version
30
+ raise "A versão #{@gem.version.to_s} foi bloqueada."
31
+ end
32
+ end
33
+ end
34
+
35
+ def is_pending?
36
+ if gems_from_service["pending_gems"].keys.include?(@gem.name)
37
+ raise "Essa gem está aguardando aprovação."
38
+ end
39
+ end
40
+
41
+ def is_available?
42
+ if gems_from_service["available_gems"].keys.include?(@gem.name)
43
+ is_version_available?
44
+ else
45
+ raise "Essa gem não pode ser instalada."
46
+ end
47
+ end
48
+
49
+ def is_version_available?
50
+ if gems_from_service["available_gems"][@gem.name]["version"]
51
+ required_version = gems_from_service["available_gems"][@gem.name]["version"]
52
+ if @gem.version.to_s != required_version
53
+ raise "Essa gem só pode ser instalada na versão #{@gem.version.to_s}."
54
+ end
55
+ end
56
+ end
57
+
58
+ def gems_service
59
+ @gems_service ||= GemsValidator::GemsService.new()
60
+ end
61
+
62
+ def gems_from_service
63
+ @gems_from_service ||= gems_service.get_gems()
13
64
  end
14
65
  end
15
66
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GemsValidator
4
- VERSION = "0.1.3"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -1,7 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'net/http'
4
+ require 'uri'
5
+ require 'json'
6
+ require 'dotenv'
7
+
8
+ Dotenv.load
9
+
3
10
  require_relative "gems-validator/version"
4
11
  require_relative "gems-validator/validate"
12
+ require_relative "gems-validator/format-error"
13
+ require_relative "gems-validator/gems-service"
5
14
 
6
15
  module GemsValidator
7
16
  class << self
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gems-validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - henriquesml
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-13 00:00:00.000000000 Z
11
+ date: 2022-06-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: gems-validator
14
14
  email:
@@ -17,11 +17,14 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - ".env"
20
21
  - ".rspec"
21
22
  - Gemfile
22
23
  - Gemfile.lock
23
24
  - Rakefile
24
25
  - lib/gems-validator.rb
26
+ - lib/gems-validator/format-error.rb
27
+ - lib/gems-validator/gems-service.rb
25
28
  - lib/gems-validator/validate.rb
26
29
  - lib/gems-validator/version.rb
27
30
  - plugins.rb