[Groonga-commit] ranguba/groonga-client-model at de99d5d [master] Support i18n for key type validation message

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Feb 6 12:45:12 JST 2017


Kouhei Sutou	2017-02-06 12:45:12 +0900 (Mon, 06 Feb 2017)

  New Revision: de99d5dc3fd35f58e1ccbc5303c17a1dd60aa595
  https://github.com/ranguba/groonga-client-model/commit/de99d5dc3fd35f58e1ccbc5303c17a1dd60aa595

  Message:
    Support i18n for key type validation message

  Added files:
    lib/groonga_client_model/locale/en.yml
  Modified files:
    lib/groonga-client-model.rb
    lib/groonga_client_model/record.rb
    lib/groonga_client_model/validations/type_validator.rb
    test/unit/test_record.rb

  Modified: lib/groonga-client-model.rb (+4 -0)
===================================================================
--- lib/groonga-client-model.rb    2017-02-03 21:46:53 +0900 (4e88b73)
+++ lib/groonga-client-model.rb    2017-02-06 12:45:12 +0900 (b2ae844)
@@ -44,3 +44,7 @@ ActiveSupport.run_load_hooks(:groonga_client_model, GroongaClientModel)
 if defined?(Rails)
   require "groonga_client_model/railtie"
 end
+
+ActiveSupport.on_load(:i18n) do
+  I18n.load_path << "#{__dir__}/groonga_client_model/locale/en.yml"
+end

  Added: lib/groonga_client_model/locale/en.yml (+7 -0) 100644
===================================================================
--- /dev/null
+++ lib/groonga_client_model/locale/en.yml    2017-02-06 12:45:12 +0900 (fdf65fe)
@@ -0,0 +1,7 @@
+en:
+  errors:
+    messages:
+      uint:
+        "must be positive integer: %{inspected_value}"
+      uint32:
+        "must be less than 2 ** 32: %{inspected_value}"

  Modified: lib/groonga_client_model/record.rb (+5 -2)
===================================================================
--- lib/groonga_client_model/record.rb    2017-02-03 21:46:53 +0900 (7229beb)
+++ lib/groonga_client_model/record.rb    2017-02-06 12:45:12 +0900 (5563c42)
@@ -138,10 +138,13 @@ module GroongaClientModel
 
     attr_reader :attributes
 
-    validates :_key,
+    validates(:_key,
               presence: true,
+              if: ->(record) {record.class.have_key?})
+    validates(:_key,
               "groonga_client_model/validations/type": true,
-              if: ->(record) {record.class.have_key?}
+              if: ->(record) {record.class.have_key?},
+              allow_blank: true)
 
     def initialize(attributes=nil)
       @attributes = {}

  Modified: lib/groonga_client_model/validations/type_validator.rb (+19 -7)
===================================================================
--- lib/groonga_client_model/validations/type_validator.rb    2017-02-03 21:46:53 +0900 (93a86b4)
+++ lib/groonga_client_model/validations/type_validator.rb    2017-02-06 12:45:12 +0900 (30d7289)
@@ -30,7 +30,7 @@ module GroongaClientModel
       end
 
       private
-      def validate_uint32(record, attribute, value)
+      def validate_uint(record, attribute, value, n_bits)
         if value.is_a?(String)
           begin
             value = Integer(value)
@@ -40,16 +40,28 @@ module GroongaClientModel
 
         case value
         when Numeric
-          return if value >= 0
-          record.errors.add(attribute,
-                            "must be positive integer: #{value.inspect}",
-                            options)
+          if value < 0
+            record.errors.add(attribute,
+                              :uint,
+                              options.merge(inspected_value: value.inspect))
+            return
+          end
+          if value > ((2 ** n_bits) - 1)
+            record.errors.add(attribute,
+                              :"uint#{n_bits}",
+                              options.merge(inspected_value: value.inspect))
+            return
+          end
         else
           record.errors.add(attribute,
-                            "must be positive integer: #{value.inspect}",
-                            options)
+                            :uint,
+                            options.merge(inspected_value: value.inspect))
         end
       end
+
+      def validate_uint32(record, attribute, value)
+        validate_uint(record, attribute, value, 32)
+      end
     end
   end
 end

  Modified: test/unit/test_record.rb (+92 -16)
===================================================================
--- test/unit/test_record.rb    2017-02-03 21:46:53 +0900 (eac8ea6)
+++ test/unit/test_record.rb    2017-02-06 12:45:12 +0900 (02d1b4f)
@@ -56,7 +56,7 @@ class TestRecord < Test::Unit::TestCase
   end
 
   sub_test_case("validations") do
-    sub_test_case("_key presence") do
+    sub_test_case("_key") do
       class NoKey < GroongaClientModel::Record
         class << self
           def columns
@@ -68,7 +68,7 @@ class TestRecord < Test::Unit::TestCase
         end
       end
 
-      class HaveKey < GroongaClientModel::Record
+      class Key < GroongaClientModel::Record
         class << self
           def columns
             raw_columns = {
@@ -76,7 +76,7 @@ class TestRecord < Test::Unit::TestCase
               "_key" => Column.new(nil, {
                                      "name" => "_key",
                                      "value_type" => {
-                                       "name" => "ShortText",
+                                       "name" => key_type,
                                      },
                                    }),
             }
@@ -85,23 +85,99 @@ class TestRecord < Test::Unit::TestCase
         end
       end
 
-      test "no key" do
-        record = NoKey.new
-        assert do
-          record.valid?
+      class ShortTextKey < Key
+        class << self
+          def key_type
+            "ShortText"
+          end
+        end
+      end
+
+      class UInt32Key < Key
+        class << self
+          def key_type
+            "UInt32"
+          end
         end
-        assert_equal({}, record.errors.messages)
       end
 
-      test "have key" do
-        record = HaveKey.new
-        assert do
-          not record.save
+      sub_test_case("presence") do
+        test "no key" do
+          record = NoKey.new
+          assert do
+            record.valid?
+          end
+          assert_equal({}, record.errors.messages)
+        end
+
+        test "missing key" do
+          record = ShortTextKey.new
+          assert do
+            not record.valid?
+          end
+          message = record.errors.generate_message(:_key, :blank)
+          assert_equal({
+                         :_key => [message],
+                       },
+                       record.errors.messages)
+        end
+
+        test "blank key" do
+          record = UInt32Key.new(_key: "")
+          assert do
+            not record.valid?
+          end
+          message = record.errors.generate_message(:_key, :blank)
+          assert_equal({
+                         :_key => [message],
+                       },
+                       record.errors.messages)
+        end
+
+        test "have key" do
+          record = ShortTextKey.new(_key: "String")
+          assert do
+            record.valid?
+          end
+          assert_equal({},
+                       record.errors.messages)
+        end
+      end
+
+      sub_test_case("type") do
+        sub_test_case("UInt32") do
+          test("invalid") do
+            key = "String"
+            record = UInt32Key.new(_key: key)
+            assert do
+              not record.valid?
+            end
+            options = {
+              inspected_value: key.inspect
+            }
+            message = record.errors.generate_message(:_key, :uint, options)
+            assert_equal({
+                           :_key => [message],
+                         },
+                         record.errors.messages)
+          end
+
+          test("too large") do
+            key = 2 ** 32
+            record = UInt32Key.new(_key: key)
+            assert do
+              not record.valid?
+            end
+            options = {
+              inspected_value: key.inspect
+            }
+            message = record.errors.generate_message(:_key, :uint32, options)
+            assert_equal({
+                           :_key => [message],
+                         },
+                         record.errors.messages)
+          end
         end
-        assert_equal({
-                       :_key => [record.errors.generate_message(:_key, :blank)],
-                     },
-                     record.errors.messages)
       end
     end
   end
-------------- next part --------------
HTML����������������������������...
Télécharger 



More information about the Groonga-commit mailing list
Back to archive index