substance_presenter 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +8 -0
  3. data/lib/substance_presenter.rb +56 -0
  4. metadata +47 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 51b44a06dece062ee17455d1368e9243bf875d9fbe59147bafbfc23bc9395af1
4
+ data.tar.gz: 53154909733e1b247c0003e328659e7f2ac3a47478cbf3fc4497987753aa1579
5
+ SHA512:
6
+ metadata.gz: 856ec1f33e83e46b4b08104284743ae72bfe4d139b76319b640e3abfc8ea19a2e30e8b31d567a34de94c604750e87b3846ff6f6527585125972a02c6746c7f0a
7
+ data.tar.gz: 0433b8fab328c68a9f7c06e4a6a14536a9bd0ca75eee3698d456f03217bd4062f1ecaba10c8d39d4aac804ae8fe79bb3265a6adcea1eed37a8d76eedf59c04af
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ begin
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+ rescue LoadError
8
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'delegate'
4
+
5
+ module Substance
6
+ class Presenter < ::SimpleDelegator
7
+ attr_reader :view
8
+
9
+ class << self
10
+ # Returns true if object has been wrapped in a Presenter
11
+ def decorated?(object)
12
+ object.is_a?(Presenter)
13
+ end
14
+
15
+ # Wrap object in presenter with access to a view context
16
+ def present(object, view)
17
+ return object if decorated?(object)
18
+ new(object, view)
19
+ end
20
+
21
+ # Wrap each object in presenter with access to a view context
22
+ def present_collection(collection, view)
23
+ collection.map do |item|
24
+ present(item, view)
25
+ end
26
+ end
27
+ end
28
+
29
+ def initialize(object, view)
30
+ super(object)
31
+ @view = view
32
+ end
33
+
34
+ def object
35
+ undecorated(__getobj__)
36
+ end
37
+
38
+ private
39
+
40
+ def decorated?(object)
41
+ self.class.decorated?(object)
42
+ end
43
+
44
+ def present_collection(collection, presenter)
45
+ presenter.present_collection(collection, view)
46
+ end
47
+
48
+ def undecorated(potentially_decorated_object)
49
+ if decorated?(potentially_decorated_object)
50
+ potentially_decorated_object.object
51
+ else
52
+ potentially_decorated_object
53
+ end
54
+ end
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: substance_presenter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ole Palm
8
+ - Jakob Skjerning
9
+ - Jakob Dam Jensen
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2018-05-10 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: An easy to use presenter implementation
16
+ email: ole.palm@substancelab.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - Rakefile
22
+ - lib/substance_presenter.rb
23
+ homepage: http://rubygems.org/gems/substance_presenter
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.7.3
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: An easy to use presenter implementation
47
+ test_files: []