strans-client 1.4.4 → 1.6.1

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
  SHA1:
3
- metadata.gz: e572de493315b28703f86c457142b8835629832a
4
- data.tar.gz: 055bdbed6ebcd45a227ad447ad742549a89e18c9
3
+ metadata.gz: 9dc18e4662e5ba59fb22d29b605077b2d862f3a4
4
+ data.tar.gz: 7ebbdc3e507c8790ee7b20718e36b6812520787d
5
5
  SHA512:
6
- metadata.gz: f64555ad23e23b227a9f2b432173859592b99eef24fa2551c94cfbfa682b52cd2b261f2047374a633ccfda45b510662f9c4a1534af0df833920930a3859b8917
7
- data.tar.gz: cd576961ff585838dbd89a7c08f6d114d3cdc13687c9808fdfb08329a5ab299932caebc2b734d1fbec7f49878adcc3b3d21cb884d2e40c3f195f5edeb693661d
6
+ metadata.gz: 71ee7320d3ebcf4e3253b36533eedfce056a017f9e4b2e7ac3610c1c17bb03cd7b623c5cb6b3e2ead5e8616b35712aa9bfe11987104d9b9530cc9ea422762c10
7
+ data.tar.gz: b9675a7ebf5aed517a310e3383df95728ad5b6c84591c3221084816b4012ee4cc562332b5612f59f8b7e80a9a90ee17bf9ec0766be374f3d06af2486a22ab2e6
@@ -0,0 +1,18 @@
1
+
2
+ # Encapsula um erro de requisicao
3
+ class Erro
4
+ def initialize(fields)
5
+ @code = fields[:code] || fields['code']
6
+ @message = fields[:message] || fields['message']
7
+ end
8
+
9
+ def to_json
10
+ map.to_json
11
+ end
12
+
13
+ def map
14
+ error = {}
15
+ error[:code] = @error if @error
16
+ error[:message] = @message if @message
17
+ end
18
+ end
@@ -1,8 +1,6 @@
1
- require 'json'
2
- require 'erro_strans'
3
- require 'strans-client'
4
-
1
+ require_relative 'strans-client'
5
2
 
3
+ # cliente com alguns servicos facilitadores
6
4
  class LazyStransClient < StransClient
7
5
 
8
6
  RAIO_TERRA = 6378.137 #KM
@@ -11,18 +9,19 @@ class LazyStransClient < StransClient
11
9
  # Estaticas da api.
12
10
  def load
13
11
  @linhas = get(:linhas)
12
+ return @linhas if @linhas.is_a? Erro
14
13
  @paradas_linha = {} # paradas de uma linha
15
14
  @linhas_parada = {} # linhas de uma parada
16
15
  @linhas.each do |l|
17
16
  paradas = get(:paradas_linha, l.codigoLinha)
18
- if(!paradas.kind_of?(ErroStrans))
19
- @paradas_linha[l.codigoLinha] = paradas
20
- paradas.each do |p|
21
- @linhas_parada[p.codigoParada] = [] if !@linhas_parada.key?(p.codigoParada)
22
- @linhas_parada[p.codigoParada] << p.linha
23
- end
17
+ next if paradas.is_a? Erro
18
+ @paradas_linha[l.codigoLinha] = paradas
19
+ paradas.each do |p|
20
+ @linhas_parada[p.codigoParada] = [] unless @linhas_parada.key?(p.codigoParada)
21
+ @linhas_parada[p.codigoParada] << p.linha
24
22
  end
25
23
  end
24
+ @linhas_parada
26
25
  end
27
26
 
28
27
  #pega as paradas com distancia máxima
@@ -1,21 +1,20 @@
1
- require 'linha_strans'
2
- require 'parada_strans'
3
- require 'veiculo_strans'
1
+ require 'json'
2
+ require_relative 'veiculo'
4
3
 
5
- class LinhaStrans
4
+ class Linha
6
5
 
7
- attr_accessor :codigoLinha, :denomicao, :origem,
6
+ attr_accessor :codigoLinha, :denominacao, :origem,
8
7
  :retorno, :circular, :veiculos, :paradas
9
8
 
10
9
  def initialize(fields)
11
10
  if(fields)
12
11
  @codigoLinha = fields['CodigoLinha'] || fields[:codigoLinha]
13
- @denomicao = fields['Denomicao'] || fields[:denomicao]
12
+ @denominacao = fields['Denomicao'] || fields[:denomicao]
14
13
  @origem = fields['Origem'] || fields[:origem]
15
14
  @retorno = fields['Retorno'] || fields[:retorno]
16
15
  @circular = fields['Circular'] || fields[:circular]
17
- @veiculos = load_objs(fields['Veiculos'], VeiculoStrans)
18
- @paradas = load_objs(fields['Paradas'], ParadaStrans)
16
+ @veiculos = load_objs(fields['Veiculos'], Veiculo)
17
+ @paradas = load_objs(fields['Paradas'], Parada)
19
18
  end
20
19
  end
21
20
 
@@ -1,6 +1,6 @@
1
1
  require 'json'
2
2
 
3
- class ParadaStrans
3
+ class Parada
4
4
 
5
5
  def initialize(fields)
6
6
  load_atts(fields)
@@ -10,7 +10,7 @@ class ParadaStrans
10
10
 
11
11
  def load_atts(fields)
12
12
  @codigoParada = fields['CodigoParada'] || fields[:codigoParada]
13
- @denomicao = fields['Denomicao'] || fields[:denomicao]
13
+ @denominacao = fields['Denomicao'] || fields[:denomicao]
14
14
  @endereco = fields['Endereco'] || fields[:endereco]
15
15
  @lat = (fields['Lat'] || fields[:lat]).to_f
16
16
  @long = (fields['Long'] || fields[:long]).to_f
@@ -19,7 +19,7 @@ class ParadaStrans
19
19
  def to_json(*a)
20
20
  serialized = Hash.new
21
21
  serialized[:codigoParada] = @codigoParada if(@codigoParada)
22
- serialized[:denominacao] = @denominacao if(@denomincao)
22
+ serialized[:denominacao] = @denominacao if(@denominacao)
23
23
  serialized[:endereco] = @endereco if(@endereco)
24
24
  serialized[:lat] = @lat if(@lat)
25
25
  serialized[:long] = @long if(@long)
@@ -0,0 +1,47 @@
1
+ require 'json'
2
+ require 'net/http'
3
+ require_relative 'response'
4
+ require_relative 'erro'
5
+ require 'byebug'
6
+
7
+ # Representa uma requisicao
8
+ class Request
9
+ URL_API = 'https://api.inthegra.strans.teresina.pi.gov.br/v1'.freeze
10
+
11
+ VERB_MAP = {
12
+ get: Net::HTTP::Get,
13
+ post: Net::HTTP::Post,
14
+ put: Net::HTTP::Put,
15
+ delete: Net::HTTP::Delete
16
+ }.freeze
17
+
18
+ def initialize(token)
19
+ @token = token
20
+ end
21
+
22
+ def send(method, path, params = nil)
23
+ uri = URI.parse(URL_API + path)
24
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |https|
25
+ req = build_request(method, uri, params)
26
+ build_response(https.request(req))
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def build_request(method, uri, params)
33
+ uri.query = URI.encode_www_form(params) if method == :get && params
34
+ req = VERB_MAP[method].new(uri, @token.header)
35
+ req.body = params.to_json if params && method != :get
36
+ req
37
+ end
38
+
39
+ def build_response(resp_http)
40
+ case resp_http
41
+ when Net::HTTPSuccess then
42
+ Response.new(resp_http)
43
+ else
44
+ Erro.new(code: resp_http.code, message: resp_http.message)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,57 @@
1
+ require_relative 'Linha'
2
+ require_relative 'Parada'
3
+
4
+ class Response
5
+
6
+ def initialize(resp)
7
+ @resp = resp
8
+ end
9
+
10
+ def model(path)
11
+ @resp = JSON.parse(@resp.body)
12
+ case path
13
+ when :signin
14
+ token
15
+ when :linhas
16
+ linhas
17
+ when :veiculos
18
+ veiculos
19
+ when :veiculos_linha
20
+ veiculos_linha
21
+ when :paradas
22
+ paradas
23
+ when :paradas_linha
24
+ paradas_linha
25
+ end
26
+ end
27
+
28
+ def token
29
+ @resp
30
+ end
31
+
32
+ def linhas
33
+ @resp.map{ |l| Linha.new(l) }
34
+ end
35
+
36
+ def veiculos
37
+ v = @resp.map do |node|
38
+ linha = Linha.new(node['Linha'])
39
+ linha.veiculos
40
+ end
41
+ v.reduce(:concat)
42
+ end
43
+
44
+ def veiculos_linha
45
+ linha = Linha.new(@resp['Linha'])
46
+ linha.veiculos
47
+ end
48
+
49
+ def paradas
50
+ @resp.map{|p| Parada.new(p) }
51
+ end
52
+
53
+ def paradas_linha
54
+ @resp.map{|p| Parada.new(p) }
55
+ end
56
+
57
+ end
@@ -1,36 +1,38 @@
1
1
  require 'json'
2
- require 'request_strans'
3
- require 'response_strans'
4
- require 'token_strans'
2
+ require_relative 'Request'
3
+ require_relative 'Response'
4
+ require_relative 'Token'
5
+ require_relative 'Erro'
5
6
 
6
7
  class StransClient
7
8
 
8
9
  PATHS = {
9
- :signin => '/signin',
10
- :linhas => '/linhas',
11
- :veiculos => '/veiculos',
12
- :veiculos_linha => '/veiculosLinha',
13
- :paradas => '/paradas',
14
- :paradas_linha => '/paradasLinha',
15
- }
10
+ signin: '/signin',
11
+ linhas: '/linhas',
12
+ veiculos: '/veiculos',
13
+ veiculos_linha: '/veiculosLinha',
14
+ paradas: '/paradas',
15
+ paradas_linha: '/paradas'
16
+ }.freeze
16
17
 
17
- def initialize( email, pass, key)
18
+ def initialize(email, pass, key)
18
19
  @email = email
19
20
  @password = pass
20
21
  @key = key
21
- @token = TokenStrans.new(@key)
22
+ @token = Token.new(@key)
22
23
  end
23
24
 
24
- def get(path, busca = nil )
25
- @request = RequestStrans.new(@token)
26
- if(@token.valid?)
27
- busca = busca.nil? ? {} : {busca: busca}
28
- @resp = @request.send(:get, PATHS[path], busca)
29
- @resp.model(path)
25
+ def get(path, busca = nil)
26
+ @request = Request.new(@token)
27
+ if @token.valid?
28
+ busca = busca.nil? ? {} : {busca: busca}
29
+ @resp = @request.send(:get, PATHS[path], busca)
30
+ @resp = @resp.model(path) if @resp.is_a? Response
30
31
  else
31
- autentic()
32
- get(path, busca)
32
+ @resp = autentic
33
+ get(path, busca) if @token.valid?
33
34
  end
35
+ @resp
34
36
  end
35
37
 
36
38
  private
@@ -38,7 +40,8 @@ class StransClient
38
40
  def autentic
39
41
  credencials = { email:@email, password:@password }
40
42
  @resp = @request.send(:post, PATHS[:signin], credencials)
41
- @token = TokenStrans.new(@key, @resp.model(:signin))
43
+ @token = Token.new(@key, @resp.model(:signin)) unless @resp.is_a? Erro
44
+ @resp
42
45
  end
43
46
 
44
47
  end
@@ -1,6 +1,6 @@
1
- require 'json'
2
1
 
3
- class TokenStrans
2
+
3
+ class Token
4
4
 
5
5
  def initialize (key, fields={})
6
6
  @key = key
@@ -1,6 +1,4 @@
1
- require 'json'
2
-
3
- class VeiculoStrans
1
+ class Veiculo
4
2
 
5
3
  attr_accessor :codigoVeiculo, :hora, :lat, :long, :linha
6
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strans-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luan Pontes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-17 00:00:00.000000000 Z
11
+ date: 2018-03-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple client for Api strans from Teresina.
14
14
  email: luapontes2@gmail.com
@@ -16,15 +16,15 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
- - lib/erro_strans.rb
19
+ - lib/erro.rb
20
20
  - lib/lazy-strans-client.rb
21
- - lib/linha_strans.rb
22
- - lib/parada_strans.rb
23
- - lib/request_strans.rb
24
- - lib/response_strans.rb
21
+ - lib/linha.rb
22
+ - lib/parada.rb
23
+ - lib/request.rb
24
+ - lib/response.rb
25
25
  - lib/strans-client.rb
26
- - lib/token_strans.rb
27
- - lib/veiculo_strans.rb
26
+ - lib/token.rb
27
+ - lib/veiculo.rb
28
28
  homepage: https://github.com/tOOlmaker-equalsp/ruby-apiStransTHE
29
29
  licenses:
30
30
  - MIT
@@ -45,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
45
  version: '0'
46
46
  requirements: []
47
47
  rubyforge_project:
48
- rubygems_version: 2.2.2
48
+ rubygems_version: 2.6.14
49
49
  signing_key:
50
50
  specification_version: 4
51
51
  summary: strans-client
@@ -1,17 +0,0 @@
1
- require 'json'
2
-
3
- class ErroStrans
4
-
5
- def initialize(fields)
6
- @code = fields['code']
7
- @message = fields['message']
8
- end
9
-
10
- def to_json(*a)
11
- error = Hash.new
12
- error[:code] = @error if @error
13
- error[:message] = @message if @message
14
- error.to_json
15
- end
16
-
17
- end
@@ -1,38 +0,0 @@
1
- require 'json'
2
- require 'response_strans'
3
- require 'net/http'
4
-
5
- class RequestStrans
6
-
7
- URL_API = "https://api.inthegra.strans.teresina.pi.gov.br/v1"
8
-
9
- VERB_MAP = {
10
- :get => Net::HTTP::Get,
11
- :post => Net::HTTP::Post,
12
- :put => Net::HTTP::Put,
13
- :delete => Net::HTTP::Delete
14
- }
15
- def initialize(token)
16
- @token = token
17
- end
18
-
19
- def encode_path_params(path, params)
20
- encoded = URI.encode_www_form(params)
21
- [path, encoded].join("?")
22
- end
23
-
24
- def send( method, path, params = nil )
25
- uri = URI.parse(URL_API+path)
26
- https = Net::HTTP.new(uri.host, uri.port)
27
- https.use_ssl = true
28
- if(method == :get)
29
- uri.query = URI.encode_www_form(params) if (params)
30
- end
31
- req = VERB_MAP[method].new(uri, @token.header)
32
- if (params && method != :get)
33
- req.body = params.to_json
34
- end
35
- ResponseStrans.new(https.request(req))
36
- end
37
-
38
- end
@@ -1,65 +0,0 @@
1
- require 'json'
2
- require 'linha_strans'
3
- require 'parada_strans'
4
- require 'veiculo_strans'
5
- require 'erro_strans'
6
-
7
- class ResponseStrans
8
-
9
- def initialize(resp)
10
- @resp = resp
11
- end
12
-
13
- def model(path)
14
- @resp = JSON.parse(@resp.body)
15
- if(@resp.kind_of?(Hash) && @resp['code'] )
16
- return ErroStrans.new(@resp)
17
- end
18
-
19
- case path
20
- when :signin
21
- token()
22
- when :linhas
23
- linhas()
24
- when :veiculos
25
- veiculos()
26
- when :veiculos_linha
27
- veiculos_linha()
28
- when :paradas
29
- paradas()
30
- when :paradas_linha
31
- paradas_linha()
32
- end
33
- end
34
-
35
- def token()
36
- @resp
37
- end
38
-
39
- def linhas()
40
- @resp.map{|l| LinhaStrans.new(l) }
41
- end
42
-
43
- def veiculos()
44
- v = @resp.map do |node|
45
- linha = LinhaStrans.new(node['Linha'])
46
- linha.veiculos
47
- end
48
- v.reduce(:concat)
49
- end
50
-
51
- def veiculos_linha()
52
- linha = LinhaStrans.new(@resp['Linha'])
53
- linha.veiculos
54
- end
55
-
56
- def paradas ()
57
- @resp.map{|p| ParadaStrans.new(p) }
58
- end
59
-
60
- def paradas_linha()
61
- @resp = @resp['Linha'].merge!('Paradas' => @resp['Paradas'])
62
- LinhaStrans.new(@resp).paradas
63
- end
64
-
65
- end