mock_redis 0.5.4 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/lint.yml +31 -0
  3. data/.github/workflows/tests.yml +63 -0
  4. data/.gitignore +1 -1
  5. data/.overcommit.yml +21 -0
  6. data/.rspec +1 -1
  7. data/.rubocop.yml +148 -0
  8. data/.rubocop_todo.yml +35 -0
  9. data/.simplecov +4 -0
  10. data/CHANGELOG.md +278 -0
  11. data/Gemfile +9 -5
  12. data/LICENSE.md +21 -0
  13. data/README.md +52 -16
  14. data/Rakefile +0 -8
  15. data/lib/mock_redis/assertions.rb +0 -1
  16. data/lib/mock_redis/connection_method.rb +13 -0
  17. data/lib/mock_redis/database.rb +193 -257
  18. data/lib/mock_redis/expire_wrapper.rb +2 -2
  19. data/lib/mock_redis/future.rb +23 -0
  20. data/lib/mock_redis/geospatial_methods.rb +240 -0
  21. data/lib/mock_redis/hash_methods.rb +83 -24
  22. data/lib/mock_redis/indifferent_hash.rb +11 -0
  23. data/lib/mock_redis/info_method.rb +160 -0
  24. data/lib/mock_redis/list_methods.rb +34 -19
  25. data/lib/mock_redis/multi_db_wrapper.rb +8 -7
  26. data/lib/mock_redis/pipelined_wrapper.rb +42 -16
  27. data/lib/mock_redis/set_methods.rb +62 -19
  28. data/lib/mock_redis/sort_method.rb +81 -0
  29. data/lib/mock_redis/stream/id.rb +58 -0
  30. data/lib/mock_redis/stream.rb +88 -0
  31. data/lib/mock_redis/stream_methods.rb +102 -0
  32. data/lib/mock_redis/string_methods.rb +235 -42
  33. data/lib/mock_redis/transaction_wrapper.rb +62 -28
  34. data/lib/mock_redis/utility_methods.rb +62 -11
  35. data/lib/mock_redis/version.rb +4 -1
  36. data/lib/mock_redis/zset.rb +24 -29
  37. data/lib/mock_redis/zset_methods.rb +187 -59
  38. data/lib/mock_redis.rb +77 -27
  39. data/mock_redis.gemspec +23 -15
  40. data/spec/client_spec.rb +29 -0
  41. data/spec/cloning_spec.rb +17 -18
  42. data/spec/commands/append_spec.rb +4 -4
  43. data/spec/commands/auth_spec.rb +1 -1
  44. data/spec/commands/bgrewriteaof_spec.rb +2 -2
  45. data/spec/commands/bgsave_spec.rb +2 -2
  46. data/spec/commands/bitcount_spec.rb +25 -0
  47. data/spec/commands/bitfield_spec.rb +169 -0
  48. data/spec/commands/blpop_spec.rb +19 -21
  49. data/spec/commands/brpop_spec.rb +25 -20
  50. data/spec/commands/brpoplpush_spec.rb +16 -17
  51. data/spec/commands/connected_spec.rb +7 -0
  52. data/spec/commands/connection_spec.rb +15 -0
  53. data/spec/commands/dbsize_spec.rb +3 -3
  54. data/spec/commands/decr_spec.rb +8 -8
  55. data/spec/commands/decrby_spec.rb +8 -8
  56. data/spec/commands/del_spec.rb +35 -3
  57. data/spec/commands/disconnect_spec.rb +7 -0
  58. data/spec/commands/dump_spec.rb +19 -0
  59. data/spec/commands/echo_spec.rb +4 -4
  60. data/spec/commands/eval_spec.rb +7 -0
  61. data/spec/commands/evalsha_spec.rb +10 -0
  62. data/spec/commands/exists_spec.rb +36 -7
  63. data/spec/commands/expire_spec.rb +48 -20
  64. data/spec/commands/expireat_spec.rb +12 -13
  65. data/spec/commands/flushall_spec.rb +5 -5
  66. data/spec/commands/flushdb_spec.rb +5 -5
  67. data/spec/commands/future_spec.rb +30 -0
  68. data/spec/commands/geoadd_spec.rb +58 -0
  69. data/spec/commands/geodist_spec.rb +118 -0
  70. data/spec/commands/geohash_spec.rb +52 -0
  71. data/spec/commands/geopos_spec.rb +55 -0
  72. data/spec/commands/get_spec.rb +14 -6
  73. data/spec/commands/getbit_spec.rb +7 -7
  74. data/spec/commands/getrange_spec.rb +9 -9
  75. data/spec/commands/getset_spec.rb +7 -7
  76. data/spec/commands/hdel_spec.rb +41 -11
  77. data/spec/commands/hexists_spec.rb +11 -11
  78. data/spec/commands/hget_spec.rb +7 -7
  79. data/spec/commands/hgetall_spec.rb +15 -5
  80. data/spec/commands/hincrby_spec.rb +16 -16
  81. data/spec/commands/hincrbyfloat_spec.rb +58 -0
  82. data/spec/commands/hkeys_spec.rb +5 -5
  83. data/spec/commands/hlen_spec.rb +5 -5
  84. data/spec/commands/hmget_spec.rb +19 -9
  85. data/spec/commands/hmset_spec.rb +38 -12
  86. data/spec/commands/hscan_each_spec.rb +48 -0
  87. data/spec/commands/hscan_spec.rb +27 -0
  88. data/spec/commands/hset_spec.rb +26 -12
  89. data/spec/commands/hsetnx_spec.rb +16 -16
  90. data/spec/commands/hvals_spec.rb +5 -5
  91. data/spec/commands/incr_spec.rb +8 -8
  92. data/spec/commands/incrby_spec.rb +13 -13
  93. data/spec/commands/incrbyfloat_spec.rb +13 -13
  94. data/spec/commands/info_spec.rb +54 -5
  95. data/spec/commands/keys_spec.rb +83 -31
  96. data/spec/commands/lastsave_spec.rb +2 -2
  97. data/spec/commands/lindex_spec.rb +20 -10
  98. data/spec/commands/linsert_spec.rb +14 -14
  99. data/spec/commands/llen_spec.rb +4 -4
  100. data/spec/commands/lpop_spec.rb +6 -6
  101. data/spec/commands/lpush_spec.rb +21 -15
  102. data/spec/commands/lpushx_spec.rb +24 -11
  103. data/spec/commands/lrange_spec.rb +24 -8
  104. data/spec/commands/lrem_spec.rb +16 -16
  105. data/spec/commands/lset_spec.rb +17 -12
  106. data/spec/commands/ltrim_spec.rb +17 -7
  107. data/spec/commands/mapped_hmget_spec.rb +13 -9
  108. data/spec/commands/mapped_hmset_spec.rb +12 -12
  109. data/spec/commands/mapped_mget_spec.rb +22 -0
  110. data/spec/commands/mapped_mset_spec.rb +19 -0
  111. data/spec/commands/mapped_msetnx_spec.rb +26 -0
  112. data/spec/commands/mget_spec.rb +48 -17
  113. data/spec/commands/move_spec.rb +37 -37
  114. data/spec/commands/mset_spec.rb +20 -6
  115. data/spec/commands/msetnx_spec.rb +14 -14
  116. data/spec/commands/persist_spec.rb +15 -16
  117. data/spec/commands/pexpire_spec.rb +86 -0
  118. data/spec/commands/pexpireat_spec.rb +48 -0
  119. data/spec/commands/ping_spec.rb +6 -2
  120. data/spec/commands/pipelined_spec.rb +98 -7
  121. data/spec/commands/pttl_spec.rb +41 -0
  122. data/spec/commands/randomkey_spec.rb +3 -3
  123. data/spec/commands/rename_spec.rb +16 -12
  124. data/spec/commands/renamenx_spec.rb +13 -15
  125. data/spec/commands/restore_spec.rb +47 -0
  126. data/spec/commands/rpop_spec.rb +6 -6
  127. data/spec/commands/rpoplpush_spec.rb +13 -8
  128. data/spec/commands/rpush_spec.rb +21 -15
  129. data/spec/commands/rpushx_spec.rb +24 -11
  130. data/spec/commands/sadd_spec.rb +14 -10
  131. data/spec/commands/scan_each_spec.rb +39 -0
  132. data/spec/commands/scan_spec.rb +64 -0
  133. data/spec/commands/scard_spec.rb +3 -3
  134. data/spec/commands/script_spec.rb +9 -0
  135. data/spec/commands/sdiff_spec.rb +13 -13
  136. data/spec/commands/sdiffstore_spec.rb +13 -13
  137. data/spec/commands/select_spec.rb +13 -5
  138. data/spec/commands/set_spec.rb +112 -0
  139. data/spec/commands/setbit_spec.rb +25 -16
  140. data/spec/commands/setex_spec.rb +20 -4
  141. data/spec/commands/setnx_spec.rb +6 -6
  142. data/spec/commands/setrange_spec.rb +12 -12
  143. data/spec/commands/sinter_spec.rb +11 -13
  144. data/spec/commands/sinterstore_spec.rb +12 -12
  145. data/spec/commands/sismember_spec.rb +10 -10
  146. data/spec/commands/smembers_spec.rb +15 -5
  147. data/spec/commands/smove_spec.rb +13 -13
  148. data/spec/commands/sort_list_spec.rb +21 -0
  149. data/spec/commands/sort_set_spec.rb +21 -0
  150. data/spec/commands/sort_zset_spec.rb +21 -0
  151. data/spec/commands/spop_spec.rb +19 -4
  152. data/spec/commands/srandmember_spec.rb +28 -4
  153. data/spec/commands/srem_spec.rb +17 -12
  154. data/spec/commands/sscan_each_spec.rb +48 -0
  155. data/spec/commands/sscan_spec.rb +39 -0
  156. data/spec/commands/strlen_spec.rb +4 -5
  157. data/spec/commands/sunion_spec.rb +13 -11
  158. data/spec/commands/sunionstore_spec.rb +12 -12
  159. data/spec/commands/ttl_spec.rb +11 -6
  160. data/spec/commands/type_spec.rb +1 -1
  161. data/spec/commands/watch_spec.rb +9 -4
  162. data/spec/commands/xadd_spec.rb +122 -0
  163. data/spec/commands/xlen_spec.rb +22 -0
  164. data/spec/commands/xrange_spec.rb +164 -0
  165. data/spec/commands/xread_spec.rb +66 -0
  166. data/spec/commands/xrevrange_spec.rb +130 -0
  167. data/spec/commands/xtrim_spec.rb +36 -0
  168. data/spec/commands/zadd_spec.rb +100 -11
  169. data/spec/commands/zcard_spec.rb +4 -4
  170. data/spec/commands/zcount_spec.rb +18 -10
  171. data/spec/commands/zincrby_spec.rb +6 -6
  172. data/spec/commands/zinterstore_spec.rb +54 -20
  173. data/spec/commands/zpopmax_spec.rb +60 -0
  174. data/spec/commands/zpopmin_spec.rb +60 -0
  175. data/spec/commands/zrange_spec.rb +54 -13
  176. data/spec/commands/zrangebyscore_spec.rb +42 -27
  177. data/spec/commands/zrank_spec.rb +4 -4
  178. data/spec/commands/zrem_spec.rb +18 -12
  179. data/spec/commands/zremrangebyrank_spec.rb +5 -5
  180. data/spec/commands/zremrangebyscore_spec.rb +12 -5
  181. data/spec/commands/zrevrange_spec.rb +35 -10
  182. data/spec/commands/zrevrangebyscore_spec.rb +26 -15
  183. data/spec/commands/zrevrank_spec.rb +4 -4
  184. data/spec/commands/zscan_each_spec.rb +48 -0
  185. data/spec/commands/zscan_spec.rb +26 -0
  186. data/spec/commands/zscore_spec.rb +7 -7
  187. data/spec/commands/zunionstore_spec.rb +54 -21
  188. data/spec/mock_redis_spec.rb +61 -0
  189. data/spec/spec_helper.rb +35 -8
  190. data/spec/support/redis_multiplexer.rb +62 -37
  191. data/spec/support/shared_examples/does_not_cleanup_empty_strings.rb +14 -0
  192. data/spec/support/shared_examples/only_operates_on_hashes.rb +5 -3
  193. data/spec/support/shared_examples/only_operates_on_lists.rb +5 -3
  194. data/spec/support/shared_examples/only_operates_on_sets.rb +5 -3
  195. data/spec/support/shared_examples/only_operates_on_strings.rb +4 -4
  196. data/spec/support/shared_examples/only_operates_on_zsets.rb +18 -16
  197. data/spec/support/shared_examples/sorts_enumerables.rb +56 -0
  198. data/spec/transactions_spec.rb +79 -29
  199. metadata +162 -42
  200. data/LICENSE +0 -19
  201. data/spec/commands/hash_operator_spec.rb +0 -21
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2870385004370b0471f3cf495184d8e11f138e0cb13b9bef9bd43ed7ce2b35ff
4
+ data.tar.gz: 75475cf000d2075ad2565440aea2521fa1034248726b5070ff149d9518c00c3a
5
+ SHA512:
6
+ metadata.gz: 6e6f75b19c46fd81ef553dfe1af1f32b2dceb13e4b660835cd58b1760fa8445c09c2ef26bf67cf64adcf87e196de24798333350e0a07ca0fac39939e296659e4
7
+ data.tar.gz: 77c2c5fc3f67f654d402161541b1527c6779859a0ec6e61a5fb6048b7abfcab50728ba2c25617a2adf303b22a23e662a8f2ee7236085db02682e0e8ca690438a
@@ -0,0 +1,31 @@
1
+ name: Lint
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ overcommit:
10
+ timeout-minutes: 10
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1.97.0
18
+ with:
19
+ ruby-version: 2.7
20
+
21
+ - name: Install dependencies
22
+ run: bundle install
23
+
24
+ - name: Prepare environment
25
+ run: |
26
+ git config --local user.email "gh-actions@example.com"
27
+ git config --local user.name "GitHub Actions"
28
+ bundle exec overcommit --sign
29
+
30
+ - name: Run pre-commit checks
31
+ run: bundle exec overcommit --run
@@ -0,0 +1,63 @@
1
+ name: Tests
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ rspec:
10
+ timeout-minutes: 10
11
+ runs-on: ubuntu-latest
12
+
13
+ strategy:
14
+ matrix:
15
+ ruby-version:
16
+ - '2.6'
17
+ - '2.7'
18
+ - '3.0'
19
+ redis-version:
20
+ - '6.2'
21
+
22
+ services:
23
+ redis:
24
+ image: redis:${{ matrix.redis-version }}-alpine
25
+ options: >-
26
+ --health-cmd "redis-cli ping"
27
+ --health-interval 10s
28
+ --health-timeout 5s
29
+ --health-retries 5
30
+ ports:
31
+ - 6379:6379
32
+
33
+ steps:
34
+ - uses: actions/checkout@v2
35
+
36
+ - name: Set up Ruby ${{ matrix.ruby-version }}
37
+ uses: ruby/setup-ruby@v1.97.0
38
+ with:
39
+ ruby-version: ${{ matrix.ruby-version }}
40
+
41
+ - name: Install dependencies
42
+ run: bundle install
43
+
44
+ - name: Run tests
45
+ run: bundle exec rspec
46
+
47
+ - name: Code coverage reporting
48
+ uses: coverallsapp/github-action@master
49
+ with:
50
+ github-token: ${{ secrets.github_token }}
51
+ flag-name: ruby${{ matrix.ruby-version }}-${{ matrix.redis-version }}
52
+ parallel: true
53
+
54
+ finish:
55
+ needs: rspec
56
+ runs-on: ubuntu-latest
57
+
58
+ steps:
59
+ - name: Finalize code coverage report
60
+ uses: coverallsapp/github-action@master
61
+ with:
62
+ github-token: ${{ secrets.github_token }}
63
+ parallel-finished: true
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
+ coverage/
1
2
  pkg/*
2
- *.gem
3
3
  .bundle
4
4
  Gemfile.lock
5
5
  .rvmrc
data/.overcommit.yml ADDED
@@ -0,0 +1,21 @@
1
+ gemfile: Gemfile
2
+
3
+ PreCommit:
4
+ BundleCheck:
5
+ enabled: true
6
+
7
+ ExecutePermissions:
8
+ enabled: true
9
+
10
+ HardTabs:
11
+ enabled: true
12
+
13
+ RuboCop:
14
+ enabled: true
15
+ command: ['bundle', 'exec', 'rubocop']
16
+
17
+ TrailingWhitespace:
18
+ enabled: true
19
+
20
+ YamlSyntax:
21
+ enabled: true
data/.rspec CHANGED
@@ -1 +1 @@
1
- -c -d
1
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,148 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 2.4
5
+
6
+ Layout/ArgumentAlignment:
7
+ Enabled: false
8
+
9
+ Layout/ParameterAlignment:
10
+ Enabled: false
11
+
12
+ Layout/DotPosition:
13
+ Enabled: false
14
+
15
+ Layout/EmptyLineAfterGuardClause:
16
+ Enabled: false
17
+
18
+ Layout/LineLength:
19
+ Max: 100
20
+
21
+ Layout/SpaceAroundMethodCallOperator:
22
+ Enabled: true
23
+
24
+ Lint/AssignmentInCondition:
25
+ Enabled: false
26
+
27
+ Lint/RaiseException:
28
+ Enabled: true
29
+
30
+ Lint/StructNewOverride:
31
+ Enabled: true
32
+
33
+ # We use this a lot in specs where it's perfectly valid
34
+ Lint/Void:
35
+ Exclude:
36
+ - spec/**/*
37
+
38
+ Metrics/AbcSize:
39
+ Enabled: false
40
+
41
+ Metrics/BlockLength:
42
+ Enabled: false
43
+
44
+ Metrics/CyclomaticComplexity:
45
+ Enabled: false
46
+
47
+ Metrics/ClassLength:
48
+ Enabled: false
49
+
50
+ Metrics/MethodLength:
51
+ Enabled: false
52
+
53
+ Metrics/ModuleLength:
54
+ Enabled: false
55
+
56
+ Metrics/PerceivedComplexity:
57
+ Enabled: false
58
+
59
+ # This hides the has-a versus is-a relationship indicated by the method name
60
+ Naming/PredicateName:
61
+ Enabled: false
62
+
63
+ Style/Documentation:
64
+ Enabled: false
65
+
66
+ Style/DoubleNegation:
67
+ Enabled: false
68
+
69
+ Style/ExponentialNotation:
70
+ Enabled: true
71
+
72
+ Style/HashEachMethods:
73
+ Enabled: true
74
+
75
+ Style/HashTransformKeys:
76
+ Enabled: true
77
+
78
+ Style/HashTransformValues:
79
+ Enabled: true
80
+
81
+ # We have too much code that relies on modifying strings
82
+ Style/FrozenStringLiteralComment:
83
+ Enabled: false
84
+
85
+ Style/GuardClause:
86
+ Enabled: false
87
+
88
+ Style/HashSyntax:
89
+ Enabled: false
90
+
91
+ Style/IfUnlessModifier:
92
+ Enabled: false
93
+
94
+ Style/Lambda:
95
+ Enabled: false
96
+
97
+ # TODO: Address these at some point
98
+ Style/MethodMissingSuper:
99
+ Enabled: false
100
+
101
+ Style/MissingRespondToMissing:
102
+ Enabled: false
103
+
104
+ Style/MultilineBlockChain:
105
+ Enabled: false
106
+
107
+ Style/NumericPredicate:
108
+ Enabled: false
109
+
110
+ # Prefer curly braces except for %i/%w/%W, since those return arrays.
111
+ Style/PercentLiteralDelimiters:
112
+ PreferredDelimiters:
113
+ '%': '{}'
114
+ '%i': '[]'
115
+ '%q': '{}'
116
+ '%Q': '{}'
117
+ '%r': '{}'
118
+ '%s': '()'
119
+ '%w': '[]'
120
+ '%W': '[]'
121
+ '%x': '{}'
122
+
123
+ Style/PerlBackrefs:
124
+ Enabled: false
125
+
126
+ Style/RescueModifier:
127
+ Enabled: false
128
+
129
+ Style/SignalException:
130
+ Enabled: false
131
+
132
+ Style/SingleLineBlockParams:
133
+ Enabled: false
134
+
135
+ Style/SymbolArray:
136
+ Enabled: false
137
+
138
+ Style/TrailingCommaInArguments:
139
+ Enabled: false
140
+
141
+ Style/TrailingCommaInArrayLiteral:
142
+ Enabled: false
143
+
144
+ Style/TrailingCommaInHashLiteral:
145
+ Enabled: false
146
+
147
+ Style/WhenThen:
148
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,35 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-08-03 11:15:53 -0700 using RuboCop version 0.58.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 17
10
+ # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
11
+ # AllowedNames: io, id, to, by, on, in, at, ip
12
+ Naming/MethodParameterName:
13
+ Exclude:
14
+ - 'lib/mock_redis/database.rb'
15
+ - 'lib/mock_redis/expire_wrapper.rb'
16
+ - 'lib/mock_redis/geospatial_methods.rb'
17
+ - 'lib/mock_redis/multi_db_wrapper.rb'
18
+ - 'lib/mock_redis/pipelined_wrapper.rb'
19
+ - 'lib/mock_redis/string_methods.rb'
20
+ - 'lib/mock_redis/transaction_wrapper.rb'
21
+ - 'lib/mock_redis/utility_methods.rb'
22
+ - 'lib/mock_redis/zset_methods.rb'
23
+ - 'spec/support/redis_multiplexer.rb'
24
+
25
+ # Offense count: 2
26
+ # Configuration parameters: EnforcedStyle.
27
+ # SupportedStyles: inline, group
28
+ Style/AccessModifierDeclarations:
29
+ Exclude:
30
+ - 'lib/mock_redis/zset_methods.rb'
31
+
32
+ # Offense count: 1
33
+ Style/DateTime:
34
+ Exclude:
35
+ - 'spec/commands/zremrangebyscore_spec.rb'
data/.simplecov ADDED
@@ -0,0 +1,4 @@
1
+ SimpleCov.start do
2
+ add_filter '/bin/'
3
+ add_filter '/spec/'
4
+ end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,281 @@
1
+ # MockRedis Changelog
2
+
3
+ ### 0.31.0
4
+
5
+ * Allow `ping` to take argument
6
+ * Raise `CommandError` on `hmget` with empty list of fields
7
+
8
+ ### 0.30.0
9
+
10
+ * Drop support for Ruby 2.4 and Ruby 2.5 since they are EOL
11
+ * Fix `expire` to to raise error on invalid integer
12
+
13
+ ### 0.29.0
14
+
15
+ * Add support for `logger` option ([#211](https://github.com/sds/mock_redis/pull/211))
16
+ * Fix `zadd` to not perform conditional type conversion ([#214](https://github.com/sds/mock_redis/pull/214))
17
+ * Fix `hdel` to raise error when called with empty array ([#215](https://github.com/sds/mock_redis/pull/215))
18
+
19
+ ### 0.28.0
20
+
21
+ * Fix `hmset` exception ([#206](https://github.com/sds/mock_redis/pull/206))
22
+ * Fix `hmset` to accept hashes in addition to key/value pairs ([#208](https://github.com/sds/mock_redis/pull/208))
23
+ * Fix stream ID regex to support `(` ([#209](https://github.com/sds/mock_redis/pull/209))
24
+ * Allow `mget` to accept a block ([#210](https://github.com/sds/mock_redis/pull/210))
25
+
26
+ ### 0.27.3
27
+
28
+ * Ensure `ruby2_keywords` dependency is `require`d at runtime
29
+
30
+ ### 0.27.2
31
+
32
+ * Switch `ruby2_keywords` gem from development dependency to runtime dependency
33
+
34
+ ### 0.27.1
35
+
36
+ * Fix missing `ruby2_keywords` gem
37
+ * Allow passing string `offset` to `getbit` ([#203](https://github.com/sds/mock_redis/pull/203))
38
+
39
+ ### 0.27.0
40
+
41
+ * Fix handling of keyword arguments on Ruby 3 ([#199](https://github.com/sds/mock_redis/pull/199))
42
+ * Allow passing string `offset` to `setbit` ([#200](https://github.com/sds/mock_redis/pull/200))
43
+ * Add `connection` method ([#201](https://github.com/sds/mock_redis/pull/201))
44
+
45
+ ### 0.26.0
46
+
47
+ * Add block and count support to `xread` ([#194](https://github.com/sds/mock_redis/pull/194))
48
+
49
+ ### 0.25.0
50
+
51
+ * Add support for `xread` command ([#190](https://github.com/sds/mock_redis/pull/190))
52
+ * Fix `mget` to raise error when passing empty array ([#191](https://github.com/sds/mock_redis/pull/191))
53
+ * Fix `xadd` when `maxlen` is zero ([#192](https://github.com/sds/mock_redis/pull/192))
54
+
55
+ ### 0.24.0
56
+
57
+ * Fix handling of blocks within `multi` blocks ([#185](https://github.com/sds/mock_redis/pull/185))
58
+ * Fix handling of multiple consecutive `?` characters in key pattern matching ([#186](https://github.com/sds/mock_redis/pull/186))
59
+ * Change `exists` to return an integer and add `exists?` ([#188](https://github.com/sds/mock_redis/pull/188))
60
+
61
+ ### 0.23.0
62
+
63
+ * Raise error when `setex` called with negative timeout ([#174](https://github.com/sds/mock_redis/pull/174))
64
+ * Add support for `dump`/`restore` between MockRedis instances ([#176](https://github.com/sds/mock_redis/pull/176))
65
+ * Fix warnings for ZSET methods on Ruby 2.7 ([#177](https://github.com/sds/mock_redis/pull/177))
66
+ * Add support for returning time in pipelines ([#179](https://github.com/sds/mock_redis/pull/179))
67
+ * Fix SET methods to correct set milliseconds with `px` ([#180](https://github.com/sds/mock_redis/pull/180))
68
+ * Add support for unsorted sets within `zinterstore`/`zunionstore`([#182](https://github.com/sds/mock_redis/pull/182))
69
+
70
+ ### 0.22.0
71
+
72
+ * Gracefully handle cursors larger than the collection size in scan commands ([#171](https://github.com/sds/mock_redis/pull/171))
73
+ * Add `zpopmin` and `zpopmax` commands ([#172](https://github.com/sds/mock_redis/pull/172))
74
+ * Fix `hmset` to support array arguments ([#173](https://github.com/sds/mock_redis/pull/173))
75
+ * Fix `hmset` to always treat keys as strings ([#173](https://github.com/sds/mock_redis/pull/173))
76
+ * Remove unnecessary dependency on `rake` gem
77
+
78
+ ### 0.21.0
79
+
80
+ * Fix behavior of `time` to return array of two integers ([#161](https://github.com/sds/mock_redis/pull/161))
81
+ * Add support for `close` and `disconnect!` ([#163](https://github.com/sds/mock_redis/pull/163))
82
+ * Fix `set` to properly handle (and ignore) other options ([#164](https://github.com/sds/mock_redis/pull/163))
83
+ * Fix `srem` to allow array of integers as argument ([#166](https://github.com/sds/mock_redis/pull/166))
84
+ * Fix `hdel` to allow array as argument ([#168](https://github.com/sds/mock_redis/pull/168))
85
+
86
+ ### 0.20.0
87
+
88
+ * Add support for `count` parameter of `spop`
89
+ * Fix `mget` and `mset` to accept array as parameters
90
+ * Fix pipelined array replies
91
+ * Fix nested pipelining
92
+ * Allow nested multi
93
+ * Require Redis gem 4.0.1 or newer
94
+ * Add support for stream commands on Redis 5
95
+ * Keep empty strings on type mismatch
96
+ * Improve performance of `set_expiration`
97
+ * Fix `watch` to allow multiple keys
98
+ * Add `unlink` alias for `del`
99
+ * Drop support for Ruby 2.3 or older
100
+
101
+ ### 0.19.0
102
+
103
+ * Require Ruby 2.2+
104
+ * Add support for `bitfield` command
105
+ * Add support for `geoadd`, `geopos`, `geohash`, and `geodist` commands
106
+ * Fix multi-nested pipeline not releasing lock issue
107
+
108
+ ### 0.18.0
109
+
110
+ * Fix `hset` return value to return false when the field exists in the hash
111
+ * Fix message on exception raised from hincrbyfloat to match Redis 4
112
+ * Fix `lpushx`/`rpushx` to correctly accept an array as the value
113
+ * Fix rename to allow `rename(k1, k1)`
114
+
115
+ ### 0.17.3
116
+
117
+ * Fix `zrange` behavior with negative stop argument
118
+
119
+ ### 0.17.2
120
+
121
+ * Allow negative out-of-bounds start and stop in `zrange`
122
+
123
+ ### 0.17.1
124
+
125
+ * Flatten args list passed to `hmset`
126
+ * Fix `pipelined` calls within `multi` blocks
127
+
128
+ ### 0.17.0
129
+
130
+ * Upgrade minimum `redis` gem version to 3.3.0+
131
+ * Add support for XX, NX and INCR parameters of `ZADD`
132
+ * Drop support for Ruby 1.9.3/JRuby 1.7.x
133
+ * Fix ZREM to raise error when argument is an empty array
134
+
135
+ ### 0.16.1
136
+
137
+ * Relax `rake` gem dependency to allow 11.x.x versions
138
+
139
+ ### 0.16.0
140
+
141
+ * Add stub implementations for `script`/`eval`/`evalsha` commands
142
+ * Add implementations for `SCAN` family (`sscan`/`hscan`/`zscan`)
143
+ family of commands
144
+
145
+ ### 0.15.4
146
+
147
+ * Fix `zrange`/`zrevrange` to return elements with equal values in
148
+ lexicographic order
149
+
150
+ ### 0.15.3
151
+
152
+ * Fix `sadd` to return integers when adding arrays
153
+
154
+ ### 0.15.2
155
+
156
+ * Fix `zrangebyscore` to work with exclusive ranges on both ends of interval
157
+
158
+ ### 0.15.1
159
+
160
+ * Fix `hmget` and `mapped_hmget` to allow passing of an array of keys
161
+
162
+ ### 0.15.0
163
+
164
+ * Add support for the `time` method
165
+
166
+ ### 0.14.1
167
+
168
+ * Upgrade `redis` gem dependency to 3.2.x series
169
+ * Map `HDEL` field to string when given as an array
170
+
171
+ ### 0.14.0
172
+
173
+ * Fix bug where SETBIT command would not correctly unset a bit
174
+ * Fix bug where a key that expired would cause another key that expired later
175
+ to prematurely expire
176
+ * Add support to set methods to take array as argument
177
+ * Evaluate futures at the end of `#multi` blocks
178
+ * Add support for the SCAN command
179
+ * Add support for `[+/-]inf` values for min/max in ordered set commands
180
+
181
+ ### 0.13.2
182
+
183
+ * Fix SMEMBERS command to not return frozen elements
184
+
185
+ ### 0.13.1
186
+
187
+ * Fix bug where certain characters in keys were treated as regex characters
188
+ rather than literals
189
+ * Add back support for legacy integer timeouts on blocking list commands
190
+
191
+ ### 0.13.0
192
+
193
+ * Fix bug where SETBIT command would not correctly unset a bit
194
+ * Add support for the `connect` method
195
+ * Check that `min`/`max` parameters are floats in `zrangebyscore`,
196
+ `zremrangebyscore`, and `zrevrangebyscore`
197
+ * Update blocking list commands to take `timeout` in an options hash
198
+ for compatibility with `redis-rb` >= 3.0.0
199
+
200
+ ### 0.12.1
201
+
202
+ * RENAME command now keeps key expiration
203
+
204
+ ### 0.12.0
205
+
206
+ * Fix bug where `del` would not raise error when given empty array
207
+ * Add support for the BITCOUNT command
208
+
209
+ ### 0.11.0
210
+
211
+ * Raise errors for empty arrays as arguments
212
+ * Update error messages to conform to Redis 2.8. This officially means
213
+ `mock_redis` no *longer supports Redis 2.6 or lower*. All testing in
214
+ TravisCI is now done against 2.8
215
+ * Update return value of TTL to return -2 if key doesn't exist
216
+ * Add support for the HINCRBYFLOAT command
217
+ * Add support for `count` parameter on SRANDMEMBER
218
+ * Add support for the PTTL command
219
+ * Improve support for negative start indices in LRANGE
220
+ * Improve support for negative start indices in LTRIM
221
+ * Allow `del` to accept arrays of keys
222
+
223
+ ### 0.10.0
224
+ * Add support for :nx, :xx, :ex, :px options for SET command
225
+
226
+ ### 0.9.0
227
+ * Added futures support
228
+
229
+ ### 0.8.2
230
+ * Added support for Ruby 2.0.0, dropped support for Ruby 1.8.7
231
+ * Changes for compatibility with JRuby
232
+
233
+ ### 0.8.1
234
+ * Fix `#pipelined` to yield self
235
+
236
+ ### 0.8.0
237
+ * Fixed `watch` to return OK when passed no block
238
+ * Implemented `pexpire`, `pexpireat`
239
+ * Fixed `expire` to use millisecond precision
240
+
241
+ ### 0.7.0
242
+ * Implemented `mapped_mget`, `mapped_mset`, `mapped_msetnx`
243
+ * Fixed `rpoplpush` when the `rpop` is nil
244
+
245
+ ### 0.6.6
246
+ * Avoid mutation of @data from external reference
247
+ * Fix sorted set (e.g. `zadd`) with multiple score/member pairs
248
+
249
+ ### 0.6.5
250
+ * Fix `zrevrange` to return an empty array on invalid range
251
+ * Fix `srandmember` spec on redis-rb 3.0.3
252
+ * Stringify keys in expiration-related commands
253
+
254
+ ### 0.6.4
255
+ * Update INFO command for latest Redis 2.6 compatibility
256
+
257
+ ### 0.6.3
258
+ * Treat symbols as strings for keys
259
+ * Add #reconnect method (no-op)
260
+
261
+ ### 0.6.2
262
+ * Support for `connected?`, `disconnect` (no-op)
263
+ * Fix `*` in `keys` to support 0 or more
264
+
265
+ ### 0.6.1
266
+ * Support default argument of `*` for keys
267
+ * Allow `MockRedis` to take a TimeClass
268
+
269
+ ### 0.6.0
270
+ * Support for `#sort` (ascending and descending only)
271
+
272
+ ### 0.5.5
273
+ * Support exclusive ranges in `zcount`
274
+ * List methods (`lindex`, `lrange`, `lset`, and `ltrim`) can take string indexes
275
+ * Fix typo in shared example `zset` spec
276
+ * Fix `lrange` to return `[]` when start is too large
277
+ * Update readme about spec suite compatibility
278
+
1
279
  ### 0.5.4
2
280
  * Support `incrbyfloat` (new in Redis 2.6)
3
281
  * Fix specs to pass in Redis 2.6
data/Gemfile CHANGED
@@ -1,9 +1,13 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in mock_redis.gemspec
4
4
  gemspec
5
5
 
6
- group :test do
7
- gem "ruby-debug", :platforms => :mri_18
8
- gem "debugger", :platforms => :mri_19
9
- end
6
+ # Run all pre-commit hooks via Overcommit during CI runs
7
+ gem 'overcommit', '0.53.0'
8
+
9
+ # Pin tool versions (which are executed by Overcommit) for Travis builds
10
+ gem 'rubocop', '0.82.0'
11
+
12
+ gem 'simplecov', '~> 0.21.0'
13
+ gem 'simplecov-lcov', '~> 0.8.0'
data/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MockRedis released under the MIT license.
2
+
3
+ > Copyright (c) Shane da Silva. http://shane.io
4
+ >
5
+ > Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ > of this software and associated documentation files (the "Software"), to deal
7
+ > in the Software without restriction, including without limitation the rights
8
+ > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ > copies of the Software, and to permit persons to whom the Software is
10
+ > furnished to do so, subject to the following conditions:
11
+ >
12
+ > The above copyright notice and this permission notice shall be included in
13
+ > all copies or substantial portions of the Software.
14
+ >
15
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ > SOFTWARE.