alba 0.4.0 → 0.5.0

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
  SHA256:
3
- metadata.gz: 115b71c658fcda000dd3e4d4ccc0306c3cf94033f42fd96eb8e26223cba1ed3a
4
- data.tar.gz: 8c9f023c9d60c905c35b6f285120f6de536b4a21258fdf42b867a5601c2162d6
3
+ metadata.gz: 89b4df7ce18a63e20cee9e87bd2855ef9c4735c4f6e4e1ef55433c5ba0a2fbd0
4
+ data.tar.gz: 63fa94fa17cdf3f5bfeef5f2e7b0d6efeec1fd06ad8d5386fb389fea3db0343a
5
5
  SHA512:
6
- metadata.gz: 66bc3c85b71f412c761629a6eae760c038115edd826e1d2cc34d204e2cdb4164ababdc31fc3f9569eb89ea51d364176cfd2a53b9ffbfb995fb3daeada1c110e3
7
- data.tar.gz: 6f8b53f011829b941ea6ebb6237f96f52dbc7cd36042db6cab996c7e4a4a3ead931f3801243c64be6f7c60f8d144cb85d5beea62f020f95e6d1bc3585bbadd1b
6
+ metadata.gz: 063d913715faa3917df5658d798ceb1619b9a2aef1dc0875c92c1592b3d3f9025bec60a364ebe0d54fb0769e18ba78f5786caa288159d304dfeca7ab00149d2b
7
+ data.tar.gz: 66aed62d355cd6fd8527ad4da27c53c9c42bf98606586a562b84dc377e6041125653d9669cf77c14427b4a1796b6c7abd7e6b2861323bac51fde28bfe05a7e7a
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- alba (0.4.0)
4
+ alba (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -108,6 +108,22 @@ UserResource1.new(user).serialize
108
108
  # => '{"id":1,"articles":[{"title":"Hello World!"},{"title":"Super nice"}]}'
109
109
  ```
110
110
 
111
+ ### Inline definition with `Alba.serialize`
112
+
113
+ `Alba.serialize` method is a shortcut to define everything inline.
114
+
115
+ ```ruby
116
+ Alba.serialize(user, with: proc { set key: :foo }) do
117
+ attributes :id
118
+ many :articles do
119
+ attributes :title, :body
120
+ end
121
+ end
122
+ # => '{"foo":{"id":1,"articles":[{"title":"Hello World!","body":"Hello World!!!"},{"title":"Super nice","body":"Really nice!"}]}}'
123
+ ```
124
+
125
+ Although this might be useful sometimes, it's generally recommended to define a class for both Resource and Serializer.
126
+
111
127
  ## Comparison
112
128
 
113
129
  Since Alba is intended to be stupid, there are many things Alba can't do while other gems can. However, from the same reason, it's extremely faster than alternatives.
@@ -2,6 +2,7 @@ require 'alba/version'
2
2
  require 'alba/serializers/default_serializer'
3
3
  require 'alba/serializer'
4
4
  require 'alba/resource'
5
+ require 'alba/resources/default_resource'
5
6
 
6
7
  # Core module
7
8
  module Alba
@@ -9,13 +10,23 @@ module Alba
9
10
 
10
11
  class << self
11
12
  attr_reader :backend
12
- end
13
13
 
14
- def self.backend=(backend)
15
- @backend = backend&.to_sym
16
- end
14
+ def backend=(backend)
15
+ @backend = backend&.to_sym
16
+ end
17
+
18
+ def serialize(object, with: nil, &block)
19
+ raise ArgumentError, 'Block required' unless block
20
+
21
+ resource_class.class_eval(&block)
22
+ resource = resource_class.new(object)
23
+ resource.serialize(with: with)
24
+ end
25
+
26
+ private
17
27
 
18
- def self.serialize(object)
19
- Serializers::DefaultSerializer.new(object).serialize
28
+ def resource_class
29
+ ::Alba::Resources::DefaultResource.clone
30
+ end
20
31
  end
21
32
  end
@@ -33,10 +33,10 @@ module Alba
33
33
  @_serializer || Alba::Serializers::DefaultSerializer
34
34
  when ->(obj) { obj.is_a?(Class) && obj <= Alba::Serializer }
35
35
  with
36
- when Symbol
37
- const_get(with.to_s.capitalize)
38
- when String
39
- const_get(with)
36
+ when Proc
37
+ inline_extended_serializer(with)
38
+ else
39
+ raise ArgumentError, 'Unexpected type for with, possible types are Class or Proc'
40
40
  end
41
41
  serializer.new(serializable_hash).serialize
42
42
  end
@@ -47,6 +47,14 @@ module Alba
47
47
  end
48
48
  end
49
49
  alias to_hash serializable_hash
50
+
51
+ private
52
+
53
+ def inline_extended_serializer(with)
54
+ klass = ::Alba::Serializers::DefaultSerializer.clone
55
+ klass.class_eval(&with)
56
+ klass
57
+ end
50
58
  end
51
59
 
52
60
  # Class methods
@@ -0,0 +1,9 @@
1
+ module Alba
2
+ module Resources
3
+ # Empty resource class, use this with `class_eval` for
4
+ # inline associations and serializations.
5
+ class DefaultResource
6
+ include ::Alba::Resource
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Alba
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OKURA Masafumi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-29 00:00:00.000000000 Z
11
+ date: 2020-07-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Fast and flexible JSON serializer
14
14
  email:
@@ -34,6 +34,7 @@ files:
34
34
  - lib/alba/many.rb
35
35
  - lib/alba/one.rb
36
36
  - lib/alba/resource.rb
37
+ - lib/alba/resources/default_resource.rb
37
38
  - lib/alba/serializer.rb
38
39
  - lib/alba/serializers/default_serializer.rb
39
40
  - lib/alba/version.rb