edupage-cli 0.1.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +250 -0
  3. data/exe/edupage +7 -0
  4. data/lib/edupage/account.rb +121 -0
  5. data/lib/edupage/cache.rb +101 -0
  6. data/lib/edupage/cli/formatter.rb +56 -0
  7. data/lib/edupage/cli/table.rb +136 -0
  8. data/lib/edupage/cli.rb +543 -0
  9. data/lib/edupage/client.rb +152 -0
  10. data/lib/edupage/config.rb +96 -0
  11. data/lib/edupage/credentials/env.rb +27 -0
  12. data/lib/edupage/credentials/keychain.rb +120 -0
  13. data/lib/edupage/credentials.rb +118 -0
  14. data/lib/edupage/errors.rb +74 -0
  15. data/lib/edupage/model.rb +131 -0
  16. data/lib/edupage/models/assignment.rb +83 -0
  17. data/lib/edupage/models/classroom.rb +13 -0
  18. data/lib/edupage/models/day.rb +51 -0
  19. data/lib/edupage/models/grade.rb +100 -0
  20. data/lib/edupage/models/lesson.rb +58 -0
  21. data/lib/edupage/models/parent.rb +8 -0
  22. data/lib/edupage/models/period.rb +13 -0
  23. data/lib/edupage/models/person.rb +25 -0
  24. data/lib/edupage/models/school_class.rb +16 -0
  25. data/lib/edupage/models/student.rb +45 -0
  26. data/lib/edupage/models/subject.rb +9 -0
  27. data/lib/edupage/models/teacher.rb +25 -0
  28. data/lib/edupage/models/term.rb +36 -0
  29. data/lib/edupage/models/timeline_item.rb +87 -0
  30. data/lib/edupage/parsers/base.rb +150 -0
  31. data/lib/edupage/parsers/gcall.rb +53 -0
  32. data/lib/edupage/parsers/timeline.rb +46 -0
  33. data/lib/edupage/parsers/userhome.rb +84 -0
  34. data/lib/edupage/parsers/znamky.rb +83 -0
  35. data/lib/edupage/registry/resources.rb +175 -0
  36. data/lib/edupage/registry.rb +286 -0
  37. data/lib/edupage/relation.rb +185 -0
  38. data/lib/edupage/school.rb +358 -0
  39. data/lib/edupage/serializer.rb +53 -0
  40. data/lib/edupage/server/api.rb +113 -0
  41. data/lib/edupage/server/auth.rb +45 -0
  42. data/lib/edupage/server/mcp.rb +107 -0
  43. data/lib/edupage/server.rb +57 -0
  44. data/lib/edupage/session.rb +166 -0
  45. data/lib/edupage/session_store.rb +131 -0
  46. data/lib/edupage/version.rb +3 -0
  47. data/lib/edupage/year.rb +77 -0
  48. data/lib/edupage.rb +64 -0
  49. metadata +201 -0
data/lib/edupage.rb ADDED
@@ -0,0 +1,64 @@
1
+ require "logger"
2
+ require "zeitwerk"
3
+
4
+ require_relative "edupage/version"
5
+ # Defines several constants in one file, which does not fit Zeitwerk's file->constant
6
+ # mapping; it is also needed everywhere, so it is loaded eagerly and ignored below.
7
+ require_relative "edupage/errors"
8
+
9
+ # Read-only client for Edupage.
10
+ #
11
+ # Edupage has no public API: every page is server-rendered HTML with JSON embedded in
12
+ # <script> blocks. See Edupage::Parsers for how each blob is extracted.
13
+ #
14
+ # The object graph mirrors how Edupage itself is organised:
15
+ #
16
+ # Edupage.account -> School -> Student -> Year -> grades/terms
17
+ #
18
+ # A session carries two server-side cursors (current child, current school year) which
19
+ # Edupage::Session sets transparently; see Session#with_cursor.
20
+ module Edupage
21
+ class << self
22
+ # The logged-in account, memoized for the process.
23
+ def account(username: nil, school: nil, cache: nil)
24
+ @account ||= Account.login(username: username, school: school, cache: cache)
25
+ end
26
+
27
+ # Drops the memoized account. The persisted session is untouched.
28
+ def reset!
29
+ @account = nil
30
+ end
31
+
32
+ def config
33
+ @config ||= Config.load
34
+ end
35
+
36
+ attr_writer :config
37
+
38
+ def logger
39
+ @logger ||= ::Logger.new($stderr, level: ::Logger::WARN,
40
+ formatter: ->(sev, _t, _p, msg) { "[edupage] #{sev.downcase}: #{msg}\n" })
41
+ end
42
+
43
+ attr_writer :logger
44
+
45
+ def root
46
+ @root ||= File.expand_path("..", __dir__)
47
+ end
48
+ end
49
+ end
50
+
51
+ loader = Zeitwerk::Loader.for_gem
52
+ loader.inflector.inflect(
53
+ "cli" => "CLI",
54
+ "mcp" => "MCP",
55
+ "asc" => "ASC",
56
+ "api" => "API",
57
+ "env" => "Env"
58
+ )
59
+ loader.ignore(
60
+ "#{__dir__}/edupage/version.rb",
61
+ "#{__dir__}/edupage/errors.rb",
62
+ "#{__dir__}/edupage/registry/resources.rb"
63
+ )
64
+ loader.setup
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: edupage-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ahmed Al Hafoudh
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: mcp
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.2'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.2'
26
+ - !ruby/object:Gem::Dependency
27
+ name: mechanize
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.12'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.12'
40
+ - !ruby/object:Gem::Dependency
41
+ name: puma
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '6.0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '6.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: sinatra
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '4.2'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '4.2'
68
+ - !ruby/object:Gem::Dependency
69
+ name: thor
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.3'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.3'
82
+ - !ruby/object:Gem::Dependency
83
+ name: tty-screen
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.8'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.8'
96
+ - !ruby/object:Gem::Dependency
97
+ name: tty-table
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.12'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.12'
110
+ - !ruby/object:Gem::Dependency
111
+ name: zeitwerk
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '2.6'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.6'
124
+ description: ActiveRecord-like prístup k Edupage - školy, žiaci, rozvrhy, domáce úlohy
125
+ a známky - vystavený zhodne cez Ruby API, CLI, REST API a MCP server. Iba na čítanie.
126
+ email:
127
+ - alhafoudh@freevision.sk
128
+ executables:
129
+ - edupage
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - README.md
134
+ - exe/edupage
135
+ - lib/edupage.rb
136
+ - lib/edupage/account.rb
137
+ - lib/edupage/cache.rb
138
+ - lib/edupage/cli.rb
139
+ - lib/edupage/cli/formatter.rb
140
+ - lib/edupage/cli/table.rb
141
+ - lib/edupage/client.rb
142
+ - lib/edupage/config.rb
143
+ - lib/edupage/credentials.rb
144
+ - lib/edupage/credentials/env.rb
145
+ - lib/edupage/credentials/keychain.rb
146
+ - lib/edupage/errors.rb
147
+ - lib/edupage/model.rb
148
+ - lib/edupage/models/assignment.rb
149
+ - lib/edupage/models/classroom.rb
150
+ - lib/edupage/models/day.rb
151
+ - lib/edupage/models/grade.rb
152
+ - lib/edupage/models/lesson.rb
153
+ - lib/edupage/models/parent.rb
154
+ - lib/edupage/models/period.rb
155
+ - lib/edupage/models/person.rb
156
+ - lib/edupage/models/school_class.rb
157
+ - lib/edupage/models/student.rb
158
+ - lib/edupage/models/subject.rb
159
+ - lib/edupage/models/teacher.rb
160
+ - lib/edupage/models/term.rb
161
+ - lib/edupage/models/timeline_item.rb
162
+ - lib/edupage/parsers/base.rb
163
+ - lib/edupage/parsers/gcall.rb
164
+ - lib/edupage/parsers/timeline.rb
165
+ - lib/edupage/parsers/userhome.rb
166
+ - lib/edupage/parsers/znamky.rb
167
+ - lib/edupage/registry.rb
168
+ - lib/edupage/registry/resources.rb
169
+ - lib/edupage/relation.rb
170
+ - lib/edupage/school.rb
171
+ - lib/edupage/serializer.rb
172
+ - lib/edupage/server.rb
173
+ - lib/edupage/server/api.rb
174
+ - lib/edupage/server/auth.rb
175
+ - lib/edupage/server/mcp.rb
176
+ - lib/edupage/session.rb
177
+ - lib/edupage/session_store.rb
178
+ - lib/edupage/version.rb
179
+ - lib/edupage/year.rb
180
+ homepage: https://github.com/alhafoudh/edupage-cli
181
+ licenses:
182
+ - MIT
183
+ metadata: {}
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '3.2'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubygems_version: 3.6.9
199
+ specification_version: 4
200
+ summary: 'Read-only prístup k Edupage: Ruby knižnica, CLI, REST API a MCP server'
201
+ test_files: []