active_nomad 0.1.0 → 0.2.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.2.0 2010-10-05
2
+
3
+ * No longer overriding ActiveRecord::Base#to_json.
4
+
1
5
  == 0.1.0 2010-10-05
2
6
 
3
7
  * Provide multiple serialization formats (query string, json).
data/README.markdown CHANGED
@@ -26,7 +26,7 @@ persist to a cookie:
26
26
 
27
27
  thing = Thing.from_json(cookies[:thing])
28
28
  thing.to_save do |thing|
29
- cookies[:thing] = thing.to_json
29
+ cookies[:thing] = thing.to_ordered_json
30
30
  true
31
31
  end
32
32
 
@@ -34,9 +34,9 @@ Things to note:
34
34
 
35
35
  * The proc should return true if persistence was successful, false
36
36
  otherwise. This will be the return value of `save`, etc.
37
- * Active Nomad defines `to_json` and `from_json` which will serialize to and
38
- from a JSON string with predictable attribute order (i.e., appropriate for a
39
- cookie).
37
+ * Active Nomad defines `to_ordered_json` and `from_json` which will serialize
38
+ to and from a JSON string with predictable attribute order (i.e., appropriate
39
+ for a cookie).
40
40
  * You may alternatively override `persist` in a subclass if you don't want to
41
41
  register a proc for every instance.
42
42
 
@@ -44,8 +44,8 @@ Things to note:
44
44
 
45
45
  Active Nomad provides serialization to and from:
46
46
 
47
- * JSON (`to_json` and `from_json`)
48
- * Query string (`to_query_string` and `from_query_string`)
47
+ * JSON (`to_ordered_json` and `from_json`)
48
+ * Query string (`to_ordered_query_string` and `from_query_string`)
49
49
 
50
50
  You can define your own formats easily using `to_serialized_attributes` and
51
51
  `from_serialized_attributes`. The former returns an `ActiveSupport::OrderedHash`
@@ -1,5 +1,5 @@
1
1
  module ActiveNomad
2
- VERSION = [0, 1, 0]
2
+ VERSION = [0, 2, 0]
3
3
 
4
4
  class << VERSION
5
5
  include Comparable
data/lib/active_nomad.rb CHANGED
@@ -45,7 +45,9 @@ module ActiveNomad
45
45
  #
46
46
  # Serialize this record as a query string.
47
47
  #
48
- def to_query_string
48
+ # Attributes are sorted by name.
49
+ #
50
+ def to_ordered_query_string
49
51
  to_serialized_attributes.map do |name, value|
50
52
  next nil if value.nil?
51
53
  "#{CGI.escape(name)}=#{CGI.escape(value)}"
@@ -54,7 +56,7 @@ module ActiveNomad
54
56
 
55
57
  #
56
58
  # Deserialize this record from a query string returned by
57
- # #to_query_string.
59
+ # #to_ordered_query_string.
58
60
  #
59
61
  def self.from_query_string(string)
60
62
  return new if string.blank?
@@ -68,12 +70,15 @@ module ActiveNomad
68
70
  #
69
71
  # Serialize this record as a JSON string.
70
72
  #
71
- def to_json
73
+ # Attributes are sorted by name.
74
+ #
75
+ def to_ordered_json
72
76
  to_serialized_attributes.to_json
73
77
  end
74
78
 
75
79
  #
76
- # Deserialize this record from a JSON string returned by #to_json.
80
+ # Deserialize this record from a JSON string returned by
81
+ # #to_ordered_json.
77
82
  #
78
83
  def self.from_json(string)
79
84
  return new if string.blank?
@@ -238,14 +238,14 @@ describe ActiveNomad::Base do
238
238
  end
239
239
  end
240
240
 
241
- describe "#to_query_string" do
241
+ describe "#to_ordered_query_string" do
242
242
  it "should serialize the attributes as a query string" do
243
243
  klass = Class.new(ActiveNomad::Base) do
244
244
  attribute :first_name, :string
245
245
  attribute :last_name, :string
246
246
  end
247
247
  instance = klass.new(:first_name => 'Joe', :last_name => 'Blow')
248
- instance.to_query_string.should == 'first_name=Joe&last_name=Blow'
248
+ instance.to_ordered_query_string.should == 'first_name=Joe&last_name=Blow'
249
249
  end
250
250
  end
251
251
 
@@ -348,14 +348,14 @@ describe ActiveNomad::Base do
348
348
 
349
349
  it_should_roundtrip_through(:to_serialized_attributes, :from_serialized_attributes)
350
350
 
351
- it_should_roundtrip_through(:to_query_string, :from_query_string) do
351
+ it_should_roundtrip_through(:to_ordered_query_string, :from_query_string) do
352
352
  it "should not be tripped up by delimiters in the keys" do
353
353
  klass = Class.new(ActiveNomad::Base) do
354
354
  attribute :'a=x', :string
355
355
  attribute :'b&x', :string
356
356
  end
357
357
  original = klass.new("a=x" => "1", "b&x" => "2")
358
- roundtripped = klass.from_query_string(original.to_query_string)
358
+ roundtripped = klass.from_query_string(original.to_ordered_query_string)
359
359
  roundtripped.send("a=x").should == "1"
360
360
  roundtripped.send("b&x").should == "2"
361
361
  end
@@ -366,19 +366,19 @@ describe ActiveNomad::Base do
366
366
  attribute :b, :string
367
367
  end
368
368
  original = klass.new(:a => "1=2", :b => "3&4")
369
- roundtripped = klass.from_query_string(original.to_query_string)
369
+ roundtripped = klass.from_query_string(original.to_ordered_query_string)
370
370
  roundtripped.a.should == "1=2"
371
371
  roundtripped.b.should == "3&4"
372
372
  end
373
373
  end
374
374
 
375
- it_should_roundtrip_through(:to_json, :from_json) do
375
+ it_should_roundtrip_through(:to_ordered_json, :from_json) do
376
376
  it "should not be tripped up by delimiters in the keys" do
377
377
  klass = Class.new(ActiveNomad::Base) do
378
378
  attribute :"'a':b,c", :string
379
379
  end
380
380
  original = klass.new("'a':b,c" => "1")
381
- roundtripped = klass.from_json(original.to_json)
381
+ roundtripped = klass.from_json(original.to_ordered_json)
382
382
  roundtripped.send("'a':b,c").should == "1"
383
383
  end
384
384
 
@@ -387,7 +387,7 @@ describe ActiveNomad::Base do
387
387
  attribute :a, :string
388
388
  end
389
389
  original = klass.new(:a => "'a':b,c")
390
- roundtripped = klass.from_json(original.to_json)
390
+ roundtripped = klass.from_json(original.to_ordered_json)
391
391
  roundtripped.a.should == "'a':b,c"
392
392
  end
393
393
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_nomad
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - George Ogata