yaks 0.0.0 → 0.1.0
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 +13 -5
- data/.gitignore +1 -0
- data/.travis.yml +23 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +32 -6
- data/README.md +182 -80
- data/examples/hal01.rb +126 -0
- data/examples/jsonapi01.rb +68 -0
- data/examples/jsonapi02.rb +62 -0
- data/examples/jsonapi03.rb +86 -0
- data/lib/yaks.rb +55 -25
- data/lib/yaks/collection_mapper.rb +33 -0
- data/lib/yaks/collection_resource.rb +65 -0
- data/lib/yaks/default_policy.rb +13 -0
- data/lib/yaks/hal_serializer.rb +59 -0
- data/lib/yaks/json_api_serializer.rb +59 -0
- data/lib/yaks/link_lookup.rb +23 -0
- data/lib/yaks/mapper.rb +59 -0
- data/lib/yaks/mapper/association.rb +43 -0
- data/lib/yaks/mapper/class_methods.rb +36 -0
- data/lib/yaks/mapper/config.rb +79 -0
- data/lib/yaks/mapper/has_many.rb +15 -0
- data/lib/yaks/mapper/has_one.rb +10 -0
- data/lib/yaks/mapper/link.rb +74 -0
- data/lib/yaks/mapper/lookup.rb +19 -0
- data/lib/yaks/mapper/map_links.rb +17 -0
- data/lib/yaks/null_resource.rb +28 -0
- data/lib/yaks/primitivize.rb +34 -15
- data/lib/yaks/profile_registry.rb +60 -0
- data/lib/yaks/rel_registry.rb +20 -0
- data/lib/yaks/resource.rb +28 -0
- data/lib/yaks/resource/link.rb +21 -0
- data/lib/yaks/serializer.rb +11 -53
- data/lib/yaks/shared_options.rb +15 -0
- data/lib/yaks/util.rb +76 -5
- data/lib/yaks/version.rb +1 -1
- data/spec/integration/map_to_resource_spec.rb +30 -0
- data/spec/json/hal_plant_collection.json +34 -0
- data/spec/spec_helper.rb +10 -1
- data/spec/support/friends_mapper.rb +29 -0
- data/spec/support/pet_mapper.rb +5 -0
- data/spec/support/pet_peeve_mapper.rb +3 -0
- data/spec/support/serializers.rb +11 -11
- data/spec/support/shared_contexts.rb +47 -0
- data/spec/support/shorthands.rb +22 -0
- data/spec/yaks/collection_resource_spec.rb +9 -0
- data/spec/yaks/hal_serializer_spec.rb +9 -0
- data/spec/yaks/mapper/association_spec.rb +21 -0
- data/spec/yaks/mapper/class_methods_spec.rb +28 -0
- data/spec/yaks/mapper/config_spec.rb +77 -0
- data/spec/yaks/mapper/has_one_spec.rb +16 -0
- data/spec/yaks/mapper/link_spec.rb +42 -0
- data/spec/yaks/mapper/map_links_spec.rb +46 -0
- data/spec/yaks/mapper_spec.rb +47 -0
- data/spec/yaks/resource_spec.rb +23 -0
- data/yaks.gemspec +6 -3
- metadata +115 -27
- data/lib/yaks/dumper.rb +0 -23
- data/lib/yaks/fold_ams_compat.rb +0 -33
- data/lib/yaks/fold_json_api.rb +0 -61
- data/lib/yaks/serializable_association.rb +0 -21
- data/lib/yaks/serializable_collection.rb +0 -10
- data/lib/yaks/serializable_object.rb +0 -18
- data/lib/yaks/serializer/class_methods.rb +0 -76
- data/spec/integration_spec.rb +0 -57
- data/spec/yaks/json_api_folder_spec.rb +0 -63
- data/spec/yaks/serializer_spec.rb +0 -12
@@ -1,21 +0,0 @@
|
|
1
|
-
module Yaks
|
2
|
-
class SerializableAssociation
|
3
|
-
include Concord.new(:collection, :one)
|
4
|
-
extend Forwardable
|
5
|
-
|
6
|
-
def_delegator :collection, :root_key, :name
|
7
|
-
def_delegators :collection, :identity_key, :map, :objects, :empty?
|
8
|
-
|
9
|
-
def one?
|
10
|
-
one
|
11
|
-
end
|
12
|
-
|
13
|
-
def identities
|
14
|
-
map(&method(:identity))
|
15
|
-
end
|
16
|
-
|
17
|
-
def identity(object)
|
18
|
-
object[identity_key]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Yaks
|
2
|
-
class SerializableObject
|
3
|
-
include Concord.new(:attributes, :associations)
|
4
|
-
extend Forwardable
|
5
|
-
|
6
|
-
public :attributes, :associations
|
7
|
-
|
8
|
-
def_delegator :attributes, :[]
|
9
|
-
|
10
|
-
def associated_objects(association_name)
|
11
|
-
associations.detect {|association| association_name == association.name }.objects
|
12
|
-
end
|
13
|
-
|
14
|
-
def has_associated_objects?
|
15
|
-
!associations.all?(&:empty?)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
module Yaks
|
2
|
-
class Serializer
|
3
|
-
module ClassMethods
|
4
|
-
include Util
|
5
|
-
|
6
|
-
protected
|
7
|
-
|
8
|
-
def inherited(desc)
|
9
|
-
attributes
|
10
|
-
has_one
|
11
|
-
end
|
12
|
-
|
13
|
-
def attributes(*attrs)
|
14
|
-
_attributes.concat attrs
|
15
|
-
|
16
|
-
attrs.each do |attr|
|
17
|
-
unless method_defined?(attr)
|
18
|
-
define_method attr do
|
19
|
-
object.send attr
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def has_one(*attrs)
|
26
|
-
_associations.concat(attrs.map {|a| [:has_one, a] })
|
27
|
-
attrs.each do |attr|
|
28
|
-
unless method_defined?(attr)
|
29
|
-
define_method attr do
|
30
|
-
object.send attr
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def has_many(*attrs)
|
37
|
-
_associations.concat(attrs.map {|a| [:has_many, a] })
|
38
|
-
attrs.each do |attr|
|
39
|
-
unless method_defined?(attr)
|
40
|
-
define_method attr do
|
41
|
-
object.send attr
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def root_key(key)
|
48
|
-
@root_key = key
|
49
|
-
end
|
50
|
-
|
51
|
-
def identity_key(id_key)
|
52
|
-
@identity_key = id_key
|
53
|
-
end
|
54
|
-
|
55
|
-
public
|
56
|
-
|
57
|
-
def _attributes
|
58
|
-
@attributes ||= []
|
59
|
-
end
|
60
|
-
|
61
|
-
def _associations
|
62
|
-
@associations ||= []
|
63
|
-
end
|
64
|
-
|
65
|
-
def _root_key
|
66
|
-
@root_key ||
|
67
|
-
pluralize(underscore(self.name.sub(/Serializer$/, '')))
|
68
|
-
end
|
69
|
-
|
70
|
-
def _identity_key
|
71
|
-
@identity_key || :id
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
data/spec/integration_spec.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module IntegrationRunner
|
4
|
-
def run!
|
5
|
-
specify do
|
6
|
-
tests.each do |type, objects, result|
|
7
|
-
expect(Yaks::Dumper.new(format: format).call(type, objects)).to eq result
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe Yaks, 'integration tests' do
|
14
|
-
include_context 'fixtures'
|
15
|
-
|
16
|
-
context 'json api' do
|
17
|
-
extend IntegrationRunner
|
18
|
-
|
19
|
-
let(:format) { :json_api }
|
20
|
-
let(:tests) do
|
21
|
-
[
|
22
|
-
['friends', [john],
|
23
|
-
{
|
24
|
-
"friends" => [
|
25
|
-
{ "name" => "john",
|
26
|
-
"id" => 1,
|
27
|
-
"links" => {
|
28
|
-
'pets' => [2, 3],
|
29
|
-
'pet_peeve' => 4
|
30
|
-
}
|
31
|
-
}
|
32
|
-
],
|
33
|
-
"linked" => {
|
34
|
-
"pets" => [
|
35
|
-
{ "name" => "boingboing",
|
36
|
-
"species" => "dog",
|
37
|
-
"id" => 2
|
38
|
-
},
|
39
|
-
{ "name" => "wassup",
|
40
|
-
"species" => "cat",
|
41
|
-
"id" => 3
|
42
|
-
}
|
43
|
-
],
|
44
|
-
"pet_peeve" => [
|
45
|
-
{ "id" => 4,
|
46
|
-
"type" => "parsing with regexps"}
|
47
|
-
]
|
48
|
-
}
|
49
|
-
}
|
50
|
-
]
|
51
|
-
]
|
52
|
-
end
|
53
|
-
|
54
|
-
run!
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Yaks
|
4
|
-
describe FoldJsonApi do
|
5
|
-
let(:collection) {
|
6
|
-
SerializableCollection.new(
|
7
|
-
'friends',
|
8
|
-
:id,
|
9
|
-
Hamster.list(
|
10
|
-
SerializableObject.new(
|
11
|
-
Hamster.hash(
|
12
|
-
id: '3',
|
13
|
-
name: 'john'
|
14
|
-
),
|
15
|
-
Hamster.list(
|
16
|
-
SerializableAssociation.new(
|
17
|
-
SerializableCollection.new(
|
18
|
-
'pets', :id,
|
19
|
-
Hamster.list(
|
20
|
-
SerializableObject.new(Hamster.hash(
|
21
|
-
id: '3',
|
22
|
-
pet_name: 'wabi'
|
23
|
-
),
|
24
|
-
Hamster.list
|
25
|
-
),
|
26
|
-
SerializableObject.new(Hamster.hash(
|
27
|
-
id: '4',
|
28
|
-
pet_name: 'sabi'
|
29
|
-
),
|
30
|
-
Hamster.list
|
31
|
-
)
|
32
|
-
)
|
33
|
-
)
|
34
|
-
)
|
35
|
-
)
|
36
|
-
)
|
37
|
-
)
|
38
|
-
)
|
39
|
-
}
|
40
|
-
|
41
|
-
specify do
|
42
|
-
expect( FoldJsonApi.new(collection).fold ).to eq(
|
43
|
-
Hamster.hash(
|
44
|
-
"friends" => Hamster.list(
|
45
|
-
Hamster.hash(
|
46
|
-
"id" => "3",
|
47
|
-
"name" => "john",
|
48
|
-
"links" => Hamster.hash(
|
49
|
-
"pets" => Hamster.list("3", "4")
|
50
|
-
),
|
51
|
-
)
|
52
|
-
),
|
53
|
-
"linked" => Hamster.hash(
|
54
|
-
"pets" => Hamster.set(
|
55
|
-
Hamster.hash("pet_name" => "sabi", "id" => "4"),
|
56
|
-
Hamster.hash("pet_name" => "wabi", "id" => "3")
|
57
|
-
)
|
58
|
-
)
|
59
|
-
)
|
60
|
-
)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|