active_model_version_serializers 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format Fuubar
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - ree
4
+ - jruby
5
+ - rbx
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in active_model_version_serializer.gemspec
4
+ gemspec
5
+
6
+ gem "pry"
7
+ gem "simplecov", :require => false
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 hookercookerman
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,111 @@
1
+ [![Build
2
+ Status](https://secure.travis-ci.org/hookercookerman/active_model_version_serializers.png)](http://travis-ci.org/hookercookerman/active_model_version_serializers)
3
+
4
+ # ActiveModel::VersionSerializer
5
+
6
+ fairly short name. This is a little spin on active model serializers
7
+
8
+ # what is that?
9
+
10
+ The purpose of `ActiveModel::Serializers` is to provide an object to
11
+ encapsulate serialization of `ActiveModel` objects, including `ActiveRecord`
12
+ objects.
13
+
14
+ Serializers know about both a model and the `current_user`, so you can
15
+ customize serialization based upon whether a user is authorized to see the
16
+ content.
17
+
18
+ In short, **serializers replaces hash-driven development with object-oriented
19
+ development.**
20
+
21
+ More Information Go See [ActiveModel::Serializer](https://github.com/josevalim/active_model_serializers)
22
+ # Versioning
23
+
24
+ ## Why?
25
+
26
+ Good Question!
27
+
28
+ When building an api; one would go through various changes in terms of
29
+ versioning. you could seperate this out into modules and that is my
30
+ perfered way. But hey why not have a place where you can easily see
31
+ changes in an expressive way.
32
+
33
+ ## Show Me
34
+
35
+ Has the same api as active_model_serializers however we can define
36
+ a named version block. it also has some extra source for using
37
+ previously defined version attributes.
38
+
39
+ Notice we inherit from `ActiveModel::VersionSerializer`
40
+
41
+ ```ruby
42
+ class UserSerializer < ActiveModel::VersionSerializer
43
+
44
+ version :v1 do
45
+ attributes :name, :remote_image, :likes_beans, :id
46
+ end
47
+
48
+ version :v2 do
49
+ version_attributes :v1, without: [:likes_beans, :remote_image]
50
+ end
51
+
52
+ version :v3 do
53
+ version_attributes :v1, with: :date_of_birth
54
+ embed :ids, :include => true
55
+ has_many :turns
56
+ end
57
+ end
58
+ ```
59
+ ## Explict Version
60
+
61
+ ```ruby
62
+ UserSerializer.new(user, version: v3)
63
+ ```
64
+
65
+ ## Controller
66
+
67
+ `ActiveModel::Serializers` gives you some controller goodness in terms
68
+ of defining scope for your serializers but you now also specify a
69
+ version.
70
+
71
+ ```ruby
72
+ # Any logic that you have to determine the version wanted for that request
73
+ # can go here!
74
+ def default_serializer_options
75
+ {version: some_method_determining_version}
76
+ end
77
+ ```
78
+
79
+ ## I want to specify a default VERSION
80
+
81
+ ok
82
+
83
+ ```ruby
84
+ ActiveModel::VersionSerializer.default :v3
85
+ ```
86
+
87
+
88
+ ## Installation
89
+
90
+ Add this line to your application's Gemfile:
91
+
92
+ gem 'active_model_version_serializers'
93
+
94
+ And then execute:
95
+
96
+ $ bundle
97
+
98
+ Or install it yourself as:
99
+
100
+ $ gem install active_model_version_serializers
101
+
102
+ ## Usage
103
+
104
+
105
+ ## Contributing
106
+
107
+ 1. Fork it
108
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
109
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
110
+ 4. Push to the branch (`git push origin my-new-feature`)
111
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ desc "Run the specs"
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.rspec_opts = %w[--color]
9
+ end
10
+
11
+ task :default => :spec
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "active_model/version_serializers/version"
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "active_model_version_serializers"
8
+ gem.version = ActiveModel::VersionSerializer::VERSION
9
+ gem.authors = ["hookercookerman"]
10
+ gem.email = ["hookercookerman@gmail.com"]
11
+ gem.description = %q{Active Model Serializer with versioning}
12
+ gem.summary = %q{Active Model Serializer with versioning}
13
+ gem.homepage = "http://thehitchhikerprinciple.com"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency 'active_model_serializers', '~>0.5.2'
21
+ gem.add_dependency "activesupport", ">= 3.0.0"
22
+
23
+ gem.add_development_dependency "rspec", "~> 2.11.0"
24
+ gem.add_development_dependency "factory_girl", "~> 4.0.0"
25
+ gem.add_development_dependency "fuubar", "~> 1.0.0"
26
+ gem.add_development_dependency "activemodel", "~> 3.2.8"
27
+ end
@@ -0,0 +1,107 @@
1
+ require "active_model_serializers"
2
+ require "active_support/concern"
3
+ require 'active_support/core_ext/class/attribute_accessors'
4
+ require 'active_support/core_ext/hash/slice'
5
+
6
+ module ActiveModel
7
+ class VersionSerializer
8
+ class_attribute :_versions, :_default, :_root, :_name
9
+ self._versions, self._default = {}, :v1
10
+ attr_reader :object, :options, :version, :vklass
11
+
12
+ def initialize(object, options = {})
13
+ @object, @options = object, options
14
+ @version = @options[:version] || _default
15
+ @vklass = self._versions[@version]
16
+ @vinstance = @vklass.new(@object, @options)
17
+ end
18
+
19
+ def self.default(version)
20
+ self._default = version
21
+ end
22
+
23
+ # Defines the root used on serialization. If false, disables the root.
24
+ def self.root(name)
25
+ self._root = name
26
+ end
27
+
28
+ # Replication of inherited from active_model_serializer but we
29
+ # get the name so we can define the correct name on each version
30
+ #
31
+ # of defined active model serializers
32
+ def self.inherited(klass) #:nodoc:
33
+ return if klass.anonymous?
34
+ name = klass.name.demodulize.underscore.sub(/_serializer$/, '')
35
+ self._name = name
36
+ klass.class_eval do
37
+ alias_method name.to_sym, :object
38
+ root name.to_sym unless self._root == false
39
+ end
40
+ end
41
+
42
+ # creates a anoymous subclass of ActiveModel::Serializer
43
+ # setting the root from base alias of the serialbe object
44
+ # with the name
45
+ #
46
+ # version_attributes so less typing if the versions are similar
47
+ # options :with and :without.
48
+ #
49
+ # @example
50
+ # version :v1 do
51
+ # attributes :beans, :eggs
52
+ # end
53
+ #
54
+ # version :v2 do
55
+ # version_attributes :v1, with: :toast
56
+ # end
57
+ #
58
+ # @param [Symbol] version
59
+ # @param [Proc] block
60
+ def self.version(version, &block)
61
+ base_class = self
62
+ vklass = Class.new(ActiveModel::Serializer) do
63
+ self.root(base_class._root)
64
+ alias_method base_class._name.to_sym, :object
65
+
66
+ singleton_class.class_eval do
67
+ define_method(:to_s) do
68
+ "(#{base_class.name} VERSION: #{version})"
69
+ end
70
+ alias inspect to_s
71
+ end
72
+
73
+ define_singleton_method(:version_attributes) do |v, options = {}|
74
+ version_attributes = base_class._versions[v]._attributes.keys
75
+ version_options = options.extract!(:without, :with)
76
+ if with_attributes = version_options[:with]
77
+ version_attributes = (version_attributes + [*with_attributes])
78
+ end
79
+ if without_attributes = version_options[:without]
80
+ version_attributes = (version_attributes - [*without_attributes])
81
+ end
82
+ attributes(*version_attributes)
83
+ end
84
+ self.class_eval(&block)
85
+ end
86
+
87
+ # mutables with class attribute use setters!
88
+ self._versions = self._versions.merge({version => vklass})
89
+ end
90
+
91
+ private
92
+ def method_missing(method, *args)
93
+ if @vinstance.respond_to?(method)
94
+ @vinstance.send(method, *args)
95
+ else
96
+ super
97
+ end
98
+ end
99
+
100
+ # lets be nice to method
101
+ def respond_to_missing?(method_name, include_private = false)
102
+ @vinstance.respond_to_missing?(method_name, include_private)
103
+ end
104
+
105
+ end
106
+ end
107
+
@@ -0,0 +1,5 @@
1
+ module ActiveModel
2
+ class VersionSerializer
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require "active_model/version_serializer"
@@ -0,0 +1,89 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ describe "UserSerialization" do
5
+ context "v1" do
6
+ context "serialization of a user object" do
7
+ let(:user_attributes) do
8
+ FactoryGirl.attributes_for(:v1_user)
9
+ end
10
+
11
+ let(:user) do
12
+ FactoryGirl.build(:v1_user, user_attributes)
13
+ end
14
+
15
+ let(:user_serializer) do
16
+ UserSerializer.new(user)
17
+ end
18
+
19
+ subject{user_serializer.as_json}
20
+ it{should eq({user: user_attributes})}
21
+ end
22
+ end
23
+
24
+ context "v2" do
25
+ let(:user_attributes) do
26
+ FactoryGirl.attributes_for(:v2_user)
27
+ end
28
+
29
+ let(:user) do
30
+ FactoryGirl.build(:v2_user, user_attributes)
31
+ end
32
+
33
+ let(:user_serializer) do
34
+ UserSerializer.new(user, version: :v2)
35
+ end
36
+
37
+ subject{user_serializer.as_json}
38
+ it{should eq({user: user_attributes})}
39
+ end
40
+
41
+ context "v3" do
42
+ let(:user_attributes) do
43
+ FactoryGirl.attributes_for(:v3_user)
44
+ end
45
+
46
+ let(:turn_attributes_1) do
47
+ FactoryGirl.attributes_for :v3_turn
48
+ end
49
+
50
+ let(:turn_attributes_2) do
51
+ FactoryGirl.attributes_for :v3_turn
52
+ end
53
+
54
+ let(:turn_attributes_3) do
55
+ FactoryGirl.attributes_for :v3_turn
56
+ end
57
+
58
+ let(:turn_1) do
59
+ FactoryGirl.build(:v3_turn, turn_attributes_1)
60
+ end
61
+
62
+ let(:turn_2) do
63
+ FactoryGirl.build(:v3_turn, turn_attributes_2)
64
+ end
65
+
66
+ let(:turn_3) do
67
+ FactoryGirl.build(:v3_turn, turn_attributes_3)
68
+ end
69
+
70
+ let(:turns) do
71
+ [turn_1, turn_2, turn_3]
72
+ end
73
+
74
+ let(:turn_attributes) do
75
+ [turn_attributes_1, turn_attributes_2, turn_attributes_3]
76
+ end
77
+
78
+ let(:user) do
79
+ FactoryGirl.build(:v3_user, user_attributes.merge(turns: turns))
80
+ end
81
+
82
+ let(:user_serializer) do
83
+ UserSerializer.new(user, version: :v3)
84
+ end
85
+
86
+ subject{user_serializer.as_json}
87
+ it{should eq({user: user_attributes.merge(turns: [1,2,3]), turns: turn_attributes})}
88
+ end
89
+ end
@@ -0,0 +1,25 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ unless ENV["TRAVIS"]
5
+ require 'simplecov'
6
+ SimpleCov.start do
7
+ add_group "lib", "lib"
8
+ add_group "spec", "spec"
9
+ end
10
+ end
11
+
12
+ require "pry"
13
+ require "active_model_version_serializers"
14
+
15
+ Dir.glob(File.expand_path('../../spec/support/**/*.rb', __FILE__)) do |file|
16
+ require file
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+ config.filter_run :focus => true
21
+ config.run_all_when_everything_filtered = true
22
+ config.after(:each) do
23
+ ActiveModel::VersionSerializer.default :v1
24
+ end
25
+ end
@@ -0,0 +1,46 @@
1
+ require 'factory_girl'
2
+
3
+ FactoryGirl.define do
4
+
5
+ factory :user do
6
+ trait :base do
7
+ sequence(:id)
8
+ name {'Richardo Alfrono'}
9
+ end
10
+
11
+ trait :version_1 do
12
+ remote_image { "http://placekitten.com/400/400" }
13
+ likes_beans { true}
14
+ end
15
+
16
+ trait :version_2 do
17
+ likes_eggs {true}
18
+ end
19
+
20
+ trait :version_3 do
21
+ date_of_birth { Time.now }
22
+ end
23
+
24
+ factory :v1_user, traits: [:base, :version_1]
25
+ factory :v2_user, traits: [:base]
26
+ factory :v3_user, traits: [:base, :version_1, :version_3]
27
+ factory :v4_user, traits: [:base, :version_1, :version_2]
28
+ end
29
+
30
+ factory :turn do
31
+
32
+ trait :turn_version_1 do
33
+ sequence(:id)
34
+ name {"Doing the eggs"}
35
+ score {7}
36
+ end
37
+
38
+ trait :turn_version_2 do
39
+ image {"http://placekitten.com/400/400"}
40
+ end
41
+ factory :v1_turn, traits: [:turn_version_1]
42
+ factory :v2_turn, traits: [:turn_version_1, :turn_version_2]
43
+ factory :v3_turn, traits: [:turn_version_1, :turn_version_2]
44
+ factory :v4_turn, traits: [:turn_version_1, :turn_version_2]
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ class Turn
2
+ include ActiveModel::SerializerSupport
3
+ attr_accessor :name, :score, :image, :id
4
+ end
@@ -0,0 +1,4 @@
1
+ class User
2
+ include ActiveModel::SerializerSupport
3
+ attr_accessor :name, :date_of_birth, :likes_eggs, :likes_beans, :remote_image, :turns, :id
4
+ end
@@ -0,0 +1,15 @@
1
+ class TurnSerializer < ActiveModel::VersionSerializer
2
+
3
+ version :v1 do
4
+ attributes :id, :name, :score
5
+ end
6
+
7
+ version :v2 do
8
+ version_attributes :v1, without: :score
9
+ end
10
+
11
+ version :v3 do
12
+ version_attributes :v1, with: :image
13
+ end
14
+
15
+ end
@@ -0,0 +1,17 @@
1
+ class UserSerializer < ActiveModel::VersionSerializer
2
+
3
+ version :v1 do
4
+ attributes :name, :remote_image, :likes_beans, :id
5
+ end
6
+
7
+ version :v2 do
8
+ version_attributes :v1, without: [:likes_beans, :remote_image]
9
+ end
10
+
11
+ version :v3 do
12
+ version_attributes :v1, with: :date_of_birth
13
+ embed :ids, :include => true
14
+ has_many :turns
15
+ end
16
+ end
17
+
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ describe "Active Model Serializing With Versioning" do
5
+ context "VersionSerializer" do
6
+ subject{ActiveModel::VersionSerializer}
7
+ its(:_default){should eq(:v1)}
8
+ it{should respond_to :version}
9
+ end
10
+
11
+ context "defining an new default" do
12
+ describe "#default" do
13
+ before do
14
+ ActiveModel::VersionSerializer.default :v2
15
+ end
16
+ subject{ActiveModel::VersionSerializer}
17
+ its(:_default){should eq(:v2)}
18
+ end
19
+
20
+ context "subclasses"do
21
+ before do
22
+ ActiveModel::VersionSerializer.default :v2
23
+ end
24
+ subject{UserSerializer}
25
+ its(:_default){should eq(:v2)}
26
+ context "chaning again" do
27
+ before do
28
+ ActiveModel::VersionSerializer.default :v3
29
+ end
30
+ its(:_default){should eq(:v3)}
31
+ end
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_model_version_serializers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - hookercookerman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active_model_serializers
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.5.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.5.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.11.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.11.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: factory_girl
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 4.0.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 4.0.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: fuubar
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 1.0.0
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 1.0.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: activemodel
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 3.2.8
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 3.2.8
110
+ description: Active Model Serializer with versioning
111
+ email:
112
+ - hookercookerman@gmail.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - .rspec
119
+ - .travis.yml
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - active_model_version_serializers.gemspec
125
+ - lib/active_model/version_serializer.rb
126
+ - lib/active_model/version_serializers/version.rb
127
+ - lib/active_model_version_serializers.rb
128
+ - spec/scenerio/user_serialization_spec.rb
129
+ - spec/spec_helper.rb
130
+ - spec/support/factories.rb
131
+ - spec/support/models/turn.rb
132
+ - spec/support/models/user.rb
133
+ - spec/support/serializers/turn_serializer.rb
134
+ - spec/support/serializers/user_serializer.rb
135
+ - spec/version_spec.rb
136
+ homepage: http://thehitchhikerprinciple.com
137
+ licenses: []
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 1.8.24
157
+ signing_key:
158
+ specification_version: 3
159
+ summary: Active Model Serializer with versioning
160
+ test_files:
161
+ - spec/scenerio/user_serialization_spec.rb
162
+ - spec/spec_helper.rb
163
+ - spec/support/factories.rb
164
+ - spec/support/models/turn.rb
165
+ - spec/support/models/user.rb
166
+ - spec/support/serializers/turn_serializer.rb
167
+ - spec/support/serializers/user_serializer.rb
168
+ - spec/version_spec.rb
169
+ has_rdoc: