summaryrefslogtreecommitdiff
path: root/lib/json/add/regexp.rb
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2011-09-12 20:04:08 +0200
committerFlorian Frank <flori@ping.de>2011-09-12 20:04:08 +0200
commit05f22914aa8679e17588995eb334b4c4335c9265 (patch)
treeced9a145c489f755c91b9220fd0191d31e54bf4f /lib/json/add/regexp.rb
parentf0adb8f0c89192aea4bb36ff8c2414e247477fcf (diff)
downloadjson-05f22914aa8679e17588995eb334b4c4335c9265.tar.gz
Split all implementations into single files
This way it's easier to create one's own serialisations by picking just the desired ones and mixing them with one's own implementations.
Diffstat (limited to 'lib/json/add/regexp.rb')
-rw-r--r--lib/json/add/regexp.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/json/add/regexp.rb b/lib/json/add/regexp.rb
new file mode 100644
index 0000000..2fcbb6f
--- /dev/null
+++ b/lib/json/add/regexp.rb
@@ -0,0 +1,30 @@
+unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
+ require 'json'
+end
+
+# Regexp serialization/deserialization
+class Regexp
+
+ # Deserializes JSON string by constructing new Regexp object with source
+ # <tt>s</tt> (Regexp or String) and options <tt>o</tt> serialized by
+ # <tt>to_json</tt>
+ def self.json_create(object)
+ new(object['s'], object['o'])
+ end
+
+ # Returns a hash, that will be turned into a JSON object and represent this
+ # object.
+ def as_json(*)
+ {
+ JSON.create_id => self.class.name,
+ 'o' => options,
+ 's' => source,
+ }
+ end
+
+ # Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
+ # (Regexp or String) as JSON string
+ def to_json(*)
+ as_json.to_json
+ end
+end