presenter_object 0.1.7 → 0.2.0
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/presenter_object/base.rb +3 -20
- data/lib/presenter_object/collection.rb +28 -0
- data/lib/presenter_object/delegation.rb +19 -0
- data/lib/presenter_object/version.rb +1 -1
- data/lib/presenter_object.rb +4 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 518f904deecb811d75fd12215e6cac057607d178
|
4
|
+
data.tar.gz: 39c9f1668de7b993ba331b7b023827f1c264855a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b8f0bef1612d629afc6ff87521218c61aa3360ad2ee5f194d49015f092e38b6e17030d90bcc1875915734ca1c1fe0fc41b0ec5f04b4b8d1eb28538997f22adb
|
7
|
+
data.tar.gz: a8d9f016f2459174104ae83d20ef9e7ebe1b9bb2d2fc4e52ec04154071dd3363a7decfd14047b69bdbf68f96a91c4f3e22216aebe6781c566432fb14e44c26b8
|
@@ -17,6 +17,9 @@
|
|
17
17
|
# document.class # is the wrapped object's class, helps it behave like models do in forms, link helpers etc.
|
18
18
|
#
|
19
19
|
class PresenterObject::Base
|
20
|
+
include PresenterObject::Delegation
|
21
|
+
attr_reader :object, :class, :to_param, :view_context
|
22
|
+
|
20
23
|
class << self
|
21
24
|
def presents(class_name)
|
22
25
|
@class_name = class_name.to_s.classify
|
@@ -32,30 +35,10 @@ class PresenterObject::Base
|
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
35
|
-
attr_reader :object, :class, :to_param, :view_context
|
36
|
-
|
37
38
|
def initialize(object, view_context = nil)
|
38
39
|
@object = object
|
39
40
|
@class = object.class # impersonate object's class
|
40
41
|
@to_param = object.id # let link helpers know the object's id
|
41
42
|
@view_context = view_context
|
42
43
|
end
|
43
|
-
|
44
|
-
def method_missing(name, *args, &block)
|
45
|
-
if @object.respond_to? name
|
46
|
-
@object.send name, *args, &block
|
47
|
-
elsif @view_context.respond_to? name
|
48
|
-
@view_context.send name, *args, &block
|
49
|
-
else
|
50
|
-
super
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def respond_to?(name, include_private = false)
|
55
|
-
if @object.respond_to?(name, include_private) || @view_context.respond_to?(name, include_private)
|
56
|
-
true
|
57
|
-
else
|
58
|
-
super
|
59
|
-
end
|
60
|
-
end
|
61
44
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Presenter superclass for collections. Create your own collection presenter by sub-classing `PresenterObject::Collection`.
|
2
|
+
#
|
3
|
+
# e.g:
|
4
|
+
#
|
5
|
+
# class DocumentCollectionPresenter << PresenterObject::Collection
|
6
|
+
# .. add methods here ..
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# Create a presenter instance by giving it a model instance e.g:
|
10
|
+
#
|
11
|
+
# documents = DocumentCollectionPresenter.new Document.where(publish: true)
|
12
|
+
# documents.method_that_presents_collection
|
13
|
+
#
|
14
|
+
class PresenterObject::Collection
|
15
|
+
include Enumerable
|
16
|
+
include PresenterObject::Delegation
|
17
|
+
attr_reader :collection, :view_context
|
18
|
+
alias_method :object, :collection
|
19
|
+
|
20
|
+
def initialize(collection, view_context = nil)
|
21
|
+
@collection = collection
|
22
|
+
@view_context = view_context
|
23
|
+
end
|
24
|
+
|
25
|
+
def each
|
26
|
+
@collection.each { |object| yield object.presenterize view_context }
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PresenterObject::Delegation
|
2
|
+
def method_missing(name, *args, &block)
|
3
|
+
if object.respond_to? name
|
4
|
+
object.send name, *args, &block
|
5
|
+
elsif view_context.respond_to? name
|
6
|
+
view_context.send name, *args, &block
|
7
|
+
else
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def respond_to?(name, include_private = false)
|
13
|
+
if object.respond_to?(name, include_private) || view_context.respond_to?(name, include_private)
|
14
|
+
true
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/presenter_object.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
require "active_support/core_ext/string/inflections"
|
2
|
+
require "active_support/concern"
|
1
3
|
require "presenter_object/version"
|
4
|
+
require "presenter_object/delegation"
|
2
5
|
require "presenter_object/base"
|
3
6
|
require "presenter_object/presentable"
|
7
|
+
require "presenter_object/collection"
|
4
8
|
|
5
9
|
module PresenterObject
|
6
10
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: presenter_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Salazar
|
@@ -82,6 +82,8 @@ files:
|
|
82
82
|
- bin/setup
|
83
83
|
- lib/presenter_object.rb
|
84
84
|
- lib/presenter_object/base.rb
|
85
|
+
- lib/presenter_object/collection.rb
|
86
|
+
- lib/presenter_object/delegation.rb
|
85
87
|
- lib/presenter_object/presentable.rb
|
86
88
|
- lib/presenter_object/version.rb
|
87
89
|
- presenter_object.gemspec
|