json_serialize 2.0.0 → 2.1.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/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  # DEPENDENCIES
4
- gem 'activerecord', require: 'active_record'
5
- gem 'activesupport', require: 'active_support/core_ext/object/try'
4
+ gem 'activerecord', '>= 3.0', require: 'active_record'
5
+ gem 'activesupport', '>= 3.0', require: 'active_support/core_ext/object/try'
6
6
 
7
7
  group :development do
8
8
  gem 'jeweler'
data/Gemfile.lock CHANGED
@@ -2,17 +2,17 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  RedCloth (4.2.7)
5
- activemodel (3.0.4)
6
- activesupport (= 3.0.4)
5
+ activemodel (3.0.5)
6
+ activesupport (= 3.0.5)
7
7
  builder (~> 2.1.2)
8
8
  i18n (~> 0.4)
9
- activerecord (3.0.4)
10
- activemodel (= 3.0.4)
11
- activesupport (= 3.0.4)
9
+ activerecord (3.0.5)
10
+ activemodel (= 3.0.5)
11
+ activesupport (= 3.0.5)
12
12
  arel (~> 2.0.2)
13
13
  tzinfo (~> 0.3.23)
14
- activesupport (3.0.4)
15
- arel (2.0.8)
14
+ activesupport (3.0.5)
15
+ arel (2.0.9)
16
16
  builder (2.1.2)
17
17
  diff-lcs (1.1.2)
18
18
  git (1.2.5)
@@ -31,16 +31,16 @@ GEM
31
31
  diff-lcs (~> 1.1.2)
32
32
  rspec-mocks (2.5.0)
33
33
  sqlite3 (1.3.3)
34
- tzinfo (0.3.24)
35
- yard (0.6.4)
34
+ tzinfo (0.3.26)
35
+ yard (0.6.5)
36
36
 
37
37
  PLATFORMS
38
38
  ruby
39
39
 
40
40
  DEPENDENCIES
41
41
  RedCloth
42
- activerecord
43
- activesupport
42
+ activerecord (>= 3.0)
43
+ activesupport (>= 3.0)
44
44
  jeweler
45
45
  rspec
46
46
  sqlite3
data/README.textile CHANGED
@@ -1,7 +1,7 @@
1
1
  h1. json_serialize -- JSON serialization in ActiveRecord
2
2
 
3
3
  | *Author* | Tim Morgan |
4
- | *Version* | 2.0 (Feb 21, 2011) |
4
+ | *Version* | 2.1 (Apr 4, 2011) |
5
5
  | *License* | Released under the MIT license. |
6
6
 
7
7
  h2. About
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.1.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{json_serialize}
8
- s.version = "2.0.0"
8
+ s.version = "2.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tim Morgan"]
12
- s.date = %q{2011-02-21}
12
+ s.date = %q{2011-04-04}
13
13
  s.description = %q{Adds to ActiveRecord the ability to JSON-serialize certain fields.}
14
14
  s.email = %q{git@timothymorgan.info}
15
15
  s.extra_rdoc_files = [
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  ]
33
33
  s.homepage = %q{http://github.com/riscfuture/json_serialize}
34
34
  s.require_paths = ["lib"]
35
- s.rubygems_version = %q{1.5.2}
35
+ s.rubygems_version = %q{1.6.2}
36
36
  s.summary = %q{Adds JSON serialization to ActiveRecord models}
37
37
  s.test_files = [
38
38
  "spec/json_serialize_spec.rb",
@@ -43,16 +43,16 @@ Gem::Specification.new do |s|
43
43
  s.specification_version = 3
44
44
 
45
45
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_runtime_dependency(%q<activerecord>, [">= 0"])
47
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
46
+ s.add_runtime_dependency(%q<activerecord>, [">= 3.0"])
47
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
48
48
  s.add_development_dependency(%q<jeweler>, [">= 0"])
49
49
  s.add_development_dependency(%q<yard>, [">= 0"])
50
50
  s.add_development_dependency(%q<RedCloth>, [">= 0"])
51
51
  s.add_development_dependency(%q<rspec>, [">= 0"])
52
52
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
53
53
  else
54
- s.add_dependency(%q<activerecord>, [">= 0"])
55
- s.add_dependency(%q<activesupport>, [">= 0"])
54
+ s.add_dependency(%q<activerecord>, [">= 3.0"])
55
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
56
56
  s.add_dependency(%q<jeweler>, [">= 0"])
57
57
  s.add_dependency(%q<yard>, [">= 0"])
58
58
  s.add_dependency(%q<RedCloth>, [">= 0"])
@@ -60,8 +60,8 @@ Gem::Specification.new do |s|
60
60
  s.add_dependency(%q<sqlite3>, [">= 0"])
61
61
  end
62
62
  else
63
- s.add_dependency(%q<activerecord>, [">= 0"])
64
- s.add_dependency(%q<activesupport>, [">= 0"])
63
+ s.add_dependency(%q<activerecord>, [">= 3.0"])
64
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
65
65
  s.add_dependency(%q<jeweler>, [">= 0"])
66
66
  s.add_dependency(%q<yard>, [">= 0"])
67
67
  s.add_dependency(%q<RedCloth>, [">= 0"])
@@ -3,26 +3,34 @@
3
3
  # @example Basic usage
4
4
  # class MyModel < ActiveRecord::Base
5
5
  # include JsonSerialize
6
- # json_serialize :some_field
6
+ # json_serialize :some_field, another_field: "Default value"
7
7
  # end
8
8
 
9
9
  module JsonSerialize
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  module ClassMethods
13
- # @overload json_serialize(field, ...)
13
+ # @overload json_serialize(field, ..., fields_with_default_values)
14
14
  # Marks one or more fields as JSON-serialized. These fields are stored in
15
15
  # the database as JSON and encoded/decoded automatically upon read/write.
16
16
  # @param [Symbol] field The database field to JSON-serialize.
17
+ # @param [Hash<Symbol, Object>] fields_with_default_values A map of
18
+ # additional fields to JSON-serialize, with the default value that
19
+ # should be given if the field is @NULL@.
17
20
 
18
21
  def json_serialize(*fields)
22
+ fields_with_defaults = fields.extract_options!
19
23
  fields.each do |field|
24
+ fields_with_defaults[field] = nil
25
+ end
26
+
27
+ fields_with_defaults.each do |field, default_value|
20
28
  define_method field do
21
29
  if instance_variable_defined?(field_ivar(field)) then
22
30
  instance_variable_get field_ivar(field)
23
31
  else
24
32
  encoded = read_attribute(field)
25
- decoded = encoded.nil? ? nil : ActiveSupport::JSON.decode(encoded)
33
+ decoded = encoded.nil? ? default_value : ActiveSupport::JSON.decode(encoded)
26
34
  instance_variable_set field_ivar(field), decoded
27
35
  decoded
28
36
  end
@@ -15,6 +15,12 @@ describe JsonSerialize do
15
15
  Json.update_all(data: nil)
16
16
  object.reload.data.should be_nil
17
17
  end
18
+
19
+ it "should return a default value if the value is nil and a default is set" do
20
+ object = Json.create!
21
+ Json.update_all(default: nil)
22
+ object.reload.default.should eql("default value")
23
+ end
18
24
  end
19
25
 
20
26
  context "[setter]" do
data/spec/spec_helper.rb CHANGED
@@ -12,12 +12,12 @@ ActiveRecord::Base.establish_connection(
12
12
 
13
13
  class Json < ActiveRecord::Base
14
14
  include JsonSerialize
15
- json_serialize :data
15
+ json_serialize :data, default: "default value"
16
16
  end
17
17
 
18
18
  RSpec.configure do |config|
19
19
  config.before(:each) do
20
20
  Json.connection.execute "DROP TABLE IF EXISTS jsons"
21
- Json.connection.execute "CREATE TABLE jsons (id INTEGER PRIMARY KEY ASC, data TEXT)"
21
+ Json.connection.execute "CREATE TABLE jsons (id INTEGER PRIMARY KEY ASC, data TEXT, 'default' TEXT)"
22
22
  end
23
23
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: json_serialize
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.0.0
5
+ version: 2.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tim Morgan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-21 00:00:00 -08:00
13
+ date: 2011-04-04 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "0"
23
+ version: "3.0"
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: *id001
@@ -31,7 +31,7 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: "0"
34
+ version: "3.0"
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: *id002
@@ -126,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - ">="
128
128
  - !ruby/object:Gem::Version
129
- hash: 3149432936213936570
129
+ hash: 4158012258004995923
130
130
  segments:
131
131
  - 0
132
132
  version: "0"
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
139
  requirements: []
140
140
 
141
141
  rubyforge_project:
142
- rubygems_version: 1.5.2
142
+ rubygems_version: 1.6.2
143
143
  signing_key:
144
144
  specification_version: 3
145
145
  summary: Adds JSON serialization to ActiveRecord models