academico 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format nested
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'capybara'
4
+ gem 'capybara-webkit'
5
+ gem 'terminal-table'
6
+ gem 'jeweler'
7
+
8
+ group :development do
9
+ gem "rake"
10
+ gem "bundler"
11
+ end
12
+
data/Gemfile.lock ADDED
@@ -0,0 +1,53 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ capybara (2.0.2)
5
+ mime-types (>= 1.16)
6
+ nokogiri (>= 1.3.3)
7
+ rack (>= 1.0.0)
8
+ rack-test (>= 0.5.4)
9
+ selenium-webdriver (~> 2.0)
10
+ xpath (~> 1.0.0)
11
+ capybara-webkit (0.14.1)
12
+ capybara (~> 2.0, >= 2.0.2)
13
+ json
14
+ childprocess (0.3.7)
15
+ ffi (~> 1.0, >= 1.0.6)
16
+ ffi (1.3.1)
17
+ git (1.2.5)
18
+ jeweler (1.8.3)
19
+ bundler (~> 1.0)
20
+ git (>= 1.2.5)
21
+ rake
22
+ rdoc
23
+ json (1.7.6)
24
+ mime-types (1.20.1)
25
+ multi_json (1.5.0)
26
+ nokogiri (1.5.6)
27
+ rack (1.5.2)
28
+ rack-test (0.6.2)
29
+ rack (>= 1.0)
30
+ rake (10.0.3)
31
+ rdoc (3.12)
32
+ json (~> 1.4)
33
+ rubyzip (0.9.9)
34
+ selenium-webdriver (2.29.0)
35
+ childprocess (>= 0.2.5)
36
+ multi_json (~> 1.0)
37
+ rubyzip
38
+ websocket (~> 1.0.4)
39
+ terminal-table (1.4.5)
40
+ websocket (1.0.7)
41
+ xpath (1.0.0)
42
+ nokogiri (~> 1.3)
43
+
44
+ PLATFORMS
45
+ ruby
46
+
47
+ DEPENDENCIES
48
+ bundler
49
+ capybara
50
+ capybara-webkit
51
+ jeweler
52
+ rake
53
+ terminal-table
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Bernardo B. Marques
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.mkd ADDED
@@ -0,0 +1,65 @@
1
+ Academico
2
+ =========
3
+
4
+ This is a tool to print my grades at terminal.
5
+ Why? Opening browser, going to the website, typing ID and password, clicking in grades...
6
+ I'm tired just explaining.
7
+ Make life simpler, automate stuff =]
8
+
9
+ Install
10
+ -------
11
+ Not in rubygems yet, so:
12
+
13
+ `git glone git@github.com:bernardofire/academico`
14
+
15
+ `cd academico; rake install`
16
+
17
+ Configure your user and pass:
18
+
19
+ `aca new ID PASS`
20
+
21
+ Use the abbreviation to run the program: `aca`
22
+
23
+ If you are perfect student (like me), the output will be something like this::
24
+
25
+ ```
26
+ +---------------------------------------------+------+------+------+------+
27
+ | Matéria | 1ºBi | 2ºBi | 3ºBi | 4ºBi |
28
+ | Português | 10,0 | 10,0 | 10,0 | 10,0 |
29
+ | Educação Física | 10,0 | 10,0 | 10,0 | |
30
+ | Matemática | 10,0 | 10,0 | 10,0 | |
31
+ | Física | 10,0 | 10,0 | 10,0 | 10,0 |
32
+ | Química | 10,0 | 10,0 | 10,0 | |
33
+ | Biologia | 10,0 | 10,0 | 10,0 | |
34
+ | Geografia | 10,0 | 10,0 | 10,0 | |
35
+ | História | 10,0 | 10,0 | 10,0 | 10,0 |
36
+ | Desenho | 10,0 | 10,0 | 10,0 | |
37
+ | Filosofia | 10,0 | 10,0 | 10,0 | 10,0 |
38
+ | Sociologia | 10,0 | 10,0 | 10,0 | |
39
+ | Programação | 10,0 | 10,0 | 10,0 | |
40
+ | Eletricidade | 10,0 | 10,0 | 10,0 | |
41
+ | Eletrônica Digital | 10,0 | 10,0 | 10,0 | 10,0 |
42
+ | Informática Aplicada | 10,0 | 10,0 | 10,0 | |
43
+ +---------------------------------------------+------+------+------+------+
44
+ ```
45
+
46
+ PS: The blank spaces are notes that aren't avaiable yet.
47
+
48
+
49
+ Contributing to academico
50
+ -------------------------
51
+
52
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
53
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
54
+ * Fork the project.
55
+ * Start a feature/bugfix branch.
56
+ * Commit and push until you are happy with your contribution.
57
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
58
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
59
+
60
+ Copyright
61
+ ---------
62
+
63
+ Copyright (c) 2013 Bernardo B. Marques. See LICENSE.txt for
64
+ further details.
65
+
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "academico"
18
+ gem.homepage = "http://github.com/bernardofire/academico"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Print my school grades at terminal}
21
+ gem.email = "bernardo.fire@gmail.com"
22
+ gem.authors = ["Bernardo B. Marques"]
23
+ gem.executables = ["aca"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rdoc/task'
29
+ Rake::RDocTask.new do |rdoc|
30
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
31
+
32
+ rdoc.rdoc_dir = 'rdoc'
33
+ rdoc.title = "academico #{version}"
34
+ rdoc.rdoc_files.include('README*')
35
+ rdoc.rdoc_files.include('lib/**/*.rb')
36
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/academico.gemspec ADDED
@@ -0,0 +1,64 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "academico"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Bernardo B. Marques"]
12
+ s.date = "2013-02-13"
13
+ s.email = "bernardo.fire@gmail.com"
14
+ s.executables = ["aca"]
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.mkd"
18
+ ]
19
+ s.files = [
20
+ ".rspec",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.mkd",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "academico.gemspec",
28
+ "bin/aca",
29
+ "lib/academico.rb"
30
+ ]
31
+ s.homepage = "http://github.com/bernardofire/academico"
32
+ s.licenses = ["MIT"]
33
+ s.require_paths = ["lib"]
34
+ s.rubygems_version = "1.8.24"
35
+ s.summary = "Print my school grades at terminal"
36
+
37
+ if s.respond_to? :specification_version then
38
+ s.specification_version = 3
39
+
40
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
+ s.add_runtime_dependency(%q<capybara>, [">= 0"])
42
+ s.add_runtime_dependency(%q<capybara-webkit>, [">= 0"])
43
+ s.add_runtime_dependency(%q<terminal-table>, [">= 0"])
44
+ s.add_runtime_dependency(%q<jeweler>, [">= 0"])
45
+ s.add_development_dependency(%q<rake>, [">= 0"])
46
+ s.add_development_dependency(%q<bundler>, [">= 0"])
47
+ else
48
+ s.add_dependency(%q<capybara>, [">= 0"])
49
+ s.add_dependency(%q<capybara-webkit>, [">= 0"])
50
+ s.add_dependency(%q<terminal-table>, [">= 0"])
51
+ s.add_dependency(%q<jeweler>, [">= 0"])
52
+ s.add_dependency(%q<rake>, [">= 0"])
53
+ s.add_dependency(%q<bundler>, [">= 0"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<capybara>, [">= 0"])
57
+ s.add_dependency(%q<capybara-webkit>, [">= 0"])
58
+ s.add_dependency(%q<terminal-table>, [">= 0"])
59
+ s.add_dependency(%q<jeweler>, [">= 0"])
60
+ s.add_dependency(%q<rake>, [">= 0"])
61
+ s.add_dependency(%q<bundler>, [">= 0"])
62
+ end
63
+ end
64
+
data/bin/aca ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
4
+ require "academico"
5
+
6
+ if ARGV[0]
7
+ if ARGV[0] == 'new'
8
+ if ARGV[1] && ARGV[2]
9
+ User.new ARGV[1], ARGV[2]
10
+ puts "Successfully configured user"
11
+ else
12
+ puts "Use: aca new [ID] [PASS]"
13
+ end
14
+ elsif ['--help', '-h'].include? ARGV[0]
15
+ puts USAGE
16
+ else
17
+ puts "Invalid option. Use -h or --help to see usage"
18
+ end
19
+ else
20
+ agent = Agent.new
21
+ agent.login
22
+ puts agent.grade
23
+ end
data/lib/academico.rb ADDED
@@ -0,0 +1,91 @@
1
+ #encoding: utf-8
2
+ require "capybara"
3
+ require "terminal-table"
4
+
5
+ class Agent
6
+ include Capybara::DSL
7
+
8
+ def initialize
9
+ start
10
+ end
11
+
12
+ def start
13
+ Capybara.run_server = false
14
+ Capybara.current_driver = :webkit
15
+ Capybara.app_host = 'http://www.academico.iff.edu.br/'
16
+ end
17
+
18
+ def login
19
+ visit '/qacademico/index.asp?t=1001'
20
+ user = User.info
21
+ fill_in 'LOGIN', with: user[:id]
22
+ fill_in 'SENHA', with: user[:pass]
23
+ click_button 'OK'
24
+ end
25
+
26
+ def grade
27
+ Grade.new(self).printable_grade
28
+ end
29
+ end
30
+
31
+ class Grade
32
+ def initialize(agent)
33
+ @agent = agent
34
+ @grade_selector = 'table > tbody tr:nth-child(2) > td > table > tbody > tr.conteudoTexto'
35
+ end
36
+
37
+ def printable_grade
38
+ go_to_page
39
+ create_table extract
40
+ end
41
+
42
+ def create_table(rows)
43
+ Terminal::Table.new :rows => rows
44
+ end
45
+
46
+ def go_to_page
47
+ @agent.visit '/qacademico/index.asp?t=2032'
48
+ end
49
+
50
+ def extract
51
+ rows = [ ['Matéria', '1ºBi', '2ºBi', '3ºBi', '4ºBi'] ]
52
+ line = 1
53
+ @agent.all(@grade_selector).each do |tr|
54
+ all_tds = tr.all('td')
55
+ info = []
56
+ [0, 5, 7, 13, 15] .each do |field|
57
+ info << all_tds[field].text
58
+ end
59
+ rows << info
60
+ line = line.next
61
+ end
62
+ rows
63
+ end
64
+ end
65
+
66
+ class User
67
+ class << self
68
+ @@file_path = "#{Dir.home}/.academico"
69
+
70
+ def new(id, pass)
71
+ File.open(@@file_path, 'w') { |f| f.write("#{id}\n#{pass}") }
72
+ end
73
+
74
+ def info
75
+ info = []
76
+ File.open(@@file_path).each_line { |l| info << l.delete("\n") }
77
+ { id: info[0], pass: info[1] }
78
+ end
79
+ end
80
+ end
81
+
82
+ USAGE = <<-EOF
83
+ Academico is a tool to help IF students with the academical system.
84
+
85
+ Usage:
86
+ aca # show your grades
87
+ aca new ID PASS # configure your user
88
+
89
+ Examples:
90
+ aca new 2012092390 secret_password
91
+ EOF
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: academico
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bernardo B. Marques
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: capybara
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: capybara-webkit
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: terminal-table
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: bundler
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description:
111
+ email: bernardo.fire@gmail.com
112
+ executables:
113
+ - aca
114
+ extensions: []
115
+ extra_rdoc_files:
116
+ - LICENSE.txt
117
+ - README.mkd
118
+ files:
119
+ - .rspec
120
+ - Gemfile
121
+ - Gemfile.lock
122
+ - LICENSE.txt
123
+ - README.mkd
124
+ - Rakefile
125
+ - VERSION
126
+ - academico.gemspec
127
+ - bin/aca
128
+ - lib/academico.rb
129
+ homepage: http://github.com/bernardofire/academico
130
+ licenses:
131
+ - MIT
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ segments:
143
+ - 0
144
+ hash: -278794477
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 1.8.24
154
+ signing_key:
155
+ specification_version: 3
156
+ summary: Print my school grades at terminal
157
+ test_files: []