deas 0.39.1 → 0.39.2

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
- data.tar.gz: 40c06c9abe6319b8a305e93a7bb35f7c95c19f59
4
- metadata.gz: 729cdbc8fe0b139bfd9bb658973db6ce5dad3759
3
+ metadata.gz: a00b252a65f50835be12b3dfaa0250f7604daaa4
4
+ data.tar.gz: 8e0056e396f5f24f9d65f5422d8f418eb01e567c
5
5
  SHA512:
6
- data.tar.gz: d1f0fae5c0d80f44947512440190a909f48f2c76020733c15c162275b4bf39519c1742b3827d9fe5247e3ce20073dbc73da897d9c32ba79ac1aa04e665cbce67
7
- metadata.gz: d81acf2bfc07224d4406852a74669ae7ae4227e38857243cc4c2fc1aa76c6e57d60926989c8ab89b5bcd1eb296d5a2c46c652e6c06230ccd57ae147da6097115
6
+ metadata.gz: 01bff2c3747cf37a17ab7840bc2e332889a0acf0c436b3a9c62531cbfb83f123e1ce80ca6654bec9217b35b44106469ce76040332cbde6cd34a633563847b858
7
+ data.tar.gz: 2465addcff960eab76c8d9a0fa71b3105574d00b84b703461fcf7b22fda388452b8f86dafc35e0406d7f6e2382c6be1988796e7964122ed9e10e993252ea51e2
data/Gemfile CHANGED
@@ -2,7 +2,4 @@ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake', "~> 10.4.0"
6
- gem 'pry', "~> 0.9.0"
7
-
8
- gem 'rack-test'
5
+ gem 'pry', "~> 0.9.0"
data/deas.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Deas::VERSION
9
9
  gem.authors = ["Kelly Redding", "Collin Redding"]
10
10
  gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
11
- gem.description = %q{Handler-based web framework powered by Sinatra}
12
11
  gem.summary = %q{Handler-based web framework powered by Sinatra}
12
+ gem.description = %q{Handler-based web framework powered by Sinatra}
13
13
  gem.homepage = "http://github.com/redding/deas"
14
14
  gem.license = 'MIT'
15
15
 
@@ -18,12 +18,12 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency("much-plugin", ["~> 0.1"])
22
- gem.add_dependency("ns-options", ["~> 1.1", ">= 1.1.4"])
21
+ gem.add_development_dependency("assert", ["~> 2.15.1"])
22
+ gem.add_development_dependency("assert-rack-test", ["~> 1.0.3"])
23
+
24
+ gem.add_dependency("much-plugin", ["~> 0.1.0"])
25
+ gem.add_dependency("ns-options", ["~> 1.1.6"])
23
26
  gem.add_dependency("rack", ["~> 1.1"])
24
27
  gem.add_dependency("sinatra", ["~> 1.2"])
25
28
 
26
- gem.add_development_dependency("assert", ["~> 2.15"])
27
- gem.add_development_dependency("assert-rack-test")
28
-
29
29
  end
@@ -30,11 +30,10 @@ module Deas
30
30
  class NullTemplateEngine < TemplateEngine
31
31
 
32
32
  def render(template_name, view_handler, locals, &content)
33
- template_file = self.source_path.join(template_name).to_s
34
- unless File.exists?(template_file)
35
- raise ArgumentError, "template file `#{template_file}` does not exist"
33
+ if (path = Dir.glob(self.source_path.join("#{template_name}*")).first).nil?
34
+ raise ArgumentError, "template file `#{path}` does not exist"
36
35
  end
37
- File.read(template_file)
36
+ File.read(path)
38
37
  end
39
38
 
40
39
  def partial(template_name, locals, &content)
@@ -19,12 +19,12 @@ module Deas
19
19
  'default_template_source' => self
20
20
  }
21
21
  @engines = Hash.new{ |h, k| Deas::NullTemplateEngine.new(@default_engine_opts) }
22
- @ext_cache = Hash.new do |hash, template_name|
23
- paths = Dir.glob("#{File.join(@path, template_name.to_s)}.*")
24
- paths = paths.reject{ |p| !@engines.keys.include?(parse_ext(p)) }
25
- if !(ext = parse_ext(paths.first.to_s)).nil?
26
- hash[template_name] = ext
27
- end
22
+ @ext_lists = Hash.new do |hash, template_name|
23
+ # An ext list is an array of non-template-name extensions that have engines
24
+ # configured. The first ext in the list is the most precedent. Its engine
25
+ # is used to do the initial render from the named template file. Any
26
+ # further exts are used to compile rendered content from upsteam engines.
27
+ hash[template_name] = parse_ext_list(template_name)
28
28
  end
29
29
  end
30
30
 
@@ -41,34 +41,39 @@ module Deas
41
41
  @engines.keys.include?(ext)
42
42
  end
43
43
 
44
- def engine_for_template?(template_name)
45
- self.engine_for?(get_template_ext(template_name))
46
- end
47
-
48
44
  def render(template_name, view_handler, locals, &content)
49
45
  [ view_handler.layouts,
50
46
  template_name
51
47
  ].flatten.reverse.inject(content) do |render_proc, name|
52
- proc{ get_engine(name).render(name, view_handler, locals, &render_proc) }
48
+ proc do
49
+ compile(name) do |engine|
50
+ engine.render(name, view_handler, locals, &render_proc)
51
+ end
52
+ end
53
53
  end.call
54
54
  end
55
55
 
56
56
  def partial(template_name, locals, &content)
57
- get_engine(template_name).partial(template_name, locals, &content)
57
+ compile(template_name) do |engine|
58
+ engine.partial(template_name, locals, &content)
59
+ end
58
60
  end
59
61
 
60
62
  private
61
63
 
62
- def get_engine(template_name)
63
- @engines[get_template_ext(template_name)]
64
- end
65
-
66
- def get_template_ext(template_name)
67
- @ext_cache[template_name]
64
+ def compile(name)
65
+ ext_list = @ext_lists[name].dup
66
+ ext_list.inject(yield @engines[ext_list.shift]) do |content, ext|
67
+ @engines[ext].compile(name, content)
68
+ end
68
69
  end
69
70
 
70
- def parse_ext(template_name)
71
- File.extname(template_name)[1..-1]
71
+ def parse_ext_list(template_name)
72
+ no_ext_path = "#{File.join(@path, template_name.to_s)}."
73
+ path = Dir.glob("#{no_ext_path}*").first || ''
74
+ path.sub(no_ext_path, '').split('.').reverse.reject do |ext|
75
+ !self.engine_for?(ext)
76
+ end
72
77
  end
73
78
 
74
79
  end
data/lib/deas/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Deas
2
- VERSION = "0.39.1"
2
+ VERSION = "0.39.2"
3
3
  end
@@ -0,0 +1 @@
1
+ This is a json template for use in template source/engine tests.
@@ -0,0 +1 @@
1
+ This is a json template for use in template source/engine tests.
File without changes
@@ -86,25 +86,21 @@ class Deas::TemplateEngine
86
86
  end
87
87
 
88
88
  should "read and return the given path in its source path on `render`" do
89
- exists_file = 'test/support/template.json'
90
- exp = File.read(subject.source_path.join(exists_file).to_s)
91
- assert_equal exp, subject.render(exists_file, @v, @l)
89
+ template = 'test/support/template'
90
+ exp = File.read(Dir.glob(subject.source_path.join("#{template}*")).first)
91
+ assert_equal exp, subject.render(template, @v, @l)
92
92
  end
93
93
 
94
94
  should "call `render` to implement its `partial` method" do
95
- exists_file = 'test/support/template.json'
96
- exp = subject.render(exists_file, nil, @l)
97
- assert_equal exp, subject.partial(exists_file, @l)
95
+ template = 'test/support/template'
96
+ exp = subject.render(template, nil, @l)
97
+ assert_equal exp, subject.partial(template, @l)
98
98
  end
99
99
 
100
100
  should "complain if given a path that does not exist in its source path" do
101
- no_exists_file = '/does/not/exists'
102
- assert_raises ArgumentError do
103
- subject.render(no_exists_file, @v, @l)
104
- end
105
- assert_raises ArgumentError do
106
- subject.partial(no_exists_file, @l)
107
- end
101
+ template = '/does/not/exists'
102
+ assert_raises(ArgumentError){ subject.render(template, @v, @l) }
103
+ assert_raises(ArgumentError){ subject.partial(template, @l) }
108
104
  end
109
105
 
110
106
  should "return any given content with its `compile` method" do
@@ -26,7 +26,7 @@ class Deas::TemplateSource
26
26
  subject{ @source }
27
27
 
28
28
  should have_readers :path, :engines
29
- should have_imeths :engine, :engine_for?, :engine_for_template?
29
+ should have_imeths :engine, :engine_for?
30
30
  should have_imeths :render, :partial
31
31
 
32
32
  should "know its path" do
@@ -90,17 +90,6 @@ class Deas::TemplateSource
90
90
  assert_kind_of Deas::NullTemplateEngine, subject.engines['rb']
91
91
  end
92
92
 
93
- should "know if it has an engine registered for a given template name" do
94
- assert_false subject.engine_for?(Factory.string)
95
- assert_false subject.engine_for?('test')
96
- assert_false subject.engine_for_template?(Factory.string)
97
- assert_false subject.engine_for_template?('test_template')
98
-
99
- subject.engine 'test', @test_engine
100
- assert_true subject.engine_for?('test')
101
- assert_true subject.engine_for_template?('test_template')
102
- end
103
-
104
93
  end
105
94
 
106
95
  class RenderOrPartialTests < InitTests
@@ -123,13 +112,21 @@ class Deas::TemplateSource
123
112
  assert_equal exp, subject.render('test_template', @v, @l)
124
113
  end
125
114
 
126
- should "only try rendering template files its has engines for" do
115
+ should "only render the first template file matching the template name" do
127
116
  # there should be 2 files called "template" in `test/support` with diff
128
117
  # extensions
129
- exp = 'render-json-engine'
118
+ exp = "render-json-engine on template\n"
130
119
  assert_equal exp, subject.render('template', @v, @l)
131
120
  end
132
121
 
122
+ should "compile multiple engine outputs if template has multi-engine exts" do
123
+ exp = "render-json-engine on template-compiled1\ncompile-test-engine"
124
+ assert_equal exp, subject.render('template-compiled1', @v, @l)
125
+
126
+ exp = "render-test-engine on template-compiled2\ncompile-json-engine"
127
+ assert_equal exp, subject.render('template-compiled2', @v, @l)
128
+ end
129
+
133
130
  should "use the null template engine when an engine can't be found" do
134
131
  assert_raises(ArgumentError) do
135
132
  subject.render(Factory.string, @v, @l)
@@ -157,17 +154,25 @@ class Deas::TemplateSource
157
154
  desc "when partial rendering a template"
158
155
 
159
156
  should "call `partial` on the configured engine" do
160
- exp = "partial-test-engine\n"
157
+ exp = "partial-test-engine on test_template\n"
161
158
  assert_equal exp, subject.partial('test_template', @l)
162
159
  end
163
160
 
164
- should "only try rendering template files its has engines for" do
161
+ should "only render the first template file matching the template name" do
165
162
  # there should be 2 files called "template" in `test/support` with diff
166
163
  # extensions
167
- exp = 'partial-json-engine'
164
+ exp = "partial-json-engine on template\n"
168
165
  assert_equal exp, subject.partial('template', @l)
169
166
  end
170
167
 
168
+ should "compile multiple engine outputs if template has multi-engine exts" do
169
+ exp = "partial-json-engine on template-compiled1\ncompile-test-engine"
170
+ assert_equal exp, subject.partial('template-compiled1', @l)
171
+
172
+ exp = "partial-test-engine on template-compiled2\ncompile-json-engine"
173
+ assert_equal exp, subject.partial('template-compiled2', @l)
174
+ end
175
+
171
176
  should "use the null template engine when an engine can't be found" do
172
177
  assert_raises(ArgumentError) do
173
178
  subject.partial(Factory.string, @l)
@@ -195,26 +200,25 @@ class Deas::TemplateSource
195
200
 
196
201
  class TestEngine < Deas::TemplateEngine
197
202
  def render(template_name, view_handler, locals, &content)
198
- "render-test-engine on #{template_name}\n" +
199
- (content || proc{}).call.to_s
203
+ "render-test-engine on #{template_name}\n" + (content || proc{}).call.to_s
200
204
  end
201
205
  def partial(template_name, locals, &content)
202
- "partial-test-engine\n" + (content || proc{}).call.to_s
206
+ "partial-test-engine on #{template_name}\n" + (content || proc{}).call.to_s
203
207
  end
204
- def capture_partial(template_name, locals, &content)
205
- 'capture-partial-test-engine'
208
+ def compile(template_name, content)
209
+ "#{content}compile-test-engine"
206
210
  end
207
211
  end
208
212
 
209
213
  class JsonEngine < Deas::TemplateEngine
210
214
  def render(template_name, view_handler, locals, &content)
211
- 'render-json-engine'
215
+ "render-json-engine on #{template_name}\n" + (content || proc{}).call.to_s
212
216
  end
213
- def partial(template_name, locals)
214
- 'partial-json-engine'
217
+ def partial(template_name, locals, &content)
218
+ "partial-json-engine on #{template_name}\n" + (content || proc{}).call.to_s
215
219
  end
216
- def capture_partial(template_name, locals, &content)
217
- 'capture-partial-json-engine'
220
+ def compile(template_name, content)
221
+ "#{content}compile-json-engine"
218
222
  end
219
223
  end
220
224
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.39.1
4
+ version: 0.39.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -10,71 +10,68 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2016-02-23 00:00:00 Z
13
+ date: 2016-04-05 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: much-plugin
16
+ name: assert
17
17
  prerelease: false
18
18
  requirement: &id001 !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: "0.1"
23
- type: :runtime
22
+ version: 2.15.1
23
+ type: :development
24
24
  version_requirements: *id001
25
25
  - !ruby/object:Gem::Dependency
26
- name: ns-options
26
+ name: assert-rack-test
27
27
  prerelease: false
28
28
  requirement: &id002 !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - ~>
31
- - &id003 !ruby/object:Gem::Version
32
- version: "1.1"
33
- - - ">="
34
31
  - !ruby/object:Gem::Version
35
- version: 1.1.4
36
- type: :runtime
32
+ version: 1.0.3
33
+ type: :development
37
34
  version_requirements: *id002
38
35
  - !ruby/object:Gem::Dependency
39
- name: rack
36
+ name: much-plugin
37
+ prerelease: false
38
+ requirement: &id003 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ version: 0.1.0
43
+ type: :runtime
44
+ version_requirements: *id003
45
+ - !ruby/object:Gem::Dependency
46
+ name: ns-options
40
47
  prerelease: false
41
48
  requirement: &id004 !ruby/object:Gem::Requirement
42
49
  requirements:
43
50
  - - ~>
44
- - *id003
51
+ - !ruby/object:Gem::Version
52
+ version: 1.1.6
45
53
  type: :runtime
46
54
  version_requirements: *id004
47
55
  - !ruby/object:Gem::Dependency
48
- name: sinatra
56
+ name: rack
49
57
  prerelease: false
50
58
  requirement: &id005 !ruby/object:Gem::Requirement
51
59
  requirements:
52
60
  - - ~>
53
61
  - !ruby/object:Gem::Version
54
- version: "1.2"
62
+ version: "1.1"
55
63
  type: :runtime
56
64
  version_requirements: *id005
57
65
  - !ruby/object:Gem::Dependency
58
- name: assert
66
+ name: sinatra
59
67
  prerelease: false
60
68
  requirement: &id006 !ruby/object:Gem::Requirement
61
69
  requirements:
62
70
  - - ~>
63
71
  - !ruby/object:Gem::Version
64
- version: "2.15"
65
- type: :development
72
+ version: "1.2"
73
+ type: :runtime
66
74
  version_requirements: *id006
67
- - !ruby/object:Gem::Dependency
68
- name: assert-rack-test
69
- prerelease: false
70
- requirement: &id007 !ruby/object:Gem::Requirement
71
- requirements:
72
- - &id008
73
- - ">="
74
- - !ruby/object:Gem::Version
75
- version: "0"
76
- type: :development
77
- version_requirements: *id007
78
75
  description: Handler-based web framework powered by Sinatra
79
76
  email:
80
77
  - kelly@kellyredding.com
@@ -90,7 +87,6 @@ files:
90
87
  - Gemfile
91
88
  - LICENSE
92
89
  - README.md
93
- - Rakefile
94
90
  - deas.gemspec
95
91
  - lib/deas.rb
96
92
  - lib/deas/deas_runner.rb
@@ -128,8 +124,10 @@ files:
128
124
  - test/support/routes.rb
129
125
  - test/support/show.html
130
126
  - test/support/show.json
131
- - test/support/template.erb
127
+ - test/support/template-compiled1.test.json
128
+ - test/support/template-compiled2.json.test
132
129
  - test/support/template.json
130
+ - test/support/template.z.erb
133
131
  - test/support/test_layout1.test
134
132
  - test/support/test_layout2.test
135
133
  - test/support/test_template.test
@@ -167,10 +165,13 @@ require_paths:
167
165
  - lib
168
166
  required_ruby_version: !ruby/object:Gem::Requirement
169
167
  requirements:
170
- - *id008
168
+ - &id007
169
+ - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: "0"
171
172
  required_rubygems_version: !ruby/object:Gem::Requirement
172
173
  requirements:
173
- - *id008
174
+ - *id007
174
175
  requirements: []
175
176
 
176
177
  rubyforge_project:
@@ -190,8 +191,10 @@ test_files:
190
191
  - test/support/routes.rb
191
192
  - test/support/show.html
192
193
  - test/support/show.json
193
- - test/support/template.erb
194
+ - test/support/template-compiled1.test.json
195
+ - test/support/template-compiled2.json.test
194
196
  - test/support/template.json
197
+ - test/support/template.z.erb
195
198
  - test/support/test_layout1.test
196
199
  - test/support/test_layout2.test
197
200
  - test/support/test_template.test
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"