storable 0.6.4 → 0.6.5

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.
Files changed (4) hide show
  1. data/CHANGES.txt +6 -0
  2. data/lib/storable.rb +28 -7
  3. data/storable.gemspec +1 -1
  4. metadata +2 -2
data/CHANGES.txt CHANGED
@@ -2,6 +2,12 @@ STORABLE, CHANGES
2
2
 
3
3
  * TODO: field_types and field_names go out of order when defining some fields with types and others not. The quick fix is to define fields with no type at the end
4
4
 
5
+
6
+ #### 0.6.5 (2010-03-23) #############################
7
+
8
+ * ADDED: Use Yajl if it's available.
9
+
10
+
5
11
  #### 0.6.4 (2010-03-10) #############################
6
12
 
7
13
  * FIXED: Don't pull the first value out of an array if there is only one element.
data/lib/storable.rb CHANGED
@@ -6,12 +6,20 @@
6
6
 
7
7
  USE_ORDERED_HASH = (RUBY_VERSION =~ /^1.9/).nil?
8
8
 
9
- begin
10
- require 'json'
9
+ YAJL_LOADED = begin
10
+ require 'yajl'
11
+ true
11
12
  rescue LoadError
12
- # Silently!
13
+ false
13
14
  end
14
-
15
+
16
+ JSON_LOADED = begin
17
+ require 'json' unless YAJL_LOADED
18
+ true
19
+ rescue LoadError
20
+ false
21
+ end
22
+
15
23
  require 'yaml'
16
24
  require 'fileutils'
17
25
  require 'time'
@@ -40,7 +48,7 @@ class Storable
40
48
 
41
49
  require 'storable/orderedhash' if USE_ORDERED_HASH
42
50
  unless defined?(SUPPORTED_FORMATS) # We can assume all are defined
43
- VERSION = "0.6.4"
51
+ VERSION = "0.6.5"
44
52
  NICE_TIME_FORMAT = "%Y-%m-%d@%H:%M:%S".freeze
45
53
  SUPPORTED_FORMATS = [:tsv, :csv, :yaml, :json, :s, :string].freeze
46
54
  end
@@ -219,7 +227,14 @@ class Storable
219
227
  end
220
228
 
221
229
  def to_json(*from, &blk)
222
- to_hash.to_json(*from, &blk)
230
+ hash = to_hash
231
+ if YAJL_LOADED
232
+ Yajl::Encoder.encode(hash)
233
+ elsif JSON_LOADED
234
+ hash.to_json(*from, &blk)
235
+ else
236
+ raise "no JSON parser loaded"
237
+ end
223
238
  end
224
239
 
225
240
  def to_yaml(*from, &blk)
@@ -247,7 +262,13 @@ class Storable
247
262
  # +from+ a YAML String or Array (split into by line).
248
263
  def self.from_json(*from)
249
264
  from_str = [from].flatten.compact.join('')
250
- tmp = JSON::load(from_str)
265
+ if YAJL_LOADED
266
+ tmp = Yajl::Parser.parse(from_str)
267
+ elsif JSON_LOADED
268
+ tmp = JSON::load(from_str)
269
+ else
270
+ raise "JSON parser not loaded"
271
+ end
251
272
  hash_sym = tmp.keys.inject({}) do |hash, key|
252
273
  hash[key.to_sym] = tmp[key]
253
274
  hash
data/storable.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "storable"
3
3
  s.rubyforge_project = "storable"
4
- s.version = "0.6.4"
4
+ s.version = "0.6.5"
5
5
  s.summary = "Storable: Marshal Ruby classes into and out of multiple formats (yaml, json, csv, tsv)"
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-03-15 00:00:00 -04:00
12
+ date: 2010-03-23 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15