iesde 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c838a05aa5322e830e239c6cddd036971c4f8e7
4
+ data.tar.gz: 6db88f708d18409085c435d4910cd31864e22692
5
+ SHA512:
6
+ metadata.gz: c88f21a60a06b95872d681d70488a513e7f83f789bc3fbfa34cee4586a4dc1003694fc2cef279c7626c4e721cd87e93c7391d73965d4fb26f46159d685b4103a
7
+ data.tar.gz: 3acd2c40509fcdabcd5a508d1d4e766bcce1ccedb1858ceb69e302347d9af33a08d1b091b811a58dc2b62030e99901bd8d40fe946663d468595139a48db31424
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in iesde.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ LICENSE
2
+
3
+ The MIT License
4
+
5
+ Copyright (c) 2016 Fortes Tecnologia.
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ THE SOFTWARE.
@@ -0,0 +1,242 @@
1
+ # Iesde
2
+
3
+ Interface para acesso ao WebService do [Iesde][siteiesde] para sistemas Rails. Não se trata de uma ferramenta oficial pois foi desenvolvida por necessidade dos nossos desenvolvedores. Sintam-se livres para contribuir.
4
+
5
+ ## Índice
6
+ \- [Iesde](#iesde)
7
+ - [Versão](#vers%C3%A3o)
8
+ - [Instalação](#instala%C3%A7%C3%A3o)
9
+ - [Uso](#uso)
10
+ - [Listagem de Cursos](#listagem-de-cursos)
11
+ - [Busca de curso por Id](#busca-de-curso-por-id)
12
+ - [Listagem de Aulas](#listagem-de-aulas)
13
+ - [Listagem de Matrículas](#listagem-de-matr%C3%ADculas)
14
+ - [Matricular Aluno](#matricular-aluno)
15
+ - [Inativação de Aluno](#inativa%C3%A7%C3%A3o-de-aluno)
16
+ - [Logout](#logout)
17
+ - [Default Configs](#default-configs)
18
+ - [Relacionamentos](#relacionamentos)
19
+
20
+ ## Versão
21
+ 1.0.0 - Seguindo a documentação v14 do WebService
22
+
23
+ ## Instalação
24
+
25
+ ```sh
26
+ gem install iesde -v 1.0.0
27
+ ```
28
+
29
+ Ou no seu Gemfile
30
+ ```ruby
31
+ gem 'iesde', '~> 1.0.0'
32
+ ```
33
+
34
+ ## Uso
35
+
36
+ > Todas as buscas no WebService exigem os parâmetros **login** e **senha**.
37
+ > Caso você possua apenas um usuário de acesso ao WebService, você pode configurar esses parâmetros em um initializer.
38
+ > Veja na seção [Default Configs](#default-configs).
39
+
40
+ ### Listagem de Cursos
41
+
42
+ Retorna um array de ```Iesde::Model::Curso```
43
+ ```ruby
44
+ parametros = {
45
+ login: "0123456789",
46
+ senha: "9d7d5741ab23397aa15937fcd4121a32",
47
+ busca: "",
48
+ tipo: "C",
49
+ site: "",
50
+ idCurso: ""
51
+ }
52
+ cursos = Iesde::Model::Curso.buscar(parametros)
53
+ => [#<Iesde::Model::Curso>, #<Iesde::Model::Curso>, #<Iesde::Model::Curso>, ...]
54
+ ```
55
+ ### Busca de curso por Id
56
+ Esta busca realiza uma varredura em todos os cursos e pacotes em busca do **id** passado como parâmetro.
57
+
58
+ Retorna um ```Iesde::Model::Curso```
59
+ ```ruby
60
+ curso = Iesde::Model::Curso.find id: 1000, login: "0123456789", senha: "9d7d5741ab23397aa15937fcd4121a32"
61
+ => #<Iesde::Model::Curso>
62
+
63
+ curso.id
64
+ => "1000"
65
+
66
+ curso.nome
67
+ => "A BUSCA DA PERFEICÃO"
68
+ ```
69
+
70
+ ### Listagem de Aulas
71
+ Retorna um array de ```Iesde::Model::Aula```
72
+
73
+ ```ruby
74
+ parametros = {
75
+ login: "0123456789",
76
+ senha: "9d7d5741ab23397aa15937fcd4121a32",
77
+ loginAluno: "",
78
+ cpf: "",
79
+ curso: "1000",
80
+ ancora: "",
81
+ tipo: "C"
82
+ }
83
+ aulas = Iesde::Model::Aula.buscar(parametros)
84
+ => [#<Iesde::Model::Aula>, #<Iesde::Model::Aula>, #<Iesde::Model::Aula>, ...]
85
+ ```
86
+
87
+ Ou já tendo o curso carregado...
88
+
89
+ ```ruby
90
+ curso.aulas
91
+ => [#<Iesde::Model::Aula>, #<Iesde::Model::Aula>, #<Iesde::Model::Aula>, ...]
92
+ ```
93
+
94
+ ### Listagem de Matrículas
95
+
96
+ Retorna um array de ```Iesde::Model::Matricula ```
97
+
98
+ ```ruby
99
+ parametros = {
100
+ login: "0123456789",
101
+ senha: "9d7d5741ab23397aa15937fcd4121a32",
102
+ curso: "6376",
103
+ tipo: "C"
104
+ }
105
+ Iesde::Model::Matricula.buscar(parametros)
106
+ => [#<Iesde::Model::Matricula>, #<Iesde::Model::Matricula>, #<Iesde::Model::Matricula>, ...]
107
+ ```
108
+ Ou já tendo o curso carregado...
109
+
110
+ ```ruby
111
+ curso.matriculas
112
+ => [#<Iesde::Model::Matricula>, #<Iesde::Model::Matricula>, #<Iesde::Model::Matricula>, ...]
113
+ ```
114
+
115
+ ### Matricular Aluno
116
+
117
+ Realiza a matrícula no WebService e retorna um ```Iesde::Model::Matricula```
118
+
119
+ ```ruby
120
+ parametros = {
121
+ login: "0190001388",
122
+ senha: "9d7d5741ab23397afeb81829a3d5ebd7",
123
+ loginAluno: "aluno@minhaorganizacao.com.br",
124
+ cpf: "12345678900",
125
+ curso: "1000",
126
+ duracao: "90",
127
+ tipo: "C",
128
+ valor: ""
129
+ }
130
+ matricula = Iesde::Model::Matricula.criar(parametros)
131
+ => #<Iesde::Model::Matricula>
132
+ ```
133
+
134
+ ### Inativação de Aluno
135
+
136
+ Inativa a matrícula e retorna ```true``` se sucesso.
137
+
138
+ ```ruby
139
+ parametros = {
140
+ login: "0190001388",
141
+ senha: "9d7d5741ab23397afeb81829a3d5ebd7",
142
+ :"LoginID" => "12345"
143
+ }
144
+ Iesde::Model::Matricula.inativar(parametros)
145
+ => true
146
+ ```
147
+
148
+ Ou caso já possua a matrícula carregada...
149
+
150
+ ```ruby
151
+ matricula.inativar
152
+ => true
153
+ ```
154
+ ### Logout
155
+
156
+ Realiza logout do aluno e retorna ```true``` se sucesso.
157
+
158
+ ```ruby
159
+ parametros = {
160
+ login: "0190001388",
161
+ senha: "9d7d5741ab23397afeb81829a3d5ebd7",
162
+ loginAluno: "aluno@minhaorganizacao.com.br",
163
+ cpf: "12345678900"
164
+ }
165
+ Iesde::Model::Aluno.logout(parametros)
166
+ => true
167
+ ```
168
+
169
+ Ou você pode obter a instância de ```Iesde::Model::Aluno``` e chamar diretamente...
170
+
171
+ ```ruby
172
+ aluno = matricula.aluno
173
+ => #<Iesde::Model::Aluno>
174
+ aluno.logout
175
+ => true
176
+ ```
177
+
178
+ ```ruby
179
+ aluno = curso.matriculas.first.aluno
180
+ => #<Iesde::Model::Aluno>
181
+ aluno.logout
182
+ => true
183
+ ```
184
+
185
+ ## Default Configs
186
+ Caso você utilize apenas um usuário do WebService em sua aplicação, seria interessante não passar os parâmetros **login** e **senha** em toda busca.
187
+
188
+ Você pode configurar num initializer esses parâmetros:
189
+
190
+ ```ruby
191
+ Iesde::configure do |config|
192
+ config.default_username = "0190001388"
193
+ config.default_password = "9d7d5741ab23397afeb81829a3d5ebd7"
194
+ end
195
+ ```
196
+
197
+ Então poderá realizar as requisições sem passar estes parâmetros. Exemplos:
198
+
199
+ ```ruby
200
+ cursos = Iesde::Model::Curso.buscar busca: "", tipo: "C", site: "", idCurso: ""
201
+ => [#<Iesde::Model::Curso>, #<Iesde::Model::Curso>, #<Iesde::Model::Curso>, ...]
202
+
203
+ curso = Iesde::Model::Curso.find id: 1000
204
+ => #<Iesde::Model::Curso>
205
+
206
+ Iesde::Model::Matricula.inativar :"LoginID" => "12345"
207
+ => true
208
+ ```
209
+
210
+ ## Relacionamentos
211
+
212
+ - Um ```Iesde::Model::Curso``` possui várias ```Iesde::Model::Aula```e várias ```Iesde::Model::Matricula```
213
+ - Uma ```Iesde::Model::Matricula``` possui um ```Iesde::Model::Aluno``` e um ```Iesde::Model::Curso```
214
+ - Logo ```Iesde::Model::Curso``` possui vários ```Iesde::Model::Aluno```
215
+ ```ruby
216
+ # Busca aulas no WS do curso
217
+ curso.aulas
218
+ => [#<Iesde::Model::Aula>, #<Iesde::Model::Aula>, #<Iesde::Model::Aula>, ...]
219
+
220
+ aula.curso
221
+ => #<Iesde::Model::Curso>
222
+
223
+ curso.matriculas
224
+ => [#<Iesde::Model::Matricula>, #<Iesde::Model::Matricula>, #<Iesde::Model::Matricula>, ...]
225
+
226
+ matricula.curso
227
+ => #<Iesde::Model::Curso>
228
+
229
+ matricula.aluno
230
+ => #<Iesde::Model::Aluno>
231
+
232
+ curso.alunos
233
+ => [#<Iesde::Model::Aluno>, #<Iesde::Model::Aluno>, #<Iesde::Model::Aluno>, ...]
234
+ ```
235
+
236
+ > A maioria destas operações só busca do WS uma vez. Ao buscar as aulas de um curso, elas já vem com o curso carregado em suas instâncias, evitando outra chamada ao WS para buscar o curso ao fazer ```aula.curso```.
237
+
238
+ ## Licença
239
+
240
+ MIT Licence. Copyright (c) 2016 Fortes Tecnologia. http://www.fortestecnologia.com.br
241
+
242
+ [siteiesde]:<http://www.iesde.com.br>
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ task :console do
4
+ exec "irb -r iesde -I ./lib"
5
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "iesde"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'iesde/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "iesde"
8
+ spec.version = Iesde::VERSION
9
+ spec.authors = ["Pedro Benevides"]
10
+ spec.email = ["pedroaugusto@gmail.com"]
11
+
12
+ spec.summary = "Client do WebService SOAP do IESDE"
13
+ spec.description = "Esta não é uma versão oficial"
14
+ spec.homepage = "https://github.com/fortesinformatica/iesde"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.8"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_dependency "savon", "~> 2.10"
25
+ spec.add_dependency "json", "~> 1.7"
26
+ spec.add_dependency "activesupport", "~> 4.2"
27
+
28
+ end
@@ -0,0 +1,39 @@
1
+ require 'active_support/core_ext/module/attribute_accessors'
2
+ require 'active_support/inflector'
3
+ require 'json'
4
+ require 'savon'
5
+
6
+ module Iesde
7
+ module Clients
8
+ autoload :ListaCurso,"iesde/clients/lista_curso"
9
+ autoload :ObtemAula,"iesde/clients/obtem_aulas"
10
+ autoload :ObtemMatricula,"iesde/clients/obtem_matriculas"
11
+ autoload :Cadastro,"iesde/clients/cadastro"
12
+ autoload :InativaAcesso,"iesde/clients/inativa_acesso"
13
+ autoload :Logout,"iesde/clients/logout"
14
+ end
15
+
16
+ module Error
17
+ autoload :ValidationError,'iesde/error/validation_error'
18
+ autoload :WSError,'iesde/error/ws_error'
19
+ end
20
+
21
+ module Model
22
+ autoload :Curso,"iesde/model/curso"
23
+ autoload :Aula,"iesde/model/aula"
24
+ autoload :Matricula,"iesde/model/matricula"
25
+ autoload :Aluno,"iesde/model/aluno"
26
+ end
27
+
28
+ autoload :VERSION, "iesde/version"
29
+ autoload :Config,"iesde/config"
30
+ autoload :WSDLClient,"iesde/wsdl_client"
31
+
32
+ mattr_accessor :config
33
+
34
+ def self.configure
35
+ self.config ||= Iesde::Config.new
36
+ yield(config) if block_given?
37
+ end
38
+
39
+ end
@@ -0,0 +1,32 @@
1
+ module Iesde
2
+ module Clients
3
+ class Cadastro < Iesde::WSDLClient
4
+
5
+ CODIGO_RETORNO_SUCESSO = "001"
6
+
7
+ def initialize
8
+ @action = "Cadastro"
9
+ @wsdl_url = "http://ws.videoaulasonline.com.br/aluno/cadastro/wsdl"
10
+ @format = [ :login, :senha, :loginAluno, :cpf, :curso, :duracao, :tipo, :valor ]
11
+ @obligatory_params = [ :login, :senha, :loginAluno, :cpf, :curso, :duracao, :tipo ]
12
+ end
13
+
14
+ def check_params params
15
+ errors = super params
16
+ errors << "[LoginAluno pode ter no máx 100 digitos]" if params[:loginAluno].size > 100
17
+ errors << "[CPF pode ter no máx 11 digitos]" if params[:cpf].size > 11
18
+ errors << "[Curso pode ter no máx 6 digitos]" if params[:curso].size > 6
19
+ errors << "[Duracao precisa ser múltiplo de 30 dias e ter no máx 4 dígitos]" if params[:duracao].to_s.size > 4 || params[:duracao].to_i % 30 != 0
20
+ errors << "[Tipo pode ser uma das letras P, C ou E]" unless ['P','C', 'E'].include?(params[:tipo])
21
+ errors
22
+ end
23
+
24
+ def map response
25
+ ws_message = Iesde::Error::WSError.new(response)
26
+ raise ws_message if ws_message.code != CODIGO_RETORNO_SUCESSO
27
+ true
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module Iesde
2
+ module Clients
3
+ class InativaAcesso < Iesde::WSDLClient
4
+
5
+ CODIGO_RETORNO_SUCESSO = "020"
6
+
7
+ def initialize
8
+ @action = "inativaAcesso"
9
+ @format = [ :login, :senha, :"LoginID" ]
10
+ @obligatory_params = [ :login, :senha, :"LoginID" ]
11
+ end
12
+
13
+ def map response
14
+ ws_message = Iesde::Error::WSError.new(response)
15
+ raise ws_message if ws_message.code != CODIGO_RETORNO_SUCESSO
16
+ true
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ module Iesde
2
+ module Clients
3
+ class ListaCurso < Iesde::WSDLClient
4
+
5
+ def initialize
6
+ @model = Iesde::Model::Curso
7
+ @action = "listaCurso"
8
+ @format = [ :login, :senha, :busca, :tipo, :site, :idCurso ]
9
+ @obligatory_params = [ :login, :senha, :busca, :tipo, :site ]
10
+ end
11
+
12
+ def check_params params
13
+ errors = super params
14
+ errors << "[Busca pode ter no máx 100 digitos]" if params[:busca].size > 100
15
+ errors << "[Tipo pode ser uma das letras P, C ou E]" unless ['P','C', 'E'].include?(params[:tipo])
16
+ errors << "[Quando tipo for P precisa especificar idCurso]" if params[:tipo] == 'P' && params[:idCurso].blank?
17
+ errors
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ module Iesde
2
+ module Clients
3
+ class Logout < Iesde::WSDLClient
4
+
5
+ CODIGO_RETORNO_LOGOUT_JA_REALIZADO = "027"
6
+ CODIGO_RETORNO_LOGOUT_REALIZADO = "028"
7
+
8
+ def initialize
9
+ @wsdl_url = "http://ws.videoaulasonline.com.br/index.php/aluno/logout/wsdl"
10
+ @action = "logout"
11
+ @format = [ :login, :senha, :loginAluno, :cpf ]
12
+ @obligatory_params = [ :login, :senha, :loginAluno, :cpf ]
13
+ end
14
+
15
+ def check_params params
16
+ errors = super params
17
+ errors << "[LoginAluno pode ter no máx 100 digitos]" if params[:loginAluno].size > 100
18
+ errors << "[CPF pode ter no máx 11 digitos]" if params[:cpf].size > 11
19
+ errors
20
+ end
21
+
22
+ def map response
23
+ ws_message = Iesde::Error::WSError.new(response)
24
+ raise ws_message unless [CODIGO_RETORNO_LOGOUT_JA_REALIZADO, CODIGO_RETORNO_LOGOUT_REALIZADO].include?(ws_message.code)
25
+ true
26
+ end
27
+
28
+ def response_param
29
+ :logout
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ module Iesde
2
+ module Clients
3
+ class ObtemAula < Iesde::WSDLClient
4
+
5
+ def initialize
6
+ @model = Iesde::Model::Aula
7
+ @action = "obtemAulas"
8
+ @format = [ :login, :senha, :loginAluno, :cpf, :curso, :ancora, :tipo ]
9
+ @obligatory_params = [ :login, :senha, :loginAluno, :cpf, :curso, :tipo ]
10
+ end
11
+
12
+ def check_params params
13
+ errors = super params
14
+ errors << "[Curso pode ter no máx 6 digitos]" if params[:curso].size > 6
15
+ errors << "[Tipo pode ser uma das letras P, C ou E]" unless ['P','C', 'E'].include?(params[:tipo])
16
+ errors
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module Iesde
2
+ module Clients
3
+ class ObtemMatricula < Iesde::WSDLClient
4
+
5
+ CODIGO_RETORNO_NENHUMA_ENCONTRADA = "010"
6
+
7
+ def initialize
8
+ @model = Iesde::Model::Matricula
9
+ @action = "obtemMatriculas"
10
+ @format = [ :login, :senha, :curso, :tipo ]
11
+ @obligatory_params = [ :login, :senha, :curso, :tipo ]
12
+ end
13
+
14
+ def check_params params
15
+ errors = super params
16
+ errors << "[Curso pode ter no máx 6 digitos]" if params[:curso].size > 6
17
+ errors << "[Tipo pode ser uma das letras P, C ou E]" unless ['P','C', 'E'].include?(params[:tipo])
18
+ errors
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ module Iesde
2
+ class Config
3
+ attr_accessor :default_username, :default_password
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module Iesde
2
+ module Error
3
+ class ValidationError < ::RuntimeError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module Iesde
2
+ module Error
3
+ class WSError < ::RuntimeError
4
+ def code
5
+ message[1..3]
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module Iesde
2
+ module Model
3
+ class Aluno
4
+ attr_accessor :login_aluno, :cpf, :login, :senha
5
+
6
+ def initialize(*args)
7
+ @login_aluno, @cpf, @login, @senha = args
8
+ end
9
+
10
+ def self.logout params
11
+ client_logout = Iesde::WSDLClient.create :logout
12
+ client_logout.run params
13
+ end
14
+
15
+ def logout
16
+ Aluno.logout login: @login, senha: @senha, loginAluno: @login_aluno, cpf: @cpf
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Iesde
2
+ module Model
3
+ class Aula
4
+ attr_accessor :curso_id, :nome_curso, :categoria, :subcategoria, :id, :ordem, :tema, :autores, :duracao, :login_aluno, :cpf, :disciplina_id, :disciplina, :login, :senha, :curso
5
+
6
+ def initialize(*args)
7
+ @curso_id, @nome_curso, @categoria, @subcategoria, @id, @ordem, @tema, @autores, @duracao, @login_aluno, @cpf, @disciplina_id, @disciplina = args
8
+ end
9
+
10
+ def self.buscar params
11
+ client_obtem_aulas = WSDLClient.create :obtem_aulas
12
+ client_obtem_aulas.run params
13
+ end
14
+
15
+ def curso
16
+ @curso ||= Curso.find id: @curso_id, login: @login, senha: @senha
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,113 @@
1
+ module Iesde
2
+ module Model
3
+ class Curso
4
+
5
+ TIPO_CURSOS_PADRAO = %w(C E)
6
+ TIPO_CURSO_PACOTE = 'P'
7
+ SITES_CURSOS = %w(4 22 10 7 6 13)
8
+
9
+ attr_accessor :tipo, :id, :nome, :objetivo, :temas, :autores, :carga_horaria, :valor, :quant_aulas, :categoria, :video_demo, :pdf_demo, :login, :senha
10
+ attr_reader :aulas, :matriculas
11
+
12
+ def initialize(*args)
13
+ @tipo, @id, @nome, @objetivo, @temas, @autores, @carga_horaria, @valor, @quant_aulas, @categoria, @video_demo, @pdf_demo = args
14
+ end
15
+
16
+ def self.find params
17
+ curso = nil
18
+
19
+ if !params[:id].blank? && !params[:login].blank? && !params[:senha].blank?
20
+ search_params = { login: params[:login], senha: params[:senha], busca: "", tipo: "", site: "", idCurso: params[:id].to_s }
21
+
22
+ curso = buscar_cursos_padrao search_params
23
+ curso = buscar_cursos_nos_pacotes search_params unless curso
24
+ end
25
+ return curso
26
+ end
27
+
28
+ def self.buscar params
29
+ client_busca_curso = WSDLClient.create :lista_curso
30
+ cursos = client_busca_curso.run params
31
+ cursos.each do |curso|
32
+ curso.login = params[:login]
33
+ curso.senha = params[:senha]
34
+ curso.tipo = params[:tipo]
35
+ end
36
+ end
37
+
38
+ def aulas
39
+ @aulas ||= buscar_aulas
40
+ end
41
+
42
+ def matriculas
43
+ begin
44
+ @matriculas ||= buscar_matriculas
45
+ rescue Iesde::Error::WSError => e
46
+ if e.code == Iesde::Clients::ObtemMatricula::CODIGO_RETORNO_NENHUMA_ENCONTRADA
47
+ @matriculas = []
48
+ else
49
+ raise e
50
+ end
51
+ end
52
+ @matriculas
53
+ end
54
+
55
+ def alunos
56
+ matriculas.map &:aluno
57
+ end
58
+
59
+ private
60
+
61
+ def self.buscar_cursos_padrao params
62
+ curso = nil
63
+ TIPO_CURSOS_PADRAO.each do |tipo|
64
+ begin
65
+ params[:tipo] = tipo
66
+ cursos = Curso.buscar params
67
+ if cursos
68
+ curso = cursos.first
69
+ break
70
+ end
71
+ rescue Exception
72
+ end
73
+ end
74
+ curso
75
+ end
76
+
77
+ def self.buscar_cursos_nos_pacotes params
78
+ curso = nil
79
+ params[:tipo] = TIPO_CURSO_PACOTE
80
+ SITES_CURSOS.each do |site|
81
+ begin
82
+ params[:site] = site
83
+ cursos = Curso.buscar params
84
+ if cursos
85
+ curso = cursos.first
86
+ break
87
+ end
88
+ rescue Exception
89
+ end
90
+ end
91
+ curso
92
+ end
93
+
94
+ def buscar_aulas
95
+ aulas = Aula.buscar login: @login, senha: @senha, loginAluno: "", cpf: "", curso: @id, ancora: "", tipo: @tipo
96
+ passar_dados aulas
97
+ end
98
+
99
+ def buscar_matriculas
100
+ matriculas = Matricula.buscar login: @login, senha: @senha, curso: @id, tipo: @tipo
101
+ passar_dados matriculas
102
+ end
103
+
104
+ def passar_dados modelos
105
+ modelos.each do |modelo|
106
+ modelo.login = @login
107
+ modelo.senha = @senha
108
+ modelo.curso = self
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,46 @@
1
+ module Iesde
2
+ module Model
3
+ class Matricula
4
+ attr_accessor :curso_id, :nome_curso, :data_inclusao, :duracao, :email_aluno, :cpf_aluno, :id, :login, :senha, :curso
5
+
6
+ def initialize(*args)
7
+ @curso_id, @nome_curso, @data_inclusao, @duracao, @email_aluno, @cpf_aluno, @id = args
8
+ end
9
+
10
+ def self.buscar params
11
+ client_obtem_matriculas = WSDLClient.create :obtem_matriculas
12
+ matriculas = client_obtem_matriculas.run params
13
+ matriculas.each do |matricula|
14
+ matricula.login = params[:login]
15
+ matricula.senha = params[:senha]
16
+ end
17
+ end
18
+
19
+ def self.criar params
20
+ client_cadastro = WSDLClient.create :cadastro
21
+ if client_cadastro.run(params)
22
+ matriculas = buscar params.except(:loginAluno, :cpf, :duracao, :valor)
23
+ matriculas.select { |matricula| matricula.email_aluno == params[:loginAluno] }.first
24
+ end
25
+ end
26
+
27
+ def self.inativar params
28
+ client_inativa_acesso = WSDLClient.create :inativa_acesso
29
+ client_inativa_acesso.run params
30
+ end
31
+
32
+ def inativar
33
+ Matricula.inativar login: @login, senha: @senha, :"LoginID" => @id
34
+ end
35
+
36
+ def curso
37
+ @curso ||= Curso.find id: @curso_id, login: @login, senha: @senha
38
+ end
39
+
40
+ def aluno
41
+ @aluno ||= Aluno.new @email_aluno, @cpf_aluno, @login, @senha
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ module Iesde
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,79 @@
1
+ module Iesde
2
+ class WSDLClient
3
+
4
+ CLIENTS_FOLDER = 'iesde/clients/'
5
+ SAVON_WEB_SERVICE_ENCODING = "iso-8859-1"
6
+ DEFAULT_WSDL_URL = "http://ws.videoaulasonline.com.br/acoes_webservice/:action/wsdl"
7
+ REQUEST_SUFIX = 'Request'
8
+ RESPONSE_PARAM_SUFIX = '_response'
9
+
10
+ attr_accessor :action, :client, :format, :obligatory_params, :model, :wsdl_url
11
+
12
+ def self.create client_name
13
+ client_name.to_s.prepend(CLIENTS_FOLDER).classify.constantize.new
14
+ end
15
+
16
+ def fetch_user_credentials params
17
+ { login: Iesde.config.default_username, senha: Iesde.config.default_password }.merge(params)
18
+ end
19
+
20
+ def check_params_format params
21
+ errors = ""
22
+ errors << "[Parâmetros incorretos! formato -> #{@format}]" unless params.keys.eql? @format
23
+ errors
24
+ end
25
+
26
+ def check_obligatory_params params
27
+ errors = ""
28
+ @obligatory_params.each do |param|
29
+ errors << "#{param} - Parâmetro Obrigatório!" if params[param].nil?
30
+ end
31
+ errors
32
+ end
33
+
34
+ def check_params params
35
+ errors = ""
36
+ errors << "[Login pode ter no máx 10 digitos]" if params[:login].size > 10
37
+ errors << "[Senha pode ter no máx 32 digitos]" if params[:senha].size > 32
38
+ errors
39
+ end
40
+
41
+ def validate params
42
+ errors = check_params_format params
43
+ errors = check_obligatory_params params if errors.empty?
44
+ errors = check_params params if errors.empty?
45
+ errors
46
+ end
47
+
48
+ def map response
49
+ JSON.parse(response).collect do |item|
50
+ model.new *item.values
51
+ end
52
+ rescue JSON::ParserError
53
+ raise Iesde::Error::WSError.new(response)
54
+ end
55
+
56
+ def response_param
57
+ :resultado
58
+ end
59
+
60
+ def run params
61
+ params = fetch_user_credentials(params) if Iesde.config && params[:login].blank? && params[:senha].blank?
62
+ errors = validate params
63
+ raise Iesde::Error::ValidationError.new(errors) unless errors.blank?
64
+ ws_response = client.call @action.underscore.to_sym, message: params, attributes: { name: (@action + REQUEST_SUFIX) }
65
+ raw_response = ws_response.body[@action.underscore.concat(RESPONSE_PARAM_SUFIX).to_sym][response_param]
66
+ map raw_response
67
+ end
68
+
69
+ private
70
+
71
+ def client
72
+ @client ||= Savon.client encoding: SAVON_WEB_SERVICE_ENCODING, wsdl: build_wsdl_url
73
+ end
74
+
75
+ def build_wsdl_url
76
+ @wsdl_url || DEFAULT_WSDL_URL.gsub(/:action/, @action)
77
+ end
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: iesde
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Benevides
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-02-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: savon
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.10'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.7'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '4.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '4.2'
83
+ description: Esta não é uma versão oficial
84
+ email:
85
+ - pedroaugusto@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - .rspec
92
+ - .travis.yml
93
+ - Gemfile
94
+ - LICENSE
95
+ - README.md
96
+ - Rakefile
97
+ - bin/console
98
+ - bin/setup
99
+ - iesde.gemspec
100
+ - lib/iesde.rb
101
+ - lib/iesde/clients/cadastro.rb
102
+ - lib/iesde/clients/inativa_acesso.rb
103
+ - lib/iesde/clients/lista_curso.rb
104
+ - lib/iesde/clients/logout.rb
105
+ - lib/iesde/clients/obtem_aulas.rb
106
+ - lib/iesde/clients/obtem_matriculas.rb
107
+ - lib/iesde/config.rb
108
+ - lib/iesde/error/validation_error.rb
109
+ - lib/iesde/error/ws_error.rb
110
+ - lib/iesde/model/aluno.rb
111
+ - lib/iesde/model/aula.rb
112
+ - lib/iesde/model/curso.rb
113
+ - lib/iesde/model/matricula.rb
114
+ - lib/iesde/version.rb
115
+ - lib/iesde/wsdl_client.rb
116
+ homepage: https://github.com/fortesinformatica/iesde
117
+ licenses:
118
+ - MIT
119
+ metadata: {}
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubyforge_project:
136
+ rubygems_version: 2.4.6
137
+ signing_key:
138
+ specification_version: 4
139
+ summary: Client do WebService SOAP do IESDE
140
+ test_files: []