Skip to content

Commit 916f6ef

Browse files
Merge pull request #123 from basecamp/more-efficient-boolean-casting
Make Boolean storage more efficient
2 parents 3ffa935 + a686d2d commit 916f6ef

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

lib/kredis/type/boolean.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# frozen_string_literal: true
2+
3+
module Kredis
4+
module Type
5+
class Boolean < ActiveModel::Type::Boolean
6+
def serialize(value)
7+
super ? 1 : 0
8+
end
9+
end
10+
end
11+
end

lib/kredis/type_casting.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
require "json"
44
require "active_model/type"
5-
require "kredis/type/json"
5+
require "kredis/type/boolean"
66
require "kredis/type/datetime"
7+
require "kredis/type/json"
78

89
module Kredis::TypeCasting
910
class InvalidType < StandardError; end
@@ -13,7 +14,7 @@ class InvalidType < StandardError; end
1314
integer: ActiveModel::Type::Integer.new,
1415
decimal: ActiveModel::Type::Decimal.new,
1516
float: ActiveModel::Type::Float.new,
16-
boolean: ActiveModel::Type::Boolean.new,
17+
boolean: Kredis::Type::Boolean.new,
1718
datetime: Kredis::Type::DateTime.new,
1819
json: Kredis::Type::Json.new
1920
}

test/types/flag_test.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require "test_helper"
4+
require "active_support/core_ext/integer"
45

56
class FlagTest < ActiveSupport::TestCase
67
setup { @flag = Kredis.flag "myflag" }

test/types/scalar_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,22 @@ class ScalarTest < ActiveSupport::TestCase
4040
assert_equal false, boolean.value
4141
end
4242

43+
test "boolean casting" do
44+
boolean = Kredis.boolean "myscalar"
45+
46+
boolean.value = true
47+
assert_equal "1", boolean.get
48+
49+
boolean.value = false
50+
assert_equal "0", boolean.get
51+
52+
boolean.set "true"
53+
assert_equal true, boolean.value
54+
55+
boolean.set "false"
56+
assert_equal false, boolean.value
57+
end
58+
4359
test "datetime" do
4460
datetime = Kredis.datetime "myscalar"
4561
datetime.value = 5.days.from_now.midnight

0 commit comments

Comments
 (0)