Breaking changes:
- #1360 #1369 Drop support for Ruby 1.9.3 (@karaAJC, @maurogeorge)
- #1131 Remove Serializer#root_name (@beauby)
- #1138 Introduce Adapter::Base (@bf4)
- Adapters now inherit Adapter::Base. 'Adapter' is now a module, no longer a class.
- using a class as a namespace that you also inherit from is complicated and circular at times i.e. buggy (see rails-api#1177)
- The class methods on Adapter aren't necessarily related to the instance methods, they're more Adapter functions.
- named
Base
because it's a Rails-ism. - It helps to isolate and highlight what the Adapter interface actually is.
- Adapters now inherit Adapter::Base. 'Adapter' is now a module, no longer a class.
- #1418 serialized collections now use the root option as is; now, only the root derived from the serializer or object is always pluralized.
Features:
- #1406 Allow for custom dynamic values in JSON API links (@beauby)
- #1270 Adds
assert_response_schema
test helper (@maurogeorge) - #1099 Adds
assert_serializer
test helper (@maurogeorge) - #1403 Add support for if/unless on attributes/associations (@beauby)
- #1248 Experimental: Add support for JSON API deserialization (@beauby)
- #1378 Change association blocks
to be evaluated in serializer scope, rather than association scope. (@bf4)
- Syntax changes from e.g.
has_many :titles do customers.pluck(:title) end
(in #1356) tohas_many :titles do object.customers.pluck(:title) end
- Syntax changes from e.g.
- #1356 Add inline syntax for
attributes and associations (@bf4 @beauby @noahsilas)
- Allows defining attributes so that they don't conflict with existing methods. e.g.
attribute :title do 'Mr. Topum Hat' end
- Allows defining associations so that they don't conflict with existing methods. e.g.
has_many :titles do customers.pluck(:title) end
- Allows dynamic associations, as compared to compare to using
virtual_value
. e.g.has_many :reviews, virtual_value: [{ id: 1 }, { id: 2 }]
- Allows dynamic associations, as compared to compare to using
- Removes dynamically defined methods on the serializer
- Allows defining attributes so that they don't conflict with existing methods. e.g.
- #1336 Added support for Grape >= 0.13, < 1.0 (@johnhamelink)
- #1322 Instrumenting rendering of resources (@bf4, @maurogeorge)
- #1291 Add logging (@maurogeorge)
- #1272 Add PORO serializable base class: ActiveModelSerializers::Model (@bf4)
- #1255 Make more class attributes inheritable (@bf4)
- #1249 Inheritance of serializer inheriting the cache configuration(@Rodrigora)
- #1247 Add support for toplevel JSON API links (@beauby)
- #1246 Add support for resource-level JSON API links (@beauby)
- #1225 Better serializer lookup, use nested serializer when it exists (@beauby)
- #1213
type
directive for serializer to control type field with json-api adapter (@youroff) - #1172 Better serializer registration, get more than just the first module (@bf4)
- #1158 Add support for wildcards in
include
option (@beauby) - #1127 Add support for nested
associations for JSON and Attributes adapters via the
include
option (@NullVoxPopuli, @beauby). - #1050 Add support for toplevel jsonapi member (@beauby, @bf4)
- #1251 Rename ArraySerializer to CollectionSerializer for clarity, add ActiveModelSerializers.config.collection_serializer (@bf4)
- #1295 Add config
serializer_lookup_enabled
that, when disabled, requires serializers to explicitly specified. (@trek)
Fixes:
- #1352 Fix generators; Isolate Rails-specifc code in Railties (@dgynn, @bf4)
- #1384Fix database state leaking across tests (@bf4)
- #1297 Fix
fields
option to restrict relationships as well (@beauby) - #1239 Fix duplicates in JSON API compound documents (@beauby)
- #1214 retrieve the key from the reflection options when building associations (@NullVoxPopuli, @hut8)
- #1358 Handle serializer file paths with spaces (@rwstauner, @bf4)
- #1195 Fix id override (@beauby)
- #1185 Fix options passing in Json and Attributes adapters (@beauby)
Misc:
- #1383 Simplify reflections handling (@beauby)
- #1370 Simplify attributes handling via a mixin (@beauby)
- #1301 Mapping JSON API spec / schema to AMS (@bf4)
- #1271 Handle no serializer source file to digest (@bf4)
- #1260 Serialization and Cache Documentation (@bf4)
- #1259 Add more info to CONTRIBUTING (@bf4)
- #1233 Top-level meta and meta_key options no longer handled at serializer level (@beauby)
- #1232 fields option no longer handled at serializer level (@beauby)
- #1220 Remove empty rubocop.rake (@maurogeorge)
- #1178 env CAPTURE_STDERR=false lets devs see hard failures (@bf4)
- #1177 Remove Adapter autoloads in favor of require (@bf4)
- #1117 FlattenJson adapter no longer inherits Json adapter, renamed to Attributes (@bf4)
- #1171 add require statements to top of file (@shicholas)
- #1167 Delegate Serializer.attributes to Serializer.attribute (@bf4)
- #1174 Consistently refer to the 'JSON API' and the 'JsonApi' adapter (@bf4)
- #1173 Comment private accessor warnings (@bf4)
- #1166 Prefer methods over instance variables (@bf4)
- #1168 Fix appveyor failure cache not being expired (@bf4)
- #1161 Remove duplicate test helper (@bf4)
- #1360 Update CI to test 2.2.2 -> 2.2.3 (@karaAJC)
- #1371 Refactor, update, create documentation (@bf4)
- #1129 Remove SerializableResource.serialize in favor of
.new
(@bf4) - #1155 Outside controller use tutorial (@CodedBeardedSignedTaylor)
- #1154 Rubocop fixes for issues introduced by #1089 (@NullVoxPopuli)
- #1089 Add ActiveModelSerializers.logger with default null device (@bf4)
- #1109 Make better use of Minitest's lifecycle (@bf4)
- #1144 Fix Markdown to adapters documentation (@bacarini)
- #1121 Refactor
add_links
in JSONAPI adapter. (@beauby) - #1150 Remove legacy method accidentally reintroduced in #1017 (@beauby)
- #1149 Update README with nested included association example. (@mattmueller)
- #1110 Add lint tests for AR models (@beauby)
- #1131 Extended format for JSONAPI
include
option (@beauby)- adds extended format for
include
option to JsonApi adapter
- adds extended format for
- #1142 Updating wording on cache expiry in README (@leighhalliday)
- #1140 Fix typo in fieldset exception (@lautis)
- #1132 Get rid of unnecessary instance variables, and implied dependencies. (@beauby)
- #1139 Documentation for serializing resources without render (@PericlesTheo)
- #1017 Make Adapters registerable so they are not namespace-constrained (@bf4)
- #1120 Add windows platform to loading sqlite3 (@Eric-Guo)
- #1123 Remove url options (@bacarini)
- #1093 Factor
with_adapter
+ force cache clear before each test. (@beauby) - #1095 Add documentation about configuration options. (@beauby)
- #1069 Add test coverage; account for no artifacts on CI (@bf4)
- #1103 Move
id
andjson_api_type
methods fromSerializer
toJsonApi
. (@beauby) - #1106 Add Style enforcer (via Rubocop) (@bf4)
- #1079 Add ArraySerializer#object like Serializer (@bf4)
- #1096 Fix definition of serializer attributes with multiple calls to `attri… (@beauby)
- #1105 Add ActiveRecord-backed fixtures. (@beauby)
- #1108 Better lint (@bf4)
- #1102 Remove remains of
embed
option. (@beauby) - #1090 Clarify AMS dependencies (@bf4)
- #1081 Add configuration option to set resource type to singular/plural (@beauby)
- #1067 Fix warnings (@bf4)
- #1066 Adding appveyor to the project (@joaomdmoura, @Eric-Guo, @bf4)
- #1071 Make testing suite running and pass in Windows (@Eric-Guo, @bf4)
- #1041 Adding pagination links (@bacarini)
- adds support for
pagination links
at top level of JsonApi adapter
- adds support for
- #1063 Lead by example: lint PORO model (@bf4)
- #1 Test caller line parsing and digesting (@bf4)
- #1048 Let FlattenJson adapter decide it doesn't include meta (@bf4)
- #1060 Update fragment cache to support namespaced objects (@aaronlerch)
- #1052 Use underscored json_root when serializing a collection (@whatthewhat)
- #1051 Fix some invalid JSON in docs (@tjschuck)
- #1049 Fix incorrect s/options = {}/options ||= {} (@bf4)
- #1037 allow for type attribute (@lanej)
- #1034 allow id attribute to be overriden (@lanej)
- #1035 Fixed Comments highlight (@artLopez)
- #1031 Disallow to define multiple associations at once (@bolshakov)
- #1032 Wrap railtie requirement with rescue (@elliotlarson)
- #1026 Bump Version Number to 0.10.0.rc2 (@jfelchner)
- #985 Associations implementation refactoring (@bolshakov)
- #954 Encapsulate serialization in ActiveModel::SerializableResource (@bf4)
- #972 Capture app warnings on test run (@bf4)
- #1019 Improve README.md (@baojjeu)
- #998 Changing root to model class name (@joaomdmoura)
- #1006 Fix adapter inflection bug for api -> API (@bf4)
- #1016 require rails/railtie before subclassing Rails::Railtie (@bf4)
- #1013 Root option with empty array support (@vyrak, @mareczek)
- #994 Starting Docs structure (@joaomdmoura)
- #1007 Bug fix for ArraySerializer json_key (@jiajiawang)
- #1003 Fix transient test failures (@Rodrigora)
- #996 Add linter for serializable resource (@bf4)
- #990 Adding json-api meta test (@joaomdmoura)
- #984 Add option "key" to serializer associations (@Rodrigora)
- #982 Fix typo (@bf4)
- #981 Remove unused PORO#to_param (@bf4)
- #978 fix generators template bug (@regonn)
- #975 Fixes virtual value not being used (@GriffinHeart)
- #970 Fix transient tests failures (@Rodrigora)
- #962 Rendering objects that doesn't have serializers (@bf4, @joaomdmoura, @JustinAiken)
- #939 Use a more precise generated cache key (@aaronlerch)
- #971 Restore has_one to generator (@bf4)
- #965 options fedault valueserializable_hash and as_json (@bf4)
- #959 TYPO on README.md (@kangkyu)
- #958 Splitting json adapter into two (@joaomdmoura)
- adds FlattenJSON as default adapter
- #953 use model name to determine the type (@lsylvester)
- uses model name to determine the type
- #949 Don't pass serializer option to associated serializers (@bf4, @edwardloveall)
- #902 Added serializer file digest to the cache_key (@cristianbica)
- #948 AMS supports JSONAPI 1.0 instead of RC4 (@SeyZ)
- #936 Include meta when using json adapter with custom root (@chrisbranson)
- #942 Small code styling issue (@thiagofm)
- #930 Reverting PR #909 (@joaomdmoura)
- #924 Avoid unecessary calls to attribute methods when fragment caching (@navinpeiris)
- #925 Updates JSON API Adapter to generate RC4 schema (@benedikt)
- adds JSON API support 1.0
- #918 Adding rescue_with_handler to clear state (@ryansch)
- #909 Defining Json-API Adapter as Default (@joaomdmoura)
- remove root key option and split JSON adapter
- #914 Prevent possible duplicated attributes in serializer (@groyoh)
- #880 Inabling subclasses serializers to inherit attributes (@groyoh)
- #913 Avoiding the serializer option when instantiating a new one for ArraySerializer Fixed #911 (@groyoh)
- #897 Allow to define custom serializer for given class (@imanel)
- #892 Fixed a bug that appeared when json adapter serialize a nil association (@groyoh)
- #895 Adding a test to cover 'meta' and 'meta_key' attr_readers (@adomokos)
- #894 Fixing typos in README.md (@adomokos)
- #888 Changed duplicated test name in action controller test (@groyoh)
- #890 Remove unused method
def_serializer
(@JustinAiken) - #887 Fixing tests on JRuby (@joaomdmoura)
- #885 Updates rails versions for test and dev (@tonyta)
- #810 Adding Fragment Cache to AMS (@joaomdmoura)
- adds fragment cache support
- #868 Fixed a bug that appears when a nil association is included (@groyoh)
- #861 README: Add emphasis to single-word difference (@machty)
- #858 Included resource fixes (@mateomurphy)
- #853 RC3 Updates for JSON API (@mateomurphy)
- #852 Fix options merge order in
each_association
(@mateomurphy) - #850 Use association value for determining serializer used (@mateomurphy)
- #843 Remove the mailing list from the README (@JoshSmith)
- #842 Add notes on how you can help to contributing documentation (@JoshSmith)
- #833 Cache serializers for class (@lsylvester)
- #837 Store options in array serializers (@kurko)
- #836 Makes passed in options accessible inside serializers (@kurko)
- #773 Make json api adapter 'include' option accept an array (@sweatypitts)
- #830 Add contributing readme (@JoshSmith)
- #811 Reimplement serialization scope and scope_name (@mateomurphy)
- #725 Support has_one to be compatible with 0.8.x (@ggordon)
- adds
has_one
attribute for backwards compatibility
- adds
- #822 Replace has_one with attribute in template (@bf4)
- #821 Fix explicit serializer for associations (@wjordan)
- #798 Fix lost test
test_include_multiple_posts_and_linked
(@donbobka) - #807 Add Overriding attribute methods section to README. (@alexstophel)
- #693 Cache Support at AMS 0.10.0 (@joaomdmoura)
- adds cache support to attributes and associations.
- #792 Association overrides (@kurko)
- adds method to override association
- #794 add to_param for correct URL generation (@carlesjove)
- Introduce Adapter
- Prefer
ActiveModel::Serializer
toActiveModelSerializers
:
Features:
- #774 Fix nested include attributes (@nhocki)
- #771 Make linked resource type names consistent with root names (@sweatypitts)
- #696 Explicitly set serializer for associations (@ggordon)
- #700 sparse fieldsets (@arenoir)
- #768 Adds support for
meta
andmeta_key
attribute (@kurko)
- #707 A Friendly Note on Which AMS Version to Use (@jherdman)
- #730 Fixes nested has_many links in JSONAPI (@kurko)
- #718 Allow overriding the adapter with render option (@ggordon)
- #720 Rename attribute with :key (0.8.x compatibility) (@ggordon)
- #728 Use type as key for linked resources (@kurko)
- #729 Use the new beta build env on Travis (@joshk)
- #703 Support serializer and each_serializer options in renderer (@ggordon, @mieko)
- #727 Includes links inside of linked resources (@kurko)
- #726 Bugfix: include nested has_many associations (@kurko)
- #722 Fix infinite recursion (@ggordon)
- #1 Allow for the implicit use of ArraySerializer when :each_serializer is specified (@mieko)
- #692 Include 'linked' member for json-api collections (@ggordon)
- #714 Define as_json instead of to_json (@guilleiguaran)
- #710 JSON-API: Don't include linked section if associations are empty (@guilleiguaran)
- #711 Fixes rbx gems bundling on TravisCI (@kurko)
- #709 Add type key when association name is different than object type (@guilleiguaran)
- #708 Handle correctly null associations (@guilleiguaran)
- #691 Fix embed option for associations (@jacob-s-son)
- #689 Fix support for custom root in JSON-API adapter (@guilleiguaran)
- #685 Serialize ids as strings in JSON-API adapter (@guilleiguaran)
- #684 Refactor adapters to implement support for array serialization (@guilleiguaran)
- #682 Include root by default in JSON-API serializers (@guilleiguaran)
- #625 Add DSL for urls (@JordanFaust)
- #677 Add support for embed: :ids option for in associations (@guilleiguaran)
- #681 Check superclasses for Serializers (@quainjn)
- #680 Add support for root keys (@NullVoxPopuli)
- #675 Support Rails 4.2.0 (@tricknotes)
- #667 Require only activemodel instead of full rails (@guilleiguaran)
- #653 Add "_test" suffix to JsonApi::HasManyTest filename. (@alexgenco)
- #631 Update build badge URL (@craiglittle)
-
The following methods were removed
- Model#active_model_serializer
- Serializer#include!
- Serializer#include?
- Serializer#attr_disabled=
- Serializer#cache
- Serializer#perform_caching
- Serializer#schema (needs more discussion)
- Serializer#attribute
- Serializer#include_#{name}? (filter method added)
- Serializer#attributes (took a hash)
-
The following things were added
- Serializer#filter method
- CONFIG object
-
Remove support for ruby 1.8 versions.
-
Require rails >= 3.2.
-
Serializers for associations are being looked up in a parent serializer's namespace first. Same with controllers' namespaces.
-
Added a "prefix" option in case you want to use a different version of serializer.
-
Serializers default namespace can be set in
default_serializer_options
and inherited by associations.
- #612 Feature/adapter (@bolshakov)
- adds adapters pattern
- #615 Rails does not support const_defined? in development mode (@tpitale)
- #613 README: typo fix on attributes (@spk)
- #614 Fix rails 4.0.x build. (@arthurnn)
- #610 ArraySerializer (@bolshakov)
- #607 ruby syntax highlights (@zigomir)
- #602 Add DSL for associations (@JordanFaust)
- Fix bug whereby a serializer using 'options' would blow up.
-
Attributes can now have optional types.
-
A new DefaultSerializer ensures that POROs behave the same way as ActiveModels.
-
If you wish to override ActiveRecord::Base#to_Json, you can now require 'active_record/serializer_override'. We don't recommend you do this, but many users do, so we've left it optional.
-
Fixed a bug where ActionController wouldn't always have MimeResponds.
-
An optinal caching feature allows you to cache JSON & hashes that AMS uses. Adding 'cached true' to your Serializers will turn on this cache.
-
URL helpers used inside of Engines now work properly.
-
Serializers now can filter attributes with
only
andexcept
:UserSerializer.new(user, only: [:first_name, :last_name]) UserSerializer.new(user, except: :first_name)
-
Basic Mongoid support. We now include our mixins in the right place.
-
On Ruby 1.8, we now generate an
id
method that properly serializesid
columns. See issue #127 for more. -
Add an alias for
scope
method to be the name of the context. By default this iscurrent_user
. The name is automatically set when usingserialization_scope
in the controller. -
Pass through serialization options (such as
:include
) when a model has no serializer defined.
embed_key
option to allow embedding by attributes other than IDs- Fix rendering nil with custom serializer
- Fix global
self.root = false
- Add support for specifying the serializer for an association as a String
- Able to specify keys on the attributes method
- Serializer Reloading via ActiveSupport::DescendantsTracker
- Reduce double map to once; Fixes datamapper eager loading.
- Serialize sets properly
- Add root option to ArraySerializer
- Support polymorphic associations
- Support :each_serializer in ArraySerializer
- Add
scope
method to easily access the scope in the serializer - Fix regression with Rails 3.2.6; add Rails 4 support
- Allow serialization_scope to be disabled with serialization_scope nil
- Array serializer should support pure ruby objects besides serializers
- First tagged version
- Changes generators to always generate an ApplicationSerializer
First Commit as Rails Serializers 0.0.1
(December 1, 2011).
- Changing Serialization/Serializers namespace to
Serializable
(November 30, 2011) - Proposed Implementation to Rails 3.2 by @wycats and @josevalim (November 25, 2011)
- Creation of
ActiveModel::Serialization
fromActiveModel::Serializer
in Rails (2009) - Integration of
ActiveModel::Serializer
intoActiveRecord::Serialization
- Creation of
ActiveModel::Serializer
in Rails (2009) - Creation of
ActiveModel::Serializers::JSON
in Rails (2009)