kredis 0.3.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of kredis might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +23 -27
- data/lib/install/install.rb +6 -0
- data/lib/install/shared.yml +15 -0
- data/lib/kredis/attributes.rb +16 -12
- data/lib/kredis/connections.rb +2 -1
- data/lib/kredis/railtie.rb +9 -0
- data/lib/kredis/type/datetime.rb +15 -0
- data/lib/kredis/type/json.rb +19 -0
- data/lib/kredis/type_casting.rb +22 -34
- data/lib/kredis/types/callbacks_proxy.rb +1 -1
- data/lib/kredis/types/counter.rb +1 -1
- data/lib/kredis/types/enum.rb +3 -1
- data/lib/kredis/types/flag.rb +4 -2
- data/lib/kredis/types/hash.rb +4 -5
- data/lib/kredis/types/list.rb +4 -4
- data/lib/kredis/types/scalar.rb +2 -2
- data/lib/kredis/types/set.rb +4 -4
- data/lib/kredis/types/slots.rb +1 -1
- data/lib/kredis/types/unique_list.rb +2 -2
- data/lib/kredis/types.rb +2 -2
- data/lib/kredis/version.rb +1 -1
- data/lib/tasks/kredis/install.rake +6 -0
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1cd3c7afcd05236cdb9ed3980d0969077f594da2fe1ca0be383610be4a4b37c
|
4
|
+
data.tar.gz: 912cd1ed2ff7d0b05df1fcacb07e0272ba098b86645a0607a80aa69e65107223
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d7fa6004370d1d75c8b2567397ab88d65351af3d42d381cfc602d3db2a12eb10cdf0e42d190c802dea9d02fee112130cd6786ef60a125581924d82630191ebc
|
7
|
+
data.tar.gz: '07286763861b342cb8dd67c55f1df2e84d2496aa41a626bf23bd186ab7b8c698018cc7cb42bf65128cfb2a88eb22a9f73c84fa8a8a0516aaedb56d8c18624b19'
|
data/README.md
CHANGED
@@ -105,24 +105,24 @@ cycle.next # => GET mycycle + SET mycycle 0
|
|
105
105
|
:one == cycle.value # => GET mycycle
|
106
106
|
|
107
107
|
enum = Kredis.enum "myenum", values: %w[ one two three ], default: "one"
|
108
|
-
"one" == enum.value # => GET myenum
|
108
|
+
"one" == enum.value # => GET myenum
|
109
109
|
true == enum.one? # => GET myenum
|
110
110
|
enum.value = "two" # => SET myenum "two"
|
111
111
|
"two" == enum.value # => GET myenum
|
112
112
|
enum.value = "four"
|
113
113
|
"two" == enum.value # => GET myenum
|
114
114
|
enum.reset # => DEL myenum
|
115
|
-
"one" == enum.value # => GET myenum
|
115
|
+
"one" == enum.value # => GET myenum
|
116
116
|
|
117
117
|
slots = Kredis.slots "myslots", available: 3
|
118
118
|
true == slots.available? # => GET myslots
|
119
119
|
slots.reserve # => INCR myslots
|
120
120
|
true == slots.available? # => GET myslots
|
121
|
-
slots.reserve # => INCR myslots
|
121
|
+
slots.reserve # => INCR myslots
|
122
122
|
true == slots.available? # => GET myslots
|
123
123
|
slots.reserve # => INCR myslots
|
124
124
|
false == slots.available? # => GET myslots
|
125
|
-
slots.reserve # => INCR myslots + DECR myslots
|
125
|
+
slots.reserve # => INCR myslots + DECR myslots
|
126
126
|
false == slots.available? # => GET myslots
|
127
127
|
slots.release # => DECR myslots
|
128
128
|
true == slots.available? # => GET myslots
|
@@ -141,10 +141,11 @@ flag = Kredis.flag "myflag"
|
|
141
141
|
false == flag.marked? # => EXISTS myflag
|
142
142
|
flag.mark # => SET myflag 1
|
143
143
|
true == flag.marked? # => EXISTS myflag
|
144
|
-
flag.remove # => DEL myflag
|
144
|
+
flag.remove # => DEL myflag
|
145
145
|
false == flag.marked? # => EXISTS myflag
|
146
146
|
|
147
|
-
flag.mark(expires_in: 1.second)
|
147
|
+
true == flag.mark(expires_in: 1.second, force: false) #=> SET myflag 1 EX 1 NX
|
148
|
+
false == flag.mark(expires_in: 10.seconds, force: false) #=> SET myflag 10 EX 1 NX
|
148
149
|
true == flag.marked? #=> EXISTS myflag
|
149
150
|
sleep 0.5.seconds
|
150
151
|
true == flag.marked? #=> EXISTS myflag
|
@@ -174,9 +175,9 @@ end
|
|
174
175
|
|
175
176
|
person = Person.find(5)
|
176
177
|
person.names.append "David", "Heinemeier", "Hansson" # => RPUSH people:5:names "David" "Heinemeier" "Hansson"
|
177
|
-
true == person.morning.bright? # => GET people:
|
178
|
-
person.morning.value = "blue" # => SET people:
|
179
|
-
true == person.morning.blue? # => GET people:
|
178
|
+
true == person.morning.bright? # => GET people:5:morning
|
179
|
+
person.morning.value = "blue" # => SET people:5:morning
|
180
|
+
true == person.morning.blue? # => GET people:5:morning
|
180
181
|
```
|
181
182
|
|
182
183
|
You can also define `after_change` callbacks that trigger on mutations:
|
@@ -195,26 +196,11 @@ end
|
|
195
196
|
|
196
197
|
1. Add the `kredis` gem to your Gemfile: `gem 'kredis'`
|
197
198
|
2. Run `./bin/bundle install`
|
198
|
-
3.
|
199
|
-
|
200
|
-
A default configuration can look like this for `config/redis/shared.yml`:
|
201
|
-
|
202
|
-
```yaml
|
203
|
-
production: &production
|
204
|
-
host: <%= ENV.fetch("REDIS_SHARED_HOST", "127.0.0.1") %>
|
205
|
-
port: <%= ENV.fetch("REDIS_SHARED_PORT", "6379") %>
|
206
|
-
timeout: 1
|
199
|
+
3. Run `./bin/rails kredis:install` to add a default configuration at [`config/redis/shared.yml`](lib/install/shared.yml)
|
207
200
|
|
208
|
-
|
209
|
-
host: <%= ENV.fetch("REDIS_SHARED_HOST", "127.0.0.1") %>
|
210
|
-
port: <%= ENV.fetch("REDIS_SHARED_PORT", "6379") %>
|
211
|
-
timeout: 1
|
201
|
+
Additional configurations can be added under `config/redis/*.yml` and referenced when a type is created. For example, `Kredis.string("mystring", config: :strings)` would lookup `config/redis/strings.yml`.
|
212
202
|
|
213
|
-
|
214
|
-
<<: *development
|
215
|
-
```
|
216
|
-
|
217
|
-
Additional configurations can be added under `config/redis/*.yml` and referenced when a type is created, e.g. `Kredis.string("mystring", config: :strings)` would lookup `config/redis/strings.yml`. Under the hood `Kredis.configured_for` is called which'll pass the configuration on to `Redis.new`.
|
203
|
+
Kredis passes the configuration to `Redis.new` to establish the connection. See the [Redis documentation](https://github.com/redis/redis-rb) for other configuration options.
|
218
204
|
|
219
205
|
### Setting SSL options on Redis Connections
|
220
206
|
|
@@ -243,6 +229,16 @@ Kredis::Connections.connections[:shared] = Redis.new(
|
|
243
229
|
|
244
230
|
The above code could be added to either `config/environments/production.rb` or an initializer. Please ensure that your client private key, if used, is stored your credentials file or another secure location.
|
245
231
|
|
232
|
+
### Configure how the redis client is created
|
233
|
+
|
234
|
+
You can configure how the redis client is created by setting `config.connector` in your `application.rb`:
|
235
|
+
|
236
|
+
```ruby
|
237
|
+
config.kredis.connector = ->(config) { SomeRedisProxy.new(config) }
|
238
|
+
```
|
239
|
+
|
240
|
+
By default Kredis will use `Redis.new(config)`.
|
241
|
+
|
246
242
|
## License
|
247
243
|
|
248
244
|
Kredis is released under the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -0,0 +1,15 @@
|
|
1
|
+
production: &production
|
2
|
+
url: <%= ENV.fetch("REDIS_URL", "redis://127.0.0.1:6379/0") %>
|
3
|
+
timeout: 1
|
4
|
+
|
5
|
+
development: &development
|
6
|
+
url: <%= ENV.fetch("REDIS_URL", "redis://127.0.0.1:6379/0") %>
|
7
|
+
timeout: 1
|
8
|
+
|
9
|
+
# You can also specify host, port, and db instead of url
|
10
|
+
# host: <%= ENV.fetch("REDIS_SHARED_HOST", "127.0.0.1") %>
|
11
|
+
# port: <%= ENV.fetch("REDIS_SHARED_PORT", "6379") %>
|
12
|
+
# db: <%= ENV.fetch("REDIS_SHARED_DB", "11") %>
|
13
|
+
|
14
|
+
test:
|
15
|
+
<<: *development
|
data/lib/kredis/attributes.rb
CHANGED
@@ -6,36 +6,40 @@ module Kredis::Attributes
|
|
6
6
|
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
7
7
|
end
|
8
8
|
|
9
|
-
def kredis_string(name, key: nil, config: :shared, after_change: nil)
|
10
|
-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
9
|
+
def kredis_string(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
10
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
11
11
|
end
|
12
12
|
|
13
|
-
def kredis_integer(name, key: nil, config: :shared, after_change: nil)
|
14
|
-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
13
|
+
def kredis_integer(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
14
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
15
15
|
end
|
16
16
|
|
17
|
-
def kredis_decimal(name, key: nil, config: :shared, after_change: nil)
|
18
|
-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
17
|
+
def kredis_decimal(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
18
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
19
19
|
end
|
20
20
|
|
21
|
-
def kredis_datetime(name, key: nil, config: :shared, after_change: nil)
|
22
|
-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
21
|
+
def kredis_datetime(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
22
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
23
23
|
end
|
24
24
|
|
25
|
-
def kredis_flag(name, key: nil, config: :shared, after_change: nil)
|
26
|
-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
25
|
+
def kredis_flag(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
26
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
27
27
|
|
28
28
|
define_method("#{name}?") do
|
29
29
|
send(name).marked?
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
def kredis_float(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
34
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
35
|
+
end
|
36
|
+
|
33
37
|
def kredis_enum(name, key: nil, values:, default:, config: :shared, after_change: nil)
|
34
38
|
kredis_connection_with __method__, name, key, values: values, default: default, config: config, after_change: after_change
|
35
39
|
end
|
36
40
|
|
37
|
-
def kredis_json(name, key: nil, config: :shared, after_change: nil)
|
38
|
-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
|
41
|
+
def kredis_json(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
|
42
|
+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
|
39
43
|
end
|
40
44
|
|
41
45
|
def kredis_list(name, key: nil, typed: :string, config: :shared, after_change: nil)
|
data/lib/kredis/connections.rb
CHANGED
@@ -3,11 +3,12 @@ require "redis"
|
|
3
3
|
module Kredis::Connections
|
4
4
|
mattr_accessor :connections, default: Hash.new
|
5
5
|
mattr_accessor :configurator
|
6
|
+
mattr_accessor :connector, default: ->(config) { Redis.new(config) }
|
6
7
|
|
7
8
|
def configured_for(name)
|
8
9
|
connections[name] ||= begin
|
9
10
|
Kredis.instrument :meta, message: "Connected to #{name}" do
|
10
|
-
|
11
|
+
connector.call configurator.config_for("redis/#{name}")
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
data/lib/kredis/railtie.rb
CHANGED
@@ -12,6 +12,10 @@ class Kredis::Railtie < ::Rails::Railtie
|
|
12
12
|
Kredis::LogSubscriber.logger = config.kredis.logger || Rails.logger
|
13
13
|
end
|
14
14
|
|
15
|
+
initializer "kredis.configuration" do
|
16
|
+
Kredis::Connections.connector = config.kredis.connector || ->(config) { Redis.new(config) }
|
17
|
+
end
|
18
|
+
|
15
19
|
initializer "kredis.configurator" do
|
16
20
|
Kredis.configurator = Rails.application
|
17
21
|
end
|
@@ -26,4 +30,9 @@ class Kredis::Railtie < ::Rails::Railtie
|
|
26
30
|
include Kredis::Attributes
|
27
31
|
end
|
28
32
|
end
|
33
|
+
|
34
|
+
rake_tasks do
|
35
|
+
path = File.expand_path("..", __dir__)
|
36
|
+
Dir.glob("#{path}/tasks/**/*.rake").each { |f| load f }
|
37
|
+
end
|
29
38
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kredis
|
4
|
+
module Type
|
5
|
+
class Json < ActiveModel::Type::Value
|
6
|
+
def type
|
7
|
+
:json
|
8
|
+
end
|
9
|
+
|
10
|
+
def cast_value(value)
|
11
|
+
JSON.load(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def serialize(value)
|
15
|
+
JSON.dump(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/kredis/type_casting.rb
CHANGED
@@ -1,47 +1,35 @@
|
|
1
1
|
require "json"
|
2
|
+
require "active_model/type"
|
3
|
+
require "kredis/type/json"
|
4
|
+
require "kredis/type/datetime"
|
2
5
|
|
3
6
|
module Kredis::TypeCasting
|
4
7
|
class InvalidType < StandardError; end
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
when Time, DateTime, ActiveSupport::TimeWithZone
|
21
|
-
value.iso8601(9)
|
22
|
-
when Hash
|
23
|
-
JSON.dump(value)
|
24
|
-
else
|
25
|
-
value
|
26
|
-
end
|
9
|
+
TYPES = {
|
10
|
+
string: ActiveModel::Type::String.new,
|
11
|
+
integer: ActiveModel::Type::Integer.new,
|
12
|
+
decimal: ActiveModel::Type::Decimal.new,
|
13
|
+
float: ActiveModel::Type::Float.new,
|
14
|
+
boolean: ActiveModel::Type::Boolean.new,
|
15
|
+
datetime: Kredis::Type::DateTime.new,
|
16
|
+
json: Kredis::Type::Json.new
|
17
|
+
}
|
18
|
+
|
19
|
+
def type_to_string(value, type)
|
20
|
+
raise InvalidType if type && !TYPES.key?(type)
|
21
|
+
|
22
|
+
TYPES[type || :string].serialize(value)
|
27
23
|
end
|
28
24
|
|
29
25
|
def string_to_type(value, type)
|
30
|
-
raise InvalidType if type && !
|
31
|
-
|
32
|
-
|
33
|
-
when nil, :string then value
|
34
|
-
when :integer then value.to_i
|
35
|
-
when :decimal then value.to_d
|
36
|
-
when :float then value.to_f
|
37
|
-
when :boolean then value == "t" ? true : false
|
38
|
-
when :datetime then Time.iso8601(value)
|
39
|
-
when :json then JSON.load(value)
|
40
|
-
end if value.present?
|
26
|
+
raise InvalidType if type && !TYPES.key?(type)
|
27
|
+
|
28
|
+
TYPES[type || :string].cast(value)
|
41
29
|
end
|
42
30
|
|
43
|
-
def types_to_strings(values)
|
44
|
-
Array(values).flatten.map { |value| type_to_string(value) }
|
31
|
+
def types_to_strings(values, type)
|
32
|
+
Array(values).flatten.map { |value| type_to_string(value, type) }
|
45
33
|
end
|
46
34
|
|
47
35
|
def strings_to_types(values, type)
|
@@ -7,7 +7,7 @@ class Kredis::Types::CallbacksProxy
|
|
7
7
|
Kredis::Types::Cycle => %i[ next ],
|
8
8
|
Kredis::Types::Enum => %i[ value= reset ],
|
9
9
|
Kredis::Types::Flag => %i[ mark remove ],
|
10
|
-
Kredis::Types::Hash => %i[ update delete ],
|
10
|
+
Kredis::Types::Hash => %i[ update delete []= remove ],
|
11
11
|
Kredis::Types::List => %i[ remove prepend append << ],
|
12
12
|
Kredis::Types::Scalar => %i[ value= clear ],
|
13
13
|
Kredis::Types::Set => %i[ add << remove replace take clear ],
|
data/lib/kredis/types/counter.rb
CHANGED
data/lib/kredis/types/enum.rb
CHANGED
data/lib/kredis/types/flag.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
class Kredis::Types::Flag < Kredis::Types::Proxying
|
2
2
|
proxying :set, :exists?, :del
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
attr_accessor :expires_in
|
5
|
+
|
6
|
+
def mark(expires_in: nil, force: true)
|
7
|
+
set 1, ex: expires_in || self.expires_in, nx: !force
|
6
8
|
end
|
7
9
|
|
8
10
|
def marked?
|
data/lib/kredis/types/hash.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "active_support/core_ext/hash"
|
2
2
|
|
3
3
|
class Kredis::Types::Hash < Kredis::Types::Proxying
|
4
|
-
proxying :hget, :hset, :hmget, :hdel, :hgetall, :hkeys, :hvals, :del
|
4
|
+
proxying :hget, :hset, :hmget, :hdel, :hgetall, :hkeys, :hvals, :del, :exists?
|
5
5
|
|
6
6
|
attr_accessor :typed
|
7
7
|
|
@@ -13,9 +13,8 @@ class Kredis::Types::Hash < Kredis::Types::Proxying
|
|
13
13
|
update key => value
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
16
|
def update(**entries)
|
18
|
-
hset
|
17
|
+
hset entries.transform_values{ |val| type_to_string(val, typed) } if entries.flatten.any?
|
19
18
|
end
|
20
19
|
|
21
20
|
def values_at(*keys)
|
@@ -23,11 +22,11 @@ class Kredis::Types::Hash < Kredis::Types::Proxying
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def delete(*keys)
|
26
|
-
hdel
|
25
|
+
hdel keys if keys.flatten.any?
|
27
26
|
end
|
28
27
|
|
29
28
|
def remove
|
30
|
-
del
|
29
|
+
del
|
31
30
|
end
|
32
31
|
|
33
32
|
def entries
|
data/lib/kredis/types/list.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Kredis::Types::List < Kredis::Types::Proxying
|
2
|
-
proxying :lrange, :lrem, :lpush, :rpush
|
2
|
+
proxying :lrange, :lrem, :lpush, :rpush, :exists?
|
3
3
|
|
4
4
|
attr_accessor :typed
|
5
5
|
|
@@ -9,15 +9,15 @@ class Kredis::Types::List < Kredis::Types::Proxying
|
|
9
9
|
alias to_a elements
|
10
10
|
|
11
11
|
def remove(*elements)
|
12
|
-
types_to_strings(elements).each { |element| lrem 0, element }
|
12
|
+
types_to_strings(elements, typed).each { |element| lrem 0, element }
|
13
13
|
end
|
14
14
|
|
15
15
|
def prepend(*elements)
|
16
|
-
lpush types_to_strings(elements) if elements.flatten.any?
|
16
|
+
lpush types_to_strings(elements, typed) if elements.flatten.any?
|
17
17
|
end
|
18
18
|
|
19
19
|
def append(*elements)
|
20
|
-
rpush types_to_strings(elements) if elements.flatten.any?
|
20
|
+
rpush types_to_strings(elements, typed) if elements.flatten.any?
|
21
21
|
end
|
22
22
|
alias << append
|
23
23
|
end
|
data/lib/kredis/types/scalar.rb
CHANGED
@@ -4,12 +4,12 @@ class Kredis::Types::Scalar < Kredis::Types::Proxying
|
|
4
4
|
attr_accessor :typed, :default, :expires_in
|
5
5
|
|
6
6
|
def value=(value)
|
7
|
-
set type_to_string(value), ex: expires_in
|
7
|
+
set type_to_string(value, typed), ex: expires_in
|
8
8
|
end
|
9
9
|
|
10
10
|
def value
|
11
11
|
value_after_casting = string_to_type(get, typed)
|
12
|
-
|
12
|
+
|
13
13
|
if value_after_casting.nil?
|
14
14
|
default
|
15
15
|
else
|
data/lib/kredis/types/set.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Kredis::Types::Set < Kredis::Types::Proxying
|
2
|
-
proxying :smembers, :sadd, :srem, :multi, :del, :sismember, :scard, :spop
|
2
|
+
proxying :smembers, :sadd, :srem, :multi, :del, :sismember, :scard, :spop, :exists?
|
3
3
|
|
4
4
|
attr_accessor :typed
|
5
5
|
|
@@ -9,12 +9,12 @@ class Kredis::Types::Set < Kredis::Types::Proxying
|
|
9
9
|
alias to_a members
|
10
10
|
|
11
11
|
def add(*members)
|
12
|
-
sadd types_to_strings(members) if members.flatten.any?
|
12
|
+
sadd types_to_strings(members, typed) if members.flatten.any?
|
13
13
|
end
|
14
14
|
alias << add
|
15
15
|
|
16
16
|
def remove(*members)
|
17
|
-
srem types_to_strings(members) if members.flatten.any?
|
17
|
+
srem types_to_strings(members, typed) if members.flatten.any?
|
18
18
|
end
|
19
19
|
|
20
20
|
def replace(*members)
|
@@ -25,7 +25,7 @@ class Kredis::Types::Set < Kredis::Types::Proxying
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def include?(member)
|
28
|
-
sismember type_to_string(member)
|
28
|
+
sismember type_to_string(member, typed)
|
29
29
|
end
|
30
30
|
|
31
31
|
def size
|
data/lib/kredis/types/slots.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# You'd normally call this a set, but Redis already has another data type for that
|
2
2
|
class Kredis::Types::UniqueList < Kredis::Types::List
|
3
|
-
proxying :multi, :ltrim
|
3
|
+
proxying :multi, :ltrim, :exists?
|
4
4
|
|
5
5
|
attr_accessor :typed, :limit
|
6
6
|
|
@@ -16,7 +16,7 @@ class Kredis::Types::UniqueList < Kredis::Types::List
|
|
16
16
|
multi do
|
17
17
|
remove elements
|
18
18
|
super
|
19
|
-
ltrim
|
19
|
+
ltrim -limit, -1 if limit
|
20
20
|
end if Array(elements).flatten.any?
|
21
21
|
end
|
22
22
|
alias << append
|
data/lib/kredis/types.rb
CHANGED
@@ -47,8 +47,8 @@ module Kredis::Types
|
|
47
47
|
type_from(Cycle, config, key, after_change: after_change, values: values, expires_in: expires_in)
|
48
48
|
end
|
49
49
|
|
50
|
-
def flag(key, config: :shared, after_change: nil)
|
51
|
-
type_from(Flag, config, key, after_change: after_change)
|
50
|
+
def flag(key, config: :shared, after_change: nil, expires_in: nil)
|
51
|
+
type_from(Flag, config, key, after_change: after_change, expires_in: expires_in)
|
52
52
|
end
|
53
53
|
|
54
54
|
def enum(key, values:, default:, config: :shared, after_change: nil)
|
data/lib/kredis/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kredis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Timm Hansen
|
8
8
|
- David Heinemeier Hansson
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 6.0.0
|
56
|
-
description:
|
56
|
+
description:
|
57
57
|
email: david@hey.com
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
@@ -61,6 +61,8 @@ extra_rdoc_files: []
|
|
61
61
|
files:
|
62
62
|
- MIT-LICENSE
|
63
63
|
- README.md
|
64
|
+
- lib/install/install.rb
|
65
|
+
- lib/install/shared.yml
|
64
66
|
- lib/kredis.rb
|
65
67
|
- lib/kredis/attributes.rb
|
66
68
|
- lib/kredis/connections.rb
|
@@ -68,6 +70,8 @@ files:
|
|
68
70
|
- lib/kredis/migration.rb
|
69
71
|
- lib/kredis/namespace.rb
|
70
72
|
- lib/kredis/railtie.rb
|
73
|
+
- lib/kredis/type/datetime.rb
|
74
|
+
- lib/kredis/type/json.rb
|
71
75
|
- lib/kredis/type_casting.rb
|
72
76
|
- lib/kredis/types.rb
|
73
77
|
- lib/kredis/types/callbacks_proxy.rb
|
@@ -85,11 +89,12 @@ files:
|
|
85
89
|
- lib/kredis/types/slots.rb
|
86
90
|
- lib/kredis/types/unique_list.rb
|
87
91
|
- lib/kredis/version.rb
|
92
|
+
- lib/tasks/kredis/install.rake
|
88
93
|
homepage: https://github.com/rails/kredis
|
89
94
|
licenses:
|
90
95
|
- MIT
|
91
96
|
metadata: {}
|
92
|
-
post_install_message:
|
97
|
+
post_install_message:
|
93
98
|
rdoc_options: []
|
94
99
|
require_paths:
|
95
100
|
- lib
|
@@ -104,8 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
109
|
- !ruby/object:Gem::Version
|
105
110
|
version: '0'
|
106
111
|
requirements: []
|
107
|
-
rubygems_version: 3.
|
108
|
-
signing_key:
|
112
|
+
rubygems_version: 3.2.30
|
113
|
+
signing_key:
|
109
114
|
specification_version: 4
|
110
115
|
summary: Higher-level data structures built on Redis.
|
111
116
|
test_files: []
|