json_record 1.0.6 → 1.0.7

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/CHANGE_LOG CHANGED
@@ -22,3 +22,7 @@
22
22
  1.0.6
23
23
  - Allow EmbeddedDocument.new to call all accessors and not just those defined in the JSON schema.
24
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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.6
1
+ 1.0.7
data/json_record.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{json_record}
8
- s.version = "1.0.6"
8
+ s.version = "1.0.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Durand"]
12
- s.date = %q{2010-02-24}
12
+ s.date = %q{2010-02-26}
13
13
  s.email = %q{brian@embellishedvisions.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.rdoc"
@@ -82,22 +82,27 @@ module JsonRecord
82
82
  def initialize (attrs = {})
83
83
  @attributes = {}
84
84
  @json_attributes = {}
85
+ self.attributes = attrs
86
+ end
87
+
88
+ # Get the attributes of the document.
89
+ def attributes
90
+ @json_attributes.reject{|k,v| !schema.fields.include?(k)}
91
+ end
92
+
93
+ # Set all the attributes at once.
94
+ def attributes= (attrs)
85
95
  attrs.each_pair do |name, value|
86
96
  field = schema.fields[name.to_s] || FieldDefinition.new(name, :type => value.class)
87
- writer = "#{name}=".to_sym
88
- if respond_to?(writer)
89
- send(writer, value)
97
+ setter = "#{name}=".to_sym
98
+ if respond_to?(setter)
99
+ send(setter, value)
90
100
  else
91
101
  write_attribute(field, value, self)
92
102
  end
93
103
  end
94
104
  end
95
105
 
96
- # Get the attributes of the document.
97
- def attributes
98
- @json_attributes.reject{|k,v| !schema.fields.include?(k)}
99
- end
100
-
101
106
  # Get the attribute values of the document before they were type cast.
102
107
  def attributes_before_type_cast
103
108
  @attributes
@@ -37,10 +37,15 @@ module JsonRecord
37
37
  Thread.current[:do_not_track_json_field_changes] = true
38
38
  begin
39
39
  ActiveSupport::JSON.decode(json).each_pair do |attr_name, attr_value|
40
- field = nil
41
- @schemas.each{|schema| field = schema.fields[attr_name]; break if field}
42
- field = FieldDefinition.new(attr_name, :type => attr_value.class) unless field
43
- write_attribute(field, attr_value, @record)
40
+ setter = "#{attr_name}=".to_sym
41
+ if @record.respond_to?(setter)
42
+ @record.send(setter, attr_value)
43
+ else
44
+ field = nil
45
+ @schemas.each{|schema| field = schema.fields[attr_name]; break if field}
46
+ field = FieldDefinition.new(attr_name, :type => attr_value.class) unless field
47
+ write_attribute(field, attr_value, @record)
48
+ end
44
49
  end
45
50
  ensure
46
51
  Thread.current[:do_not_track_json_field_changes] = do_not_track_changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Durand
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-24 00:00:00 -06:00
12
+ date: 2010-02-26 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency