schild 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +18 -0
- data/lib/schild/version.rb +1 -1
- data/lib/schild.rb +55 -2
- data/specs/type_safe_spec.rb +31 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b21d2022cd51b878dbbb820fd9c0460c1472a029
|
4
|
+
data.tar.gz: a2ad01fe7917be3b253839d10cb1bb0db21b400e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40243e0fb126d4d64e012c7aff45513c1503a58f43205a7ea2a938f1f01d83d8e42e141d6505d61c6eeb010d12d65413df7788ed2f02dabc8a42f0d261af67ba
|
7
|
+
data.tar.gz: d6f8d4d87839fc40c768be0767ebfa8a2948e5ffde89d138e4dcf1d60138c2cacefa1a9940ce3cbb86a899ad1f6d24495724af71b0a7aea6364ab0e46d0f6cde
|
data/README.md
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
|
5
5
|
Mit `schild` kann man eigenen Skripte schreiben und komfortabel auf die Datenbank zugreifen. Lediglich ein paar Kenntnisse in der Programmiersprache Ruby werden erwartet. Mit Hilfe der [Prawn-Bibliothek](http://prawnpdf.org/) lassen sich sehr schöne und v.a. genau beschriebene PDF-Dokumente erstellen, die ganz ohne grafische Oberfläche auskommen und vollständig programmiert werden.
|
6
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).
|
8
|
+
|
7
9
|
Um `schild` nutzen zu können muss es zuerst installiert werden:
|
8
10
|
|
9
11
|
```sh
|
@@ -93,6 +95,22 @@ Alle zur Verfügung stehenden Hilfsmethoden werden in den API-Docs erläutert.
|
|
93
95
|
|
94
96
|
Ziel von `schild` ist es, möglichst viele Daten aus der Datenbank komfortabel zur Verfügung zu stellen.
|
95
97
|
|
98
|
+
## Erweiterte Funktionalität
|
99
|
+
Der Formulardesigner in Schild ignoriert fehlende Felder. Das kann `schild` auch. Anstelle der in der Datenbank verwendenten Tabellenspalten, die mit Großbuchstaben geschrieben werden, bietet `schild` die Möglichkeit Kleinbuchstaben zu verwenden:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
s = Schueler.first
|
103
|
+
=> #<Schild::Schueler @values={:ID=>1, ........}>
|
104
|
+
|
105
|
+
s.Bemerkungen
|
106
|
+
=> nil
|
107
|
+
|
108
|
+
s.bemerkungen
|
109
|
+
=> ""
|
110
|
+
```
|
111
|
+
|
112
|
+
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.
|
113
|
+
|
96
114
|
## Das sollte beachtet werden
|
97
115
|
`schild` läuft nur unter Ruby. Es ist wahrscheinlich möglich auch über JRuby andere Sprachen zu verwenden, die auf der JVM laufen. Also Java zum Beispiel. Gleiches gilt für Python. Leider nicht getestet.
|
98
116
|
|
data/lib/schild/version.rb
CHANGED
data/lib/schild.rb
CHANGED
@@ -1,9 +1,48 @@
|
|
1
|
-
require
|
1
|
+
require 'schild/version'
|
2
2
|
require 'sequel'
|
3
3
|
|
4
|
+
# String und Symbol werden um snake_case ergänzt, das die Schild-Tabellen umbenennt
|
5
|
+
module CoreExtensions
|
6
|
+
module String
|
7
|
+
def snake_case
|
8
|
+
return downcase if match(/\A[A-Z]+\z/)
|
9
|
+
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
10
|
+
gsub(/([a-z])([A-Z])/, '\1_\2').
|
11
|
+
downcase
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Symbol
|
16
|
+
def snake_case
|
17
|
+
to_s.snake_case
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Schild hat teilweise nil in DB-Feldern. SchildTypeSaver gibt entweder einen
|
23
|
+
# "Fehlt"-String zurück oder bei strftime das 1899 Datum zurück.
|
24
|
+
module SchildTypeSaver
|
25
|
+
Symbol.include CoreExtensions::Symbol
|
26
|
+
String.include CoreExtensions::String
|
27
|
+
|
28
|
+
# bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode
|
29
|
+
# erstellt, die bei nil ein Null-Objekt erstellt.
|
30
|
+
def self.included(klass)
|
31
|
+
klass.columns.each do |column|
|
32
|
+
name = column.snake_case
|
33
|
+
define_method(name) { public_send(column) || Null.new("")}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Null < String
|
38
|
+
def strftime(args)
|
39
|
+
Time.new("1899").strftime(args)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
4
44
|
# Das Schild Modul, das alle Klassen für die Datenbankanbindung bereitstellt
|
5
45
|
module Schild
|
6
|
-
|
7
46
|
# ist die Datenbank-Verbindung. Alle Daten können über diese Konstante abgerufen werden
|
8
47
|
DB = Sequel.connect(:adapter=>ENV['S_ADAPTER'], :host=>ENV['S_HOST'], :user=>ENV['S_USER'], :password=>ENV['S_PASSWORD'], :database=>ENV['S_DB'])
|
9
48
|
|
@@ -14,6 +53,8 @@ module Schild
|
|
14
53
|
|
15
54
|
# Stellt die Schüler-Tabelle samt Assoziationen bereit.
|
16
55
|
class Schueler < Sequel::Model(:schueler)
|
56
|
+
include SchildTypeSaver
|
57
|
+
|
17
58
|
many_to_one :fachklasse, :class => :Fachklasse, :key => :Fachklasse_ID
|
18
59
|
one_to_many :abschnitte, :class => :Abschnitt
|
19
60
|
|
@@ -60,16 +101,22 @@ module Schild
|
|
60
101
|
|
61
102
|
# Dient als Assoziation für Schüler und deren Klassenbezeichnung etc.
|
62
103
|
class Fachklasse < Sequel::Model(:eigeneschule_fachklassen)
|
104
|
+
include SchildTypeSaver
|
105
|
+
|
63
106
|
one_to_one :schueler
|
64
107
|
end
|
65
108
|
|
66
109
|
# Assoziation für Lehrer, hauptsächlich für Klassenlehrer
|
67
110
|
class Klassenlehrer < Sequel::Model(:k_lehrer)
|
111
|
+
include SchildTypeSaver
|
112
|
+
|
68
113
|
one_to_one :abschnitt, :primary_key=>:Kuerzel, :key=>:KlassenLehrer
|
69
114
|
end
|
70
115
|
|
71
116
|
# Ist die Assoziation, die Halbjahre, sog. Abschnitte zurückgibt.
|
72
117
|
class Abschnitt < Sequel::Model(:schuelerlernabschnittsdaten)
|
118
|
+
include SchildTypeSaver
|
119
|
+
|
73
120
|
many_to_one :schueler, :class => :Schueler, :key => :Schueler_ID
|
74
121
|
one_to_many :noten, :class => :Noten
|
75
122
|
many_to_one :klassenlehrer, :class => :Klassenlehrer, :primary_key=>:Kuerzel, :key=>:KlassenLehrer
|
@@ -137,6 +184,8 @@ module Schild
|
|
137
184
|
|
138
185
|
# Assoziation für Noten
|
139
186
|
class Noten < Sequel::Model(:schuelerleistungsdaten)
|
187
|
+
include SchildTypeSaver
|
188
|
+
|
140
189
|
many_to_one :abschnitt, :class => :Abschnitt, :key => :Abschnitt_ID
|
141
190
|
many_to_one :fach, :class => :Faecher, :key => :Fach_ID
|
142
191
|
|
@@ -175,11 +224,15 @@ module Schild
|
|
175
224
|
|
176
225
|
# Assoziation für Fächer
|
177
226
|
class Faecher < Sequel::Model(:eigeneschule_faecher)
|
227
|
+
include SchildTypeSaver
|
228
|
+
|
178
229
|
one_to_one :noten
|
179
230
|
end
|
180
231
|
|
181
232
|
# Schul-Tabelle mit vereinfachtem Zugriff auf Datenfelder.
|
182
233
|
class Schule < Sequel::Model(:eigeneschule)
|
234
|
+
include SchildTypeSaver
|
235
|
+
|
183
236
|
# gibt die Schulnummer zurück
|
184
237
|
def self.schulnummer
|
185
238
|
self.first.SchulNr
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/spec_helper"
|
2
|
+
|
3
|
+
describe Schueler do
|
4
|
+
describe 'typen sicherheit von objekten' do
|
5
|
+
before do
|
6
|
+
# lade einen Standardschueler
|
7
|
+
@sm = Schueler.where(:Status => 2, :Geloescht => "-", :Gesperrt => "-").first
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'gibt nil zurück, wenn leer' do
|
11
|
+
@sm.Bemerkungen.must_equal nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'gibt leeren String zurück, wenn leer und typensicher' do
|
15
|
+
@sm.bemerkungen.must_equal ""
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'gibt Fehler zurück, wenn Methode nicht existiert' do
|
19
|
+
proc {@sm.bemerrrrrrrrrkungen}.must_raise NoMethodError
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'gibt 1899 als Datum zurück, wenn strftime aufgerufen wird' do
|
23
|
+
@sm.geburtsdatum.strftime("%Y").must_equal "1899"
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'gibt nil zurück, wenn Geburtsdatum leer ist' do
|
27
|
+
@sm.Geburtsdatum.must_equal nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
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
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HMT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- specs/schueler_spec.rb
|
128
128
|
- specs/schule_spec.rb
|
129
129
|
- specs/spec_helper.rb
|
130
|
+
- specs/type_safe_spec.rb
|
130
131
|
homepage: https://github.com/hmt/schild
|
131
132
|
licenses:
|
132
133
|
- Creative Commons Namensnennung 4.0 International Lizenz.
|