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.

@@ -2,7 +2,8 @@
2
2
 
3
3
  require 'minitest/spec'
4
4
  require 'minitest/autorun'
5
- require 'mocha'
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
@@ -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(/</, "&lt;").gsub(/>/, "&gt;")
125
+ escaped2 = escaped.gsub(/\//, "&#47;") # 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
@@ -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 = Html5Presenter.new(nil)
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
- Html5Presenter.use_html_5_tags
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
- prerelease: 5
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-02-04 00:00:00.000000000 Z
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
- none: false
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
- none: false
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
- none: false
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
- none: false
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
- none: false
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
- none: false
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
- none: false
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
118
124
  type: :development
119
- name: yard
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
- none: false
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: 1.8.25
215
+ rubygems_version: 2.0.3
191
216
  signing_key:
192
- specification_version: 3
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