active_model_version_serializers 0.0.2

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/.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: