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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 678d0983bf3cb50abb7732dc3c3e4da93764173dbdf03ce367254dbdb9297ef2
4
- data.tar.gz: 7209773f020b0d1055171f30f6ff204786f3edf84e5938cd09f55789fd86e934
3
+ metadata.gz: c1cd3c7afcd05236cdb9ed3980d0969077f594da2fe1ca0be383610be4a4b37c
4
+ data.tar.gz: 912cd1ed2ff7d0b05df1fcacb07e0272ba098b86645a0607a80aa69e65107223
5
5
  SHA512:
6
- metadata.gz: 2aa0b22042910eaa558f1bf8e5fed47aa7385d16ba46f63024f9311760a4f2ee74c42dadb3f333388755d1862a04999ca83cc016bf023a3e1a48491f089c7e03
7
- data.tar.gz: ff37e6f461fc3117fd7d02116da43931550683581c6327a176f58d3f09ba06b2da538cd27976f01d7922a7ce7bf9768a8c03445b25e3dc62e635f3ac953093e0
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) #=> SET myflag 1 EX 1
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:1:morning
178
- person.morning.value = "blue" # => SET people:1:morning
179
- true == person.morning.blue? # => GET people:1:morning
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. Add a default configuration under `config/redis/shared.yml`
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
- development: &development
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
- test:
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,6 @@
1
+ yaml_path = Rails.root.join("config/redis/shared.yml")
2
+ unless yaml_path.exist?
3
+ say "Adding `config/redis/shared.yml`"
4
+ empty_directory yaml_path.parent.to_s
5
+ copy_file "#{__dir__}/shared.yml", yaml_path
6
+ end
@@ -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
@@ -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)
@@ -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
- Redis.new configurator.config_for("redis/#{name}")
11
+ connector.call configurator.config_for("redis/#{name}")
11
12
  end
12
13
  end
13
14
  end
@@ -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,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kredis
4
+ module Type
5
+ class DateTime < ActiveModel::Type::DateTime
6
+ def serialize(value)
7
+ super&.iso8601(9)
8
+ end
9
+
10
+ def cast_value(value)
11
+ super&.to_datetime
12
+ end
13
+ end
14
+ end
15
+ 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
@@ -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
- VALID_TYPES = %i[ string integer decimal float boolean datetime json ]
7
-
8
- def type_to_string(value)
9
- case value
10
- when nil
11
- ""
12
- when Integer
13
- value.to_s
14
- when BigDecimal
15
- value.to_d
16
- when Float
17
- value.to_s
18
- when TrueClass, FalseClass
19
- value ? "t" : "f"
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 && !VALID_TYPES.include?(type)
31
-
32
- case type
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 ],
@@ -1,5 +1,5 @@
1
1
  class Kredis::Types::Counter < Kredis::Types::Proxying
2
- proxying :multi, :set, :incrby, :decrby, :get, :del
2
+ proxying :multi, :set, :incrby, :decrby, :get, :del, :exists?
3
3
 
4
4
  attr_accessor :expires_in
5
5
 
@@ -1,5 +1,7 @@
1
+ require "active_support/core_ext/object/inclusion"
2
+
1
3
  class Kredis::Types::Enum < Kredis::Types::Proxying
2
- proxying :set, :get, :del
4
+ proxying :set, :get, :del, :exists?
3
5
 
4
6
  attr_accessor :values, :default
5
7
 
@@ -1,8 +1,10 @@
1
1
  class Kredis::Types::Flag < Kredis::Types::Proxying
2
2
  proxying :set, :exists?, :del
3
3
 
4
- def mark(expires_in: nil)
5
- set 1, ex: expires_in
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?
@@ -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 types_to_strings(entries) if entries.flatten.any?
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 types_to_strings(keys) if keys.flatten.any?
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
@@ -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
@@ -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
@@ -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
@@ -1,7 +1,7 @@
1
1
  class Kredis::Types::Slots < Kredis::Types::Proxying
2
2
  class NotAvailable < StandardError; end
3
3
 
4
- proxying :incr, :decr, :get, :del
4
+ proxying :incr, :decr, :get, :del, :exists?
5
5
 
6
6
  attr_accessor :available
7
7
 
@@ -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 (limit - 1), -1 if limit
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)
@@ -1,3 +1,3 @@
1
1
  module Kredis
2
- VERSION = "0.3.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -0,0 +1,6 @@
1
+ namespace :kredis do
2
+ desc "Install kredis"
3
+ task :install do
4
+ system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../../install/install.rb", __dir__)}"
5
+ end
6
+ end
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.3.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-09-04 00:00:00.000000000 Z
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.1.4
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: []