jsonapi-serializable 0.1.3 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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