extendible 0.0.1 → 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.
- checksums.yaml +4 -4
- data/README.md +62 -3
- data/extendible.gemspec +4 -2
- data/lib/extendible.rb +1 -0
- data/lib/extendible/version.rb +1 -1
- data/spec/extendible_spec.rb +15 -1
- data/spec/spec_helper.rb +7 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf2096b90c342157893afa133b45e9a61f3eccb0
|
4
|
+
data.tar.gz: d4aec8e5d1729ea0886514815cd176bde73d3dde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27b0174585d3c96bcf100da65d703d8d20ac6a830f18e473f8a2afe662085038b68e97678c7bbbd577f524ff81eac26522b66fe849b296094c666002f4b452e1
|
7
|
+
data.tar.gz: 2ee0d6ae8a28df83826730edb699fc295507aa2a4e7f942d0f50fea4f6caeaa72947a1562430ff976996b902e6b2aaed201c7609267878c01233ade0aaa64532
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Extendible
|
2
2
|
|
3
|
-
|
3
|
+
Let referenced objects in your ActiveModel::Serializer based API only include ID attribute by default, and extend them using URL parameters.
|
4
4
|
|
5
|
-
e.g. `https://resource
|
5
|
+
e.g. `https://api/resource?extend=author.name,author.username` to extend your referenced author with its name and username attributes.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -20,7 +20,66 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
You need to scope your params to the serializer by adding this to your controller:
|
24
|
+
|
25
|
+
serialization_scope :params
|
26
|
+
|
27
|
+
and also include extendible in your serializer class:
|
28
|
+
|
29
|
+
include Extendible
|
30
|
+
|
31
|
+
Then you can define your extendible references simply by adding this your serializer
|
32
|
+
|
33
|
+
extendible :author
|
34
|
+
|
35
|
+
You can also make multiple referenced objects extendible
|
36
|
+
|
37
|
+
extendible :author, :category
|
38
|
+
|
39
|
+
*full example of app/serializers/post_serializer.rb*
|
40
|
+
|
41
|
+
class PostSerializer < ActiveModel::Serializer
|
42
|
+
include Extendible
|
43
|
+
|
44
|
+
attributes :id,
|
45
|
+
:subject,
|
46
|
+
:body
|
47
|
+
|
48
|
+
|
49
|
+
extendible :author
|
50
|
+
end
|
51
|
+
|
52
|
+
This will by default only include the id attribute for your author object
|
53
|
+
|
54
|
+
{
|
55
|
+
...
|
56
|
+
"author": {
|
57
|
+
"id": 1
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
You can then extend the object by passing `?extend=author` in the URL, which will include all author attributes
|
62
|
+
|
63
|
+
{
|
64
|
+
...
|
65
|
+
"author": {
|
66
|
+
"id": 1,
|
67
|
+
"name": "Robert Falken",
|
68
|
+
"username": "robertfalken"
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
Or, if you would like to only get the username, use dot notation `?extend=author.username`
|
73
|
+
|
74
|
+
{
|
75
|
+
...
|
76
|
+
"author": {
|
77
|
+
"id": 1,
|
78
|
+
"username": "robertfalken"
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
You also can extend multiple objects or attributes by comma separating them `?extend=author.username,category`
|
24
83
|
|
25
84
|
## Contributing
|
26
85
|
|
data/extendible.gemspec
CHANGED
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Extendible::VERSION
|
9
9
|
spec.authors = ["Robert Falkén"]
|
10
10
|
spec.email = ["f@lken.se"]
|
11
|
-
spec.description = %q{Makes ActiveModel::Serializer objects extendible by
|
11
|
+
spec.description = %q{Makes ActiveModel::Serializer objects extendible by URL parameters}
|
12
12
|
spec.summary = %q{Serializer extension}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/robertfalken/extendible"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency 'active_model_serializers'
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake"
|
23
25
|
spec.add_development_dependency "rspec"
|
data/lib/extendible.rb
CHANGED
@@ -13,6 +13,7 @@ module Extendible
|
|
13
13
|
scope[:extend].split(',').map(&:strip).each do |object_name|
|
14
14
|
if object_name.include?('.') # dot found, split into object and attribute
|
15
15
|
obj, attr = object_name.split('.')
|
16
|
+
all[obj.to_sym] = ['id'] unless all.has_key?(obj.to_sym)
|
16
17
|
if all.has_key?(obj.to_sym) # object already has attributes specified, add attribute to array
|
17
18
|
all[obj.to_sym] << attr
|
18
19
|
else # first attribute for array, initialize array with attribute
|
data/lib/extendible/version.rb
CHANGED
data/spec/extendible_spec.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
|
4
|
+
class TestSerializer < ActiveModel::Serializer
|
5
|
+
include Extendible
|
6
|
+
end
|
7
|
+
|
8
|
+
|
3
9
|
describe Extendible do
|
4
|
-
|
10
|
+
it 'responds to extendible' do
|
11
|
+
expect(TestSerializer.respond_to?(:extendible)).to be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'makes extendible objects available' do
|
15
|
+
serializer = TestSerializer.new({})
|
16
|
+
TestSerializer.extendible :ref_one, :ref_two
|
17
|
+
expect((serializer.respond_to?(:ref_one) and serializer.respond_to?(:ref_two))).to be_true
|
18
|
+
end
|
5
19
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extendible
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Falkén
|
@@ -10,6 +10,20 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: active_model_serializers
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,7 +66,7 @@ dependencies:
|
|
52
66
|
- - '>='
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
|
-
description: Makes ActiveModel::Serializer objects extendible by
|
69
|
+
description: Makes ActiveModel::Serializer objects extendible by URL parameters
|
56
70
|
email:
|
57
71
|
- f@lken.se
|
58
72
|
executables: []
|
@@ -69,7 +83,7 @@ files:
|
|
69
83
|
- lib/extendible/version.rb
|
70
84
|
- spec/extendible_spec.rb
|
71
85
|
- spec/spec_helper.rb
|
72
|
-
homepage:
|
86
|
+
homepage: https://github.com/robertfalken/extendible
|
73
87
|
licenses:
|
74
88
|
- MIT
|
75
89
|
metadata: {}
|