jsonapi-serializable 0.1.3 → 0.2.1

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.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-serializable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Hosseini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-23 00:00:00.000000000 Z
11
+ date: 2017-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsonapi-renderer
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.1.3
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.3
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -76,22 +82,16 @@ files:
76
82
  - lib/jsonapi/serializable.rb
77
83
  - lib/jsonapi/serializable/error.rb
78
84
  - lib/jsonapi/serializable/error_dsl.rb
79
- - lib/jsonapi/serializable/fieldset.rb
80
85
  - lib/jsonapi/serializable/link.rb
81
86
  - lib/jsonapi/serializable/relationship.rb
82
87
  - lib/jsonapi/serializable/relationship/dsl.rb
83
88
  - lib/jsonapi/serializable/renderer.rb
84
89
  - lib/jsonapi/serializable/resource.rb
85
- - lib/jsonapi/serializable/resource/attributes.rb
86
90
  - lib/jsonapi/serializable/resource/conditional_fields.rb
87
- - lib/jsonapi/serializable/resource/id.rb
91
+ - lib/jsonapi/serializable/resource/dsl.rb
88
92
  - lib/jsonapi/serializable/resource/key_format.rb
89
- - lib/jsonapi/serializable/resource/links.rb
90
- - lib/jsonapi/serializable/resource/meta.rb
91
- - lib/jsonapi/serializable/resource/relationships.rb
92
- - lib/jsonapi/serializable/resource/temp_id.rb
93
- - lib/jsonapi/serializable/resource/temp_id.rb~
94
- - lib/jsonapi/serializable/resource/type.rb
93
+ - lib/jsonapi/serializable/resource/relationship.rb
94
+ - lib/jsonapi/serializable/resource/relationship/dsl.rb
95
95
  - lib/jsonapi/serializable/resource_builder.rb
96
96
  homepage: https://github.com/jsonapi-rb/jsonapi-serializable
97
97
  licenses:
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
- rubygems_version: 2.6.8
116
+ rubygems_version: 2.6.12
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: Conveniently serialize JSON API resources.
@@ -1,7 +0,0 @@
1
- module JSONAPI
2
- module Serializable
3
- class FieldSet
4
-
5
- end
6
- end
7
- end
@@ -1,73 +0,0 @@
1
- module JSONAPI
2
- module Serializable
3
- class Resource
4
- # Mixin to handle resource attributes.
5
- module Attributes
6
- def self.prepended(klass)
7
- super
8
- klass.class_eval do
9
- extend DSL
10
- class << self
11
- attr_accessor :attribute_blocks
12
- end
13
- self.attribute_blocks = {}
14
- end
15
- end
16
-
17
- def initialize(*)
18
- super
19
- @_attributes = {}
20
- end
21
-
22
- # @see JSONAPI::Serializable::Resource#as_jsonapi
23
- def as_jsonapi(fields: nil, include: [])
24
- super.tap do |hash|
25
- attrs =
26
- requested_attributes(fields).each_with_object({}) do |(k, v), h|
27
- h[k] = instance_eval(&v)
28
- end
29
- hash[:attributes] = attrs if attrs.any?
30
- end
31
- end
32
-
33
- # @api private
34
- def requested_attributes(fields)
35
- self.class.attribute_blocks
36
- .select { |k, _| fields.nil? || fields.include?(k) }
37
- end
38
-
39
- # DSL methods for declaring attributes.
40
- module DSL
41
- def inherited(klass)
42
- super
43
- klass.attribute_blocks = attribute_blocks.dup
44
- end
45
-
46
- # Declare an attribute for this resource.
47
- #
48
- # @param [Symbol] name The key of the attribute.
49
- # @yieldreturn [Hash, String, nil] The block to compute the value.
50
- #
51
- # @example
52
- # attribute(:name) { @object.name }
53
- def attribute(name, _options = {}, &block)
54
- block ||= proc { @object.public_send(name) }
55
- attribute_blocks[name.to_sym] = block
56
- end
57
-
58
- # Declare a list of attributes for this resource.
59
- #
60
- # @param [Array] *args The attributes keys.
61
- #
62
- # @example
63
- # attributes :title, :body, :date
64
- def attributes(*args)
65
- args.each do |attr|
66
- attribute(attr)
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,48 +0,0 @@
1
- module JSONAPI
2
- module Serializable
3
- class Resource
4
- # Mixin to handle resource id.
5
- module Id
6
- def self.prepended(klass)
7
- super
8
- klass.class_eval do
9
- extend DSL
10
- class << self
11
- attr_accessor :id_block
12
- end
13
- end
14
- end
15
-
16
- def initialize(*)
17
- super
18
- @_id = instance_eval(&self.class.id_block).to_s
19
- end
20
-
21
- # @see JSONAPI::Serializable::Resource#as_jsonapi
22
- def as_jsonapi(*)
23
- super.tap do |hash|
24
- hash[:id] = @_id
25
- end
26
- end
27
-
28
- # DSL methods for declaring the resource id.
29
- module DSL
30
- def inherited(klass)
31
- super
32
- klass.id_block = id_block
33
- end
34
-
35
- # Declare the JSON API id of this resource.
36
- #
37
- # @yieldreturn [String] The id of the resource.
38
- #
39
- # @example
40
- # id { @user.id.to_s }
41
- def id(&block)
42
- self.id_block = block
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,67 +0,0 @@
1
- require 'jsonapi/serializable/link'
2
-
3
- module JSONAPI
4
- module Serializable
5
- class Resource
6
- # Mixin for handling resource links.
7
- module Links
8
- def self.prepended(klass)
9
- super
10
- klass.class_eval do
11
- extend DSL
12
- class << self
13
- attr_accessor :link_blocks
14
- end
15
- self.link_blocks = {}
16
- end
17
- end
18
-
19
- def initialize(*)
20
- super
21
- @_links = self.class.link_blocks.each_with_object({}) do |(k, v), h|
22
- h[k] = Link.as_jsonapi(@_exposures, &v)
23
- end
24
- end
25
-
26
- # @see JSONAPI::Serializable::Resource#as_jsonapi
27
- def as_jsonapi(*)
28
- super.tap do |hash|
29
- hash[:links] = @_links if @_links.any?
30
- end
31
- end
32
-
33
- # DSL methods for declaring resource links.
34
- module DSL
35
- def inherited(klass)
36
- super
37
- klass.link_blocks = link_blocks.dup
38
- end
39
-
40
- # Declare a link for this resource. The properties of the link are set
41
- # by providing a block in which the DSL methods of
42
- # +JSONAPI::Serializable::Link+ are called, or the value of the link
43
- # is returned directly.
44
- # @see JSONAPI::Serialiable::Link
45
- #
46
- # @param [Symbol] name The key of the link.
47
- # @yieldreturn [Hash, String, nil] The block to compute the value, if
48
- # any.
49
- #
50
- # @example
51
- # link(:self) do
52
- # "http://api.example.com/users/#{@user.id}"
53
- # end
54
- #
55
- # @example
56
- # link(:self) do
57
- # href "http://api.example.com/users/#{@user.id}"
58
- # meta is_self: true
59
- # end
60
- def link(name, &block)
61
- link_blocks[name] = block
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,62 +0,0 @@
1
- module JSONAPI
2
- module Serializable
3
- class Resource
4
- # Mixin for handling resource meta.
5
- module Meta
6
- def self.prepended(klass)
7
- super
8
- klass.class_eval do
9
- extend DSL
10
- class << self
11
- attr_accessor :meta_val, :meta_block
12
- end
13
- end
14
- end
15
-
16
- def initialize(*)
17
- super
18
- @_meta = if self.class.meta_block
19
- instance_eval(&self.class.meta_block)
20
- else
21
- self.class.meta_val
22
- end
23
- end
24
-
25
- # @see JSONAPI::Serializable::Resource#as_jsonapi
26
- def as_jsonapi(*)
27
- super.tap do |hash|
28
- hash[:meta] = @_meta unless @_meta.nil?
29
- end
30
- end
31
-
32
- # DSL methods for declaring resource meta.
33
- module DSL
34
- def inherited(klass)
35
- super
36
- klass.meta_val = meta_val
37
- klass.meta_block = meta_block
38
- end
39
-
40
- # @overload meta(value)
41
- # Declare the meta information for this resource.
42
- # @param [Hash] value The meta information hash.
43
- #
44
- # @example
45
- # meta key: value
46
- #
47
- # @overload meta(&block)
48
- # Declare the meta information for this resource.
49
- # @yieldreturn [String] The meta information hash.
50
- # @example
51
- # meta do
52
- # { key: value }
53
- # end
54
- def meta(value = nil, &block)
55
- self.meta_val = value
56
- self.meta_block = block
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,95 +0,0 @@
1
- require 'jsonapi/serializable/relationship'
2
-
3
- module JSONAPI
4
- module Serializable
5
- class Resource
6
- # Mixin to handle resource relationships.
7
- module Relationships
8
- def self.prepended(klass)
9
- super
10
- klass.class_eval do
11
- extend DSL
12
- class << self
13
- attr_accessor :relationship_blocks
14
- end
15
- self.relationship_blocks = {}
16
- end
17
- end
18
-
19
- def initialize(*)
20
- super
21
- @_relationships = self.class.relationship_blocks
22
- .each_with_object({}) do |(k, v), h|
23
- h[k] = Relationship.new(@_exposures, &v)
24
- end
25
- end
26
-
27
- # @see JSONAPI::Serializable::Resource#as_jsonapi
28
- def as_jsonapi(fields: nil, include: [])
29
- super.tap do |hash|
30
- rels = requested_relationships(fields)
31
- .each_with_object({}) do |(k, v), h|
32
- h[k] = v.as_jsonapi(include.include?(k))
33
- end
34
- hash[:relationships] = rels if rels.any?
35
- end
36
- end
37
-
38
- # @api private
39
- def requested_relationships(fields)
40
- @_relationships
41
- .select { |k, _| fields.nil? || fields.include?(k) }
42
- end
43
-
44
- # DSL methods for declaring relationships.
45
- module DSL
46
- def inherited(klass)
47
- super
48
- klass.relationship_blocks = relationship_blocks.dup
49
- end
50
-
51
- # Declare a relationship for this resource. The properties of the
52
- # relationship are set by providing a block in which the DSL methods
53
- # of +JSONAPI::Serializable::Relationship+ are called.
54
- # @see JSONAPI::Serializable::Relationship
55
- #
56
- # @param [Symbol] name The key of the relationship.
57
- #
58
- # @example
59
- # relationship :posts do
60
- # resources { @user.posts.map { |p| PostResource.new(post: p) } }
61
- # end
62
- #
63
- # @example
64
- # relationship :author do
65
- # resources do
66
- # @post.author && UserResource.new(user: @post.author)
67
- # end
68
- # data do
69
- # { type: 'users', id: @post.author_id }
70
- # end
71
- # link(:self) do
72
- # "http://api.example.com/posts/#{@post.id}/relationships/author"
73
- # end
74
- # link(:related) do
75
- # "http://api.example.com/posts/#{@post.id}/author"
76
- # end
77
- # meta do
78
- # { author_online: @post.author.online? }
79
- # end
80
- # end
81
- def relationship(name, options = {}, &block)
82
- rel_block = proc do
83
- data(options[:class]) { @object.public_send(name) }
84
- instance_eval(&block) unless block.nil?
85
- end
86
- relationship_blocks[name.to_sym] = rel_block
87
- end
88
- alias has_many relationship
89
- alias has_one relationship
90
- alias belongs_to relationship
91
- end
92
- end
93
- end
94
- end
95
- end
@@ -1,13 +0,0 @@
1
- module JSONAPI
2
- module Serializable
3
- class Resource
4
- module TempId
5
- def as_jsonapi(*)
6
- super.tap do |hash|
7
- hash[:'temp-id'] = @object.temp_id if @object.respond_to?(:temp_id)
8
- end
9
- end
10
- end
11
- end
12
- end
13
- end
File without changes