schild 0.4.1 → 0.4.2

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 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