Przeglądaj źródła

allow_nil als Argument für column-Funktionen

hmt 9 lat temu
rodzic
commit
8d3b35d4ef
4 zmienionych plików z 29 dodań i 5 usunięć
  1. 9 2
      lib/schild.rb
  2. 1 1
      lib/schild/version.rb
  3. 3 2
      schild.gemspec
  4. 16 0
      specs/type_safe_spec.rb

+ 9 - 2
lib/schild.rb

@@ -35,9 +35,16 @@ module SchildTypeSaver
   # bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode
   # erstellt, die bei nil ein Null-Objekt erstellt.
   def self.included(klass)
-    klass.columns.each do  |column|
+    klass.columns.each do |column|
       name = column.snake_case
-      define_method(name) { public_send(column) || create_null_object(klass, column)}
+      define_method(name) do |allow_nil=false|
+        ret = public_send(column)
+        if allow_nil || ret
+          ret
+        else
+         create_null_object(klass, column)
+        end
+      end
     end
   end
 

+ 1 - 1
lib/schild/version.rb

@@ -1,3 +1,3 @@
 module Schild
-  VERSION = "0.5.0"
+  VERSION = "0.6.0"
 end

+ 3 - 2
schild.gemspec

@@ -19,10 +19,11 @@ Gem::Specification.new do |spec|
   spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
   spec.require_paths = ["lib"]
 
-  spec.add_development_dependency "bundler", "~> 1.7"
-  spec.add_development_dependency "rake", "~> 10.0"
+  spec.add_development_dependency "bundler", "~> 1"
+  spec.add_development_dependency "rake", "~> 10"
   spec.add_development_dependency "minitest", "~> 5"
   spec.add_development_dependency "minitest-rg", "~> 5"
+  spec.add_development_dependency "mysql2", "~> 0.4"
 
   spec.add_runtime_dependency "sequel", "~> 4"
   spec.add_runtime_dependency "envyable", "~> 0"

+ 16 - 0
specs/type_safe_spec.rb

@@ -47,5 +47,21 @@ describe Schueler do
       @sm.Geburtsdatum.must_equal nil
     end
   end
+
+  describe 'allow_nil entweder true oder false' do
+    before do
+      # lade einen Standardschueler
+      @sm = Schueler.where(:Status => 2, :Geloescht => "-", :Gesperrt => "-").first
+    end
+
+    it 'gibt leer zurück, wenn default' do
+      @sm.bemerkungen.must_equal ''
+    end
+
+    it 'gibt nil zurück, wenn leer und typensicher und true bei allow_nil' do
+      @sm.bemerkungen(true).must_equal nil
+      @sm.geburtsdatum(true).must_equal nil
+    end
+  end
 end