multi_json 1.11.3 → 1.12.0

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
  SHA1:
3
- metadata.gz: da198b4f59c9d69641161993e95453c51ea9d4b2
4
- data.tar.gz: 2ca02cd8fcfc8c1a6319c8cb335bb7c2e85ed178
3
+ metadata.gz: 26886d50e3fa311fe1b33a1d8ebaad6c89d372ec
4
+ data.tar.gz: 41b704e0b93ce7211fa41e22a547e80d89ff067c
5
5
  SHA512:
6
- metadata.gz: 9bf429b82738b7bcfc3ed90ad64d46bf86531a09330de9a020fd058d23047f130b1b19450bff41baade22372de960c27fee6808688a1d2363bca5c27fbd9274c
7
- data.tar.gz: b4b51d664ac7fc469003a01c0a54fad91654678f079cc71586b2481b72259988f971efa8954298f528af5cf65b60d01e23cd45985cc066b64df20061bcf3859e
6
+ metadata.gz: ed17f8464c34c9dd2feff7decdd12c7c3161434a124c82151c3c167fdcb9d8ff5df5b02eb348d6c06eafe1ef717831780c607432b7f33a192b0c18c329c88558
7
+ data.tar.gz: a0cf57eb1318c0d6fe9c790cc82616172be1f6e18d4e7cac8ac100c468455b0a2fa5f078caa44e7de11f605c7795358f443a4145dcee6070450d699ed9c0955e
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,8 @@
1
+ 1.12.0
2
+ ------
3
+
4
+ * [Introduce global options cache to improve peroformance](https://github.com/intridea/multi_json/commit/7aaef2a1bc2b83c95e4208b12dad5d1d87ff20a6)
5
+
1
6
  1.11.2
2
7
  ------
3
8
 
@@ -2,6 +2,7 @@ require 'multi_json/options'
2
2
  require 'multi_json/version'
3
3
  require 'multi_json/adapter_error'
4
4
  require 'multi_json/parse_error'
5
+ require 'multi_json/options_cache'
5
6
 
6
7
  module MultiJson
7
8
  include Options
@@ -88,6 +89,8 @@ module MultiJson
88
89
  # * <tt>:jr_jackson</tt> (JRuby only)
89
90
  def use(new_adapter)
90
91
  @adapter = load_adapter(new_adapter)
92
+ ensure
93
+ OptionsCache.reset
91
94
  end
92
95
  alias_method :adapter=, :use
93
96
  alias_method :engine=, :use
@@ -5,6 +5,7 @@ module MultiJson
5
5
  class Adapter
6
6
  extend Options
7
7
  include Singleton
8
+
8
9
  class << self
9
10
  def defaults(action, value)
10
11
  metaclass = class << self; self; end
@@ -17,11 +18,11 @@ module MultiJson
17
18
  def load(string, options = {})
18
19
  fail self::ParseError if blank?(string)
19
20
  string = string.read if string.respond_to?(:read)
20
- instance.load(string, load_options(options).merge(MultiJson.load_options(options)).merge!(options))
21
+ instance.load(string, cached_load_options(options))
21
22
  end
22
23
 
23
24
  def dump(object, options = {})
24
- instance.dump(object, dump_options(options).merge(MultiJson.dump_options(options)).merge!(options))
25
+ instance.dump(object, cached_dump_options(options))
25
26
  end
26
27
 
27
28
  private
@@ -31,6 +32,18 @@ module MultiJson
31
32
  rescue ArgumentError # invalid byte sequence in UTF-8
32
33
  false
33
34
  end
35
+
36
+ def cached_dump_options(options)
37
+ OptionsCache.fetch(:dump, options) do
38
+ dump_options(options).merge(MultiJson.dump_options(options)).merge!(options)
39
+ end
40
+ end
41
+
42
+ def cached_load_options(options)
43
+ OptionsCache.fetch(:load, options) do
44
+ load_options(options).merge(MultiJson.load_options(options)).merge!(options)
45
+ end
46
+ end
34
47
  end
35
48
  end
36
49
  end
@@ -11,7 +11,7 @@ module MultiJson
11
11
  ParseError = defined?(::Oj::ParseError) ? ::Oj::ParseError : SyntaxError
12
12
 
13
13
  def load(string, options = {})
14
- options[:symbol_keys] = options.delete(:symbolize_keys)
14
+ options[:symbol_keys] = options[:symbolize_keys]
15
15
  ::Oj.load(string, options)
16
16
  end
17
17
 
@@ -1,10 +1,12 @@
1
1
  module MultiJson
2
2
  module Options
3
3
  def load_options=(options)
4
+ OptionsCache.reset
4
5
  @load_options = options
5
6
  end
6
7
 
7
8
  def dump_options=(options)
9
+ OptionsCache.reset
8
10
  @dump_options = options
9
11
  end
10
12
 
@@ -0,0 +1,15 @@
1
+ module MultiJson
2
+ module OptionsCache
3
+ extend self
4
+
5
+ def reset
6
+ @dump_cache = {}
7
+ @load_cache = {}
8
+ end
9
+
10
+ def fetch(type, key)
11
+ cache = instance_variable_get("@#{type}_cache")
12
+ cache.key?(key) ? cache[key] : cache[key] = yield
13
+ end
14
+ end
15
+ end
@@ -1,8 +1,8 @@
1
1
  module MultiJson
2
2
  class Version
3
3
  MAJOR = 1 unless defined? MultiJson::Version::MAJOR
4
- MINOR = 11 unless defined? MultiJson::Version::MINOR
5
- PATCH = 3 unless defined? MultiJson::Version::PATCH
4
+ MINOR = 12 unless defined? MultiJson::Version::MINOR
5
+ PATCH = 0 unless defined? MultiJson::Version::PATCH
6
6
  PRE = nil unless defined? MultiJson::Version::PRE
7
7
 
8
8
  class << self
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.3
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
@@ -33,7 +33,7 @@ cert_chain:
33
33
  De8xFEGqLG8vclcTv7gGjDJH5FJTXuwLg41wc8p4ONXEBgLiaC7+S/DVDXWpYxuB
34
34
  akI17ua4eRKTFNvBtzP1802SP1k=
35
35
  -----END CERTIFICATE-----
36
- date: 2016-04-24 00:00:00.000000000 Z
36
+ date: 2016-05-03 00:00:00.000000000 Z
37
37
  dependencies:
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: bundler
@@ -79,6 +79,7 @@ files:
79
79
  - lib/multi_json/adapters/yajl.rb
80
80
  - lib/multi_json/convertible_hash_keys.rb
81
81
  - lib/multi_json/options.rb
82
+ - lib/multi_json/options_cache.rb
82
83
  - lib/multi_json/parse_error.rb
83
84
  - lib/multi_json/vendor/okjson.rb
84
85
  - lib/multi_json/version.rb
metadata.gz.sig CHANGED
Binary file