deas 0.39.1 → 0.39.2

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.
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"