PolyNotify 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8973d45a4b9b9419d4743417e0df8207e9c0715a
4
+ data.tar.gz: b36c83f652ab9ce2309bdc9605b45ddf2d55d21d
5
+ SHA512:
6
+ metadata.gz: c56195488d3df9f05f5f356a5df4a1a61a5d2aa7ef3fcd1ff8d17f40de200a1035e123b426a9a3b6db2d8e1b69b136ab68b17565cef48102a678dd399876c42f
7
+ data.tar.gz: 0f2103051937ec30d8ee7167ec8ce6bd906ec19e81f6be93a185390a9e0a5a3146dbe4f1de735e58024739a2827b844439d44f7ee46e3c948d700e2851638e17
data/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
19
+
20
+ # Rubymine
21
+ .idea/
22
+
23
+ # Private file
24
+ config/config.yml
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in PolyNotify.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,27 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ PolyNotify (0.0.1)
5
+ httparty
6
+ nokogiri
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ httparty (0.11.0)
12
+ multi_json (~> 1.0)
13
+ multi_xml (>= 0.5.2)
14
+ mini_portile (0.5.2)
15
+ multi_json (1.8.0)
16
+ multi_xml (0.5.5)
17
+ nokogiri (1.6.0)
18
+ mini_portile (~> 0.5.0)
19
+ rake (10.0.4)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ PolyNotify!
26
+ bundler (~> 1.3)
27
+ rake
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'PolyNotify/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "PolyNotify"
8
+ spec.version = PolyNotify::VERSION
9
+ spec.authors = ["Chris911"]
10
+ spec.email = ["Christophe.naud.dulude@gmail.com"]
11
+ spec.description = "Notifier for Polytechnique Montreal student portal"
12
+ spec.summary = "Notifier for Polytechnique Montreal student portal"
13
+ spec.homepage = "https://github.com/Chris911/PolyNotify"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake"
22
+
23
+ spec.add_runtime_dependency "httparty"
24
+ spec.add_runtime_dependency "nokogiri"
25
+ end
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ PolyNotify
2
+ ==========
3
+
4
+ Regarde pour des nouvelles notes sur le dossier étudiant
@@ -0,0 +1,4 @@
1
+ # Information usage
2
+ CODE:
3
+ PASSWORD:
4
+ DDN:
data/lib/PolyNotify.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'httparty'
2
+ require 'nokogiri'
3
+ require 'digest/md5'
4
+ require 'json'
5
+
6
+ require_relative 'PolyNotify/utilities'
7
+ require_relative 'PolyNotify/dossier_etudiant'
8
+
9
+ module PolyNotify
10
+ class Client
11
+ [HTTParty, Utilities, Dossier_Etudiant].each do |inc|
12
+ include inc
13
+ end
14
+
15
+ def initialize
16
+ @baseurl = 'https://www4.polymtl.ca'
17
+ @headers = {'User-Agent' => 'PolyNotify v0.1'}
18
+ @checksum_file = "#{ENV['HOME']}/.polynotify"
19
+ @inputs = {}
20
+
21
+ # For HTTParty
22
+ self.class.base_uri @baseurl
23
+ self.class.headers @headers
24
+ end
25
+
26
+ def load_config_file(file)
27
+ @config = YAML.load(File.open(file))
28
+ end
29
+
30
+ def load_config_hash(hash)
31
+ @config = hash
32
+ end
33
+
34
+ def checksum
35
+ @checksum
36
+ end
37
+
38
+ def last_checksum
39
+ File.read(@checksum_file)
40
+ end
41
+
42
+ def save_checksum
43
+ File.open(@checksum_file, 'w') { |file| file.write(@checksum) }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,41 @@
1
+ module PolyNotify
2
+ module Dossier_Etudiant
3
+
4
+ def log_in
5
+ body = {code: @config['CODE'], nip: @config['PASSWORD'], naissance: @config['DDN']}
6
+ data = post('/servlet/ValidationServlet', :body => body, :headers => {'Content-Type' => 'application/x-www-form-urlencoded'})
7
+ doc = Nokogiri.parse(data)
8
+ save_data doc
9
+ end
10
+
11
+ def get_resultats_finaux
12
+ body = @inputs
13
+ data = post('/servlet/PresentationResultatsTrimServlet', :body => body, :headers => {'Content-Type' => 'application/x-www-form-urlencoded'})
14
+ doc = Nokogiri.parse(data)
15
+ extract_notes doc
16
+ end
17
+
18
+ def get_horaire(session)
19
+ @inputs['trimestre'] = session
20
+ body = @inputs
21
+ data = post('/servlet/PresentationHorairePersServlet', :body => body, :headers => {'Content-Type' => 'application/x-www-form-urlencoded'})
22
+ doc = Nokogiri.parse(data)
23
+ extract_horaire doc
24
+ end
25
+
26
+ def save_data (doc)
27
+ doc.css('input').each do |input|
28
+ @inputs[input['name']] = input['value'] unless input['name'].include? 'btn'
29
+ end
30
+ end
31
+
32
+ def extract_notes(doc)
33
+ tables = doc.css('table').select {|table| table['width'] == '75%'}
34
+ @checksum = Digest::MD5.hexdigest(tables[0])
35
+ end
36
+
37
+ def extract_horaire(doc)
38
+ horaire = doc.css('table').select {|table| table['cellspacing'] == '5'}
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,19 @@
1
+ module PolyNotify
2
+ module Utilities
3
+ # HTTParty get wrapper. This serves to clean up code, as well as throw webserver errors wherever needed
4
+ #
5
+ def get *args, &block
6
+ response = self.class.get *args, &block
7
+ raise WebserverError, response.code unless response.code == 200
8
+ response
9
+ end
10
+
11
+ # HTTParty POST wrapper. This serves to clean up code, as well as throw webserver errors wherever needed
12
+ #
13
+ def post *args, &block
14
+ response = self.class.post *args, &block
15
+ raise WebserverError, response.code unless response.code == 200
16
+ response
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module PolyNotify
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: PolyNotify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris911
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-09 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.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: httparty
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Notifier for Polytechnique Montreal student portal
70
+ email:
71
+ - Christophe.naud.dulude@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - Gemfile
78
+ - Gemfile.lock
79
+ - PolyNotify.gemspec
80
+ - README.md
81
+ - config/example.yml
82
+ - lib/PolyNotify.rb
83
+ - lib/PolyNotify/dossier_etudiant.rb
84
+ - lib/PolyNotify/utilities.rb
85
+ - lib/PolyNotify/version.rb
86
+ homepage: https://github.com/Chris911/PolyNotify
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 2.0.3
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Notifier for Polytechnique Montreal student portal
110
+ test_files: []