activerepresenter 0.0.11 → 0.0.12
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 +4 -4
- data/lib/active_representer/base.rb +42 -0
- data/test/collection_test.rb +74 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2e128c54484aca4628ca948c70a1fa07c3a2d78903027635f3c026ea26f80ba
|
4
|
+
data.tar.gz: d1fdca6b47e8a057e1158e5b3868d869e17ae92a69f331cc955e9bc55b204b86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c367b0d38d9d201939822614ecf57d4b7d3d050ff18dcf9108b6b4a1408226be886bd92ef2bb2a4ee394ea43f6cae6dc2caefc48212e9c5238483a630f10153f
|
7
|
+
data.tar.gz: 1dfa1d789f3ceb7ad3650bec72e946d74ce628682fd97f3e027b811ab1f28b43ee16dfe4342de52a11a119347f49841068264c168b11a28e3e87773d37b0ef5c
|
@@ -1,15 +1,57 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/core_ext/class/attribute"
|
3
4
|
require "active_support/core_ext/module/delegation"
|
5
|
+
require "active_support/inflector"
|
4
6
|
|
5
7
|
module ActiveRepresenter
|
6
8
|
class Base
|
7
9
|
attr_reader :wrapped
|
10
|
+
class_attribute :collections, default: {}
|
8
11
|
|
9
12
|
delegate_missing_to :wrapped
|
10
13
|
|
11
14
|
def initialize(wrapped)
|
12
15
|
@wrapped = wrapped
|
16
|
+
self.class.collection_names.each do |collection_name|
|
17
|
+
next if wrapped[collection_name].nil?
|
18
|
+
representer = self.class.collections[collection_name]
|
19
|
+
collection_value = \
|
20
|
+
if representer
|
21
|
+
wrapped[collection_name].map { |item| representer.new(item) }
|
22
|
+
else
|
23
|
+
wrapped[collection_name]
|
24
|
+
end
|
25
|
+
instance_variable_set("@#{collection_name}", collection_value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class << self
|
30
|
+
def attr_collection(name, **options)
|
31
|
+
unless name.is_a?(Symbol) || name.is_a?(String)
|
32
|
+
raise ArgumentError.new("collection's name must be a Symbol or a String")
|
33
|
+
end
|
34
|
+
representer_name = \
|
35
|
+
options[:representer_name] ? options[:representer_name] : guess_representrer_name(name.to_s)
|
36
|
+
raise ArgumentError.new("representer_name must be a String") unless representer_name.is_a?(String)
|
37
|
+
begin
|
38
|
+
representer = representer_name.constantize
|
39
|
+
collections[name.to_sym] = representer
|
40
|
+
rescue NameError => e
|
41
|
+
collections[name.to_sym] = nil
|
42
|
+
end
|
43
|
+
class_eval do
|
44
|
+
attr_reader name.to_sym
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def collection_names
|
49
|
+
collections.keys
|
50
|
+
end
|
51
|
+
|
52
|
+
def guess_representrer_name(name)
|
53
|
+
"#{name.singularize.camelize}Representer"
|
54
|
+
end
|
13
55
|
end
|
14
56
|
end
|
15
57
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require_relative "../lib/active_representer/base.rb"
|
3
|
+
require "ostruct"
|
4
|
+
require "active_support/time"
|
5
|
+
|
6
|
+
class ActivityRepresenter < ActiveRepresenter::Base
|
7
|
+
def created_on
|
8
|
+
created_at.to_date
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class UserRepresenter < ActiveRepresenter::Base
|
13
|
+
attr_collection :activities
|
14
|
+
attr_collection :notifications
|
15
|
+
|
16
|
+
def full_name
|
17
|
+
"#{first_name} #{last_name}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class CollectionTest < Test::Unit::TestCase
|
22
|
+
test ".new does not raise error" do
|
23
|
+
user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
|
24
|
+
assert_nothing_raised { UserRepresenter.new(user) }
|
25
|
+
end
|
26
|
+
|
27
|
+
test "#full_name returns John Appleseed" do
|
28
|
+
user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
|
29
|
+
representer = UserRepresenter.new(user)
|
30
|
+
assert_equal(representer.full_name, 'John Appleseed')
|
31
|
+
end
|
32
|
+
|
33
|
+
test ".new does not raise error when activities are specified" do
|
34
|
+
user = OpenStruct.new(
|
35
|
+
first_name: 'John',
|
36
|
+
last_name: 'Appleseed',
|
37
|
+
activities: [OpenStruct.new(created_at: Time.now)]
|
38
|
+
)
|
39
|
+
assert_nothing_raised { UserRepresenter.new(user) }
|
40
|
+
end
|
41
|
+
|
42
|
+
test "activity is represented" do
|
43
|
+
user = OpenStruct.new(
|
44
|
+
first_name: 'John',
|
45
|
+
last_name: 'Appleseed',
|
46
|
+
activities: [OpenStruct.new(created_at: Time.now)]
|
47
|
+
)
|
48
|
+
representer = UserRepresenter.new(user)
|
49
|
+
activity = representer.activities.first
|
50
|
+
assert_instance_of(ActivityRepresenter, activity)
|
51
|
+
end
|
52
|
+
|
53
|
+
test "activity.created_on is Date.today" do
|
54
|
+
user = OpenStruct.new(
|
55
|
+
first_name: 'John',
|
56
|
+
last_name: 'Appleseed',
|
57
|
+
activities: [OpenStruct.new(created_at: Time.now)]
|
58
|
+
)
|
59
|
+
representer = UserRepresenter.new(user)
|
60
|
+
activity = representer.activities.first
|
61
|
+
assert_equal(activity.created_on, Date.today)
|
62
|
+
end
|
63
|
+
|
64
|
+
test "notification is not represented" do
|
65
|
+
user = OpenStruct.new(
|
66
|
+
first_name: 'John',
|
67
|
+
last_name: 'Appleseed',
|
68
|
+
notifications: [OpenStruct.new(created_at: Time.now)]
|
69
|
+
)
|
70
|
+
representer = UserRepresenter.new(user)
|
71
|
+
notification = representer.notifications.first
|
72
|
+
assert_instance_of(OpenStruct, notification)
|
73
|
+
end
|
74
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerepresenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Hashimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,6 +70,7 @@ files:
|
|
70
70
|
- lib/active_representer/base.rb
|
71
71
|
- lib/activerepresenter.rb
|
72
72
|
- test/base_test.rb
|
73
|
+
- test/collection_test.rb
|
73
74
|
- test/inheritance_test.rb
|
74
75
|
homepage: https://github.com/ryohashimoto/lightrails
|
75
76
|
licenses:
|
@@ -98,4 +99,5 @@ summary: Active Representer provides model objects by decorating objects (part o
|
|
98
99
|
Lightrails).
|
99
100
|
test_files:
|
100
101
|
- test/base_test.rb
|
102
|
+
- test/collection_test.rb
|
101
103
|
- test/inheritance_test.rb
|