keynote 0.2.0pre1 → 0.2.0pre2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of keynote might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/.editorconfig +14 -0
- data/.gitignore +0 -1
- data/.travis.yml +16 -0
- data/Appraisals +6 -9
- data/CHANGELOG.md +10 -3
- data/README.md +2 -1
- data/Rakefile +4 -0
- data/gemfiles/rails30.gemfile +7 -0
- data/gemfiles/rails30.gemfile.lock +114 -0
- data/gemfiles/rails31.gemfile +7 -0
- data/gemfiles/rails31.gemfile.lock +124 -0
- data/gemfiles/rails32.gemfile +7 -0
- data/gemfiles/rails32.gemfile.lock +123 -0
- data/gemfiles/rails4.gemfile +9 -0
- data/gemfiles/rails4.gemfile.lock +120 -0
- data/keynote.gemspec +4 -1
- data/lib/keynote.rb +1 -0
- data/lib/keynote/inline.rb +207 -0
- data/lib/keynote/presenter.rb +31 -0
- data/lib/keynote/version.rb +1 -1
- data/spec/benchmarks.rb +72 -0
- data/spec/helper.rb +2 -11
- data/spec/inline_spec.rb +147 -0
- data/spec/presenter_spec.rb +52 -3
- metadata +61 -34
data/spec/helper.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'minitest/spec'
|
4
4
|
require 'minitest/autorun'
|
5
|
-
require '
|
5
|
+
require 'minitest/pride'
|
6
|
+
require 'mocha/setup'
|
6
7
|
|
7
8
|
require 'pry'
|
8
9
|
|
@@ -82,13 +83,3 @@ end
|
|
82
83
|
class CombinedPresenter < Keynote::Presenter
|
83
84
|
presents :model_1, :model_2
|
84
85
|
end
|
85
|
-
|
86
|
-
class Html5Presenter < Keynote::Presenter
|
87
|
-
def generate_h3(content)
|
88
|
-
build_html { h3 content }
|
89
|
-
end
|
90
|
-
|
91
|
-
def generate_small(content)
|
92
|
-
build_html { small content }
|
93
|
-
end
|
94
|
-
end
|
data/spec/inline_spec.rb
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "helper"
|
4
|
+
require "fileutils"
|
5
|
+
require "slim"
|
6
|
+
require "haml"
|
7
|
+
require "haml/template"
|
8
|
+
|
9
|
+
module Keynote
|
10
|
+
describe Inline do
|
11
|
+
let(:presenter) { InlineUser.new(:view) }
|
12
|
+
|
13
|
+
def clean_whitespace(str)
|
14
|
+
str.gsub(/\s/, "")
|
15
|
+
end
|
16
|
+
|
17
|
+
class InlineUser < Keynote::Presenter
|
18
|
+
extend Keynote::Inline
|
19
|
+
inline :erb, :slim, :haml
|
20
|
+
|
21
|
+
def simple_template
|
22
|
+
erb
|
23
|
+
# Here's some math: <%= 2 + 2 %>
|
24
|
+
end
|
25
|
+
|
26
|
+
def ivars
|
27
|
+
@greetee = "world"
|
28
|
+
erb
|
29
|
+
# Hello <%= @greetee %>!
|
30
|
+
end
|
31
|
+
|
32
|
+
def locals_from_hash
|
33
|
+
erb local: "H"
|
34
|
+
# Local <%= local %>
|
35
|
+
end
|
36
|
+
|
37
|
+
def locals_from_binding
|
38
|
+
local = "H"
|
39
|
+
erb binding
|
40
|
+
# Local <%= local %>
|
41
|
+
end
|
42
|
+
|
43
|
+
def method_calls
|
44
|
+
erb
|
45
|
+
# <%= locals_from_hash %>
|
46
|
+
# <%= locals_from_binding %>
|
47
|
+
end
|
48
|
+
|
49
|
+
def error_handling
|
50
|
+
erb
|
51
|
+
# <% raise "UH OH" %>
|
52
|
+
end
|
53
|
+
|
54
|
+
def fix_indentation
|
55
|
+
slim
|
56
|
+
# div.indented_slightly
|
57
|
+
# = "hello"
|
58
|
+
end
|
59
|
+
|
60
|
+
def erb_escaping
|
61
|
+
erb +
|
62
|
+
# <%= "<script>alert(1);</script>" %>
|
63
|
+
erb
|
64
|
+
# <%= "<script>alert(1);</script>".html_safe %>
|
65
|
+
end
|
66
|
+
|
67
|
+
def slim_escaping
|
68
|
+
slim +
|
69
|
+
# = "<script>alert(1);</script>"
|
70
|
+
slim
|
71
|
+
# = "<script>alert(1);</script>".html_safe
|
72
|
+
end
|
73
|
+
|
74
|
+
def haml_escaping
|
75
|
+
haml +
|
76
|
+
# = "<script>alert(1);</script>"
|
77
|
+
haml
|
78
|
+
# = "<script>alert(1);</script>".html_safe
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
before do
|
83
|
+
Keynote::Inline::Cache.reset
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should render a template" do
|
87
|
+
presenter.simple_template.strip.must_equal "Here's some math: 4"
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should see instance variables from the presenter" do
|
91
|
+
presenter.ivars.strip.must_equal "Hello world!"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should see locals passed in as a hash" do
|
95
|
+
presenter.locals_from_hash.strip.must_equal "Local H"
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should see locals passed in as a binding" do
|
99
|
+
presenter.locals_from_binding.strip.must_equal "Local H"
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should be able to call other methods from the same object" do
|
103
|
+
presenter.method_calls.strip.squeeze(" ").must_equal "Local H Local H"
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should handle errors relatively gracefully" do
|
107
|
+
begin
|
108
|
+
presenter.error_handling
|
109
|
+
rescue => e
|
110
|
+
end
|
111
|
+
|
112
|
+
e.must_be_instance_of ActionView::Template::Error
|
113
|
+
e.original_exception.must_be_instance_of RuntimeError
|
114
|
+
e.original_exception.message.must_equal "UH OH"
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should remove leading indentation" do
|
118
|
+
presenter.fix_indentation.must_equal \
|
119
|
+
"<div class=\"indented_slightly\">hello</div>"
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should escape HTML by default" do
|
123
|
+
unescaped = "<script>alert(1);</script>"
|
124
|
+
escaped = unescaped.gsub(/</, "<").gsub(/>/, ">")
|
125
|
+
escaped2 = escaped.gsub(/\//, "/") # for Slim w/ Rails > 3.0 (??)
|
126
|
+
|
127
|
+
clean_whitespace(presenter.erb_escaping).must_equal escaped + unescaped
|
128
|
+
clean_whitespace(presenter.haml_escaping).must_equal escaped + unescaped
|
129
|
+
|
130
|
+
[escaped + unescaped, escaped2 + unescaped].must_include \
|
131
|
+
clean_whitespace(presenter.slim_escaping)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should see updates after the file is reloaded" do
|
135
|
+
presenter.simple_template.strip.must_equal "Here's some math: 4"
|
136
|
+
|
137
|
+
Keynote::Inline::Cache.
|
138
|
+
any_instance.stubs(:read_template).returns("HELLO")
|
139
|
+
|
140
|
+
presenter.simple_template.strip.must_equal "Here's some math: 4"
|
141
|
+
|
142
|
+
FileUtils.touch __FILE__
|
143
|
+
|
144
|
+
presenter.simple_template.must_equal "HELLO"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
data/spec/presenter_spec.rb
CHANGED
@@ -63,19 +63,49 @@ describe Keynote::Presenter do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
describe ".use_html5_tags" do
|
66
|
+
let(:klass) do
|
67
|
+
Class.new(TestPresenter) do
|
68
|
+
def generate_h3(content)
|
69
|
+
build_html { h3 content }
|
70
|
+
end
|
71
|
+
|
72
|
+
def generate_small(content)
|
73
|
+
build_html { small content }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
66
78
|
it "should add Rumble tags like `small` while preserving existing tags" do
|
67
|
-
presenter =
|
79
|
+
presenter = klass.new(nil)
|
68
80
|
|
69
81
|
presenter.generate_h3("hi").must_equal "<h3>hi</h3>"
|
70
82
|
proc { presenter.generate_small("uh-oh") }.must_raise NoMethodError
|
71
83
|
|
72
|
-
|
84
|
+
klass.use_html_5_tags
|
73
85
|
|
74
86
|
presenter.generate_h3("hi").must_equal "<h3>hi</h3>"
|
75
87
|
presenter.generate_small("hi").must_equal "<small>hi</small>"
|
76
88
|
end
|
77
89
|
end
|
78
90
|
|
91
|
+
describe ".object_names" do
|
92
|
+
it "doesn't leak between classes" do
|
93
|
+
c1 = Class.new(Keynote::Presenter)
|
94
|
+
c2 = Class.new(Keynote::Presenter)
|
95
|
+
|
96
|
+
c1.object_names << :foo
|
97
|
+
c1.object_names.must_equal [:foo]
|
98
|
+
c2.object_names.must_equal []
|
99
|
+
end
|
100
|
+
|
101
|
+
it "matches the list of presented objects" do
|
102
|
+
c = Class.new(Keynote::Presenter)
|
103
|
+
c.object_names.must_equal []
|
104
|
+
c.presents :biff, :bam, :pow
|
105
|
+
c.object_names.must_equal [:biff, :bam, :pow]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
79
109
|
describe "#present" do
|
80
110
|
it "should pass its view context through to the new presenter" do
|
81
111
|
mock = mock()
|
@@ -89,6 +119,25 @@ describe Keynote::Presenter do
|
|
89
119
|
end
|
90
120
|
end
|
91
121
|
|
122
|
+
describe "#inspect" do
|
123
|
+
it "includes the class name" do
|
124
|
+
CombinedPresenter.new(:view, :a, :b).inspect.
|
125
|
+
must_match /^#<CombinedPresenter /
|
126
|
+
end
|
127
|
+
|
128
|
+
it "shows .inspect output for each presented object" do
|
129
|
+
c1 = Class.new(Object) { def inspect; "c1"; end }
|
130
|
+
c2 = Class.new(Object) { def inspect; "c2"; end }
|
131
|
+
p = CombinedPresenter.new(:view, c1.new, c2.new)
|
132
|
+
|
133
|
+
p.inspect.must_equal "#<CombinedPresenter model_1: c1, model_2: c2>"
|
134
|
+
end
|
135
|
+
|
136
|
+
it "shouldn't leave extra padding for zero-arg presenters" do
|
137
|
+
EmptyPresenter.new(:view).inspect.must_equal "#<EmptyPresenter>"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
92
141
|
describe "#method_missing" do
|
93
142
|
it "should pass unknown method calls through to the view" do
|
94
143
|
mock = mock()
|
@@ -124,7 +173,7 @@ describe Keynote::Presenter do
|
|
124
173
|
end
|
125
174
|
|
126
175
|
err.wont_be_nil
|
127
|
-
err.message.must_match /#<Keynote::Presenter
|
176
|
+
err.message.must_match /#<Keynote::Presenter/
|
128
177
|
end
|
129
178
|
end
|
130
179
|
end
|
metadata
CHANGED
@@ -1,128 +1,141 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keynote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.2.0pre1
|
4
|
+
version: 0.2.0pre2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ryan Fitzgerald
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-05 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
prerelease: false
|
15
|
+
name: rails
|
16
16
|
version_requirements: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ! '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 3.0.0
|
21
|
-
none: false
|
22
|
-
type: :runtime
|
23
|
-
name: rails
|
24
21
|
requirement: !ruby/object:Gem::Requirement
|
25
22
|
requirements:
|
26
23
|
- - ! '>='
|
27
24
|
- !ruby/object:Gem::Version
|
28
25
|
version: 3.0.0
|
29
|
-
|
26
|
+
type: :runtime
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
prerelease: false
|
29
|
+
name: appraisal
|
32
30
|
version_requirements: !ruby/object:Gem::Requirement
|
33
31
|
requirements:
|
34
32
|
- - ! '>='
|
35
33
|
- !ruby/object:Gem::Version
|
36
34
|
version: '0'
|
37
|
-
none: false
|
38
|
-
type: :development
|
39
|
-
name: appraisal
|
40
35
|
requirement: !ruby/object:Gem::Requirement
|
41
36
|
requirements:
|
42
37
|
- - ! '>='
|
43
38
|
- !ruby/object:Gem::Version
|
44
39
|
version: '0'
|
45
|
-
|
40
|
+
type: :development
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
prerelease: false
|
43
|
+
name: minitest
|
48
44
|
version_requirements: !ruby/object:Gem::Requirement
|
49
45
|
requirements:
|
50
46
|
- - ! '>='
|
51
47
|
- !ruby/object:Gem::Version
|
52
48
|
version: '0'
|
53
|
-
none: false
|
54
|
-
type: :development
|
55
|
-
name: minitest
|
56
49
|
requirement: !ruby/object:Gem::Requirement
|
57
50
|
requirements:
|
58
51
|
- - ! '>='
|
59
52
|
- !ruby/object:Gem::Version
|
60
53
|
version: '0'
|
61
|
-
|
54
|
+
type: :development
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
prerelease: false
|
57
|
+
name: mocha
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.13.3
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 0.13.3
|
68
|
+
type: :development
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
prerelease: false
|
71
|
+
name: pry
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
65
73
|
requirements:
|
66
74
|
- - ! '>='
|
67
75
|
- !ruby/object:Gem::Version
|
68
76
|
version: '0'
|
69
|
-
none: false
|
70
|
-
type: :development
|
71
|
-
name: mocha
|
72
77
|
requirement: !ruby/object:Gem::Requirement
|
73
78
|
requirements:
|
74
79
|
- - ! '>='
|
75
80
|
- !ruby/object:Gem::Version
|
76
81
|
version: '0'
|
77
|
-
|
82
|
+
type: :development
|
78
83
|
- !ruby/object:Gem::Dependency
|
79
84
|
prerelease: false
|
85
|
+
name: redcarpet
|
80
86
|
version_requirements: !ruby/object:Gem::Requirement
|
81
87
|
requirements:
|
82
88
|
- - ! '>='
|
83
89
|
- !ruby/object:Gem::Version
|
84
90
|
version: '0'
|
85
|
-
none: false
|
86
|
-
type: :development
|
87
|
-
name: pry
|
88
91
|
requirement: !ruby/object:Gem::Requirement
|
89
92
|
requirements:
|
90
93
|
- - ! '>='
|
91
94
|
- !ruby/object:Gem::Version
|
92
95
|
version: '0'
|
93
|
-
|
96
|
+
type: :development
|
94
97
|
- !ruby/object:Gem::Dependency
|
95
98
|
prerelease: false
|
99
|
+
name: yard
|
96
100
|
version_requirements: !ruby/object:Gem::Requirement
|
97
101
|
requirements:
|
98
102
|
- - ! '>='
|
99
103
|
- !ruby/object:Gem::Version
|
100
104
|
version: '0'
|
101
|
-
none: false
|
102
|
-
type: :development
|
103
|
-
name: redcarpet
|
104
105
|
requirement: !ruby/object:Gem::Requirement
|
105
106
|
requirements:
|
106
107
|
- - ! '>='
|
107
108
|
- !ruby/object:Gem::Version
|
108
109
|
version: '0'
|
109
|
-
|
110
|
+
type: :development
|
110
111
|
- !ruby/object:Gem::Dependency
|
111
112
|
prerelease: false
|
113
|
+
name: slim
|
112
114
|
version_requirements: !ruby/object:Gem::Requirement
|
113
115
|
requirements:
|
114
116
|
- - ! '>='
|
115
117
|
- !ruby/object:Gem::Version
|
116
118
|
version: '0'
|
117
|
-
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
118
124
|
type: :development
|
119
|
-
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
prerelease: false
|
127
|
+
name: haml
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
120
133
|
requirement: !ruby/object:Gem::Requirement
|
121
134
|
requirements:
|
122
135
|
- - ! '>='
|
123
136
|
- !ruby/object:Gem::Version
|
124
137
|
version: '0'
|
125
|
-
|
138
|
+
type: :development
|
126
139
|
description: ! ' A presenter is an object that encapsulates view logic. Like Rails
|
127
140
|
helpers, presenters help you keep complex logic out of your templates. Keynote provides
|
128
141
|
a consistent interface for defining and instantiating presenters. '
|
@@ -132,7 +145,9 @@ executables: []
|
|
132
145
|
extensions: []
|
133
146
|
extra_rdoc_files: []
|
134
147
|
files:
|
148
|
+
- .editorconfig
|
135
149
|
- .gitignore
|
150
|
+
- .travis.yml
|
136
151
|
- .yardopts
|
137
152
|
- Appraisals
|
138
153
|
- CHANGELOG.md
|
@@ -140,6 +155,14 @@ files:
|
|
140
155
|
- LICENSE
|
141
156
|
- README.md
|
142
157
|
- Rakefile
|
158
|
+
- gemfiles/rails30.gemfile
|
159
|
+
- gemfiles/rails30.gemfile.lock
|
160
|
+
- gemfiles/rails31.gemfile
|
161
|
+
- gemfiles/rails31.gemfile.lock
|
162
|
+
- gemfiles/rails32.gemfile
|
163
|
+
- gemfiles/rails32.gemfile.lock
|
164
|
+
- gemfiles/rails4.gemfile
|
165
|
+
- gemfiles/rails4.gemfile.lock
|
143
166
|
- keynote.gemspec
|
144
167
|
- lib/generators/presenter_generator.rb
|
145
168
|
- lib/generators/templates/keynote_mini_test_spec.rb
|
@@ -151,6 +174,7 @@ files:
|
|
151
174
|
- lib/keynote/cache.rb
|
152
175
|
- lib/keynote/controller.rb
|
153
176
|
- lib/keynote/helper.rb
|
177
|
+
- lib/keynote/inline.rb
|
154
178
|
- lib/keynote/presenter.rb
|
155
179
|
- lib/keynote/railtie.rb
|
156
180
|
- lib/keynote/rumble.rb
|
@@ -160,8 +184,10 @@ files:
|
|
160
184
|
- lib/keynote/testing/test_present_method.rb
|
161
185
|
- lib/keynote/testing/test_unit.rb
|
162
186
|
- lib/keynote/version.rb
|
187
|
+
- spec/benchmarks.rb
|
163
188
|
- spec/generator_spec.rb
|
164
189
|
- spec/helper.rb
|
190
|
+
- spec/inline_spec.rb
|
165
191
|
- spec/keynote_spec.rb
|
166
192
|
- spec/presenter_spec.rb
|
167
193
|
- spec/railtie_spec.rb
|
@@ -169,6 +195,7 @@ files:
|
|
169
195
|
- spec/test_case_spec.rb
|
170
196
|
homepage: https://github.com/rf-/keynote
|
171
197
|
licenses: []
|
198
|
+
metadata: {}
|
172
199
|
post_install_message:
|
173
200
|
rdoc_options: []
|
174
201
|
require_paths:
|
@@ -178,22 +205,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
205
|
- - ! '>='
|
179
206
|
- !ruby/object:Gem::Version
|
180
207
|
version: '0'
|
181
|
-
none: false
|
182
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
209
|
requirements:
|
184
210
|
- - ! '>'
|
185
211
|
- !ruby/object:Gem::Version
|
186
212
|
version: 1.3.1
|
187
|
-
none: false
|
188
213
|
requirements: []
|
189
214
|
rubyforge_project:
|
190
|
-
rubygems_version:
|
215
|
+
rubygems_version: 2.0.3
|
191
216
|
signing_key:
|
192
|
-
specification_version:
|
217
|
+
specification_version: 4
|
193
218
|
summary: Flexible presenters for Rails.
|
194
219
|
test_files:
|
220
|
+
- spec/benchmarks.rb
|
195
221
|
- spec/generator_spec.rb
|
196
222
|
- spec/helper.rb
|
223
|
+
- spec/inline_spec.rb
|
197
224
|
- spec/keynote_spec.rb
|
198
225
|
- spec/presenter_spec.rb
|
199
226
|
- spec/railtie_spec.rb
|