Commit Graph

93 Commits

Author SHA1 Message Date
Mark Havekes
28a172e66a return nil if id is nil 2019-06-11 14:42:13 +02:00
Mark Havekes
4b0c230d76 add failing test and suggestion 2019-06-04 10:27:02 +02:00
Wasif Hossain
a9cb097109
Refactoring 2019-04-23 04:34:02 +06:00
Benjamin Fleischer
06fcd34807
Follows https://github.com/rails-api/active_model_serializers/pull/2100 2019-04-23 04:33:56 +06:00
Krzysztof Rybka
873cf4add2 Add frozen_string_literal pragma to ruby files 2018-12-17 16:54:56 +01:00
Konstantin Munteanu
572f11b7e0 value is always a link 2018-10-25 09:54:36 +02:00
Konstantin Munteanu
0d3999c36d Support conditions in link statements 2018-10-25 09:45:34 +02:00
Fabian Mersch
2a8b9f4105 Eager load modules on boot
Using ActiveModelSerializers with a threaded web server eg. Puma
uninitialized constant errors are thrown. Leaving this article for
reference:
http://blog.plataformatec.com.br/2012/08/eager-loading-for-greater-good/.
2018-10-11 21:32:12 +02:00
Benjamin Fleischer
3dd6cccb4d Fix 0.10.6 regression; make using belongs_to on self opt-in 2017-11-13 08:36:23 -06:00
Benjamin Fleischer
9745a2f735 Fix: ResourceIdentifier.for_type_with_id can serialize unpersisted resources 2017-10-31 14:47:55 -05:00
Benjamin Fleischer
5916014b48 Fix: resource object identifier with nil id excludes id 2017-10-31 14:34:30 -05:00
Benjamin Fleischer
a0de45a4d8 Fix JSON:API: for_type_and_id should always inflect_type
Should Serializer._type ever be inflected?
Right now, it won't be, but association.serializer._type will be inflected.

That's the current behavior.
2017-10-29 21:23:48 -05:00
Benjamin Fleischer
cf29db34c6 Fix JSON:API polymorphic type regression from v0.10.5 2017-10-29 20:15:15 -05:00
Benjamin Fleischer
5e1e138d47 Refactor ResourceIdentifier 2017-10-29 17:13:34 -05:00
Dennis Stumm
4d7c2457d7 Fix deserialization of polymorphic relationships (#2200)
* Classify the relationship type for polymorphic associations
2017-10-07 17:03:38 -05:00
Alexandre de Oliveira
1e4d117b99 Merge pull request #2149 from mecampbellsoup/more-pagination-links-by-default
Always include self, first, last pagination links
2017-06-14 15:47:30 -03:00
mecampbellsoup
402883d84f Fix Travis lint offenses 2017-06-14 13:35:00 -04:00
mecampbellsoup
e4b3224c64 Fix indentation mismatch 2017-06-14 12:53:38 -04:00
mecampbellsoup
b7442e741c Use symbolized keys for json hash
They will be converted to strings when rendered as JSON.
2017-06-14 12:52:29 -04:00
mecampbellsoup
92e9a66e97 Amend tests to always include all pagination keys 2017-06-13 12:35:55 -04:00
mecampbellsoup
16e5204eab Always include pagination keys but set null values when not needed 2017-06-13 12:09:00 -04:00
mecampbellsoup
7387266c37 Always display self, first, last pagination links 2017-06-05 17:26:41 -04:00
Grey Baker
be7ee70376 Allow serialized ID to be overwritten for belongs-to relationships
If the `id` attribute for a class isn't taken directly from the object when
serializing it, it may be desirible for other classes that serialize a
relationship with that class to overwrite the relationship IDs they serialize.

For example, suppose we have:

```(ruby)
class Repo < Model
  attributes :id, :github_id, :name
  associations :configs
end

class Config < Model
  attributes :id
  belongs_to :repo
end

class RepoSerializer < ActiveModel::Serializer
  attributes :id, :name

  has_many :update_configs

  def id
    object.github_id
  end
end

class ConfigSerializer < ActiveModel::Serializer
  attributes :id
  belongs_to :repo
end
```

In the above example, serializing a list of `Repo`s will give the `github_id`
for each one, but serializing a `Config` will give the `id` for its parent repo.

Ideally AMS would inspect the `RepoSerializer` when serializing the `Config`,
and realise it can't just output the foreign key. Unfortunately, getting the
serialization class for the child repo currently requires loading the record
(via evaluating `lazy_assocation`), and loses the performance benefit of the
existing `belongs_to?` path. Instead, I've opted to use
`read_attribute_for_serialization` instead of `object.send` to fetch the
serialized foreign key. This allows the serialized relationship ID to be
overwritten using

```(ruby)
class ConfigSerializer < ActiveModel::Serializer
  ...

  def repo_id
    object.repo.github_id
  end
end
```
2017-05-13 15:22:18 +01:00
Benjamin Fleischer
73eae19b3d Return null resource object identifier for blank id
Also, fix test where attributes were included when id was ""

```
  1) Failure:
  ActionController::Serialization::AdapterSelectorTest#test_render_using_adapter_override
  [test/action_c$ntroller/adapter_selector_test.rb:53]:
  --- expected
  +++ actual
  @@ -1 +1 @@
  -"{\"data\":{\"id\":\"\",\"type\":\"profiles\",\"attributes\":{\"name\":\"Name 1\",\"description\":\"Description 1\"}}}"
  +"{\"data\":null}"
```
2017-04-30 23:28:08 -05:00
Benjamin Fleischer
6e41528515 Skip eval relationships object on belongs to 2017-04-30 18:32:08 -05:00
Benjamin Fleischer
5e01a93fc0 Update comments regarding lazy_association and TODOs 2017-04-30 15:09:18 -05:00
Benjamin Fleischer
ff5ab21a45 Make Association totally lazy 2017-04-23 18:40:46 -05:00
Benjamin Fleischer
7697d9f5ec Refactor: introduce lazy association 2017-04-23 17:53:00 -05:00
L. Preston Sego III
0422a1e772 Swap out KeyTransform for CaseTransform (#1993)
* delete KeyTransform, use CaseTransform

* added changelog
2016-12-07 10:49:38 -05:00
Lee Richmond
2145540795 Add include_data :if_sideloaded (#1931)
For JSONAPI, `include_data` currently means, "should we populate the
'data'" key for this relationship. Current options are true/false.

This adds the `:if_sideloaded` option. This means "only
populate the 'data' key when we are sideloading this relationship." This
is because 'data' is often only relevant to sideloading, and causes a
database hit.

Addresses https://github.com/rails-api/active_model_serializers/issues/1555
2016-09-25 12:57:19 -04:00
Lee Richmond
a77dfdaa85 Ensure valid jsonapi when blank relationship (#1930)
If you specify include_data false, and do not have any links for this
relationship, we would output something like:

`{ relationships: { comments: {} } }`

This is not valid jsonapi. We will now render

`{ relationships: { comments: { meta: {} } } }`

Instead.

Relevant jsonapi spec: http://jsonapi.org/format/#document-resource-object-relationships
2016-09-19 14:10:50 -04:00
Benjamin Fleischer
20e394d512 Refactor Association into Field like everything else (#1897)
* Make assocations asserts easier to understand

* Refactor Association into Field like everything else

* Make assocation serializer/links/meta lazier

* Push association deeper into relationship

* Simplify association usage in relationships

* Better naming of reflection parent serializer

* Easier to read association method
2016-08-31 09:35:41 -04:00
Ian C. Anderson
2423ca4999 Support key transformation for Attributes adapter (#1889)
The `:attributes` adapter is the default one, but it did not support
key transformation. This was very surprising behavior, since the
"Configuration Options" page in the guides didn't mention that this
behavior was not supported by the attributes adapter.

This commit adds key transform support to the attributes adapter, and
adds documentation about the default transform for the attributes
adapter (which is `:unaltered`).

This commit also handles arrays when transforming keys, which was needed
in the case where you're serializing a collection with the Attributes
adapter. With the JSON adapter, it was always guaranteed to pass a hash
to the KeyTransform functions because of the top-level key. Since there
is no top-level key for the Attributes adapter, the return value could
be an array.
2016-08-25 15:21:27 -04:00
Benjamin Fleischer
abb15b9622 Simplify Relationship 2016-08-17 15:58:11 -05:00
Benjamin Fleischer
d66e272994 Correct typos 2016-08-16 18:18:58 -05:00
L. Preston Sego III
6de3f31b6e Namespace separator setting for json-api and tests (#1874)
Adds jsonapi_namespace_separator configuration

Also:

* Enable getting type from record class without serializer

Needs Followup:

- https://github.com/rails-api/active_model_serializers/pull/1874#discussion_r74607042 
- https://github.com/rails-api/active_model_serializers/pull/1874#discussion_r74607734
2016-08-12 12:54:42 -05:00
Yohan Robert
9a206a1f5d Remove nil relationships links (#1833) 2016-07-12 14:02:34 +02:00
Benjamin Fleischer
a7296e8a92 Fix #1759, Grape integration, adds serialization_context
- improves improves serialization_context to take options and not depend
on a `request` object.
- adds descriptive error on missing serialization_context.
- Document overriding `CollectionSerializer#paginated?`.
2016-06-14 09:45:30 -05:00
Filippos Vasilakis
be01fc8ee7 Pass fields down from constructor 2016-06-09 03:26:52 -05:00
Benjamin Fleischer
cd9689683c Merge branch 'ouvrages-exclude_nil_links' 2016-06-09 02:55:32 -05:00
Benjamin Fleischer
35a7c81034 Fix up caching, especially fragment_cache 2016-06-07 00:52:05 -05:00
Benjamin Fleischer
7254d34c90 Move Serializer#serialize into Serializer#serializable_hash 2016-06-05 23:33:37 -05:00
Benjamin Fleischer
913f396bb1 Move adapter cache properties to class level (where they belong). 2016-06-04 15:00:51 -05:00
Benjamin Fleischer
516e7da8ff Move serialization logic into Serializer and CollectionSerializer 2016-06-04 14:59:51 -05:00
Benjamin Fleischer
41575e36f7 Moving Attributes#serializable_hash_for_single_resource to Serializer 2016-06-04 14:59:51 -05:00
Benjamin Fleischer
f28e486d4a Remove Attributes adapter recursion 2016-06-04 14:59:51 -05:00
Ben Mills
d900b09f8d
Upgrade to rubocop ~> 0.40.0 2016-06-01 09:21:29 -06:00
Benjamin Fleischer
385abb4ba0 Simplify Serializer#cached_attributes to take a fields argument 2016-06-01 01:02:17 -05:00
Benjamin Fleischer
ba23de686d Complete extracting to Serializer#cached_attributes 2016-06-01 01:02:13 -05:00
Benjamin Fleischer
96750b2f9a Remove unnecessary Serializer#cached_fields 2016-06-01 00:47:10 -05:00