showcase 0.0.1 → 0.1.0

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
  SHA1:
3
- metadata.gz: 693362b089b6c475cdc2604804aa9f4b48d216ff
4
- data.tar.gz: dcf7d634807feca412dfe996c1876f27dcf9476a
3
+ metadata.gz: 33e9eda486961eacbd46b9b6c28c8f8507a372fa
4
+ data.tar.gz: 5081731bb69b9682a2897e89f1083651d1727033
5
5
  SHA512:
6
- metadata.gz: 893a1c780c5ade2491d71ee16f2a36726ef9d956188d0183fc7272d645ee805c5bc553a04f80cfb65aeec0b4e9220e6115583473295e9a85938e094b829eee47
7
- data.tar.gz: 9793dce8c7bfafd7a05e1df6c8249ffb4a9cbb538f82e8a38ef972ef3bf3178712da947e0e5268b150f1c20180f5656950c39807a45c989f639166ee5ff70acd
6
+ metadata.gz: f5daf3d2356b19ea36a413a11b5eeab4c70ee9a253ae91060879f0a6593339cc63c2cc5d28dd3ac859fc530253839682a63ff8d02e864eaf23de251ed42f2dcb
7
+ data.tar.gz: 207122c61b08d546ca187823ce209a926670f39db14615cae5bb442649b14bfb23d276b1eae2bd194c3f005905b5b7a01e365f497a400b9d02b680a6928d8963
data/README.md CHANGED
@@ -18,11 +18,11 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- Include Showcase::Helpers as additional helper module.
21
+ Include Showcase::Helpers on your ApplicationController:
22
22
 
23
23
  ```ruby
24
24
  class ApplicationController < ActionController::Base
25
- helper Showcase::Helpers
25
+ include Showcase::Helpers
26
26
  end
27
27
  ```
28
28
 
@@ -55,7 +55,7 @@ class ProjectPresenter < Showcase::Presenter
55
55
  # expects project.task to return an enumerable. automatically wraps each task in a TaskPresenter presenter
56
56
  presents_collection :tasks
57
57
 
58
- # you can use `context`, or the shortcut `h`, to access the view context.
58
+ # you can use `view_context`, or the shortcut `h`, to access the context.
59
59
  # `object` refers to the object being presented
60
60
  def title
61
61
  h.link_to object.title, object
@@ -1,6 +1,29 @@
1
+ require 'active_support/concern'
2
+ require 'active_support/inflector'
3
+
1
4
  module Showcase
2
5
  module Helpers
3
- def present(obj, klass = nil, context = self)
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ if respond_to?(:helper_method)
10
+ helper_method :present
11
+ helper_method :present_collection
12
+ end
13
+ if respond_to?(:hide_action)
14
+ hide_action :presenter_context
15
+ end
16
+ end
17
+
18
+ def presenter_context
19
+ if respond_to? :view_context
20
+ view_context
21
+ else
22
+ self
23
+ end
24
+ end
25
+
26
+ def present(obj, klass = nil, context = presenter_context)
4
27
  if obj.is_a? ::Showcase::Presenter
5
28
  obj
6
29
  else
@@ -9,10 +32,9 @@ module Showcase
9
32
  end
10
33
  end
11
34
 
12
- def present_collection(obj, klass = nil, context = self)
35
+ def present_collection(obj, klass = nil, context = presenter_context)
13
36
  obj.map { |o| present(o, klass, context) }
14
37
  end
15
38
  end
16
39
  end
17
40
 
18
-
@@ -1,15 +1,14 @@
1
1
  require 'delegate'
2
- require 'active_support/inflector'
3
2
  require 'showcase/helpers'
4
3
 
5
4
  module Showcase
6
5
  class Presenter < SimpleDelegator
7
6
  include Helpers
8
7
 
9
- attr_reader :context
8
+ attr_reader :view_context
10
9
 
11
- alias :object :__getobj__
12
- alias :h :context
10
+ alias_method :object, :__getobj__
11
+ alias_method :h, :view_context
13
12
 
14
13
  def class
15
14
  object.class
@@ -17,13 +16,13 @@ module Showcase
17
16
 
18
17
  def initialize(obj, context)
19
18
  super(obj)
20
- @context = context
19
+ @view_context = context
21
20
  end
22
21
 
23
22
  def self.presents(*attrs)
24
23
  attrs.each do |attr|
25
24
  define_method attr do
26
- present(object.send(attr), nil, context)
25
+ present(object.send(attr), nil, view_context)
27
26
  end
28
27
  end
29
28
  end
@@ -31,9 +30,10 @@ module Showcase
31
30
  def self.presents_collection(*attrs)
32
31
  attrs.each do |attr|
33
32
  define_method attr do
34
- present_collection(object.send(attr), nil, context)
33
+ present_collection(object.send(attr), nil, view_context)
35
34
  end
36
35
  end
37
36
  end
38
37
  end
39
38
  end
39
+
@@ -1,3 +1,3 @@
1
1
  module Showcase
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/spec/fixtures.rb CHANGED
@@ -10,6 +10,10 @@ class Project < Struct.new(:name)
10
10
  [ Person.new("Ju Liu") ]
11
11
  end
12
12
 
13
+ def first_collaborator
14
+ collaborators.first
15
+ end
16
+
13
17
  def dummy
14
18
  "foobar"
15
19
  end
@@ -19,6 +23,10 @@ class PersonPresenter < Showcase::Presenter
19
23
  def sex
20
24
  'male'
21
25
  end
26
+
27
+ def bold_name
28
+ h.bold(object.name)
29
+ end
22
30
  end
23
31
 
24
32
  class ProjectPresenter < Showcase::Presenter
@@ -29,11 +37,19 @@ class ProjectPresenter < Showcase::Presenter
29
37
  "Presented #{object.name}"
30
38
  end
31
39
 
32
- def context_foo
33
- h.foo
40
+ def bold_name
41
+ h.bold(object.name)
42
+ end
43
+
44
+ def first_collaborator
45
+ present(object.first_collaborator)
34
46
  end
35
47
  end
36
48
 
37
49
  class Context
38
50
  include Showcase::Helpers
51
+
52
+ def bold(text)
53
+ "**#{text}**"
54
+ end
39
55
  end
@@ -2,14 +2,13 @@ require 'showcase'
2
2
  require_relative './fixtures'
3
3
 
4
4
  describe Showcase::Presenter do
5
-
6
- let(:context) { stub(:context, foo: 'bar') }
5
+ let(:context) { Context.new }
7
6
  let(:object) { Project.new('Showcase') }
8
7
  let(:subject) { ProjectPresenter.new(object, context) }
9
8
 
10
9
  it 'takes the object and a context as parameters' do
11
10
  subject.object.should == object
12
- subject.context.should == context
11
+ subject.view_context.should == context
13
12
  end
14
13
 
15
14
  it 'preserves original .class' do
@@ -25,19 +24,31 @@ describe Showcase::Presenter do
25
24
  end
26
25
 
27
26
  it 'allows .h as shortcut to access the context' do
28
- subject.context_foo.should == 'bar'
27
+ subject.bold_name.should == '**Showcase**'
28
+ end
29
+
30
+ describe '.present' do
31
+ it 'passes the context' do
32
+ subject.first_collaborator.bold_name.should == '**Ju Liu**'
33
+ end
29
34
  end
30
35
 
31
36
  describe '#presents' do
32
37
  it 'wraps the specified attributes inside a presenter' do
33
38
  subject.owner.sex.should == 'male'
34
39
  end
40
+ it 'passes the context' do
41
+ subject.owner.bold_name.should == '**Stefano Verna**'
42
+ end
35
43
  end
36
44
 
37
45
  describe '#presents_collection' do
38
46
  it 'wraps the specifieed collection attributes inside a presenter' do
39
47
  subject.collaborators.first.sex.should == 'male'
40
48
  end
49
+ it 'passes the context' do
50
+ subject.collaborators.first.bold_name.should == '**Ju Liu**'
51
+ end
41
52
  end
42
53
  end
43
54
 
@@ -63,7 +74,7 @@ describe Showcase::Helpers do
63
74
  end
64
75
  it 'the context to use can be specified as third parameter' do
65
76
  different_context = stub
66
- context.present(object, ProjectPresenter, different_context).context.should == different_context
77
+ context.present(object, ProjectPresenter, different_context).view_context.should == different_context
67
78
  end
68
79
  end
69
80
  end
@@ -79,5 +90,5 @@ describe Showcase::Helpers do
79
90
  presented_collection.should == [ 'foo', 'bar' ]
80
91
  end
81
92
  end
82
-
83
93
  end
94
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: showcase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Verna