extendible 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0083e6b235bb54b3ea7514edc43f243f01a9f34e
4
- data.tar.gz: 3fd7a8872549382ed62109cf908ce30c057cf5a6
3
+ metadata.gz: cf2096b90c342157893afa133b45e9a61f3eccb0
4
+ data.tar.gz: d4aec8e5d1729ea0886514815cd176bde73d3dde
5
5
  SHA512:
6
- metadata.gz: e99dffdda5cf1f80320cc781541d2cd2cb17db1579290b04e70b72029447344e026408d4d03c18e9985942aa2aef220cf7779944aed772a3bd32dc967654d5c2
7
- data.tar.gz: 726fe2a50080d2ae9023ae6bbca7c79998284dbd74f0731b8b4e783ad096c61967236bbf6fb917b2230a365f63d9250364899aaf4dfc39fa39540a9f23c520be
6
+ metadata.gz: 27b0174585d3c96bcf100da65d703d8d20ac6a830f18e473f8a2afe662085038b68e97678c7bbbd577f524ff81eac26522b66fe849b296094c666002f4b452e1
7
+ data.tar.gz: 2ee0d6ae8a28df83826730edb699fc295507aa2a4e7f942d0f50fea4f6caeaa72947a1562430ff976996b902e6b2aaed201c7609267878c01233ade0aaa64532
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Extendible
2
2
 
3
- Make referenced objects in your API only include ID attribute by default, and extend them using URL parameters.
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-endpoint?extend=author.name,author.email` to extend your referenced author with its name and email attributes.
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
- TODO: Write usage instructions here
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 query parameters}
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
@@ -1,3 +1,3 @@
1
1
  module Extendible
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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
- pending 'add tests'
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
@@ -2,3 +2,10 @@ require 'bundler/setup'
2
2
  Bundler.setup
3
3
 
4
4
  require 'extendible'
5
+ require 'active_model_serializers'
6
+
7
+ RSpec.configure do |config|
8
+ config.color_enabled = true
9
+ config.tty = true
10
+ config.formatter = :documentation
11
+ end
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.1
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 query parameters
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: {}