schild 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ae7519e5267d2b54d6c456d756f431939e62005
4
- data.tar.gz: 53e5d3b2b5d05536610e1a72551ec0c090d344db
3
+ metadata.gz: 7188395c3591fa7a646c4dd4e653144124bf978e
4
+ data.tar.gz: aa08080c0aecca22f6b2bdb0e96f35c89f81c1de
5
5
  SHA512:
6
- metadata.gz: 3948ba8309f3daf91db53fd71744ded0e1ea311c79c13d1d77ef2636efc6d067f255cef7ffcb289ae92d39930219cb1030307a796699e8767db245507edd3e62
7
- data.tar.gz: 1181569e4d9a9397a2342138cb934ef03fe6713ffe885b9237c5dd5cfd19a53707ba615ad2f6577f3234d80c845b52e3d7106dda3275b4694de26df6796beb43
6
+ metadata.gz: ddaddbd639bccf00b6d5705c35c836e8080b09ff8471e6674045543947620298df280fd229217094c82e7ea12d9f8096b7e2cc522aa9c229ef34bc08dc426765
7
+ data.tar.gz: f25838637bdd24dde2f745dd09de5b4535b2a7c4b5eb4584e01a28955c1acf29652263affeb31ed9a6c48413201ffa5f5d821a324fcb44e92e140c5e7b573357
data/README.md CHANGED
@@ -47,7 +47,7 @@ Die oben angegebene Datei wird nun verwendet, um auf die `schild-test`-Datenbank
47
47
 
48
48
  ```ruby
49
49
  require 'envyable'
50
- Envyable.load('./config/env.yml', 'local_test')
50
+ Envyable.load('./config/env.yml', 'testing')
51
51
  require 'schild'
52
52
  ```
53
53
 
@@ -57,7 +57,7 @@ Nun sollte noch das `Schild`-Modul geladen werden, das die Verwendung von `schi
57
57
 
58
58
  ```ruby
59
59
  require 'envyable'
60
- Envyable.load('./config/env.yml', 'local_test')
60
+ Envyable.load('./config/env.yml', 'testing')
61
61
  require 'schild'
62
62
  include Schild
63
63
  ```
@@ -1,3 +1,3 @@
1
1
  module Schild
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
data/lib/schild.rb CHANGED
@@ -55,6 +55,35 @@ module SchildTypeSaver
55
55
  end
56
56
  end
57
57
 
58
+ # Mixin für Notenbezeichnungen
59
+ module NotenHelfer
60
+ # Notenbezeichnung als String
61
+ def note_s(ziffer)
62
+ case ziffer
63
+ when "1", "1+", "1-"
64
+ "sehr gut"
65
+ when "2", "2+", "2-"
66
+ "gut"
67
+ when "3", "3+", "3-"
68
+ "befriedigend"
69
+ when "4", "4+", "4-"
70
+ "ausreichend"
71
+ when "5", "5+", "5-"
72
+ "mangelhaft"
73
+ when "6"
74
+ "ungenügend"
75
+ when 'NB'
76
+ "––––––"
77
+ when "E1"
78
+ "mit besonderem Erfolg teilgenommen"
79
+ when "E2"
80
+ "mit Erfolg teilgenommen"
81
+ when 'E3'
82
+ "teilgenommen"
83
+ end
84
+ end
85
+ end
86
+
58
87
  # Das Schild Modul, das alle Klassen für die Datenbankanbindung bereitstellt
59
88
  module Schild
60
89
  # ist die Datenbank-Verbindung. Alle Daten können über diese Konstante abgerufen werden
@@ -71,6 +100,9 @@ module Schild
71
100
  one_to_many :abschnitte, :class => :Abschnitt
72
101
  one_to_one :bk_abschluss, :class => :BKAbschluss
73
102
  one_to_many :bk_abschluss_leistungen, :class => :BKAbschlussFaecher
103
+ one_to_one :abi_abschluss, :class => :AbiAbschluss
104
+ one_to_many :abi_abschluss_leistungen, :class => :AbiAbschlussFaecher
105
+ one_to_many :vermerke, :class => :Vermerke
74
106
  end
75
107
 
76
108
  # Dient als Assoziation für Schüler und deren Klassenbezeichnung etc.
@@ -98,7 +130,10 @@ module Schild
98
130
 
99
131
  # Assoziation für Fächer
100
132
  class Faecher < Sequel::Model(:eigeneschule_faecher)
133
+ #siehe abi_...
101
134
  one_to_one :noten
135
+ one_to_many :abi_abschluss_leistungen
136
+ one_to_one :sprachenfolge, :class => :Sprachenfolge, :key => :Fach_ID
102
137
  end
103
138
 
104
139
  # Assoziation für BK-Abschluss des Schülers
@@ -111,6 +146,27 @@ module Schild
111
146
  many_to_one :schueler
112
147
  end
113
148
 
149
+ # Assoziation für Abi-Abschluss des Schülers
150
+ class AbiAbschluss < Sequel::Model(:schuelerabitur)
151
+ one_to_one :schueler
152
+ end
153
+
154
+ # Assoziation für die Abifächer des Schülers
155
+ class AbiAbschlussFaecher < Sequel::Model(:schuelerabifaecher)
156
+ many_to_one :schueler
157
+ many_to_one :fach, :class => :Faecher, :key => :Fach_ID
158
+ end
159
+
160
+ # Assoziation für die bisher erreichten Sprachniveaus
161
+ class Sprachenfolge < Sequel::Model(:schuelersprachenfolge)
162
+ one_to_one :Faecher
163
+ end
164
+
165
+ # Vermerke von Schülern
166
+ class Vermerke < Sequel::Model(:schuelervermerke)
167
+ many_to_one :Schueler
168
+ end
169
+
114
170
  # Schul-Tabelle
115
171
  class Schule < Sequel::Model(:eigeneschule)
116
172
  end
@@ -131,16 +187,6 @@ module SchildErweitert
131
187
  abschnitte.last
132
188
  end
133
189
 
134
- # gibt das erste Halbjahr von +jahr+ zurück.
135
- def erstes_halbjahr(jahr)
136
- halbjahr(jahr, 1)
137
- end
138
-
139
- # gibt das zweite Halbjahr von +jahr+ zurück.
140
- def zweites_halbjahr(jahr)
141
- halbjahr(jahr, 2)
142
- end
143
-
144
190
  # gibt aus +jahr+ das Halbjahr +1+ oder +2+ zurück.
145
191
  def halbjahr(jahr, abschnitt)
146
192
  abschnitte_dataset.where(:jahr => jahr, :abschnitt => abschnitt).first
@@ -171,10 +217,8 @@ module SchildErweitert
171
217
  self.volljaehrig == "+"
172
218
  end
173
219
 
174
- # gibt das aktuelle Schuljahr als String im Format "2014/15" zurück.
175
- def schuljahr
176
- jahr = self.akt_schuljahr
177
- "#{jahr}/#{jahr-1999}"
220
+ def foto_vorhanden?
221
+ self.foto_vorhanden == "+"
178
222
  end
179
223
  end
180
224
 
@@ -211,7 +255,7 @@ module SchildErweitert
211
255
 
212
256
  # Hilfsmethode für die folgenden Methoden
213
257
  def faecher_nach_id(id)
214
- noten.sort_by{ |n| n.fach.SortierungS2 }.select{ |n| n.fach.Fachgruppe_ID == id && n.AufZeugnis == '+' }
258
+ noten.select{ |n| n.fach.Fachgruppe_ID == id && n.AufZeugnis == '+' }.sort_by{ |n| n.fach.SortierungS2 }
215
259
  end
216
260
 
217
261
  # wählt alle berufsübergreifenden Fächer des gewählten Schülers in angegeben Halbjahr.
@@ -256,31 +300,11 @@ module SchildErweitert
256
300
  # Assoziation für Noten
257
301
  class Noten < Schild::Noten
258
302
  include SchildTypeSaver
303
+ include NotenHelfer
259
304
 
260
- # Notenbezeichnung als String
305
+ # note in String umwandeln
261
306
  def note
262
- case self.noten_krz
263
- when "1", "1+", "1-"
264
- "sehr gut"
265
- when "2", "2+", "2-"
266
- "gut"
267
- when "3", "3+", "3-"
268
- "befriedigend"
269
- when "4", "4+", "4-"
270
- "ausreichend"
271
- when "5", "5+", "5-"
272
- "mangelhaft"
273
- when "6"
274
- "ungenügend"
275
- when 'NB'
276
- "----------"
277
- when "E1"
278
- "mit besonderem Erfolg teilgenommen"
279
- when "E2"
280
- "mit Erfolg teilgenommen"
281
- when 'E3'
282
- "teilgenommen"
283
- end
307
+ note_s self.noten_krz
284
308
  end
285
309
 
286
310
  # Bezeichnung des Fachs
@@ -322,11 +346,7 @@ module SchildErweitert
322
346
  # Assoziation für die jeweiligen BK-Prüfungsfächer
323
347
  class BKAbschlussFaecher < Schild::BKAbschlussFaecher
324
348
  include SchildTypeSaver
325
-
326
- # Vornote des Prüfungsfachs
327
- def vornote
328
- self.Vornote.to_i
329
- end
349
+ include NotenHelfer
330
350
 
331
351
  # Wurde das Fach schriftlich geprüft?
332
352
  def fach_schriftlich?
@@ -338,22 +358,34 @@ module SchildErweitert
338
358
  self.MdlPruefung == "+"
339
359
  end
340
360
 
341
- # die schriftliche Note des Fachs
342
- def note_schriftlich
343
- self.NoteSchriftlich.to_i
361
+ def note(notenart=:note_abschluss_ba)
362
+ note_s send(notenart)
344
363
  end
364
+ end
345
365
 
346
- # Die mündliche Note des Fachs
347
- def note_muendlich
348
- self.NoteMuendlich.to_i
349
- end
366
+ # Assoziation für Abi-Abschlussdaten
367
+ class AbiAbschluss < Schild::AbiAbschluss
368
+ include SchildTypeSaver
369
+ end
370
+
371
+ # Assoziation für die jeweiligen Abi-Prüfungsfächer
372
+ class AbiAbschlussFaecher < Schild::AbiAbschlussFaecher
373
+ include SchildTypeSaver
374
+ include NotenHelfer
350
375
 
351
- # Die berechnete/festgelegte Abschlussnote für das Fach
352
- def note_abschluss
353
- self.NoteAbschluss.to_i
376
+ def note(notenart)
377
+ note_s send(notenart)
354
378
  end
355
379
  end
356
380
 
381
+ class Sprachenfolge < Schild::Sprachenfolge
382
+ include SchildTypeSaver
383
+ end
384
+
385
+ class Vermerke < Schild::Vermerke
386
+ include SchildTypeSaver
387
+ end
388
+
357
389
  # Schul-Tabelle mit vereinfachtem Zugriff auf Datenfelder.
358
390
  class Schule < Schild::Schule
359
391
  include SchildTypeSaver
@@ -394,8 +426,13 @@ module SchildErweitert
394
426
  alias :password :passwort
395
427
 
396
428
  def passwort?(passwort='')
397
- passwort.split('').map{|c| (c.codepoints[0]-(c.unpack('h')[0].hex*2-15)).chr}.join == self.passwort
429
+ crypt(passwort) == self.passwort
398
430
  end
399
431
  alias :password? :passwort?
432
+
433
+ def crypt(passwort)
434
+ passwort.codepoints.map{|c| ((c/16)*32+15-c).chr}.join('')
435
+ end
400
436
  end
401
437
  end
438
+
@@ -18,30 +18,30 @@ describe Schueler do
18
18
  end
19
19
 
20
20
  it 'geben Noten aus dem angegebenen Halbjahr und Jahr zurück (via Lernabschnitte und Leistungen)' do
21
- @sm.erstes_halbjahr(2013).noten.first.ID.must_equal 163701
21
+ @sm.halbjahr(2013,1).noten.first.ID.must_equal 163701
22
22
  end
23
23
 
24
24
  it 'gibt Konferenzdatum zurück (Lernabschnitte)' do
25
25
  # offenbar keine in der Testdatenbank eingetragen
26
26
  # deshalb Default-Objekt anfordern
27
- @sm.erstes_halbjahr(2013).konferenzdatum.must_be_instance_of DateTime
27
+ @sm.halbjahr(2013,1).konferenzdatum.must_be_instance_of DateTime
28
28
  end
29
29
 
30
30
  it 'gibt berufsbezogene Fächer aus den angegebenen Lernabschnitten zurück' do
31
- @sm.zweites_halbjahr(2013).berufsbezogen.map{|n|n.fach.FachKrz}.must_include 'FF'
31
+ @sm.halbjahr(2013,2).berufsbezogen.map{|n|n.fach.FachKrz}.must_include 'FF'
32
32
  end
33
33
 
34
34
  it 'gibt berufsübergreifende Fächer aus den angegebenen Lernabschnitten zurück' do
35
- @sm.zweites_halbjahr(2013).berufsuebergreifend.map{|n|n.fach.FachKrz}.must_include 'D'
35
+ @sm.halbjahr(2013,2).berufsuebergreifend.map{|n|n.fach.FachKrz}.must_include 'D'
36
36
  end
37
37
 
38
38
  it 'gibt Fächer aus dem Differenzierungsbereich zurück über angegebenen Lernabschnitt' do
39
- Schueler[394].erstes_halbjahr(2007).differenzierungsbereich.map{|n|n.fach.FachKrz}.must_include 'CHDIFF'
39
+ Schueler[394].halbjahr(2007,1).differenzierungsbereich.map{|n|n.fach.FachKrz}.must_include 'CHDIFF'
40
40
  end
41
41
 
42
42
  it 'gibt Fächer aus allen Fächergruppen zurück' do
43
- fg = @sm.zweites_halbjahr(2013).faechergruppen.flatten.count
44
- fg.must_equal (@sm.zweites_halbjahr(2013).noten.select{|n|n.AufZeugnis == '+'}).count
43
+ fg = @sm.halbjahr(2013,2).faechergruppen.flatten.count
44
+ fg.must_equal (@sm.halbjahr(2013,2).noten.select{|n|n.AufZeugnis == '+'}).count
45
45
  end
46
46
 
47
47
  it 'gibt Zulassung zurück' do
@@ -70,23 +70,53 @@ describe Schueler do
70
70
  end
71
71
 
72
72
  it 'gibt Note schriftlich zurück' do
73
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.note_schriftlich.must_equal 3
74
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_schriftlich.must_equal 0
73
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.note_schriftlich.must_equal '3'
74
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_schriftlich.must_equal ''
75
75
  end
76
76
 
77
77
  it 'gibt Note mündlich zurück' do
78
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note_muendlich.must_equal 6
79
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_muendlich.must_equal 0
78
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note_muendlich.must_equal '6'
79
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_muendlich.must_equal ''
80
80
  end
81
81
 
82
82
  it 'gibt Abschlussnote zurück' do
83
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note_abschluss.must_equal 5
84
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_abschluss.must_equal 3
83
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note_abschluss.must_equal '5'
84
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_abschluss.must_equal '3'
85
85
  end
86
86
 
87
87
  it 'gibt Abschlussfächer zurück' do
88
- Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.vornote.must_equal 4
88
+ Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.vornote.must_equal '4'
89
89
  end
90
+
91
+ it 'gibt Abschlussnote als String zurück' do
92
+ # note als Symbol
93
+ Schueler[373].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note(:vornote).must_equal 'gut'
94
+ # Note als String
95
+ Schueler[381].bk_abschluss_leistungen.find{|l|l.fach_krz == "PB"}.note('note_abschluss_ba').must_equal 'mangelhaft'
96
+ end
97
+
98
+ it 'gibt Abschlussnote-BA zurück, wenn Abschlussnoten ohne Argumente angegeben wird' do
99
+ Schueler[5346].bk_abschluss_leistungen.find{|l|l.fach_krz == "E"}.note(:vornote).must_equal 'ausreichend'
100
+ Schueler[5346].bk_abschluss_leistungen.find{|l|l.fach_krz == "E"}.note.must_equal 'mangelhaft'
101
+ end
102
+
103
+ it 'gibt die Sprachfolge als Niveau zurück' do
104
+ skip
105
+ # in der Test-Datenbank sind keine Sprachenfolgen eingetragen, daher ist das RN ""
106
+ Schueler[2072].halbjahr(2013,2).noten.find{|l|l.fach_id == 18}.fach.sprachenfolge.referenzniveau.must_equal ''
107
+ end
108
+
109
+ it 'gibt Vermerke für Schüler als Array zurück' do
110
+ @sm.vermerke.must_be_instance_of Array
111
+ end
112
+
113
+ it 'gibt Vermerk als String zurück' do
114
+ skip
115
+ # Leider keine Vermerke in der Testdatenbank eingetragen
116
+ @sm.vermerke.first.must_be_instance_of String
117
+ end
118
+
119
+ #schuelerabifaecher kann wegen mangelnder daten nicht getestet werden
90
120
  end
91
121
 
92
122
  describe 'gibt die korrekte Anzahl von Schülern über Klasse zurück' do
@@ -108,8 +138,8 @@ describe Schueler do
108
138
  @sm.volljaehrig?.must_equal true
109
139
  end
110
140
 
111
- it 'gibt ein zusammengesetztes Datum des Schuljahres zurück' do
112
- @sm.schuljahr.must_equal "2014/15"
141
+ it 'gibt zurück, ob ein Foto vorhanden ist' do
142
+ @sm.foto_vorhanden?.must_equal false
113
143
  end
114
144
 
115
145
  it 'gibt passende Bezeichnung Schüler oder Schülerin zurück' do
@@ -123,38 +153,38 @@ describe Schueler do
123
153
  end
124
154
 
125
155
  it 'gibt die Textbezeichnung für eine Note zurück' do
126
- @sm.zweites_halbjahr(2013).noten[5].note.must_equal "gut"
156
+ @sm.halbjahr(2013,2).noten[5].note.must_equal "gut"
127
157
  end
128
158
 
129
159
  it 'gibt die Textbezeichnung auch bei ungeraden Noten zurück' do
130
- Schueler[178].erstes_halbjahr(2010).noten[0].note.must_equal "mangelhaft"
131
- Schueler[178].erstes_halbjahr(2010).noten[0].NotenKrz.must_equal "5-"
160
+ Schueler[178].halbjahr(2010,1).noten[0].note.must_equal "mangelhaft"
161
+ Schueler[178].halbjahr(2010,1).noten[0].NotenKrz.must_equal "5-"
132
162
  end
133
163
 
134
164
  it 'gibt die volle Fachbezeichnung zurück' do
135
- @sm.zweites_halbjahr(2013).noten[5].bezeichnung.must_equal "Farb- und Formveränderung"
165
+ @sm.halbjahr(2013,2).noten[5].bezeichnung.must_equal "Farb- und Formveränderung"
136
166
  end
137
167
 
138
168
  it 'gibt die korrekte Fachgruppen_ID zurück' do
139
- @sm.zweites_halbjahr(2013).noten[5].fachgruppe_ID.must_equal 20
169
+ @sm.halbjahr(2013,2).noten[5].fachgruppe_ID.must_equal 20
140
170
  end
141
171
 
142
172
  it 'gibt den Namen des Klassenlehrers zurück' do
143
- @sm.zweites_halbjahr(2013).v_name_klassenlehrer.must_equal "P. Ronnewinkel"
173
+ @sm.halbjahr(2013,2).v_name_klassenlehrer.must_equal "P. Ronnewinkel"
144
174
  end
145
175
 
146
176
  it 'gibt an, ob Klassenlehrer/in' do
147
- @sm.zweites_halbjahr(2013).klassenlehrer_in.must_equal "Klassenlehrer"
177
+ @sm.halbjahr(2013,2).klassenlehrer_in.must_equal "Klassenlehrer"
148
178
  end
149
179
 
150
180
  it 'gibt das zweite Halbjahr zurück' do
151
- @sm.zweites_halbjahr(2013).Abschnitt.must_equal 2
152
- @sm.zweites_halbjahr(2013).Jahr.must_equal 2013
181
+ @sm.halbjahr(2013,2).Abschnitt.must_equal 2
182
+ @sm.halbjahr(2013,2).Jahr.must_equal 2013
153
183
  end
154
184
 
155
185
  it 'gibt das erste Halbjahr zurück' do
156
- @sm.erstes_halbjahr(2014).Abschnitt.must_equal 1
157
- @sm.erstes_halbjahr(2014).Jahr.must_equal 2014
186
+ @sm.halbjahr(2014,1).Abschnitt.must_equal 1
187
+ @sm.halbjahr(2014,1).Jahr.must_equal 2014
158
188
  end
159
189
 
160
190
  it 'gibt das aktuelle Halbjahr zurück' do
@@ -16,8 +16,8 @@ describe Schueler do
16
16
  end
17
17
 
18
18
  it 'gibt 0 bei fehlendem Integer zurück' do
19
- Schueler[6176].erstes_halbjahr(2014).sum_fehl_std.must_equal 0
20
- Schueler[6176].erstes_halbjahr(2014).SumFehlStd.must_equal nil
19
+ Schueler[6176].halbjahr(2014,1).sum_fehl_std.must_equal 0
20
+ Schueler[6176].halbjahr(2014,1).SumFehlStd.must_equal nil
21
21
  end
22
22
  end
23
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schild
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - HMT
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-24 00:00:00.000000000 Z
11
+ date: 2015-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler