be9-viewtastic 0.3.0 → 0.3.1
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.
- data/lib/viewtastic/base.rb +29 -24
- metadata +8 -8
data/lib/viewtastic/base.rb
CHANGED
@@ -8,23 +8,28 @@ module Viewtastic
|
|
8
8
|
include ActionView::Helpers::NumberHelper
|
9
9
|
include ActionView::Helpers::FormTagHelper
|
10
10
|
|
11
|
-
|
11
|
+
if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 0
|
12
|
+
class_inheritable_accessor :presented
|
13
|
+
else
|
14
|
+
class_attribute :presented
|
15
|
+
end
|
16
|
+
|
12
17
|
self.presented = []
|
13
|
-
|
18
|
+
|
14
19
|
delegate :protect_against_forgery?,
|
15
20
|
:request_forgery_protection_token,
|
16
21
|
:form_authenticity_token,
|
17
22
|
:dom_id,
|
18
23
|
:to => :controller
|
19
|
-
|
24
|
+
|
20
25
|
class << self
|
21
26
|
# Indicates which models are to be presented.
|
22
27
|
#
|
23
28
|
# class CommentPresenter < Viewtastic::Base
|
24
29
|
# presents :comment, :post
|
25
30
|
# end
|
26
|
-
#
|
27
|
-
# If you want to delegate messages to models without prefixing them with the model name, specify them in an Array:
|
31
|
+
#
|
32
|
+
# If you want to delegate messages to models without prefixing them with the model name, specify them in an Array:
|
28
33
|
#
|
29
34
|
# class PresenterWithTwoAddresses < ActivePresenter::Base
|
30
35
|
# presents :post, :comment => [:body, :created_at]
|
@@ -32,7 +37,7 @@ module Viewtastic
|
|
32
37
|
#
|
33
38
|
def presents(*types)
|
34
39
|
types_and_attributes = types.extract_options!
|
35
|
-
|
40
|
+
|
36
41
|
types_and_attributes.each do |name, delegates|
|
37
42
|
attr_accessor name
|
38
43
|
presented << name
|
@@ -40,51 +45,51 @@ module Viewtastic
|
|
40
45
|
delegate msg, :to => name
|
41
46
|
end
|
42
47
|
end
|
43
|
-
|
48
|
+
|
44
49
|
attr_accessor *types
|
45
50
|
self.presented += types
|
46
|
-
|
51
|
+
|
47
52
|
presented.each do |name|
|
48
53
|
define_method("#{name}_dom_id") do |*args|
|
49
54
|
controller.send(:dom_id, send(name), *args)
|
50
55
|
end
|
51
56
|
end
|
52
57
|
end
|
53
|
-
|
58
|
+
|
54
59
|
def controller=(value) #:nodoc:
|
55
60
|
Thread.current[:viewtastic_controller] = value
|
56
61
|
end
|
57
|
-
|
62
|
+
|
58
63
|
def controller #:nodoc:
|
59
64
|
Thread.current[:viewtastic_controller]
|
60
65
|
end
|
61
|
-
|
66
|
+
|
62
67
|
def activated? #:nodoc:
|
63
68
|
!controller.nil?
|
64
69
|
end
|
65
70
|
end
|
66
|
-
|
71
|
+
|
67
72
|
# Accepts arguments in two forms. If you had a CommentPresenter that presented a Comment model and a Post model, you would write the follwoing:
|
68
|
-
#
|
73
|
+
#
|
69
74
|
# 1. CommentPresenter.new(:comment => Comment.new, :post => @post)
|
70
75
|
# 2. CommentPresenter.new(Comment.new, @post) - it will introspect on the model's class; the order is not important.
|
71
|
-
#
|
76
|
+
#
|
72
77
|
# You can even mix the two:
|
73
78
|
# CommentPresenter.new(Comment.new, :post => @post)
|
74
79
|
#
|
75
80
|
def initialize(*values)
|
76
81
|
keys_and_values = values.extract_options!
|
77
|
-
|
82
|
+
|
78
83
|
keys_and_values.each do |name, instance|
|
79
84
|
send("#{name}=", instance)
|
80
85
|
end
|
81
|
-
|
86
|
+
|
82
87
|
values.each do |value|
|
83
88
|
send("#{value.class.name.underscore}=", value)
|
84
89
|
end
|
85
90
|
end
|
86
|
-
|
87
|
-
def method_missing(method_name, *args, &block)
|
91
|
+
|
92
|
+
def method_missing(method_name, *args, &block)
|
88
93
|
if method_name.to_s =~ /_(path|url)$/
|
89
94
|
# Delegate all named routes to the controller
|
90
95
|
controller.send(method_name, *args)
|
@@ -94,34 +99,34 @@ module Viewtastic
|
|
94
99
|
super
|
95
100
|
end
|
96
101
|
end
|
97
|
-
|
102
|
+
|
98
103
|
# The current controller performing the request is accessible with this.
|
99
104
|
#
|
100
105
|
def controller
|
101
106
|
self.class.controller
|
102
107
|
end
|
103
|
-
|
108
|
+
|
104
109
|
protected
|
105
110
|
def delegate_message(method_name, *args, &block) #:nodoc:
|
106
111
|
presentable = presentable_for(method_name)
|
107
112
|
send(presentable).send(flatten_attribute_name(method_name, presentable), *args, &block)
|
108
113
|
end
|
109
|
-
|
114
|
+
|
110
115
|
def presentable_for(method_name) #:nodoc:
|
111
116
|
presented.sort_by { |k| k.to_s.size }.reverse.detect do |type|
|
112
117
|
method_name.to_s.starts_with?(attribute_prefix(type))
|
113
118
|
end
|
114
119
|
end
|
115
|
-
|
120
|
+
|
116
121
|
def presented_attribute?(method_name) #:nodoc:
|
117
122
|
p = presentable_for(method_name)
|
118
123
|
!p.nil? && send(p).respond_to?(flatten_attribute_name(method_name,p))
|
119
124
|
end
|
120
|
-
|
125
|
+
|
121
126
|
def flatten_attribute_name(name, type) #:nodoc:
|
122
127
|
name.to_s.gsub(/^#{attribute_prefix(type)}/, '')
|
123
128
|
end
|
124
|
-
|
129
|
+
|
125
130
|
def attribute_prefix(type) #:nodoc:
|
126
131
|
"#{type}_"
|
127
132
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: be9-viewtastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 17
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Istvan Hoka
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-05-24 00:00:00 +07:00
|
20
20
|
default_executable:
|
21
21
|
dependencies: []
|
22
22
|
|
@@ -43,8 +43,8 @@ homepage: http://github.com/be9/viewtastic
|
|
43
43
|
licenses: []
|
44
44
|
|
45
45
|
post_install_message:
|
46
|
-
rdoc_options:
|
47
|
-
|
46
|
+
rdoc_options: []
|
47
|
+
|
48
48
|
require_paths:
|
49
49
|
- lib
|
50
50
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
requirements: []
|
69
69
|
|
70
70
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.
|
71
|
+
rubygems_version: 1.6.2
|
72
72
|
signing_key:
|
73
73
|
specification_version: 3
|
74
74
|
summary: Presenter implementation for Ruby on Rails 3.x
|