json_serialize 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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