active_model_serializers_binary 0.0.10

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.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/Gemfile +24 -0
  4. data/Gemfile.lock +179 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +17 -0
  7. data/README.rdoc +3 -0
  8. data/Rakefile +32 -0
  9. data/active_model_serializers_binary.gemspec +39 -0
  10. data/lib/active_model_serializers_binary/active_model_serializers_binary.rb +217 -0
  11. data/lib/active_model_serializers_binary/data_types.rb +218 -0
  12. data/lib/active_model_serializers_binary/version.rb +3 -0
  13. data/lib/active_model_serializers_binary.rb +1 -0
  14. data/lib/tasks/active_model_serializers_binary_tasks.rake +4 -0
  15. data/test/active_model_serializers_binary_test.rb +7 -0
  16. data/test/dummy/README.rdoc +28 -0
  17. data/test/dummy/Rakefile +6 -0
  18. data/test/dummy/app/assets/images/.keep +0 -0
  19. data/test/dummy/app/assets/javascripts/application.js +13 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  21. data/test/dummy/app/controllers/application_controller.rb +5 -0
  22. data/test/dummy/app/controllers/concerns/.keep +0 -0
  23. data/test/dummy/app/helpers/application_helper.rb +2 -0
  24. data/test/dummy/app/mailers/.keep +0 -0
  25. data/test/dummy/app/models/.keep +0 -0
  26. data/test/dummy/app/models/concerns/.keep +0 -0
  27. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  28. data/test/dummy/bin/bundle +3 -0
  29. data/test/dummy/bin/rails +4 -0
  30. data/test/dummy/bin/rake +4 -0
  31. data/test/dummy/config/application.rb +23 -0
  32. data/test/dummy/config/boot.rb +5 -0
  33. data/test/dummy/config/database.yml +25 -0
  34. data/test/dummy/config/environment.rb +5 -0
  35. data/test/dummy/config/environments/development.rb +37 -0
  36. data/test/dummy/config/environments/production.rb +82 -0
  37. data/test/dummy/config/environments/test.rb +39 -0
  38. data/test/dummy/config/initializers/assets.rb +8 -0
  39. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  40. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  41. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  42. data/test/dummy/config/initializers/inflections.rb +16 -0
  43. data/test/dummy/config/initializers/mime_types.rb +4 -0
  44. data/test/dummy/config/initializers/session_store.rb +3 -0
  45. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  46. data/test/dummy/config/locales/en.yml +23 -0
  47. data/test/dummy/config/routes.rb +56 -0
  48. data/test/dummy/config/secrets.yml +22 -0
  49. data/test/dummy/config.ru +4 -0
  50. data/test/dummy/lib/assets/.keep +0 -0
  51. data/test/dummy/lib/test_parser.rb +72 -0
  52. data/test/dummy/log/.keep +0 -0
  53. data/test/dummy/public/404.html +67 -0
  54. data/test/dummy/public/422.html +67 -0
  55. data/test/dummy/public/500.html +66 -0
  56. data/test/dummy/public/favicon.ico +0 -0
  57. data/test/test_helper.rb +15 -0
  58. metadata +354 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c6b15a22af56d99e5309303d942972061b28f5f7
4
+ data.tar.gz: 34fe1c2c45fec1ab4e4d02bba3c4a7a3fb3d9ed4
5
+ SHA512:
6
+ metadata.gz: ba001a7dc0310b82190fcb392dfe2d8748139bc5753705e1f136fb1eeec5c1ba8a96b3bf70ea776bfdb623025f9a14c71641a25b7957618d1c3200f285bfe0b3
7
+ data.tar.gz: 0ca34aff960f7de5470af3c63bd1ac0a98af8b0e141c33bcb8764421f9e182094e580efc3e83644b51eac749c7dd4980d5fbc04f189abafc7ea13b511a17a68f
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .bundle/
2
+ log/*.log
3
+ pkg/
4
+ test/dummy/db/*.sqlite3
5
+ test/dummy/db/*.sqlite3-journal
6
+ test/dummy/log/*.log
7
+ test/dummy/tmp/
8
+ test/dummy/.sass-cache
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Declare your gem's dependencies in active_model_serializers_binary.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
7
+
8
+ # Declare any dependencies that are still in development here instead of in
9
+ # your gemspec. These might include edge Rails or gems from your path or
10
+ # Git. Remember to move these dependencies to your gemspec before releasing
11
+ # your gem to rubygems.org.
12
+
13
+ # To use debugger
14
+ # gem 'debugger'
15
+
16
+ group :development do
17
+ gem 'pry'
18
+ gem 'pry-rescue'
19
+ gem 'pry-doc'
20
+ gem 'pry-rails'
21
+
22
+ #debuggers
23
+ gem 'pry-byebug'
24
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,179 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ active_model_serializers_binary (0.0.9)
5
+ activemodel (~> 4.1)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actionmailer (4.1.4)
11
+ actionpack (= 4.1.4)
12
+ actionview (= 4.1.4)
13
+ mail (~> 2.5.4)
14
+ actionpack (4.1.4)
15
+ actionview (= 4.1.4)
16
+ activesupport (= 4.1.4)
17
+ rack (~> 1.5.2)
18
+ rack-test (~> 0.6.2)
19
+ actionview (4.1.4)
20
+ activesupport (= 4.1.4)
21
+ builder (~> 3.1)
22
+ erubis (~> 2.7.0)
23
+ activemodel (4.1.4)
24
+ activesupport (= 4.1.4)
25
+ builder (~> 3.1)
26
+ activerecord (4.1.4)
27
+ activemodel (= 4.1.4)
28
+ activesupport (= 4.1.4)
29
+ arel (~> 5.0.0)
30
+ activesupport (4.1.4)
31
+ i18n (~> 0.6, >= 0.6.9)
32
+ json (~> 1.7, >= 1.7.7)
33
+ minitest (~> 5.1)
34
+ thread_safe (~> 0.1)
35
+ tzinfo (~> 1.1)
36
+ arel (5.0.1.20140414130214)
37
+ bcrypt (3.1.7)
38
+ builder (3.2.2)
39
+ byebug (4.0.5)
40
+ columnize (= 0.9.0)
41
+ coderay (1.1.0)
42
+ coffee-rails (4.0.1)
43
+ coffee-script (>= 2.2.0)
44
+ railties (>= 4.0.0, < 5.0)
45
+ coffee-script (2.3.0)
46
+ coffee-script-source
47
+ execjs
48
+ coffee-script-source (1.7.1)
49
+ colorize (0.7.3)
50
+ columnize (0.9.0)
51
+ devise (3.2.4)
52
+ bcrypt (~> 3.0)
53
+ orm_adapter (~> 0.1)
54
+ railties (>= 3.2.6, < 5)
55
+ thread_safe (~> 0.1)
56
+ warden (~> 1.2.3)
57
+ erubis (2.7.0)
58
+ execjs (2.2.1)
59
+ hike (1.2.3)
60
+ i18n (0.6.11)
61
+ interception (0.5)
62
+ jbuilder (1.5.3)
63
+ activesupport (>= 3.0.0)
64
+ multi_json (>= 1.2.0)
65
+ jquery-ui-rails (4.2.1)
66
+ railties (>= 3.2.16)
67
+ jquery-validation-rails (1.12.0)
68
+ railties (>= 3.2, < 5.0)
69
+ thor (~> 0.14)
70
+ json (1.8.3)
71
+ libv8 (3.16.14.3)
72
+ mail (2.5.4)
73
+ mime-types (~> 1.16)
74
+ treetop (~> 1.4.8)
75
+ method_source (0.8.2)
76
+ mime-types (1.25.1)
77
+ minitest (5.4.0)
78
+ multi_json (1.10.1)
79
+ orm_adapter (0.5.0)
80
+ polyglot (0.3.5)
81
+ pry (0.10.1)
82
+ coderay (~> 1.1.0)
83
+ method_source (~> 0.8.1)
84
+ slop (~> 3.4)
85
+ pry-byebug (3.1.0)
86
+ byebug (~> 4.0)
87
+ pry (~> 0.10)
88
+ pry-doc (0.6.0)
89
+ pry (~> 0.9)
90
+ yard (~> 0.8)
91
+ pry-rails (0.3.4)
92
+ pry (>= 0.9.10)
93
+ pry-rescue (1.4.2)
94
+ interception (>= 0.5)
95
+ pry
96
+ rack (1.5.2)
97
+ rack-test (0.6.2)
98
+ rack (>= 1.0)
99
+ rails (4.1.4)
100
+ actionmailer (= 4.1.4)
101
+ actionpack (= 4.1.4)
102
+ actionview (= 4.1.4)
103
+ activemodel (= 4.1.4)
104
+ activerecord (= 4.1.4)
105
+ activesupport (= 4.1.4)
106
+ bundler (>= 1.3.0, < 2.0)
107
+ railties (= 4.1.4)
108
+ sprockets-rails (~> 2.0)
109
+ railties (4.1.4)
110
+ actionpack (= 4.1.4)
111
+ activesupport (= 4.1.4)
112
+ rake (>= 0.8.7)
113
+ thor (>= 0.18.1, < 2.0)
114
+ rake (10.3.2)
115
+ ref (1.0.5)
116
+ sass (3.2.19)
117
+ sass-rails (4.0.3)
118
+ railties (>= 4.0.0, < 5.0)
119
+ sass (~> 3.2.0)
120
+ sprockets (~> 2.8, <= 2.11.0)
121
+ sprockets-rails (~> 2.0)
122
+ slop (3.6.0)
123
+ sprockets (2.11.0)
124
+ hike (~> 1.2)
125
+ multi_json (~> 1.0)
126
+ rack (~> 1.0)
127
+ tilt (~> 1.1, != 1.3.0)
128
+ sprockets-rails (2.1.3)
129
+ actionpack (>= 3.0)
130
+ activesupport (>= 3.0)
131
+ sprockets (~> 2.8)
132
+ sqlite3 (1.3.9)
133
+ therubyracer (0.12.1)
134
+ libv8 (~> 3.16.14.0)
135
+ ref
136
+ thor (0.19.1)
137
+ thread_safe (0.3.4)
138
+ tilt (1.4.1)
139
+ treetop (1.4.15)
140
+ polyglot
141
+ polyglot (>= 0.3.1)
142
+ turbolinks (2.2.2)
143
+ coffee-rails
144
+ tzinfo (1.2.1)
145
+ thread_safe (~> 0.1)
146
+ uglifier (1.3.0)
147
+ execjs (>= 0.3.0)
148
+ multi_json (~> 1.0, >= 1.0.2)
149
+ warden (1.2.3)
150
+ rack (>= 1.0)
151
+ yard (0.8.7.6)
152
+
153
+ PLATFORMS
154
+ ruby
155
+
156
+ DEPENDENCIES
157
+ active_model_serializers_binary!
158
+ bundler (~> 1.6)
159
+ coffee-rails (~> 4.0)
160
+ colorize (~> 0.7)
161
+ devise (~> 3.2)
162
+ jbuilder (~> 1.2)
163
+ jquery-ui-rails (~> 4.2)
164
+ jquery-validation-rails (~> 1.12)
165
+ pry
166
+ pry-byebug
167
+ pry-doc
168
+ pry-rails
169
+ pry-rescue
170
+ rails (~> 4.1)
171
+ rake (~> 10.3)
172
+ sass-rails (~> 4.0)
173
+ sqlite3 (~> 1.3)
174
+ therubyracer (~> 0.12)
175
+ turbolinks (~> 2.2)
176
+ uglifier (~> 1.3)
177
+
178
+ BUNDLED WITH
179
+ 1.11.2
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
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/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # README #
2
+
3
+ Serializador/Deserializador de bytes en Ruby
4
+
5
+ * La Serialización se realiza a partir de una instancia de un objeto para el cual se declaran los tipos para cada uno de los atributos.
6
+
7
+ * La deserialización convierte un array de bytes al objeto definido.
8
+
9
+ ### Ejemplos de uso ###
10
+
11
+
12
+ ```
13
+ #!ruby
14
+
15
+ test/dummy/lib/test_parser.rb
16
+
17
+ ```
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = ActiveModelSerializersBinary
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,32 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'ActiveModelSerializersBinary'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
22
+ require 'rake/testtask'
23
+
24
+ Rake::TestTask.new(:test) do |t|
25
+ t.libs << 'lib'
26
+ t.libs << 'test'
27
+ t.pattern = 'test/**/*_test.rb'
28
+ t.verbose = false
29
+ end
30
+
31
+
32
+ task default: :test
@@ -0,0 +1,39 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "active_model_serializers_binary/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "active_model_serializers_binary"
9
+ s.version = ActiveModelSerializersBinary::VERSION
10
+ s.authors = ["ByS Sistemas de Control"]
11
+ s.email = ["info@bys-control.com.ar"]
12
+ s.homepage = "https://github.com/bys-control/active_model_serializers_binary"
13
+ s.summary = "Serialize models to/from binary format for raw data exchange"
14
+ s.description = "Binary serializer for Ruby Active Model"
15
+ s.license = "MIT"
16
+
17
+ s.files = `git ls-files -z`.split("\x0")
18
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency "bundler", "~> 1.6"
23
+ s.add_development_dependency "rake", "~> 10.3"
24
+ s.add_development_dependency "sqlite3", "~> 1.3"
25
+ s.add_development_dependency "rails", "~> 4.1"
26
+
27
+ s.add_development_dependency 'devise', '~> 3.2'
28
+ s.add_development_dependency 'jquery-ui-rails', '~> 4.2'
29
+ s.add_development_dependency 'sass-rails', '~> 4.0'
30
+ s.add_development_dependency 'uglifier', '~> 1.3'
31
+ s.add_development_dependency 'coffee-rails', '~> 4.0'
32
+ s.add_development_dependency 'turbolinks', "~> 2.2"
33
+ s.add_development_dependency 'jbuilder', '~> 1.2'
34
+ s.add_development_dependency 'jquery-validation-rails', '~> 1.12'
35
+ s.add_development_dependency 'therubyracer', '~> 0.12'
36
+ s.add_development_dependency "colorize", '~> 0.7'
37
+
38
+ s.add_dependency "activemodel", "~> 4.1"
39
+ end
@@ -0,0 +1,217 @@
1
+ require 'active_model'
2
+ require 'active_support/core_ext/object' # Helpers para los objetos (instance_values, etc.)
3
+ require_relative 'data_types'
4
+
5
+ module ActiveModel
6
+ module Serializers
7
+ # == Active Model Binary serializer
8
+ module Binary
9
+ extend ActiveSupport::Concern
10
+ include ActiveModel::Serialization
11
+ include DataTypes
12
+
13
+ included do
14
+ extend ActiveModel::Naming
15
+
16
+ class_attribute :attr_config
17
+ self.attr_config = {}
18
+ end
19
+
20
+ module ClassMethods
21
+ def serialize_options(attr_name, coder, count=1, length=1)
22
+ self.attr_config.merge!(attr_name.to_s => {:coder => coder, :count => count, :length => length})
23
+ end
24
+ end
25
+
26
+ class Serializer #:nodoc:
27
+ attr_reader :options
28
+
29
+ def initialize(serializable, options = nil)
30
+ @serializable = serializable
31
+ @options = options ? options.dup : {}
32
+ end
33
+
34
+ def dump
35
+ serializable_values = @serializable.serializable_hash(options)
36
+ start_address = @options[:start_address] || 0
37
+
38
+ buffer = [] # Buffer en bytes
39
+ tmp_buffer = [] # Buffer temporal en bytes
40
+ current_address = start_address*2 + 0.0 # Dirección en bytes
41
+
42
+ @serializable.attr_config.each do |key, value|
43
+ var = value[:coder].new(value[:count], value[:length])
44
+ # Busca el valor del atributo y si no existe devuelve nil
45
+ var.value = serializable_values[key] rescue nil
46
+
47
+ byte = current_address.floor
48
+ bit = (current_address.modulo(1)*8).round
49
+
50
+ tmp_buffer = var.dump
51
+
52
+ if @options[:align]
53
+ # Si el dato es una palabra simple, alinea los datos en el siguiente byte par
54
+ if var.bit_length > 8 and current_address.modulo(2) != 0
55
+ byte += 1
56
+ bit = 0
57
+ end
58
+ # Si el dato es una palabra doble, alinea los datos en la siguiente palabra par
59
+ if var.bit_length > 16 and (current_address + start_address*2).modulo(4) != 0
60
+ byte += 4-byte%4
61
+ bit = 0
62
+ end
63
+ end
64
+
65
+ # Si los datos ocupan mas de un byte concatena los arrays
66
+ if var.bit_length >= 8 and @options[:align]
67
+ buffer.insert(byte, tmp_buffer).flatten!
68
+ else # En caso de ser bits
69
+ tmp_buffer.flatten!
70
+ tmp_bits=tmp_buffer.pack('C*').unpack('b*').first.slice(0,var.size*8)
71
+ tmp_buffer=[tmp_bits.rjust(tmp_bits.length+bit,'0')].pack('b*').unpack('C*')
72
+
73
+ tmp_buffer.each_with_index do |v,i|
74
+ buffer[byte+i] = (buffer[byte+i] || 0) | v
75
+ end
76
+ end
77
+
78
+ current_address = (byte+bit/8.0)+var.size
79
+ end
80
+ buffer.map!{|el| el || 0}
81
+ end
82
+
83
+ #deserializado
84
+ def load (buffer=[])
85
+ serialized_values = {}
86
+ start_address = @options[:start_address] || 0
87
+
88
+ buffer ||= [] # Buffer en bytes
89
+ tmp_buffer = [] # Buffer temporal en bytes
90
+
91
+ current_address = start_address*2 + 0.0 # Dirección en bytes
92
+
93
+ @serializable.attr_config.each do |key, value|
94
+ #puts "#{key} - #{value}"
95
+ byte = current_address.floor
96
+ bit = (current_address.modulo(1)*8).round
97
+
98
+ var = value[:coder].new(value[:count], value[:length]) #creo objeto del tipo de dato pasado
99
+
100
+ if @options[:align]
101
+ # Si el dato es una palabra simple, alinea los datos en el siguiente byte par
102
+ if var.bit_length > 8 and current_address.modulo(2) != 0
103
+ byte += 1
104
+ bit = 0
105
+ end
106
+ # Si el dato es una palabra doble, alinea los datos en la siguiente palabra par
107
+ if var.bit_length > 16 and (current_address + start_address*2).modulo(4) != 0
108
+ byte += 4-byte%4
109
+ bit = 0
110
+ end
111
+ end
112
+
113
+ # Si los datos ocupan mas de un byte, obtiene los bytes completos del buffer original
114
+ if var.bit_length >= 8 and @options[:align]
115
+ result_deserialized=var.load(buffer.slice(byte, var.size))
116
+ else # En caso de ser bits
117
+ tmp_buffer = buffer.slice(byte, var.size.ceil)
118
+ result_deserialized=var.load([tmp_buffer.pack('C*').unpack('b*').first.slice(bit,var.size*8)].pack('b*').unpack('C*'))
119
+ end
120
+ # puts result_deserialized.inspect
121
+ serialized_values["#{key}"] = result_deserialized.count>1 ? result_deserialized : result_deserialized.first
122
+ current_address = (byte+bit/8.0)+var.size
123
+ end
124
+
125
+ # if !@serializable.instance_variable_get(:@attributes).nil?
126
+ # @serializable.instance_variable_get(:@attributes).merge!(serialized_values) rescue nil
127
+ # else
128
+ serialized_values.each do |k,v|
129
+ if @serializable.respond_to? "#{k}="
130
+ @serializable.send("#{k}=", v)
131
+ else
132
+ @serializable.instance_variable_set("@#{k}".to_sym, v)
133
+ end
134
+ end
135
+ #end
136
+ @serializable
137
+ end
138
+
139
+ end #close class serializer
140
+
141
+ # Returns XML representing the model. Configuration can be
142
+ # passed through +options+.
143
+ #
144
+ # Without any +options+, the returned XML string will include all the
145
+ # model's attributes.
146
+ #
147
+ # user = User.find(1)
148
+ # user.to_xml
149
+ #
150
+ # <?xml version="1.0" encoding="UTF-8"?>
151
+ # <user>
152
+ # <id type="integer">1</id>
153
+ # <name>David</name>
154
+ # <age type="integer">16</age>
155
+ # <created-at type="dateTime">2011-01-30T22:29:23Z</created-at>
156
+ # </user>
157
+ #
158
+ # The <tt>:only</tt> and <tt>:except</tt> options can be used to limit the
159
+ # attributes included, and work similar to the +attributes+ method.
160
+ #
161
+ # To include the result of some method calls on the model use <tt>:methods</tt>.
162
+ #
163
+ # To include associations use <tt>:include</tt>.
164
+ #
165
+ # For further documentation, see <tt>ActiveRecord::Serialization#to_xml</tt>
166
+ def to_bytes(options = {}, &block)
167
+ default_options = {
168
+ :align => true,
169
+ :block => block
170
+ }
171
+ options = default_options.deep_merge(options)
172
+ if !options[:block].blank?
173
+ instance_exec(self, &options[:block])
174
+ end
175
+ Serializer.new(self, options).dump
176
+ end
177
+
178
+ # Sets the model +attributes+ from an XML string. Returns +self+.
179
+ #
180
+ # class Person
181
+ # include ActiveModel::Serializers::Xml
182
+ #
183
+ # attr_accessor :name, :age, :awesome
184
+ #
185
+ # def attributes=(hash)
186
+ # hash.each do |key, value|
187
+ # instance_variable_set("@#{key}", value)
188
+ # end
189
+ # end
190
+ #
191
+ # def attributes
192
+ # instance_values
193
+ # end
194
+ # end
195
+ #
196
+ # xml = { name: 'bob', age: 22, awesome:true }.to_xml
197
+ # person = Person.new
198
+ # person.from_xml(xml) # => #<Person:0x007fec5e3b3c40 @age=22, @awesome=true, @name="bob">
199
+ # person.name # => "bob"
200
+ # person.age # => 22
201
+ # person.awesome # => true
202
+ def from_bytes(buffer, options = {}, &block)
203
+ default_options = {
204
+ :align => true,
205
+ :block => block
206
+ }
207
+ options = default_options.deep_merge(options)
208
+ retVal = Serializer.new(self, options).load buffer
209
+
210
+ if !options[:block].blank?
211
+ instance_exec(self, &options[:block])
212
+ end
213
+ retVal
214
+ end
215
+ end
216
+ end
217
+ end