json_record 1.0.7 → 1.0.8

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/Rakefile CHANGED
@@ -12,7 +12,7 @@ begin
12
12
  t.spec_files = FileList.new('spec/**/*_spec.rb')
13
13
  end
14
14
  rescue LoadError
15
- tast :test do
15
+ task :test do
16
16
  STDERR.puts "You must have rspec >= 1.2.9 to run the tests"
17
17
  end
18
18
  end
@@ -33,6 +33,9 @@ begin
33
33
  gem.email = "brian@embellishedvisions.com"
34
34
  gem.homepage = "http://github.com/bdurand/json_record"
35
35
  gem.authors = ["Brian Durand"]
36
+ gem.files = FileList["lib/**/*", "spec/**/*", "README.rdoc", "Rakefile"].to_a
37
+ gem.has_rdoc = true
38
+ gem.extra_rdoc_files = ["README.rdoc"]
36
39
 
37
40
  gem.add_dependency('activerecord', '>= 2.2.2')
38
41
  gem.add_development_dependency('rspec', '>= 1.2.9')
@@ -37,7 +37,7 @@ module JsonRecord
37
37
  if changes.include?(field.name)
38
38
  changes.delete(field.name) if converted_value == changes[field.name]
39
39
  else
40
- old_value = (old_value.clone rescue old_value) unless old_value.nil?
40
+ old_value = (old_value.clone rescue old_value) unless old_value.nil? || old_value.is_a?(Numeric) || old_value.is_a?(Symbol) || old_value.is_a?(TrueClass) || old_value.is_a?(FalseClass)
41
41
  changes[field.name] = old_value
42
42
  end
43
43
  end
@@ -139,6 +139,10 @@ module JsonRecord
139
139
  @json_attributes.to_json(*args)
140
140
  end
141
141
 
142
+ def to_hash
143
+ @json_attributes
144
+ end
145
+
142
146
  def eql? (val)
143
147
  val.class == self.class && val.attributes == attributes && val.parent == parent
144
148
  end
@@ -147,6 +151,10 @@ module JsonRecord
147
151
  eql?(val)
148
152
  end
149
153
 
154
+ def equal? (val)
155
+ eql?(val)
156
+ end
157
+
150
158
  def hash
151
159
  attributes.hash + parent.hash
152
160
  end
@@ -22,7 +22,13 @@ module JsonRecord
22
22
 
23
23
  # Get the default value.
24
24
  def default
25
- (@default.dup rescue @default )if @default
25
+ if @default.nil?
26
+ nil
27
+ elsif @default.is_a?(Numeric) || @default.is_a?(Symbol) || @default.is_a?(TrueClass) || @default.is_a?(FalseClass)
28
+ @default
29
+ else
30
+ @default.dup rescue @default
31
+ end
26
32
  end
27
33
 
28
34
  # Indicates the field is multivalued.
@@ -72,6 +78,8 @@ module JsonRecord
72
78
  elsif @type == Hash
73
79
  raise ArgumentError.new("#{name} must be a Hash") unless val.is_a?(Hash)
74
80
  return val
81
+ elsif @type == BigDecimal
82
+ return BigDecimal.new(val.to_s)
75
83
  else
76
84
  if val.is_a?(@type)
77
85
  val
@@ -94,6 +94,12 @@ describe JsonRecord::Serialized do
94
94
  model.strings.should == ["a", "b"]
95
95
  end
96
96
 
97
+ it "should convert values to BigDecimal" do
98
+ model = JsonRecord::Test::Model.new
99
+ model.price = '5.55'
100
+ model.price.should == BigDecimal.new('5.55')
101
+ end
102
+
97
103
  it "should convert a hash to an embedded document" do
98
104
  model = JsonRecord::Test::Model.new
99
105
  model.primary_trait = {:name => "thing", :value => "stuff"}
@@ -145,6 +151,7 @@ describe JsonRecord::Serialized do
145
151
  JsonRecord::Test::Model.new.attributes.should == {
146
152
  "name"=>nil,
147
153
  "price"=>nil,
154
+ "ratio"=>nil,
148
155
  "string_field"=>nil,
149
156
  "verified_at"=>nil,
150
157
  "viewed_at"=>nil,
@@ -154,6 +161,7 @@ describe JsonRecord::Serialized do
154
161
  "field_4"=>nil,
155
162
  "field_5"=>nil,
156
163
  "unit_price"=>nil,
164
+ "unit_ratio"=>nil,
157
165
  "traits"=>[],
158
166
  "value"=>0,
159
167
  "strings"=>[],
@@ -466,4 +474,12 @@ describe JsonRecord::Serialized do
466
474
  model.unit_price = 1.2253
467
475
  model.unit_price.should == 1.23
468
476
  end
477
+
478
+ it "should blow up if the json column doesn't exist" do
479
+ lambda{JsonRecord::Test::Broken.new(:name => "Test", :value => "Moo")}.should raise_error
480
+ end
481
+
482
+ it "should blow up if trying to set a json attribute hasn't been defined" do
483
+ lambda{model = JsonRecord::Test::Model.new(:undefined_attribute => "what?")}.should raise_error
484
+ end
469
485
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
2
 
3
- active_record_version = ENV["ACTIVE_RECORD_VERSION"] || [">= 2.2.2", "< 3.0"]
3
+ active_record_version = ENV["ACTIVE_RECORD_VERSION"] || [">=2.2.2", "<=2.9.9"]
4
4
  active_record_version = [active_record_version] unless active_record_version.is_a?(Array)
5
5
  gem 'activerecord', *active_record_version
6
6
 
data/spec/test_models.rb CHANGED
@@ -59,6 +59,7 @@ module JsonRecord
59
59
  schema.key :name, String, :required => true, :length => 15
60
60
  schema.key :value, Integer, :default => 0
61
61
  schema.key :price, Float
62
+ schema.key :ratio, BigDecimal
62
63
  schema.key :verified, Boolean
63
64
  schema.key :when, Date
64
65
  schema.key :verified_at, Time
@@ -77,6 +78,7 @@ module JsonRecord
77
78
  schema.key :field_4, :length => (4..15)
78
79
  schema.key :field_5, :length => {:minimum => 5}
79
80
  schema.key :unit_price, Float
81
+ schema.key :unit_ratio, BigDecimal
80
82
  end
81
83
 
82
84
  def unit_price
@@ -97,5 +99,13 @@ module JsonRecord
97
99
  schema.key :another_field
98
100
  end
99
101
  end
102
+
103
+ class Broken < ActiveRecord::Base
104
+ set_table_name :models
105
+ serialize_to_json(:no_such_column) do |schema|
106
+ schema.key :name, String
107
+ schema.key :value, String
108
+ end
109
+ end
100
110
  end
101
111
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ hash: 7
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 8
10
+ version: 1.0.8
5
11
  platform: ruby
6
12
  authors:
7
13
  - Brian Durand
@@ -9,39 +15,55 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-02-26 00:00:00 -06:00
18
+ date: 2010-08-31 00:00:00 -05:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: activerecord
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 2
32
+ - 2
33
+ - 2
23
34
  version: 2.2.2
24
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 13
46
+ segments:
47
+ - 1
48
+ - 2
49
+ - 9
33
50
  version: 1.2.9
34
- version:
51
+ type: :development
52
+ version_requirements: *id002
35
53
  - !ruby/object:Gem::Dependency
36
54
  name: jeweler
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
40
58
  requirements:
41
59
  - - ">="
42
60
  - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
43
64
  version: "0"
44
- version:
65
+ type: :development
66
+ version_requirements: *id003
45
67
  description:
46
68
  email: brian@embellishedvisions.com
47
69
  executables: []
@@ -51,13 +73,8 @@ extensions: []
51
73
  extra_rdoc_files:
52
74
  - README.rdoc
53
75
  files:
54
- - CHANGE_LOG
55
- - MIT_LICENSE
56
76
  - README.rdoc
57
77
  - Rakefile
58
- - VERSION
59
- - init.rb
60
- - json_record.gemspec
61
78
  - lib/json_record.rb
62
79
  - lib/json_record/attribute_methods.rb
63
80
  - lib/json_record/embedded_document.rb
@@ -82,21 +99,27 @@ rdoc_options:
82
99
  require_paths:
83
100
  - lib
84
101
  required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
85
103
  requirements:
86
104
  - - ">="
87
105
  - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
88
109
  version: "0"
89
- version:
90
110
  required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
91
112
  requirements:
92
113
  - - ">="
93
114
  - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
94
118
  version: "0"
95
- version:
96
119
  requirements: []
97
120
 
98
121
  rubyforge_project:
99
- rubygems_version: 1.3.5
122
+ rubygems_version: 1.3.7
100
123
  signing_key:
101
124
  specification_version: 3
102
125
  summary: ActiveRecord support for mapping complex documents in a single RDBMS row via JSON serialization.
data/CHANGE_LOG DELETED
@@ -1,28 +0,0 @@
1
- 1.0.0
2
- - Initial release
3
-
4
- 1.0.1
5
- - Fixed bug where embedded documents couldn't reference the schema until a field was defined
6
-
7
- 1.0.2
8
- - Changed EmbeddedDocument to be a module instead of a class to fix inheritance problem with validations
9
- - Remove key and many methods from EmbeddedDocument in favor of always calling the schema
10
-
11
- 1.0.3
12
- - Added before and after validation callbacks on EmbeddedDocument
13
- - Fixed bug where fields couldn't be set to false
14
-
15
- 1.0.4
16
- - Fixed bug with tracking changes when initializing an EmbeddedDocument.
17
- - Removed tracking changes of keys that are EmbeddedDocuments
18
-
19
- 1.0.5
20
- - Fixed bug with initializing new EmbeddedDocumentArray with the proper parent when there is no data to deserialize.
21
-
22
- 1.0.6
23
- - Allow EmbeddedDocument.new to call all accessors and not just those defined in the JSON schema.
24
- - Allow getting and setting json attributes with [] and []=
25
-
26
- 1.0.7
27
- - Added attributes= to EmbeddedDocument for mass attribute assignment
28
- - Changed deserialized Json values to go through setter methods instead of being directly set
data/MIT_LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2010 Brian Durand
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.0.7
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'json_record'
data/json_record.gemspec DELETED
@@ -1,73 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{json_record}
8
- s.version = "1.0.7"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Brian Durand"]
12
- s.date = %q{2010-02-26}
13
- s.email = %q{brian@embellishedvisions.com}
14
- s.extra_rdoc_files = [
15
- "README.rdoc"
16
- ]
17
- s.files = [
18
- "CHANGE_LOG",
19
- "MIT_LICENSE",
20
- "README.rdoc",
21
- "Rakefile",
22
- "VERSION",
23
- "init.rb",
24
- "json_record.gemspec",
25
- "lib/json_record.rb",
26
- "lib/json_record/attribute_methods.rb",
27
- "lib/json_record/embedded_document.rb",
28
- "lib/json_record/embedded_document_array.rb",
29
- "lib/json_record/field_definition.rb",
30
- "lib/json_record/json_field.rb",
31
- "lib/json_record/schema.rb",
32
- "lib/json_record/serialized.rb",
33
- "spec/embedded_document_array_spec.rb",
34
- "spec/embedded_document_spec.rb",
35
- "spec/field_definition_spec.rb",
36
- "spec/serialized_spec.rb",
37
- "spec/spec_helper.rb",
38
- "spec/test_models.rb"
39
- ]
40
- s.homepage = %q{http://github.com/bdurand/json_record}
41
- s.rdoc_options = ["--charset=UTF-8"]
42
- s.require_paths = ["lib"]
43
- s.rubygems_version = %q{1.3.5}
44
- s.summary = %q{ActiveRecord support for mapping complex documents in a single RDBMS row via JSON serialization.}
45
- s.test_files = [
46
- "spec/embedded_document_array_spec.rb",
47
- "spec/embedded_document_spec.rb",
48
- "spec/field_definition_spec.rb",
49
- "spec/serialized_spec.rb",
50
- "spec/spec_helper.rb",
51
- "spec/test_models.rb"
52
- ]
53
-
54
- if s.respond_to? :specification_version then
55
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
56
- s.specification_version = 3
57
-
58
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
59
- s.add_runtime_dependency(%q<activerecord>, [">= 2.2.2"])
60
- s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
61
- s.add_development_dependency(%q<jeweler>, [">= 0"])
62
- else
63
- s.add_dependency(%q<activerecord>, [">= 2.2.2"])
64
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
65
- s.add_dependency(%q<jeweler>, [">= 0"])
66
- end
67
- else
68
- s.add_dependency(%q<activerecord>, [">= 2.2.2"])
69
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
70
- s.add_dependency(%q<jeweler>, [">= 0"])
71
- end
72
- end
73
-