decoradar 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZjdhYTE0NDhjN2YyZjQ0NjljYjNhYzQzMGE2MDRhNGIyMDQxN2MzZQ==
4
+ NWRjNjA5NGQzOGE3MzI4Y2I2MDljYmZhMmVjOWI1MjkyMDE4NDU0OA==
5
5
  data.tar.gz: !binary |-
6
- MzBhOWI0YmM1ZjZkYzgwMzI5YTA1MWE0YjE2ZjBjMjc2MTc2YmZhMw==
6
+ N2YxZWVmNzg0MDVkOGVlYjZmZmZkNTY2ZTNmYzkyNzY5NjRhNWZjNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWZhNjBiM2E3ZDE0NGUzN2VhZTM4ZDJlY2FiNTRmZTVjYjg5ODBjYmE5NTZm
10
- MmNhMzc5ZjM3MmVjNGMyNGEzN2ZlNWUwYWNjODEwZTY4YjkwYjVjNjM4YzU5
11
- YmI5ZDA5N2VkZjQ1NmZiNWQ3ZTNmZWE4ZGNlMWQyZWJmMDMyMTY=
9
+ YmMyZjM3YTA0ZjlmNjA5MDMyOTNmYTExYjYxM2NmYmY0ZjUwMjcxODFlODU1
10
+ ZjgzZTRmZGY4ZjYyYmVkM2YzNGFiNTZkZTA5ZDFlNzA0NTM0NzcyOGQyMTM0
11
+ NDk5Mjk3YzEzNDExODczMGZmNmY2NDMyYjc4ODZkN2M1MjA0MDg=
12
12
  data.tar.gz: !binary |-
13
- YWI3MTViZjg2Njk4NWMxNzcxYTM5OGU1Yjk0NTgwNTllYjhhZmIxYjRiZDEw
14
- Y2RmZTJhNmNkOTQ5MmJjM2UyNTcwZjU5NmZmZDExMDEyYmI1NDI4Zjc1MThh
15
- Mzk3NTAyOGNkNTRkYTNkYmFkYzkxZGNhYjQ0NTk0NzMyMjdmYjQ=
13
+ NDhhNGNjYjIxOGE3OGQ0OTY4NTIzYzQ1YzU0ZDQzMzJjODE3Y2IwZmZiMzUx
14
+ M2RiZmI2OTk0MjUyMjNjYzFmZmM3ZWY3NGJkNGFmZTgzYjE2ZWFhMWY1NWU1
15
+ NDdmMDRmNGVkNGZhZmYzMGM0MzI3ZDZiMTIwZWQxNjAzOWYzNGU=
data/README.md CHANGED
@@ -1,25 +1,31 @@
1
1
  # Decoradar
2
2
 
3
- Decoradar is a simple decorator + serializer in Ruby
3
+ [![Travis](https://img.shields.io/travis/qcam/decoradar.svg)](https://travis-ci.org/qcam/decoradar)
4
+ [![RubyGems](https://img.shields.io/gem/v/decoradar.svg)](https://rubygems.org/gems/decoradar)
5
+
6
+ As the name might have implied, Decoradar is a simple JSON serializer + decorator in Ruby.
4
7
 
5
8
  ## Installation
6
9
 
7
10
  Add this line to your application's Gemfile:
8
11
 
9
- gem 'decoradar'
12
+ gem 'decoradar', '~> 0.1.1'
10
13
 
11
14
  And then execute:
12
15
 
13
16
  $ bundle
14
17
 
15
- Or install it yourself as:
18
+ ## Why Decoradar?
16
19
 
17
- $ gem install decoradar
20
+ Decoradar is really **simple** and **magic-free** (zero monkey patch, zero auto coercion)
21
+ and aims to bring ActiveModel::Serializer to Plain Ruby Object.
18
22
 
19
- ## Why Decoradar?
23
+ What will Decoradar brings you?
20
24
 
21
- Decoradar is really **simple** (it has only 2 classes as of writing) and **magic-free** (zero monkey patch, zero auto coercion)
22
- and aims to bring ActiveModel::Serializer/Draper DSL-style declaration to Plain Ruby Object.
25
+ - `ActiveModel::Serializer` DSL style.
26
+ - Magic free and explicit: there is no monkey patching or auto coercion.
27
+ - Isolated testing: it's just Ruby objects without Rails dependence so feel free to unit
28
+ test it. (when I said unit-test I meant it)
23
29
 
24
30
  ## Usage
25
31
 
@@ -1,6 +1,7 @@
1
1
  require 'set'
2
2
  require 'decoradar/attribute'
3
3
  require 'decoradar/collection'
4
+ require 'decoradar/errors'
4
5
 
5
6
  # Decorates and serializes model into a hash
6
7
  #
@@ -77,6 +78,8 @@ module Decoradar
77
78
  end
78
79
  end
79
80
 
81
+ private
82
+
80
83
  def enrich_json(json, attribute)
81
84
  if attribute.including?(model)
82
85
  attribute.serialize(json, value_of(attribute))
@@ -86,7 +89,11 @@ module Decoradar
86
89
  end
87
90
 
88
91
  def value_of(attribute)
89
- self.public_send(attribute.name.to_sym)
92
+ attribute_name = attribute.name.to_sym
93
+
94
+ self.public_send(attribute_name)
95
+ rescue NoMethodError
96
+ raise Decoradar::AttributeNotFound.new(self, attribute_name)
90
97
  end
91
98
  end
92
99
  end
@@ -0,0 +1,15 @@
1
+ module Decoradar
2
+ class AttributeNotFound < ::RuntimeError
3
+ attr_reader :decorated, :attribute_name
4
+
5
+ def initialize(decorated, attribute_name)
6
+ @decorated = decorated
7
+ @attribute_name = attribute_name
8
+ super()
9
+ end
10
+
11
+ def message
12
+ "Attribute ##{attribute_name} not implemented on model #{decorated.class}"
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Decoradar
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decoradar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cẩm Huỳnh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-19 00:00:00.000000000 Z
11
+ date: 2017-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,6 +73,7 @@ files:
73
73
  - lib/decoradar.rb
74
74
  - lib/decoradar/attribute.rb
75
75
  - lib/decoradar/collection.rb
76
+ - lib/decoradar/errors.rb
76
77
  - lib/decoradar/version.rb
77
78
  homepage: https://github.com/huynhquancam/decoradar
78
79
  licenses: