activerepresenter 0.0.12 → 0.0.13

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2e128c54484aca4628ca948c70a1fa07c3a2d78903027635f3c026ea26f80ba
4
- data.tar.gz: d1fdca6b47e8a057e1158e5b3868d869e17ae92a69f331cc955e9bc55b204b86
3
+ metadata.gz: a10a69202f671dcad05cfbb9e0b4b74fe2a1cd8145a351991ca84357208556b6
4
+ data.tar.gz: b723ed839b9cac7cd6cd2250a91cf87583c1fb00a613bd30ddb2fcf707b749c1
5
5
  SHA512:
6
- metadata.gz: c367b0d38d9d201939822614ecf57d4b7d3d050ff18dcf9108b6b4a1408226be886bd92ef2bb2a4ee394ea43f6cae6dc2caefc48212e9c5238483a630f10153f
7
- data.tar.gz: 1dfa1d789f3ceb7ad3650bec72e946d74ce628682fd97f3e027b811ab1f28b43ee16dfe4342de52a11a119347f49841068264c168b11a28e3e87773d37b0ef5c
6
+ metadata.gz: 108cd5117d37ea8d0bc2d37f613043cfe8ed31e6e5c22c74f640a17b8382c23439edb40a5cba6059b40cae98b556cb334696324cc9f24a8653cf21bd4759116b
7
+ data.tar.gz: ad85e89000e96519aead14fbba97752c5c99dc760705298613b6a0b458e3d2ae02b17528fdb5c55492e582f3cd590b3dc739c2ae7e42c6a66a89280f3bb64140
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.test_files = s.files.grep(/^test/)
25
25
 
26
26
  s.add_dependency "bundler", "~> 1.3"
27
- s.add_dependency "activesupport", ">= 5.1", "< 6"
27
+ s.add_dependency "activemodel", ">= 5.2", "< 6"
28
+ s.add_dependency "activesupport", ">= 5.2", "< 6"
28
29
  s.add_development_dependency "rake", "~> 0"
29
30
  end
@@ -1,32 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support/core_ext/class/attribute"
4
- require "active_support/core_ext/module/delegation"
5
- require "active_support/inflector"
3
+ require "active_model"
4
+ require "active_support"
6
5
 
7
6
  module ActiveRepresenter
8
7
  class Base
9
- attr_reader :wrapped
8
+ include ActiveModel::Model
9
+ include ActiveModel::Attributes
10
+
11
+ attribute :wrapped
10
12
  class_attribute :collections, default: {}
11
13
 
12
14
  delegate_missing_to :wrapped
13
15
 
14
- def initialize(wrapped)
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)
16
+ class << self
17
+ def wrap(wrapped)
18
+ instance = new
19
+ instance.wrapped = wrapped
20
+ collection_names.each do |collection_name|
21
+ next if wrapped[collection_name].nil?
22
+ representer_klass = collections[collection_name]
23
+ collection_value = \
24
+ if representer_klass
25
+ wrapped[collection_name].map { |item| representer_klass.wrap(item) }
26
+ else
27
+ wrapped[collection_name]
28
+ end
29
+ instance.instance_variable_set("@#{collection_name}", collection_value)
30
+ end
31
+ attribute_names.each do |attribute_name|
32
+ instance.send("#{attribute_name}=", wrapped.send(attribute_name))
33
+ end
34
+ instance
26
35
  end
27
- end
28
36
 
29
- class << self
30
37
  def attr_collection(name, **options)
31
38
  unless name.is_a?(Symbol) || name.is_a?(String)
32
39
  raise ArgumentError.new("collection's name must be a Symbol or a String")
@@ -49,6 +56,10 @@ module ActiveRepresenter
49
56
  collections.keys
50
57
  end
51
58
 
59
+ def attribute_names
60
+ attribute_types.keys - ["wrapped"]
61
+ end
62
+
52
63
  def guess_representrer_name(name)
53
64
  "#{name.singularize.camelize}Representer"
54
65
  end
@@ -0,0 +1,50 @@
1
+ require "test/unit"
2
+ require "ostruct"
3
+ require_relative "../lib/active_representer/base.rb"
4
+
5
+ class UserRepresenter < ActiveRepresenter::Base
6
+ attribute :first_name, :string
7
+ attribute :last_name, :string
8
+ attribute :age, :integer
9
+
10
+ def full_name
11
+ "#{first_name} #{last_name}"
12
+ end
13
+ end
14
+
15
+ class InheritanceTest < Test::Unit::TestCase
16
+ test ".wrap does not raise error" do
17
+ user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
18
+ assert_nothing_raised { UserRepresenter.wrap(user) }
19
+ end
20
+
21
+ test "#wrapped returns user object" do
22
+ user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
23
+ representer = UserRepresenter.wrap(user)
24
+ assert_equal(representer.wrapped, user)
25
+ end
26
+
27
+ test "#first_name returns John" do
28
+ user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
29
+ representer = UserRepresenter.wrap(user)
30
+ assert_equal(representer.first_name, 'John')
31
+ end
32
+
33
+ test "#last_name returns Appleseed" do
34
+ user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
35
+ representer = UserRepresenter.wrap(user)
36
+ assert_equal(representer.last_name, 'Appleseed')
37
+ end
38
+
39
+ test "#full_name returns John Appleseed" do
40
+ user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
41
+ representer = UserRepresenter.wrap(user)
42
+ assert_equal(representer.full_name, 'John Appleseed')
43
+ end
44
+
45
+ test "#age returns 30" do
46
+ user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed', age: 30)
47
+ representer = UserRepresenter.wrap(user)
48
+ assert_equal(representer.age, 30)
49
+ end
50
+ end
data/test/base_test.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  require "test/unit"
2
- require "activerepresenter"
2
+ require_relative "../lib/active_representer/base.rb"
3
3
 
4
4
  class BaseTest < Test::Unit::TestCase
5
- test ".new does not raise error" do
5
+ test ".wrap does not raise error" do
6
6
  wrapped = {}
7
- assert_nothing_raised { ActiveRepresenter::Base.new(wrapped) }
7
+ assert_nothing_raised { ActiveRepresenter::Base.wrap(wrapped) }
8
8
  end
9
9
 
10
10
  test "#wrapped returns original wrapped object" do
11
11
  wrapped = {}
12
- representer = ActiveRepresenter::Base.new(wrapped)
12
+ representer = ActiveRepresenter::Base.wrap(wrapped)
13
13
  assert_equal(representer.wrapped, wrapped)
14
14
  end
15
15
  end
@@ -1,7 +1,7 @@
1
1
  require "test/unit"
2
- require_relative "../lib/active_representer/base.rb"
3
2
  require "ostruct"
4
3
  require "active_support/time"
4
+ require_relative "../lib/active_representer/base.rb"
5
5
 
6
6
  class ActivityRepresenter < ActiveRepresenter::Base
7
7
  def created_on
@@ -19,24 +19,24 @@ class UserRepresenter < ActiveRepresenter::Base
19
19
  end
20
20
 
21
21
  class CollectionTest < Test::Unit::TestCase
22
- test ".new does not raise error" do
22
+ test ".wrap does not raise error" do
23
23
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
24
- assert_nothing_raised { UserRepresenter.new(user) }
24
+ assert_nothing_raised { UserRepresenter.wrap(user) }
25
25
  end
26
26
 
27
27
  test "#full_name returns John Appleseed" do
28
28
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
29
- representer = UserRepresenter.new(user)
29
+ representer = UserRepresenter.wrap(user)
30
30
  assert_equal(representer.full_name, 'John Appleseed')
31
31
  end
32
32
 
33
- test ".new does not raise error when activities are specified" do
33
+ test ".wrap does not raise error when activities are specified" do
34
34
  user = OpenStruct.new(
35
35
  first_name: 'John',
36
36
  last_name: 'Appleseed',
37
37
  activities: [OpenStruct.new(created_at: Time.now)]
38
38
  )
39
- assert_nothing_raised { UserRepresenter.new(user) }
39
+ assert_nothing_raised { UserRepresenter.wrap(user) }
40
40
  end
41
41
 
42
42
  test "activity is represented" do
@@ -45,7 +45,7 @@ class CollectionTest < Test::Unit::TestCase
45
45
  last_name: 'Appleseed',
46
46
  activities: [OpenStruct.new(created_at: Time.now)]
47
47
  )
48
- representer = UserRepresenter.new(user)
48
+ representer = UserRepresenter.wrap(user)
49
49
  activity = representer.activities.first
50
50
  assert_instance_of(ActivityRepresenter, activity)
51
51
  end
@@ -56,7 +56,7 @@ class CollectionTest < Test::Unit::TestCase
56
56
  last_name: 'Appleseed',
57
57
  activities: [OpenStruct.new(created_at: Time.now)]
58
58
  )
59
- representer = UserRepresenter.new(user)
59
+ representer = UserRepresenter.wrap(user)
60
60
  activity = representer.activities.first
61
61
  assert_equal(activity.created_on, Date.today)
62
62
  end
@@ -67,7 +67,7 @@ class CollectionTest < Test::Unit::TestCase
67
67
  last_name: 'Appleseed',
68
68
  notifications: [OpenStruct.new(created_at: Time.now)]
69
69
  )
70
- representer = UserRepresenter.new(user)
70
+ representer = UserRepresenter.wrap(user)
71
71
  notification = representer.notifications.first
72
72
  assert_instance_of(OpenStruct, notification)
73
73
  end
@@ -1,6 +1,6 @@
1
1
  require "test/unit"
2
- require "activerepresenter"
3
2
  require "ostruct"
3
+ require_relative "../lib/active_representer/base.rb"
4
4
 
5
5
  class UserRepresenter < ActiveRepresenter::Base
6
6
  def full_name
@@ -9,32 +9,32 @@ class UserRepresenter < ActiveRepresenter::Base
9
9
  end
10
10
 
11
11
  class InheritanceTest < Test::Unit::TestCase
12
- test ".new does not raise error" do
12
+ test ".wrap does not raise error" do
13
13
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
14
- assert_nothing_raised { UserRepresenter.new(user) }
14
+ assert_nothing_raised { UserRepresenter.wrap(user) }
15
15
  end
16
16
 
17
17
  test "#wrapped returns user object" do
18
18
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
19
- representer = UserRepresenter.new(user)
19
+ representer = UserRepresenter.wrap(user)
20
20
  assert_equal(representer.wrapped, user)
21
21
  end
22
22
 
23
23
  test "#first_name returns John" do
24
24
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
25
- representer = UserRepresenter.new(user)
25
+ representer = UserRepresenter.wrap(user)
26
26
  assert_equal(representer.first_name, 'John')
27
27
  end
28
28
 
29
29
  test "#last_name returns Appleseed" do
30
30
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
31
- representer = UserRepresenter.new(user)
31
+ representer = UserRepresenter.wrap(user)
32
32
  assert_equal(representer.last_name, 'Appleseed')
33
33
  end
34
34
 
35
35
  test "#full_name returns John Appleseed" do
36
36
  user = OpenStruct.new(first_name: 'John', last_name: 'Appleseed')
37
- representer = UserRepresenter.new(user)
37
+ representer = UserRepresenter.wrap(user)
38
38
  assert_equal(representer.full_name, 'John Appleseed')
39
39
  end
40
40
  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.12
4
+ version: 0.0.13
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-20 00:00:00.000000000 Z
11
+ date: 2018-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,13 +24,33 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '5.2'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '6'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '5.2'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '6'
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: activesupport
29
49
  requirement: !ruby/object:Gem::Requirement
30
50
  requirements:
31
51
  - - ">="
32
52
  - !ruby/object:Gem::Version
33
- version: '5.1'
53
+ version: '5.2'
34
54
  - - "<"
35
55
  - !ruby/object:Gem::Version
36
56
  version: '6'
@@ -40,7 +60,7 @@ dependencies:
40
60
  requirements:
41
61
  - - ">="
42
62
  - !ruby/object:Gem::Version
43
- version: '5.1'
63
+ version: '5.2'
44
64
  - - "<"
45
65
  - !ruby/object:Gem::Version
46
66
  version: '6'
@@ -69,6 +89,7 @@ files:
69
89
  - activerepresenter.gemspec
70
90
  - lib/active_representer/base.rb
71
91
  - lib/activerepresenter.rb
92
+ - test/attribute_test.rb
72
93
  - test/base_test.rb
73
94
  - test/collection_test.rb
74
95
  - test/inheritance_test.rb
@@ -98,6 +119,7 @@ specification_version: 4
98
119
  summary: Active Representer provides model objects by decorating objects (part of
99
120
  Lightrails).
100
121
  test_files:
122
+ - test/attribute_test.rb
101
123
  - test/base_test.rb
102
124
  - test/collection_test.rb
103
125
  - test/inheritance_test.rb