cerializable 0.1.0 → 0.2.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.
@@ -1,13 +1,17 @@
1
1
  require 'test_helper'
2
2
 
3
- class ActsAsCerializableTest < ActiveSupport::TestCase
3
+ class ModelTest < ActiveSupport::TestCase
4
4
 
5
5
  test "ActiveRecord::Base#acts_as_cerializable" do
6
6
  assert true, ActiveRecord::Base.respond_to?(:acts_as_cerializable)
7
7
  end
8
8
 
9
+ test "ActiveRecord::Base#cerializable" do
10
+ assert true, ActiveRecord::Base.respond_to?(:cerializable)
11
+ end
12
+
9
13
  # Ensure both models are serializing their instances as expected
10
- [Model, AnotherModel].each { |model_class|
14
+ [Model, AnotherModel, SomePoroClass].each { |model_class|
11
15
 
12
16
  test "#{ model_class.name }#cerializer is defined" do
13
17
  assert_equal model_class.send(:cerializer).class, Cerializable::Cerializer
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cerializable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Arnold
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-12 00:00:00.000000000 Z
11
+ date: 2016-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.1.0
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -38,7 +38,21 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: Flexible custom serialization for Rails models.
41
+ - !ruby/object:Gem::Dependency
42
+ name: appraisal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Flexible custom serialization for Ruby objects.
42
56
  email:
43
57
  - eric.ed.arnold@gmail.com
44
58
  executables: []
@@ -48,11 +62,10 @@ files:
48
62
  - MIT-LICENSE
49
63
  - Rakefile
50
64
  - lib/cerializable.rb
51
- - lib/cerializable/acts_as_cerializable.rb
52
65
  - lib/cerializable/cerializer.rb
66
+ - lib/cerializable/model.rb
53
67
  - lib/cerializable/version.rb
54
68
  - lib/tasks/cerializable_tasks.rake
55
- - test/acts_as_cerializable_test.rb
56
69
  - test/cerializable_test.rb
57
70
  - test/dummy/README.rdoc
58
71
  - test/dummy/Rakefile
@@ -62,8 +75,10 @@ files:
62
75
  - test/dummy/app/helpers/application_helper.rb
63
76
  - test/dummy/app/models/another_model.rb
64
77
  - test/dummy/app/models/model.rb
78
+ - test/dummy/app/models/some_poro_class.rb
65
79
  - test/dummy/app/serializers/another_serializer.rb
66
80
  - test/dummy/app/serializers/model_serializer.rb
81
+ - test/dummy/app/serializers/some_poro_class_serializer.rb
67
82
  - test/dummy/app/views/layouts/application.html.erb
68
83
  - test/dummy/bin/bundle
69
84
  - test/dummy/bin/rails
@@ -103,6 +118,7 @@ files:
103
118
  - test/dummy/test/fixtures/models.yml
104
119
  - test/dummy/test/models/another_model_test.rb
105
120
  - test/dummy/test/models/model_test.rb
121
+ - test/model_test.rb
106
122
  - test/test_helper.rb
107
123
  homepage: https://github.com/nativestranger/cerializable
108
124
  licenses:
@@ -127,9 +143,8 @@ rubyforge_project:
127
143
  rubygems_version: 2.6.6
128
144
  signing_key:
129
145
  specification_version: 4
130
- summary: Flexible custom serialization for Rails models
146
+ summary: Flexible custom serialization for Ruby objects
131
147
  test_files:
132
- - test/acts_as_cerializable_test.rb
133
148
  - test/cerializable_test.rb
134
149
  - test/dummy/app/assets/javascripts/application.js
135
150
  - test/dummy/app/assets/stylesheets/application.css
@@ -137,8 +152,10 @@ test_files:
137
152
  - test/dummy/app/helpers/application_helper.rb
138
153
  - test/dummy/app/models/another_model.rb
139
154
  - test/dummy/app/models/model.rb
155
+ - test/dummy/app/models/some_poro_class.rb
140
156
  - test/dummy/app/serializers/another_serializer.rb
141
157
  - test/dummy/app/serializers/model_serializer.rb
158
+ - test/dummy/app/serializers/some_poro_class_serializer.rb
142
159
  - test/dummy/app/views/layouts/application.html.erb
143
160
  - test/dummy/bin/bundle
144
161
  - test/dummy/bin/rails
@@ -180,4 +197,5 @@ test_files:
180
197
  - test/dummy/test/fixtures/models.yml
181
198
  - test/dummy/test/models/another_model_test.rb
182
199
  - test/dummy/test/models/model_test.rb
200
+ - test/model_test.rb
183
201
  - test/test_helper.rb
@@ -1,84 +0,0 @@
1
- module Cerializable
2
- module ActsAsCerializable
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- # #cerializable_hash delegates to the #run method of the model's 'cerializer' object.
7
- #
8
- # It accepts `:only`, `:except`, and `:methods` options which can be passed as a
9
- # symbol or as an array of symbols.
10
- #
11
- # Using the `:only` option will return a hash that only has the specified keys.
12
- #
13
- # > comment.cerializable_hash(only: :id)
14
- # => { id: 1 }
15
- #
16
- # Using the `:except` option will return a hash that has all default keys except those specified.
17
- #
18
- # > comment.cerializable_hash(except: [:id, :user_id])
19
- # => { body: '...sushi? ;)', deleted_at: nil }
20
- #
21
- # Using the `:methods` option add will add a key and value for each method specified.
22
- #
23
- # The key is the method name as a symbol.
24
- # The value is the return value given when calling the method on the model instance.
25
- #
26
- # The :methods option is processed after the :only and :except options.
27
- #
28
- # > comment.cerializable_hash(only: id, methods: :hash])
29
- # => { id: 1, hash: -2535926706119161824 }
30
- #
31
- def cerializable_hash(options = {})
32
- [:only, :except, :methods].each do |option_name|
33
- next if options[option_name].nil?
34
-
35
- unless options[option_name].is_a?(Symbol) || options[option_name].is_a?(Array)
36
- raise Exception, "'#{ option_name }' option must be of an Array or Symbol class."
37
- end
38
- end
39
-
40
- # serialize the instance using the class's cerializer object.
41
- hash = self.class.cerializer.run(self, options)
42
-
43
- # alter the hash according to the :only, :except, and :methods serialization options.
44
- ensure_is_array = proc { |arg| arg.class.ancestors.include?(Array) ? arg : Array.new(1, arg) }
45
-
46
- if except_options = options[:except] && ensure_is_array.call(options[:except])
47
- except_options.each { |key| hash.delete(key) }
48
- end
49
-
50
- if only_options = options[:only] && ensure_is_array.call(options[:only])
51
- hash.keys.each { |key| hash.delete(key) unless only_options.include?(key) }
52
- end
53
-
54
- if methods_options = options[:methods] && ensure_is_array.call(options[:methods])
55
- methods_options.each { |method_name| hash[method_name] = self.send(method_name) }
56
- end
57
-
58
- hash
59
- end
60
-
61
- end
62
-
63
- module ClassMethods
64
- # `acts_as_cerializable` is used to declare that a
65
- # model uses Cerializable for serialization.
66
- #
67
- # Unless a module is specified via the
68
- # +serialize_with+ option, the base model's cerializer will attempt
69
- # to include a module based on the model's name.
70
- #
71
- # For example, calling +Comment.acts_as_cerializable+ without a +serialize_with+
72
- # option will cause Cerializable to look for a +CommentSerializer+.
73
- #
74
- # Calling +Comment.acts_as_cerializable+ +serialize_with:+ +MySerializer+
75
- # will cause Cerializable to look for a +MySerializer+ instead.
76
- def acts_as_cerializable(options = {})
77
- Cerializable.setup(options.merge(base: self))
78
- end
79
- end
80
-
81
- end
82
- end
83
-
84
- ActiveRecord::Base.send :include, Cerializable::ActsAsCerializable