moneta 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e697b98dafd89667bc720317d1e740691f4504cf6b7a33939d14251f2841fe3
4
- data.tar.gz: 13eede9fc91b2379921f28798b6bac79de69527682f208042345b5fe331bd32d
3
+ metadata.gz: 535578909c47f29047f67d577e053809a637f77ea8ba2dde7920198f8b08ac49
4
+ data.tar.gz: 275edd79995139f4918749d01ccdf8129748ea96e1ba4302716dd7cb1ed57bf9
5
5
  SHA512:
6
- metadata.gz: c1c9acbe14d38a5a300a8eb478225c8da317f2c6596b51e2421d5243aa6cd13020639e31594f03a1c43b6c537603402983cd5ca2a6deb900ac34cf5db3b99992
7
- data.tar.gz: 614bfcb466639b2d348e8f1bd29d732a1d57489e3a6e4d292ae2f4ab8e3f385c878b0c3f890ae1f2fb4f684e9c969e71ecd2a393d9e848345c63b7d9b0818f8b
6
+ metadata.gz: c07c093306f66138db9db041a15103420fdd0e5fef93ca429098de02a732055d441c0968570704ba39dcb08608b7dbfa12b5cd5797e257df1c8be28a7b3b028d
7
+ data.tar.gz: a654005281162398bf492fd7fa3e3c59ee40f675d6a187579d4cbfcb0bfbd14e0a78a9f9bb3227e5c64c02e4c97e60bb9b39075457803882aeaa3d585b0e9a51
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ 1.2.1
2
+
3
+ * Transformer - fix :escape transformer deserialize implementation (#168)
4
+
1
5
  1.2.0
2
6
 
3
7
  * Adapters::Sequel - fix for compatibility with new version of JDBC SQLite
@@ -1,5 +1,5 @@
1
1
  Adrian Madrid <aemadrid@gmail.com>
2
- Alastair Pharo <asppsa@gmail.com>
2
+ Alastair Pharo <me@asph.dev>
3
3
  Alejandro Crosa <acrosa@sharing.local>
4
4
  Alessio Signorini <alessio@signorini.us>
5
5
  Anthony Eden <anthonyeden@gmail.com>
@@ -24,6 +24,7 @@ Marek Skrobacki <skrobul@skrobul.com>
24
24
  Mauro Asprea <mauroasprea@gmail.com>
25
25
  Nathaniel Bibler <git@nathanielbibler.com>
26
26
  Olle Jonsson <olle.jonsson@gmail.com>
27
+ Orien Madgwick <_@orien.io>
27
28
  Patrik Rak <patrik@raxoft.cz>
28
29
  Piotr Murach <pmurach@gmail.com>
29
30
  Potapov Sergey <blake131313@gmail.com>
@@ -5,11 +5,11 @@ module Moneta
5
5
  extend self
6
6
 
7
7
  def escape(value)
8
- value.gsub(/[^a-zA-Z0-9_-]+/) { '%' + $&.unpack('H2' * $&.bytesize).join('%').upcase }
8
+ value.gsub(/[^a-zA-Z0-9_-]+/) { |match| '%' + match.unpack('H2' * match.bytesize).join('%').upcase }
9
9
  end
10
10
 
11
11
  def unescape(value)
12
- value.gsub(/((?:%[0-9a-fA-F]{2})+)/) { |matches| [matches[1].delete('%')].pack('H*') }
12
+ value.gsub(/(?:%[0-9a-fA-F]{2})+/) { |match| [match.delete('%')].pack('H*') }
13
13
  end
14
14
 
15
15
  def hmacverify(value, secret)
@@ -1,5 +1,5 @@
1
1
  module Moneta
2
2
  # Moneta version number
3
3
  # @api public
4
- VERSION = '1.2.0'.freeze
4
+ VERSION = '1.2.1'.freeze
5
5
  end
@@ -13,10 +13,18 @@ Gem::Specification.new do |s|
13
13
  s.files = `git ls-files`.split("\n")
14
14
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
15
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
- s.homepage = 'http://github.com/moneta-rb/moneta'
16
+ s.homepage = 'https://github.com/moneta-rb/moneta'
17
17
  s.licenses = %w(MIT)
18
18
  s.require_paths = %w(lib)
19
19
  s.summary = %{A unified interface to key/value stores, including Redis, Memcached, TokyoCabinet, ActiveRecord and many more}
20
+
21
+ s.metadata = {
22
+ 'bug_tracker_uri' => 'https://github.com/moneta-rb/moneta/issues',
23
+ 'changelog_uri' => "https://github.com/moneta-rb/moneta/blob/v#{s.version}/CHANGES",
24
+ 'documentation_uri' => "https://www.rubydoc.info/gems/moneta/#{s.version}",
25
+ 'source_code_uri' => "https://github.com/moneta-rb/moneta/tree/v#{s.version}",
26
+ }
27
+
20
28
  s.required_ruby_version = '>= 2.2.2'
21
29
 
22
30
  s.add_development_dependency 'rspec', '~> 3.0'
@@ -2,6 +2,7 @@
2
2
  git log --format='%aN <%aE>' |\
3
3
  sed -e 's/hiddenbek/Scott Wadden/g' |\
4
4
  sed -e 's/Asmod4n/Hendrik Beskow/' |\
5
+ sed -e 's/asppsa@gmail.com/me@asph.dev/' |\
5
6
  grep -v 'hannes.georg@xing.com\|spotapov\|yehuda-katzs-mac\|wycats ' |\
6
7
  sort -u | sort > CONTRIBUTORS
7
8
 
@@ -1,11 +1,26 @@
1
1
  shared_examples :transform_value do
2
- it 'allows to bypass transformer with :raw' do
3
- store['key'] = 'value'
4
- load_value(store.load('key', raw: true)).should == 'value'
2
+ describe 'with the :raw option' do
3
+ it 'can load without transforming the value' do
4
+ moneta_property_of(values: 1).check do |values:|
5
+ store['key'] = values[0]
6
+ load_value(store.load('key', raw: true)).should == values[0]
7
+ end
8
+ end
9
+
10
+ it 'can store without transforming the value' do
11
+ moneta_property_of(values: 1).check do |values:|
12
+ store['key'] = values[0]
13
+ store.store('key', store.load('key', raw: true), raw: true)
14
+ store.load('key').should == values[0]
15
+ end
16
+ end
5
17
 
6
- store.store('key', 'value', raw: true)
7
- store.load('key', raw: true).should == 'value'
8
- store.delete('key', raw: true).should == 'value'
18
+ it 'can delete without transforming the value' do
19
+ moneta_property_of(values: 1).check do |values:|
20
+ store['key'] = values[0]
21
+ load_value(store.delete('key', raw: true)).should == values[0]
22
+ end
23
+ end
9
24
  end
10
25
 
11
26
  it 'allows to bypass transformer with raw syntactic sugar' do
@@ -20,25 +35,4 @@ shared_examples :transform_value do
20
35
  store.raw['key'] = 'value2'
21
36
  store.raw['key'].should == 'value2'
22
37
  end
23
-
24
- it 'returns unmarshalled value' do
25
- store.store('key', 'unmarshalled value', raw: true)
26
- store.load('key', raw: true).should == 'unmarshalled value'
27
- end
28
-
29
- it 'might raise exception on invalid value' do
30
- store.store('key', 'unmarshalled value', raw: true)
31
-
32
- begin
33
- store['key'].should == load_value('unmarshalled value')
34
- store.delete('key').should == load_value('unmarshalled value')
35
- rescue Exception => ex
36
- expect do
37
- store['key']
38
- end.to raise_error
39
- expect do
40
- store.delete('key')
41
- end.to raise_error
42
- end
43
- end
44
38
  end
@@ -13,7 +13,6 @@ require 'timecop'
13
13
 
14
14
  class MonetaParallelFormatter < RSpec::Core::Formatters::BaseTextFormatter
15
15
  def start(*args)
16
-
17
16
  output.puts colorise_summary("STARTING #{ARGV.join(' ')}")
18
17
  @stopped = false
19
18
  @passed_count = 0
@@ -59,12 +58,12 @@ class MonetaSpecs
59
58
  'integer' => :integer,
60
59
  'float' => :float,
61
60
  'boolean' => :boolean,
62
- 'string' => proc{ sized(range 5, 10){ string(:alnum) } },
63
- 'path' => proc{ array(range 2, 3){ sized(range 5, 10){ string(:alpha) } }.join('/') },
61
+ 'string' => proc { sized(range(5, 10)) { string(:alnum) } },
62
+ 'path' => proc { array(range(2, 3)) { sized(range(5, 10)) { string(:alpha) } }.join('/') },
64
63
  'binary' => [:string, :cntrl],
65
- 'object' => proc{ choose Value.new(:objkey1), Value.new(:objkey2) },
66
- 'hash' => proc{ dict(2){ sized(range 5, 10){ [string(:alnum), string(:alnum)] } } }
67
- }
64
+ 'object' => proc { choose Value.new(:objkey1), Value.new(:objkey2) },
65
+ 'hash' => proc { dict(2) { sized(range(5, 10)) { [string(:alnum), string(:alnum)] } } }
66
+ }.freeze
68
67
 
69
68
  VALUES = {
70
69
  'nil' => [:literal, nil],
@@ -73,10 +72,10 @@ class MonetaSpecs
73
72
  'boolean' => :boolean,
74
73
  'string' => [:string, :alnum],
75
74
  'binary' => [:string, :cntrl],
76
- 'object' => proc{ choose Value.new(:objval1), Value.new(:objval2) },
77
- 'hash' => proc{ dict{ [string(:alnum), array(2){ choose(string(:alnum), integer, dict{ [string(:alnum), integer] }) }] } },
78
- 'smallhash' => proc{ dict(2){ sized(range 5, 10){ [string(:alnum), string(:alnum)] } } }
79
- }
75
+ 'object' => proc { choose Value.new(:objval1), Value.new(:objval2) },
76
+ 'hash' => proc { dict { [string(:alnum), array(2) { choose(string(:alnum), integer, dict { [string(:alnum), integer] }) }] } },
77
+ 'smallhash' => proc { dict(2) { sized(range(5, 10)) { [string(:alnum), string(:alnum)] } } }
78
+ }.freeze
80
79
 
81
80
  attr_reader :key, :value, :specs, :features
82
81
 
@@ -88,23 +87,23 @@ class MonetaSpecs
88
87
  end
89
88
 
90
89
  def new(options)
91
- self.class.new({specs: specs, key: key, value: value}.merge(options))
90
+ self.class.new({ specs: specs, key: key, value: value }.merge(options))
92
91
  end
93
92
 
94
93
  def with_keys(*keys)
95
- new(key: self.key | keys.map(&:to_s))
94
+ new(key: key | keys.map(&:to_s))
96
95
  end
97
96
 
98
97
  def without_keys(*keys)
99
- new(key: self.key - keys.map(&:to_s))
98
+ new(key: key - keys.map(&:to_s))
100
99
  end
101
100
 
102
101
  def with_values(*values)
103
- new(value: self.value | values.map(&:to_s))
102
+ new(value: value | values.map(&:to_s))
104
103
  end
105
104
 
106
105
  def without_values(*values)
107
- new(value: self.value - values.map(&:to_s))
106
+ new(value: value - values.map(&:to_s))
108
107
  end
109
108
 
110
109
  def without_keys_or_values(*types)
@@ -209,53 +208,55 @@ end
209
208
 
210
209
  ADAPTER_SPECS = MonetaSpecs.new(
211
210
  specs: [:null, :store, :returndifferent,
212
- :increment, :concurrent_increment, :concurrent_create, :persist, :multiprocess,
213
- :create, :features, :store_large, :not_each_key],
211
+ :increment, :concurrent_increment, :concurrent_create, :persist, :multiprocess,
212
+ :create, :features, :store_large, :not_each_key],
214
213
  key: %w(string path),
215
- value: %w(string path binary))
214
+ value: %w(string path binary)
215
+ )
216
216
  STANDARD_SPECS = MonetaSpecs.new(
217
217
  specs: [:null, :store, :returndifferent,
218
- :marshallable_key, :marshallable_value, :transform_value, :increment,
219
- :concurrent_increment, :concurrent_create, :persist, :multiprocess, :create,
220
- :features, :store_large, :not_each_key])
218
+ :marshallable_key, :marshallable_value, :transform_value, :increment,
219
+ :concurrent_increment, :concurrent_create, :persist, :multiprocess, :create,
220
+ :features, :store_large, :not_each_key]
221
+ )
221
222
  TRANSFORMER_SPECS = MonetaSpecs.new(
222
223
  specs: [:null, :store, :returndifferent,
223
- :transform_value, :increment, :create, :features, :store_large,
224
- :not_each_key])
224
+ :transform_value, :increment, :create, :features, :store_large,
225
+ :not_each_key]
226
+ )
225
227
 
226
228
  module MonetaHelpers
227
229
  module ClassMethods
228
-
229
- def moneta_store store_name, options={}, &block
230
- name = self.description
230
+ def moneta_store(store_name, options = {}, &block)
231
+ name = description
231
232
  builder = proc do
232
233
  if block
233
234
  options = instance_exec(&block)
234
235
  end
235
236
 
236
- Moneta.new(store_name, options.merge(logger: {file: File.join(tempdir, "#{name}.log")}))
237
+ Moneta.new(store_name, options.merge(logger: { file: File.join(tempdir, "#{name}.log") }))
237
238
  end
238
239
 
239
240
  include_context :setup_moneta_store, builder
240
241
  end
241
242
 
242
- def moneta_build &block
243
+ def moneta_build(&block)
243
244
  include_context :setup_moneta_store, block
244
245
  end
245
246
 
246
- def moneta_loader &block
247
+ def moneta_loader(&block)
247
248
  before do
248
249
  @moneta_value_loader = block
249
250
  end
250
251
  end
251
252
 
252
- def moneta_specs specs
253
- let(:features){ specs.features }
253
+ def moneta_specs(specs)
254
+ let(:features) { specs.features }
254
255
  let(:keys_meta) do
255
- [:branch, *specs.key.map{ |k| MonetaSpecs::KEYS[k] }.compact]
256
+ [:branch, *specs.key.map { |k| MonetaSpecs::KEYS[k] }.compact]
256
257
  end
257
258
  let(:values_meta) do
258
- [:branch, *specs.value.map{ |k| MonetaSpecs::VALUES[k] }.compact]
259
+ [:branch, *specs.value.map { |k| MonetaSpecs::VALUES[k] }.compact]
259
260
  end
260
261
 
261
262
  # Used by tests that rely on MySQL. These env vars can be used if you
@@ -298,7 +299,7 @@ module MonetaHelpers
298
299
  end
299
300
 
300
301
  def use_timecop
301
- before{ @timecop = true }
302
+ before { @timecop = true }
302
303
  end
303
304
  end
304
305
 
@@ -315,7 +316,7 @@ module MonetaHelpers
315
316
  @store ||= new_store
316
317
  end
317
318
 
318
- def load_value value
319
+ def load_value(value)
319
320
  if @moneta_value_loader
320
321
  @moneta_value_loader.call value
321
322
  else
@@ -341,9 +342,9 @@ module MonetaHelpers
341
342
  value_values = values.times.map { call(values_meta) }
342
343
  guard value_values.uniq.length == value_values.length
343
344
 
344
- [[:keys, key_values], [:values, value_values]].
345
- reject { |key, value| value.empty? }.
346
- to_h
345
+ [[:keys, key_values], [:values, value_values]]
346
+ .reject { |_key, value| value.empty? }
347
+ .to_h
347
348
  end
348
349
  end
349
350
 
@@ -361,8 +362,8 @@ end
361
362
  RSpec.configure do |config|
362
363
  config.verbose_retry = true
363
364
  config.color = true
364
- #config.tty = true
365
- #config.formatter = ENV['PARALLEL_TESTS'] ? MonetaParallelFormatter : :progress
365
+ # config.tty = true
366
+ # config.formatter = ENV['PARALLEL_TESTS'] ? MonetaParallelFormatter : :progress
366
367
  config.silence_filter_announcements = true if ENV['PARALLEL_TESTS']
367
368
 
368
369
  # Allow "should" syntax as well as "expect"
@@ -379,9 +380,9 @@ RSpec::Expectations.configuration.on_potential_false_positives = :nothing
379
380
  # Disable jruby stdout pollution by memcached
380
381
  if defined?(JRUBY_VERSION)
381
382
  require 'java'
382
- properties = java.lang.System.getProperties();
383
- properties.put('net.spy.log.LoggerImpl', 'net.spy.memcached.compat.log.SunLogger');
384
- java.lang.System.setProperties(properties);
383
+ properties = java.lang.System.getProperties
384
+ properties.put('net.spy.log.LoggerImpl', 'net.spy.memcached.compat.log.SunLogger')
385
+ java.lang.System.setProperties(properties)
385
386
  java.util.logging.Logger.getLogger('').setLevel(java.util.logging.Level::OFF)
386
387
  end
387
388
 
@@ -404,7 +405,6 @@ class Value
404
405
  end
405
406
  end
406
407
 
407
-
408
408
  def marshal_error
409
409
  # HACK: Marshalling structs in rubinius without class name throws
410
410
  # NoMethodError (to_sym). TODO: Create an issue for rubinius!
@@ -415,7 +415,6 @@ def marshal_error
415
415
  end
416
416
  end
417
417
 
418
-
419
418
  RSpec.shared_context :setup_moneta_store do |builder|
420
419
  before do
421
420
  @moneta_store_builder = builder
@@ -451,4 +450,4 @@ RSpec.shared_examples :at_usec do |usec|
451
450
  end
452
451
  end
453
452
 
454
- Dir['./spec/features/*.rb'].each{ |rb| require rb }
453
+ Dir['./spec/features/*.rb'].each { |rb| require rb }
@@ -1,15 +1,19 @@
1
1
  describe 'transformer_marshal_escape', proxy: :Transformer do
2
2
  moneta_build do
3
3
  Moneta.build do
4
- use :Transformer, key: [:marshal, :escape], value: :marshal
4
+ use :Transformer, key: [:marshal, :escape], value: [:marshal, :escape]
5
5
  adapter :Memory
6
6
  end
7
7
  end
8
8
 
9
+ moneta_loader do |value|
10
+ ::Marshal.load(::URI.decode_www_form_component(value))
11
+ end
12
+
9
13
  moneta_specs STANDARD_SPECS.without_persist
10
14
 
11
- it 'compile transformer class' do
15
+ it 'compiles the transformer class' do
12
16
  store.should_not be_nil
13
- Moneta::Transformer::MarshalEscapeKeyMarshalValue.should_not be_nil
17
+ Moneta::Transformer::MarshalEscapeKeyMarshalEscapeValue.should_not be_nil
14
18
  end
15
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moneta
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Mendler
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-10-15 00:00:00.000000000 Z
14
+ date: 2019-11-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
@@ -438,10 +438,14 @@ files:
438
438
  - spec/restserver.rb
439
439
  - test/action_dispatch/fixtures/session_autoload_test/foo.rb
440
440
  - test/action_dispatch/session_moneta_store_test.rb
441
- homepage: http://github.com/moneta-rb/moneta
441
+ homepage: https://github.com/moneta-rb/moneta
442
442
  licenses:
443
443
  - MIT
444
- metadata: {}
444
+ metadata:
445
+ bug_tracker_uri: https://github.com/moneta-rb/moneta/issues
446
+ changelog_uri: https://github.com/moneta-rb/moneta/blob/v1.2.1/CHANGES
447
+ documentation_uri: https://www.rubydoc.info/gems/moneta/1.2.1
448
+ source_code_uri: https://github.com/moneta-rb/moneta/tree/v1.2.1
445
449
  post_install_message:
446
450
  rdoc_options: []
447
451
  require_paths: