activerepresenter 0.0.12 → 0.0.13

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: 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