schild 0.6.4 → 0.7.0b
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 +4 -4
- data/LICENSE.md +25 -0
- data/README.md +64 -13
- data/lib/schild.rb +163 -168
- data/lib/schild/version.rb +1 -1
- data/schild.gemspec +2 -2
- data/specs/fachklasse_spec.rb +11 -2
- data/specs/schueler_spec.rb +6 -2
- metadata +26 -25
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2878f6313d32ac0d7102d5a1edb25fb9589c30be
         | 
| 4 | 
            +
              data.tar.gz: 78ae6702626dd3493ca58e1190fbb593cc03e6d2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d9df5d21bb1cdcd674eee65f3336b6a143ec46005aebd81b4817d4e38f58b71ae36a0167c10364f0e6fa1158cb8e167d3d8e918a92b2586ccd4f3075ebe21cf1
         | 
| 7 | 
            +
              data.tar.gz: 53cacfb468aefdfd487a030e9fc28f389208ce335dc49258cee98760b6032b1fe6c73ac386944618b29e1587faf86b674231095fcd14403fa1f12c6e9715c747
         | 
    
        data/LICENSE.md
    CHANGED
    
    | @@ -1,3 +1,28 @@ | |
| 1 | 
            +
            ## The MIT License (MIT)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Copyright (c) 2015 HMT
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 6 | 
            +
            of this software and associated documentation files (the "Software"), to deal
         | 
| 7 | 
            +
            in the Software without restriction, including without limitation the rights
         | 
| 8 | 
            +
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         | 
| 9 | 
            +
            copies of the Software, and to permit persons to whom the Software is
         | 
| 10 | 
            +
            furnished to do so, subject to the following conditions:
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            The above copyright notice and this permission notice shall be included in all
         | 
| 13 | 
            +
            copies or substantial portions of the Software.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         | 
| 16 | 
            +
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         | 
| 17 | 
            +
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         | 
| 18 | 
            +
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         | 
| 19 | 
            +
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         | 
| 20 | 
            +
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
         | 
| 21 | 
            +
            SOFTWARE.
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
            ## Oder
         | 
| 25 | 
            +
             | 
| 1 26 | 
             
            ## creative commons
         | 
| 2 27 |  | 
| 3 28 | 
             
            # Attribution 4.0 International
         | 
    
        data/README.md
    CHANGED
    
    | @@ -2,9 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            [Schild-NRW](http://www.svws.nrw.de/index.php?id=schildnrw) ist die offizielle Schulverwaltungssoftware in NRW, `schild` ein Ruby-Gem, das als API zwischen der Schild-NRW-Datenbank und eigenen Skripten fungieren kann. `schild` ermöglicht es, direkt und ohne die Schild-Oberfläche auf Daten zuzugreifen und für eigene Zwecke weiterzuverarbeiten, z.B. um eigene Dokumente (Reports/Berichte in Schild-Sprech genannt) zu erstellen.
         | 
| 4 4 |  | 
| 5 | 
            -
            Mit `schild` kann man  | 
| 6 | 
            -
             | 
| 7 | 
            -
            Auch möglich ist die Nutzung von HTML und CSS zur Erzeugung von Dokumenten. Dazu eigenet sich bespielsweise [slim](http://slim-lang.com).
         | 
| 5 | 
            +
            Mit `schild` kann man eigene Skripte schreiben und komfortabel auf die Datenbank zugreifen. Kenntnisse in der Programmiersprache Ruby sind allerdings notwendig.
         | 
| 8 6 |  | 
| 9 7 | 
             
            Um `schild` nutzen zu können muss es zuerst installiert werden:
         | 
| 10 8 |  | 
| @@ -18,12 +16,14 @@ Dazu muss ein Datenbankadapter installiert werden. Da in den meisten Fällen MyS | |
| 18 16 | 
             
            gem install mysql2
         | 
| 19 17 | 
             
            ```
         | 
| 20 18 |  | 
| 19 | 
            +
            Falls es nicht klappt und Fehlermeldungen auftauchen. liegt es meist daran, dass neben dem Server auch die Entwicklerbibliotheken isntalliert sein müssen. `mysql-dev` oder ähnlich genannt. Das hängt vom jeweils verwendeten Betriebssystem ab.
         | 
| 20 | 
            +
             | 
| 21 21 | 
             
            Jetzt kann `schild` in einem Skript aufgerufen werden:
         | 
| 22 22 |  | 
| 23 23 | 
             
            ```ruby
         | 
| 24 24 | 
             
            require 'schild'
         | 
| 25 25 | 
             
            ```
         | 
| 26 | 
            -
            Da `schild` eine Datenbankverbindung zur Schild-Datenbank herstellen muss, werden noch ein paar Angaben gebraucht. `schild`verwendet dafür sog. Environment-Variablen. Unter Linux sehen die so aus:
         | 
| 26 | 
            +
            Da `schild` eine Datenbankverbindung zur Schild-Datenbank herstellen muss, werden noch ein paar Angaben gebraucht. `schild` verwendet dafür sog. Environment-Variablen. Unter Linux sehen die so aus:
         | 
| 27 27 |  | 
| 28 28 | 
             
            ```sh
         | 
| 29 29 | 
             
            export S_USER=schild
         | 
| @@ -52,9 +52,9 @@ require 'schild' | |
| 52 52 | 
             
            ```
         | 
| 53 53 |  | 
| 54 54 | 
             
            Hier ist es wichtig, dass zuerst die Variablen geladen werden und erst im Anschluss daran `schild`, denn `schild` versucht direkt beim ersten Laden die Verbindung zur Datenbank herzustellen.
         | 
| 55 | 
            -
             | 
| 55 | 
            +
             | 
| 56 56 | 
             
            Nun sollte noch das `Schild`-Modul geladen werden, das die Verwendung von  `schild` vereinfacht:
         | 
| 57 | 
            -
             | 
| 57 | 
            +
             | 
| 58 58 | 
             
            ```ruby
         | 
| 59 59 | 
             
            require 'envyable'
         | 
| 60 60 | 
             
            Envyable.load('./config/env.yml', 'testing')
         | 
| @@ -63,8 +63,7 @@ include Schild | |
| 63 63 | 
             
            ```
         | 
| 64 64 |  | 
| 65 65 | 
             
            Um jedoch alle Hilfsmethoden nutzen zu können, die das `schild`-Gem zur
         | 
| 66 | 
            -
            Verfügung stellt, noch besser  | 
| 67 | 
            -
            Version 0.4.0 zur Verfügung steht:
         | 
| 66 | 
            +
            Verfügung stellt, noch besser folgender Befehl verwenden:
         | 
| 68 67 |  | 
| 69 68 | 
             
            ```ruby
         | 
| 70 69 | 
             
            include SchildErweitert
         | 
| @@ -88,7 +87,7 @@ oder: | |
| 88 87 | 
             
            ```ruby
         | 
| 89 88 | 
             
            s = Schueler.where(:Klasse => 'B13B').first
         | 
| 90 89 | 
             
            s.skt_halbjahr.noten.map{ |n| "#{n.fach.Bezeichnung}: #{n.NotenKrz}"}
         | 
| 91 | 
            -
             => ["Deutsch/ Kommunikation: 3", "Englisch: 3", "Religionslehre: ", "Mathematik: 4-", "Sport/ Gesundheitsförderung: 2", "Wirtschafts- und Betriebslehre: 3", "Datenverarbeitung: ", "Fachpraxis Textil/ Bekleidung: 2", "Gestaltungslehre: 3", "Politik/ Gesellschaftslehre: 2", "Technologie Bekleidung: 5", "Technisches Zeichnen Bekleidung: 4"] | 
| 90 | 
            +
             => ["Deutsch/ Kommunikation: 3", "Englisch: 3", "Religionslehre: ", "Mathematik: 4-", "Sport/ Gesundheitsförderung: 2", "Wirtschafts- und Betriebslehre: 3", "Datenverarbeitung: ", "Fachpraxis Textil/ Bekleidung: 2", "Gestaltungslehre: 3", "Politik/ Gesellschaftslehre: 2", "Technologie Bekleidung: 5", "Technisches Zeichnen Bekleidung: 4"]
         | 
| 92 91 | 
             
            ```
         | 
| 93 92 |  | 
| 94 93 | 
             
            In diesem Beispiel wurde der erste Schüler der klasse B13B aus dem Datensatz `Schueler` gewählt und Daten aus verschiedenen Tabellen abgerufen:
         | 
| @@ -97,7 +96,7 @@ In diesem Beispiel wurde der erste Schüler der klasse B13B aus dem Datensatz `S | |
| 97 96 | 
             
            * Die Notenliste aus Noten
         | 
| 98 97 | 
             
            * Die Fachbezeichnung aus Faecher
         | 
| 99 98 |  | 
| 100 | 
            -
            `schild` vereinfacht an dieser Stelle einige Probleme von Schild. So sind z.B. Daten zur Schule unter `Schule` erreichbar, während die Tabelle unter Schild direkt nur über DB[:eigeneschule] anzusteuern wäre. Da viele Namen im Schema der Schild-Datenbank uneinheitlich sind, versucht `schild | 
| 99 | 
            +
            `schild` vereinfacht an dieser Stelle einige Probleme von Schild. So sind z.B. Daten zur Schule unter `Schule` erreichbar, während die Tabelle unter Schild direkt nur über DB[:eigeneschule] anzusteuern wäre. Da viele Namen im Schema der Schild-Datenbank uneinheitlich sind, versucht `schild`, soweit es geht, eine einheitliche Form zu verwenden.
         | 
| 101 100 |  | 
| 102 101 | 
             
            Alle zur Verfügung stehenden Hilfsmethoden werden in den API-Docs erläutert.
         | 
| 103 102 |  | 
| @@ -119,15 +118,47 @@ s.bemerkungen | |
| 119 118 |  | 
| 120 119 | 
             
            Mit Hilfe dieser zusätzlichen Methoden können Fehlermeldungen in den erstellten Berichten komfortabel umgangen werden. Je nach Bedarf kann auf Typensicherheit gesetzt werden oder etwas mehr Freiheit.
         | 
| 121 120 |  | 
| 121 | 
            +
            Zum Abfragen der Tabellen stehen also die Methoden entsprechend der Tabellen zur Verfügung:
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            ```ruby
         | 
| 124 | 
            +
            s = Schueler.first
         | 
| 125 | 
            +
            s.Geburtsdatum
         | 
| 126 | 
            +
            => nil
         | 
| 127 | 
            +
            s.Vorname
         | 
| 128 | 
            +
            => "Stefan"
         | 
| 129 | 
            +
            ```
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            Dazu die erweiterte Methode
         | 
| 132 | 
            +
            ```ruby
         | 
| 133 | 
            +
            s = Schueler.first
         | 
| 134 | 
            +
            s.geburtsdatum
         | 
| 135 | 
            +
            => 1899-01-01 00:00:00 +0100
         | 
| 136 | 
            +
            s.geburtsland_mutter
         | 
| 137 | 
            +
            => ""
         | 
| 138 | 
            +
            ```
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            Und es gibt noch die Unterstrichmethoden, die beides verbinden: Ruby-style und frei von nil:
         | 
| 141 | 
            +
             | 
| 142 | 
            +
            ```ruby
         | 
| 143 | 
            +
            s = Schueler.first
         | 
| 144 | 
            +
            s._geburtsdatum
         | 
| 145 | 
            +
            => nil0
         | 
| 146 | 
            +
            s._geburtsland_mutter
         | 
| 147 | 
            +
            => nil
         | 
| 148 | 
            +
            ```
         | 
| 122 149 | 
             
            ## Das sollte beachtet werden
         | 
| 123 | 
            -
            `schild` läuft nur unter Ruby. Es  | 
| 150 | 
            +
            `schild` läuft nur unter Ruby. Es läuft auch unter JRuby und kann dementsprechend in alle auf der JVM laufenden Sprachen eingesetzt werden.
         | 
| 124 151 |  | 
| 125 152 | 
             
            Die Schild-Datenbank muss einigermaßen aktuell sein, ältere Datenbanken haben offensichtlich noch Großbuchstaben in den Tabellennamen verwendet. Das bereitet `schild` Schwierigkeiten. Bei neueren Versionen von Schild (2015) werden Kleinbuchstaben verwendet.
         | 
| 126 153 |  | 
| 127 | 
            -
            Es kann nicht garantiert werden, dass `schild` mit jeder Version von Schild funktioniert. `schild` hat keinerlei Einfluß auf die Entwicklung von Schild und kann bei jeder Änderung am Schema der Datenbank zu fehlerhaftem Verhalten veranlasst werden.
         | 
| 154 | 
            +
            Es kann nicht garantiert werden, dass `schild` mit jeder Version von Schild funktioniert. `schild` hat keinerlei Einfluß auf die Entwicklung von Schild und kann bei jeder Änderung am Schema der Datenbank zu fehlerhaftem Verhalten veranlasst werden. Soweit möglich, werden Legacy-Methoden geschrieben, die trotz namensänderung auf alte Werte zugreifen können. Ebenso werden Warnungen geschrieben, wenn `schild` Methoden kennt, die Schild in alten Versionen noch nicht verwendet hat.
         | 
| 128 155 |  | 
| 129 156 | 
             
            `schild` verändert keine Daten an der Schild-Datenbank. Es ist aber möglich, dass mit Hilfe von `schild` auf Daten zugegriffen und verändert wird. `schild` verwendet zum Ansteuern der Datenbank `sequel`, ein weiterer Gem zum komfortablen Bearbeiten von relationalen Datenbanken. Um sicherzugehen, dass keine Schreibzugriffe auf die Schild-Datenbank vorgenommen werden, muss der Datenbankbenutzer auf Lesezugriff beschränkt werden.
         | 
| 130 157 |  | 
| 158 | 
            +
            Abschließend sollte noch erwähnt werden, dass `schild` naturgemäß auf nicht besonders vielen Datenbanken getestet werden konnte. Es wir zur Zeit an einem Berufskolleg verwendet und funktioniert einwandfrei. Nicht alle Tabellen werden derzeit verwendet, können aber bei Bedarf relativ schnell eingebunden werden.
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            `schild` wird zur Zeit als Bibliothek für [Sahib](https://github.com/hmt/sahib) eingesetzt. Sahib ist eine komfortable Oberfläche zum Suchen von Schülern und Klassen und der Erstellung von Dokumenten mit Hilfe von HTML und CSS, die als PDF ausgegben werden. Zeugnisse und andere Dokumente können innerhalb von wenigen Minuten erstellt und ausgegeben werden.
         | 
| 161 | 
            +
             | 
| 131 162 | 
             
            ## Tests
         | 
| 132 163 | 
             
            `schild` verwendet Tests, um sicherzustellen, dass alle Funktionen über den gesamten Entwicklungsprozess reibungslos funktionieren. Dazu wird die Testdatenbank verwendet, die von der ribeka GmbH auf ihrer Dropbox zur Verfügung gestellt wurde. Leider ist dies eine ältere Version, die an die neue Schild-Version angepasst werden musste. Die neue Version steht als [Download](https://www.dropbox.com/s/tyswqh1burf4ijo/schild-test.sql.gz?dl=0) zur Verfügung und kann in MySQL importiert werden.
         | 
| 133 164 |  | 
| @@ -138,7 +169,7 @@ git clone git@github.com:hmt/schild.git | |
| 138 169 | 
             
            cd schild
         | 
| 139 170 | 
             
            ```
         | 
| 140 171 |  | 
| 141 | 
            -
            Um die Tests bei installierter Datenbank durchführen zu können müssen die nötigen Abhängigkeiten installiert sein. Dies wird über `bundler` organisiert:
         | 
| 172 | 
            +
            Um die Tests bei installierter Datenbank durchführen zu können, müssen die nötigen Abhängigkeiten installiert sein. Dies wird über `bundler` organisiert:
         | 
| 142 173 |  | 
| 143 174 | 
             
            ```sh
         | 
| 144 175 | 
             
            bundle install
         | 
| @@ -150,6 +181,8 @@ Die Tests können nun mit `rake` gestartet werden: | |
| 150 181 | 
             
            rake
         | 
| 151 182 | 
             
            ```
         | 
| 152 183 |  | 
| 184 | 
            +
            `rake` greift automatisch auf die `config/env.yml` zu, um Environment-Variablen einzulesen, die voreingestellt sind. Damit die Tests funktionieren, müssen diese Variablen evtl. an die jeweilige Datenbankanbindung angepasst werden.
         | 
| 185 | 
            +
             | 
| 153 186 | 
             
            ## Mitmachen
         | 
| 154 187 | 
             
            Hilfe bei der Mitarbeit von `schild` wird gerne angenommen. Bitte Pull Requests und Issues bei Github nutzen. Alle Änderungen sollten mit Tests eingereicht werden.
         | 
| 155 188 |  | 
| @@ -157,7 +190,25 @@ Hilfe bei der Mitarbeit von `schild` wird gerne angenommen. Bitte Pull Requests | |
| 157 190 | 
             
            []("http://creativecommons.org/licenses/by/4.0/")
         | 
| 158 191 | 
             
            [schild](https://github.com/hmt/schild) von [HMT](https://github.com/hmt) ist lizenziert unter einer [Creative Commons Namensnennung 4.0 International Lizenz](http://creativecommons.org/licenses/by/4.0/).
         | 
| 159 192 |  | 
| 193 | 
            +
            Oder:
         | 
| 194 | 
            +
            The MIT License (MIT)
         | 
| 160 195 |  | 
| 196 | 
            +
            Copyright (c) 2015 HMT
         | 
| 161 197 |  | 
| 198 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 199 | 
            +
            of this software and associated documentation files (the "Software"), to deal
         | 
| 200 | 
            +
            in the Software without restriction, including without limitation the rights
         | 
| 201 | 
            +
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         | 
| 202 | 
            +
            copies of the Software, and to permit persons to whom the Software is
         | 
| 203 | 
            +
            furnished to do so, subject to the following conditions:
         | 
| 162 204 |  | 
| 205 | 
            +
            The above copyright notice and this permission notice shall be included in all
         | 
| 206 | 
            +
            copies or substantial portions of the Software.
         | 
| 163 207 |  | 
| 208 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         | 
| 209 | 
            +
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         | 
| 210 | 
            +
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         | 
| 211 | 
            +
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         | 
| 212 | 
            +
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         | 
| 213 | 
            +
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
         | 
| 214 | 
            +
            SOFTWARE.
         | 
    
        data/lib/schild.rb
    CHANGED
    
    | @@ -1,120 +1,6 @@ | |
| 1 1 | 
             
            require 'schild/version'
         | 
| 2 2 | 
             
            require 'sequel'
         | 
| 3 3 |  | 
| 4 | 
            -
            # erst Ruby 2.1.0 macht include zu einer public-Methode
         | 
| 5 | 
            -
            if Module.private_method_defined? :include
         | 
| 6 | 
            -
              class Module
         | 
| 7 | 
            -
                public :include
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
            end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            # String und Symbol werden um snake_case ergänzt, das die Schild-Tabellen umbenennt
         | 
| 12 | 
            -
            module CoreExtensions
         | 
| 13 | 
            -
              module String
         | 
| 14 | 
            -
                def snake_case
         | 
| 15 | 
            -
                  return downcase if match(/\A[A-Z]+\z/)
         | 
| 16 | 
            -
                  gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
         | 
| 17 | 
            -
                    gsub(/([a-z])([A-Z])/, '\1_\2').
         | 
| 18 | 
            -
                    downcase
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              module Symbol
         | 
| 23 | 
            -
                def snake_case
         | 
| 24 | 
            -
                  to_s.snake_case
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
              end
         | 
| 27 | 
            -
            end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            # Halten wir Protokoll zu den erstellten Methoden
         | 
| 30 | 
            -
            # Ist brauchbar, wenn man z.B. noch extremer als der SchildTypeSaver arbeiten möchte
         | 
| 31 | 
            -
            module MethodLogger
         | 
| 32 | 
            -
              class Methods
         | 
| 33 | 
            -
                @@accessor_methods = {}
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def self.add(klass, meth)
         | 
| 36 | 
            -
                  @@accessor_methods[klass] ||= []
         | 
| 37 | 
            -
                  @@accessor_methods[klass] << meth
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                def self.list(klass)
         | 
| 41 | 
            -
                  @@accessor_methods[klass]
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
              end
         | 
| 44 | 
            -
            end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            # Schild hat teilweise nil in DB-Feldern. SchildTypeSaver gibt entweder einen
         | 
| 47 | 
            -
            # Leer-String zurück ("") oder bei strftime das 1899 Datum zurück.
         | 
| 48 | 
            -
            module SchildTypeSaver
         | 
| 49 | 
            -
              Symbol.include CoreExtensions::Symbol
         | 
| 50 | 
            -
              String.include CoreExtensions::String
         | 
| 51 | 
            -
             | 
| 52 | 
            -
              # bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode
         | 
| 53 | 
            -
              # erstellt, die bei nil ein Null-Objekt erstellt.
         | 
| 54 | 
            -
              def self.included(klass)
         | 
| 55 | 
            -
                klass.columns.each do |column|
         | 
| 56 | 
            -
                  name = column.snake_case
         | 
| 57 | 
            -
                  MethodLogger::Methods.add(klass, name)
         | 
| 58 | 
            -
                  # allow_nil ist als Argument optional und lässt bei +true+ alle Ergebnisse durch
         | 
| 59 | 
            -
                  define_method(("_"+name.to_s).to_sym) {public_send(column)}
         | 
| 60 | 
            -
                  define_method(name) do |allow_nil=false|
         | 
| 61 | 
            -
                    ret = public_send(column)
         | 
| 62 | 
            -
                    if allow_nil || ret
         | 
| 63 | 
            -
                      ret = ret.strip if ret.class == String
         | 
| 64 | 
            -
                      ret
         | 
| 65 | 
            -
                    else
         | 
| 66 | 
            -
                     create_null_object(klass, column)
         | 
| 67 | 
            -
                    end
         | 
| 68 | 
            -
                  end
         | 
| 69 | 
            -
                end
         | 
| 70 | 
            -
              end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
              def create_null_object(klass, column)
         | 
| 73 | 
            -
                k = DB.schema_type_class(klass.db_schema[column][:type])
         | 
| 74 | 
            -
                if k.class == Array
         | 
| 75 | 
            -
                  # Sequel stellt :datetime als [Time, DateTime] dar, deswegen die Abfrage nach Array
         | 
| 76 | 
            -
                  # Schild verwendet Time Objekte, wir machen das auch
         | 
| 77 | 
            -
                  Time.new(1899)
         | 
| 78 | 
            -
                elsif k == Integer
         | 
| 79 | 
            -
                  0
         | 
| 80 | 
            -
                elsif k == Float
         | 
| 81 | 
            -
                  0.0
         | 
| 82 | 
            -
                else
         | 
| 83 | 
            -
                  # alle anderen types werden als Klasse zurückgegeben
         | 
| 84 | 
            -
                  k.new
         | 
| 85 | 
            -
                end
         | 
| 86 | 
            -
              end
         | 
| 87 | 
            -
            end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
            # Mixin für Notenbezeichnungen
         | 
| 90 | 
            -
            module NotenHelfer
         | 
| 91 | 
            -
              # Notenbezeichnung als String
         | 
| 92 | 
            -
              def note_s(ziffer)
         | 
| 93 | 
            -
                case ziffer
         | 
| 94 | 
            -
                when "1", "1+", "1-"
         | 
| 95 | 
            -
                  "sehr gut"
         | 
| 96 | 
            -
                when "2", "2+", "2-"
         | 
| 97 | 
            -
                  "gut"
         | 
| 98 | 
            -
                when "3", "3+", "3-"
         | 
| 99 | 
            -
                  "befriedigend"
         | 
| 100 | 
            -
                when "4", "4+", "4-"
         | 
| 101 | 
            -
                  "ausreichend"
         | 
| 102 | 
            -
                when "5", "5+", "5-"
         | 
| 103 | 
            -
                  "mangelhaft"
         | 
| 104 | 
            -
                when "6"
         | 
| 105 | 
            -
                  "ungenügend"
         | 
| 106 | 
            -
                when 'NB'
         | 
| 107 | 
            -
                  "––––––"
         | 
| 108 | 
            -
                when "E1"
         | 
| 109 | 
            -
                  "mit besonderem Erfolg teilgenommen"
         | 
| 110 | 
            -
                when "E2"
         | 
| 111 | 
            -
                  "mit Erfolg teilgenommen"
         | 
| 112 | 
            -
                when 'E3'
         | 
| 113 | 
            -
                  "teilgenommen"
         | 
| 114 | 
            -
                end
         | 
| 115 | 
            -
              end
         | 
| 116 | 
            -
            end
         | 
| 117 | 
            -
             | 
| 118 4 | 
             
            # Das Schild Modul, das alle Klassen für die Datenbankanbindung bereitstellt
         | 
| 119 5 | 
             
            module Schild
         | 
| 120 6 | 
             
              # ist die Datenbank-Verbindung. Alle Daten können über diese Konstante abgerufen werden
         | 
| @@ -209,11 +95,154 @@ module Schild | |
| 209 95 | 
             
            end
         | 
| 210 96 |  | 
| 211 97 | 
             
            module SchildErweitert
         | 
| 212 | 
            -
              include  | 
| 213 | 
            -
               | 
| 214 | 
            -
             | 
| 215 | 
            -
             | 
| 98 | 
            +
              # erst Ruby 2.1.0 macht include zu einer public-Methode
         | 
| 99 | 
            +
              if Module.private_method_defined? :include
         | 
| 100 | 
            +
                class Module
         | 
| 101 | 
            +
                  public :include
         | 
| 102 | 
            +
                end
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              # String und Symbol werden um snake_case ergänzt, das die Schild-Tabellen umbenennt
         | 
| 106 | 
            +
              # Legacy-Methoden aus alten Schild-Versionen wird teilweise auch unterstützt.
         | 
| 107 | 
            +
              module CoreExtensions
         | 
| 108 | 
            +
                module String
         | 
| 109 | 
            +
                  def snake_case
         | 
| 110 | 
            +
                    return downcase if match(/\A[A-Z]+\z/)
         | 
| 111 | 
            +
                    gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
         | 
| 112 | 
            +
                      gsub(/([a-z])([A-Z])/, '\1_\2').
         | 
| 113 | 
            +
                      downcase
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                end
         | 
| 216 116 |  | 
| 117 | 
            +
                module Symbol
         | 
| 118 | 
            +
                  def snake_case
         | 
| 119 | 
            +
                    to_s.snake_case
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                module Schueler
         | 
| 124 | 
            +
                  def entlassart
         | 
| 125 | 
            +
                    return self.entlass_art if self.respond_to?(:entlass_art)
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
                end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                module Fachklasse
         | 
| 130 | 
            +
                  def dqr_niveau
         | 
| 131 | 
            +
                    return self.DQR_Niveau if self.respond_to?(:DQR_Niveau)
         | 
| 132 | 
            +
                    "Alte Schild-Version ohne DQR-Niveau"
         | 
| 133 | 
            +
                  end
         | 
| 134 | 
            +
                end
         | 
| 135 | 
            +
              end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
              # Schild hat teilweise nil in DB-Feldern. SchildTypeSaver gibt entweder einen
         | 
| 138 | 
            +
              # Leer-String zurück ("") oder bei strftime das 1899 Datum zurück.
         | 
| 139 | 
            +
              module SchildTypeSaver
         | 
| 140 | 
            +
                Symbol.include SchildErweitert::CoreExtensions::Symbol
         | 
| 141 | 
            +
                String.include CoreExtensions::String
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                # bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode
         | 
| 144 | 
            +
                # erstellt, die bei nil ein Null-Objekt erstellt.
         | 
| 145 | 
            +
                def self.included(klass)
         | 
| 146 | 
            +
                  klass.columns.each do |column|
         | 
| 147 | 
            +
                    name = column.snake_case
         | 
| 148 | 
            +
                    MethodLogger::Methods.add(klass, name)
         | 
| 149 | 
            +
                    # allow_nil ist als Argument optional und lässt bei +true+ alle Ergebnisse durch
         | 
| 150 | 
            +
                    define_method(("_"+name.to_s).to_sym) {public_send(column)}
         | 
| 151 | 
            +
                    define_method(name) do |allow_nil=false|
         | 
| 152 | 
            +
                      ret = public_send(column)
         | 
| 153 | 
            +
                      if allow_nil || ret
         | 
| 154 | 
            +
                        ret = ret.strip if ret.class == String
         | 
| 155 | 
            +
                        ret
         | 
| 156 | 
            +
                      else
         | 
| 157 | 
            +
                        create_null_object(klass, column)
         | 
| 158 | 
            +
                      end
         | 
| 159 | 
            +
                    end
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                def create_null_object(klass, column)
         | 
| 164 | 
            +
                  k = Schild::DB.schema_type_class(klass.db_schema[column][:type])
         | 
| 165 | 
            +
                  if k.class == Array
         | 
| 166 | 
            +
                    # Sequel stellt :datetime als [Time, DateTime] dar, deswegen die Abfrage nach Array
         | 
| 167 | 
            +
                    # Schild verwendet Time Objekte, wir machen das auch
         | 
| 168 | 
            +
                    Time.new(1899)
         | 
| 169 | 
            +
                  elsif k == Integer
         | 
| 170 | 
            +
                    0
         | 
| 171 | 
            +
                  elsif k == Float
         | 
| 172 | 
            +
                    0.0
         | 
| 173 | 
            +
                  else
         | 
| 174 | 
            +
                    # alle anderen types werden als Klasse zurückgegeben
         | 
| 175 | 
            +
                    k.new
         | 
| 176 | 
            +
                  end
         | 
| 177 | 
            +
                end
         | 
| 178 | 
            +
              end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
              # Halten wir Protokoll zu den erstellten Methoden
         | 
| 181 | 
            +
              # Ist brauchbar, wenn man z.B. noch extremer als der SchildTypeSaver arbeiten möchte
         | 
| 182 | 
            +
              module MethodLogger
         | 
| 183 | 
            +
                class Methods
         | 
| 184 | 
            +
                  @@accessor_methods = {}
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                  def self.add(klass, meth)
         | 
| 187 | 
            +
                    @@accessor_methods[klass] ||= []
         | 
| 188 | 
            +
                    @@accessor_methods[klass] << meth
         | 
| 189 | 
            +
                  end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                  def self.list(klass)
         | 
| 192 | 
            +
                    @@accessor_methods[klass]
         | 
| 193 | 
            +
                  end
         | 
| 194 | 
            +
                end
         | 
| 195 | 
            +
              end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
              # Mixin für Notenbezeichnungen
         | 
| 198 | 
            +
              module NotenHelfer
         | 
| 199 | 
            +
                # Notenbezeichnung als String
         | 
| 200 | 
            +
                def note_s(ziffer)
         | 
| 201 | 
            +
                  case ziffer
         | 
| 202 | 
            +
                  when "1", "1+", "1-"
         | 
| 203 | 
            +
                    "sehr gut"
         | 
| 204 | 
            +
                  when "2", "2+", "2-"
         | 
| 205 | 
            +
                    "gut"
         | 
| 206 | 
            +
                  when "3", "3+", "3-"
         | 
| 207 | 
            +
                    "befriedigend"
         | 
| 208 | 
            +
                  when "4", "4+", "4-"
         | 
| 209 | 
            +
                    "ausreichend"
         | 
| 210 | 
            +
                  when "5", "5+", "5-"
         | 
| 211 | 
            +
                    "mangelhaft"
         | 
| 212 | 
            +
                  when "6"
         | 
| 213 | 
            +
                    "ungenügend"
         | 
| 214 | 
            +
                  when 'NB'
         | 
| 215 | 
            +
                    "––––––"
         | 
| 216 | 
            +
                  when "E1"
         | 
| 217 | 
            +
                    "mit besonderem Erfolg teilgenommen"
         | 
| 218 | 
            +
                  when "E2"
         | 
| 219 | 
            +
                    "mit Erfolg teilgenommen"
         | 
| 220 | 
            +
                  when 'E3'
         | 
| 221 | 
            +
                    "teilgenommen"
         | 
| 222 | 
            +
                  end
         | 
| 223 | 
            +
                end
         | 
| 224 | 
            +
              end
         | 
| 225 | 
            +
             | 
| 226 | 
            +
              # Klassen sind Konstanten. Deswegen alle auslesen, die Klassen behalten und
         | 
| 227 | 
            +
              # dynamisch neue Klassen mit gleichem Namen erstellen.
         | 
| 228 | 
            +
              # Automatisch SchildTypeSaver einbinden.
         | 
| 229 | 
            +
              #
         | 
| 230 | 
            +
              # Sollen zusätzliche Methoden eingebunden werden, muss - wie unten Schueler
         | 
| 231 | 
            +
              # und andere Klassen - die neu erstelle Klasse gepatcht werden.
         | 
| 232 | 
            +
              # Die alten Methoden bleiben erhalten, d.h. auch die TypeSaver-Methoden.
         | 
| 233 | 
            +
              Schild.constants.map {|name| Schild.const_get(name)}.select {|o| o.is_a?(Class)}.each do |klass|
         | 
| 234 | 
            +
                name = Schild.const_get(klass.to_s).name.split("::").last
         | 
| 235 | 
            +
                klass = Class.new(klass) do
         | 
| 236 | 
            +
                  include SchildTypeSaver
         | 
| 237 | 
            +
                end
         | 
| 238 | 
            +
                name = const_set(name, klass)
         | 
| 239 | 
            +
              end
         | 
| 240 | 
            +
             | 
| 241 | 
            +
              Fachklasse.include CoreExtensions::Fachklasse
         | 
| 242 | 
            +
              Schueler.include CoreExtensions::Schueler
         | 
| 243 | 
            +
             | 
| 244 | 
            +
              # Stellt die Schüler-Tabelle samt Assoziationen bereit.
         | 
| 245 | 
            +
              class Schueler
         | 
| 217 246 | 
             
                # gibt das z.Zt. aktuelle Halbjahr zurück.
         | 
| 218 247 | 
             
                def akt_halbjahr
         | 
| 219 248 | 
             
                  abschnitte.last
         | 
| @@ -268,20 +297,8 @@ module SchildErweitert | |
| 268 297 | 
             
                end
         | 
| 269 298 | 
             
              end
         | 
| 270 299 |  | 
| 271 | 
            -
              # Dient als Assoziation für Schüler und deren Klassenbezeichnung etc.
         | 
| 272 | 
            -
              class Fachklasse < Schild::Fachklasse
         | 
| 273 | 
            -
                include SchildTypeSaver
         | 
| 274 | 
            -
              end
         | 
| 275 | 
            -
             | 
| 276 | 
            -
              # Assoziation für Lehrer, hauptsächlich für Klassenlehrer
         | 
| 277 | 
            -
              class Klassenlehrer < Schild::Klassenlehrer
         | 
| 278 | 
            -
                include SchildTypeSaver
         | 
| 279 | 
            -
              end
         | 
| 280 | 
            -
             | 
| 281 300 | 
             
              # Ist die Assoziation, die Halbjahre, sog. Abschnitte zurückgibt.
         | 
| 282 | 
            -
              class Abschnitt | 
| 283 | 
            -
                include SchildTypeSaver
         | 
| 284 | 
            -
             | 
| 301 | 
            +
              class Abschnitt
         | 
| 285 302 | 
             
                dataset_module do
         | 
| 286 303 | 
             
                  # filtert den Datensatz nach Jahr
         | 
| 287 304 | 
             
                  def jahr(i)
         | 
| @@ -346,8 +363,7 @@ module SchildErweitert | |
| 346 363 | 
             
              end
         | 
| 347 364 |  | 
| 348 365 | 
             
              # Assoziation für Noten
         | 
| 349 | 
            -
              class Noten | 
| 350 | 
            -
                include SchildTypeSaver
         | 
| 366 | 
            +
              class Noten
         | 
| 351 367 | 
             
                include NotenHelfer
         | 
| 352 368 |  | 
| 353 369 | 
             
                # note in String umwandeln
         | 
| @@ -366,15 +382,9 @@ module SchildErweitert | |
| 366 382 | 
             
                end
         | 
| 367 383 | 
             
              end
         | 
| 368 384 |  | 
| 369 | 
            -
              # Assoziation für Fächer
         | 
| 370 | 
            -
              class Faecher < Schild::Faecher
         | 
| 371 | 
            -
                include SchildTypeSaver
         | 
| 372 | 
            -
              end
         | 
| 373 385 |  | 
| 374 386 | 
             
              # Assoziation für BK-Abschlussdaten
         | 
| 375 | 
            -
              class BKAbschluss | 
| 376 | 
            -
                include SchildTypeSaver
         | 
| 377 | 
            -
             | 
| 387 | 
            +
              class BKAbschluss
         | 
| 378 388 | 
             
                # Ist der Schüler zugelassen?
         | 
| 379 389 | 
             
                def zulassung?
         | 
| 380 390 | 
             
                  self.Zulassung == "+"
         | 
| @@ -392,8 +402,7 @@ module SchildErweitert | |
| 392 402 | 
             
              end
         | 
| 393 403 |  | 
| 394 404 | 
             
              # Assoziation für die jeweiligen BK-Prüfungsfächer
         | 
| 395 | 
            -
              class BKAbschlussFaecher | 
| 396 | 
            -
                include SchildTypeSaver
         | 
| 405 | 
            +
              class BKAbschlussFaecher
         | 
| 397 406 | 
             
                include NotenHelfer
         | 
| 398 407 |  | 
| 399 408 | 
             
                # Wurde das Fach schriftlich geprüft?
         | 
| @@ -411,14 +420,8 @@ module SchildErweitert | |
| 411 420 | 
             
                end
         | 
| 412 421 | 
             
              end
         | 
| 413 422 |  | 
| 414 | 
            -
              # Assoziation für Abi-Abschlussdaten
         | 
| 415 | 
            -
              class AbiAbschluss < Schild::AbiAbschluss
         | 
| 416 | 
            -
                include SchildTypeSaver
         | 
| 417 | 
            -
              end
         | 
| 418 | 
            -
             | 
| 419 423 | 
             
              # Assoziation für die jeweiligen Abi-Prüfungsfächer
         | 
| 420 | 
            -
              class AbiAbschlussFaecher | 
| 421 | 
            -
                include SchildTypeSaver
         | 
| 424 | 
            +
              class AbiAbschlussFaecher
         | 
| 422 425 | 
             
                include NotenHelfer
         | 
| 423 426 |  | 
| 424 427 | 
             
                def note(notenart)
         | 
| @@ -426,65 +429,57 @@ module SchildErweitert | |
| 426 429 | 
             
                end
         | 
| 427 430 | 
             
              end
         | 
| 428 431 |  | 
| 429 | 
            -
               | 
| 430 | 
            -
             | 
| 431 | 
            -
              end
         | 
| 432 | 
            -
             | 
| 433 | 
            -
              class Vermerke < Schild::Vermerke
         | 
| 434 | 
            -
                include SchildTypeSaver
         | 
| 435 | 
            -
              end
         | 
| 436 | 
            -
             | 
| 437 | 
            -
              class Schuelerfotos < Schild::Schuelerfotos
         | 
| 438 | 
            -
                include SchildTypeSaver
         | 
| 439 | 
            -
              end
         | 
| 440 | 
            -
             | 
| 441 | 
            -
              # Schul-Tabelle mit vereinfachtem Zugriff auf Datenfelder.
         | 
| 442 | 
            -
              class Schule < Schild::Schule
         | 
| 443 | 
            -
                include SchildTypeSaver
         | 
| 444 | 
            -
             | 
| 432 | 
            +
              # Schul-Tabelle mit vereinfachtem Zugriff auf Datenfelder mittel class-Methoden
         | 
| 433 | 
            +
              class Schule
         | 
| 445 434 | 
             
                # gibt die Schulnummer zurück
         | 
| 446 435 | 
             
                def self.schulnummer
         | 
| 447 436 | 
             
                  self.first.schul_nr
         | 
| 448 437 | 
             
                end
         | 
| 449 438 |  | 
| 439 | 
            +
                # gibt den Namen des Schulleiters als V. Name zurück
         | 
| 450 440 | 
             
                def self.v_name_schulleiter
         | 
| 451 441 | 
             
                  "#{self.first.schulleiter_vorname[0]}. #{self.first.schulleiter_name}"
         | 
| 452 442 | 
             
                end
         | 
| 453 443 |  | 
| 444 | 
            +
                # gibt die männliche bzw. weibliche Form des Schulleiters zurück
         | 
| 454 445 | 
             
                def self.schulleiter_in
         | 
| 455 446 | 
             
                  self.first.schulleiter_geschlecht == 3 ? "Schulleiter" : "Schulleiterin"
         | 
| 456 447 | 
             
                end
         | 
| 457 448 |  | 
| 449 | 
            +
                # gibt den Ort der Schule zurück
         | 
| 458 450 | 
             
                def self.ort
         | 
| 459 451 | 
             
                  self.first.ort
         | 
| 460 452 | 
             
                end
         | 
| 461 453 | 
             
              end
         | 
| 462 454 |  | 
| 463 455 | 
             
              # Tabelle der Schuld-Benutzer zum Abgleichen der Daten
         | 
| 464 | 
            -
              class Nutzer | 
| 465 | 
            -
                include SchildTypeSaver
         | 
| 456 | 
            +
              class Nutzer
         | 
| 466 457 |  | 
| 458 | 
            +
                # der Nutzername
         | 
| 467 459 | 
             
                def name
         | 
| 468 460 | 
             
                  self.us_name
         | 
| 469 461 | 
             
                end
         | 
| 470 462 |  | 
| 463 | 
            +
                # der Login-Name des Nutzers
         | 
| 471 464 | 
             
                def login
         | 
| 472 465 | 
             
                  self.us_login_name
         | 
| 473 466 | 
             
                end
         | 
| 474 467 |  | 
| 468 | 
            +
                # das Passwort des Nutzers
         | 
| 475 469 | 
             
                def passwort
         | 
| 476 470 | 
             
                  self.us_password
         | 
| 477 471 | 
             
                end
         | 
| 478 472 | 
             
                alias :password :passwort
         | 
| 479 473 |  | 
| 474 | 
            +
                # prüft, ob das angegebene Passwort mit dem gespeicherten Passwort übereinstimmt
         | 
| 480 475 | 
             
                def passwort?(passwort='')
         | 
| 481 476 | 
             
                  crypt(passwort) == self.passwort
         | 
| 482 477 | 
             
                end
         | 
| 483 478 | 
             
                alias :password? :passwort?
         | 
| 484 479 |  | 
| 480 | 
            +
                # ver- bzw. entschlüsselt einen String mit dem Schild-Passwortalgorithmus
         | 
| 485 481 | 
             
                def crypt(passwort)
         | 
| 486 482 | 
             
                  passwort.codepoints.map{|c| ((c/16)*32+15-c).chr}.join('')
         | 
| 487 483 | 
             
                end
         | 
| 488 484 | 
             
              end
         | 
| 489 485 | 
             
            end
         | 
| 490 | 
            -
             | 
    
        data/lib/schild/version.rb
    CHANGED
    
    
    
        data/schild.gemspec
    CHANGED
    
    | @@ -11,7 +11,7 @@ Gem::Specification.new do |spec| | |
| 11 11 | 
             
              spec.summary       = %q{Schild-API}
         | 
| 12 12 | 
             
              spec.description   = %q{schild bietet eine Ruby-Schnittstelle zu SchilD-NRW-Datenbanken.}
         | 
| 13 13 | 
             
              spec.homepage      = "https://github.com/hmt/schild"
         | 
| 14 | 
            -
              spec. | 
| 14 | 
            +
              spec.licenses      = ["Creative Commons Namensnennung 4.0 International Lizenz.", "MIT License"]
         | 
| 15 15 | 
             
              spec.required_ruby_version = ">= 2.0"
         | 
| 16 16 |  | 
| 17 17 | 
             
              spec.files         = `git ls-files -z`.split("\x0")
         | 
| @@ -24,7 +24,7 @@ Gem::Specification.new do |spec| | |
| 24 24 | 
             
              spec.add_development_dependency "minitest", "~> 5"
         | 
| 25 25 | 
             
              spec.add_development_dependency "minitest-rg", "~> 5"
         | 
| 26 26 | 
             
              spec.add_development_dependency "mysql2", "~> 0.4"
         | 
| 27 | 
            +
              spec.add_development_dependency "envyable", "~> 0"
         | 
| 27 28 |  | 
| 28 29 | 
             
              spec.add_runtime_dependency "sequel", "~> 4"
         | 
| 29 | 
            -
              spec.add_runtime_dependency "envyable", "~> 0"
         | 
| 30 30 | 
             
            end
         | 
    
        data/specs/fachklasse_spec.rb
    CHANGED
    
    | @@ -1,10 +1,19 @@ | |
| 1 1 | 
             
            require "#{File.dirname(__FILE__)}/spec_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fachklasse do
         | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                @f = Fachklasse.first
         | 
| 6 | 
            +
              end
         | 
| 4 7 | 
             
              describe 'Assoziation' do
         | 
| 5 8 | 
             
                it 'gibt ein Array von Schülern zurück' do
         | 
| 6 | 
            -
                   | 
| 9 | 
            +
                  @f.schueler.must_be_instance_of Array
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              describe 'Legacy-Methoden funktionieren' do
         | 
| 14 | 
            +
                it 'kennt dqr_niveau' do
         | 
| 15 | 
            +
                  @f.dqr_niveau.must_equal "Alte Schild-Version ohne DQR-Niveau"
         | 
| 7 16 | 
             
                end
         | 
| 8 17 | 
             
              end
         | 
| 9 | 
            -
            end
         | 
| 10 18 |  | 
| 19 | 
            +
            end
         | 
    
        data/specs/schueler_spec.rb
    CHANGED
    
    | @@ -12,6 +12,12 @@ describe Schueler do | |
| 12 12 | 
             
                end
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            +
              describe 'Legacy-Methoden funktionieren' do
         | 
| 16 | 
            +
                it 'kennt entlass_art' do
         | 
| 17 | 
            +
                  @sm.entlassart.must_equal @sm.entlass_art
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 15 21 | 
             
              describe 'Associations funktionieren Erwartungsgemäß' do
         | 
| 16 22 | 
             
                it 'geben Fachklassenbezeichnung zurück (eigeneschule_fachklassen:Fachklassen)' do
         | 
| 17 23 | 
             
                  @sm.fachklasse.Bezeichnung.must_equal "Friseur"
         | 
| @@ -116,8 +122,6 @@ describe Schueler do | |
| 116 122 | 
             
                  @sm.vermerke.first.must_be_instance_of String
         | 
| 117 123 | 
             
                end
         | 
| 118 124 |  | 
| 119 | 
            -
                #schuelerabifaecher kann wegen mangelnder daten nicht getestet werden
         | 
| 120 | 
            -
             | 
| 121 125 | 
             
                # in der Testdatenbank sind leider keine Schülerfotos
         | 
| 122 126 | 
             
                it 'gibt das Schülerfoto als jpg zurück' do
         | 
| 123 127 | 
             
                  skip
         | 
    
        metadata
    CHANGED
    
    | @@ -1,113 +1,113 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: schild
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.7.0b
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - HMT
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-11- | 
| 11 | 
            +
            date: 2015-11-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              type: :development
         | 
| 15 14 | 
             
              name: bundler
         | 
| 16 | 
            -
              prerelease: false
         | 
| 17 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 17 | 
             
                - - "~>"
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 19 | 
             
                    version: '1'
         | 
| 20 | 
            +
              type: :development
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: '1'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              type: :development
         | 
| 29 28 | 
             
              name: rake
         | 
| 30 | 
            -
              prerelease: false
         | 
| 31 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 32 30 | 
             
                requirements:
         | 
| 33 31 | 
             
                - - "~>"
         | 
| 34 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 35 33 | 
             
                    version: '10'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '10'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              type: :development
         | 
| 43 42 | 
             
              name: minitest
         | 
| 44 | 
            -
              prerelease: false
         | 
| 45 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 46 44 | 
             
                requirements:
         | 
| 47 45 | 
             
                - - "~>"
         | 
| 48 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 49 47 | 
             
                    version: '5'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '5'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              type: :development
         | 
| 57 56 | 
             
              name: minitest-rg
         | 
| 58 | 
            -
              prerelease: false
         | 
| 59 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 60 58 | 
             
                requirements:
         | 
| 61 59 | 
             
                - - "~>"
         | 
| 62 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 63 61 | 
             
                    version: '5'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '5'
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              type: :development
         | 
| 71 70 | 
             
              name: mysql2
         | 
| 72 | 
            -
              prerelease: false
         | 
| 73 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 74 72 | 
             
                requirements:
         | 
| 75 73 | 
             
                - - "~>"
         | 
| 76 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 75 | 
             
                    version: '0.4'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - "~>"
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 82 | 
             
                    version: '0.4'
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            -
               | 
| 85 | 
            -
              name: sequel
         | 
| 86 | 
            -
              prerelease: false
         | 
| 84 | 
            +
              name: envyable
         | 
| 87 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 88 86 | 
             
                requirements:
         | 
| 89 87 | 
             
                - - "~>"
         | 
| 90 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 91 | 
            -
                    version: ' | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 94 | 
             
                - - "~>"
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: ' | 
| 96 | 
            +
                    version: '0'
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            -
               | 
| 99 | 
            -
              name: envyable
         | 
| 100 | 
            -
              prerelease: false
         | 
| 98 | 
            +
              name: sequel
         | 
| 101 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 102 100 | 
             
                requirements:
         | 
| 103 101 | 
             
                - - "~>"
         | 
| 104 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 105 | 
            -
                    version: ' | 
| 103 | 
            +
                    version: '4'
         | 
| 104 | 
            +
              type: :runtime
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 107 | 
             
                requirements:
         | 
| 108 108 | 
             
                - - "~>"
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version: ' | 
| 110 | 
            +
                    version: '4'
         | 
| 111 111 | 
             
            description: schild bietet eine Ruby-Schnittstelle zu SchilD-NRW-Datenbanken.
         | 
| 112 112 | 
             
            email:
         | 
| 113 113 | 
             
            - dev@hmt.im
         | 
| @@ -132,6 +132,7 @@ files: | |
| 132 132 | 
             
            homepage: https://github.com/hmt/schild
         | 
| 133 133 | 
             
            licenses:
         | 
| 134 134 | 
             
            - Creative Commons Namensnennung 4.0 International Lizenz.
         | 
| 135 | 
            +
            - MIT License
         | 
| 135 136 | 
             
            metadata: {}
         | 
| 136 137 | 
             
            post_install_message: 
         | 
| 137 138 | 
             
            rdoc_options: []
         | 
| @@ -144,12 +145,12 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 144 145 | 
             
                  version: '2.0'
         | 
| 145 146 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 146 147 | 
             
              requirements:
         | 
| 147 | 
            -
              - - " | 
| 148 | 
            +
              - - ">"
         | 
| 148 149 | 
             
                - !ruby/object:Gem::Version
         | 
| 149 | 
            -
                  version:  | 
| 150 | 
            +
                  version: 1.3.1
         | 
| 150 151 | 
             
            requirements: []
         | 
| 151 152 | 
             
            rubyforge_project: 
         | 
| 152 | 
            -
            rubygems_version: 2.4. | 
| 153 | 
            +
            rubygems_version: 2.4.6
         | 
| 153 154 | 
             
            signing_key: 
         | 
| 154 155 | 
             
            specification_version: 4
         | 
| 155 156 | 
             
            summary: Schild-API
         |