dominate 0.7.6 → 0.8.0
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 +4 -4
- data/.gems +6 -0
- data/.gitignore +2 -0
- data/.ruby-version +1 -0
- data/Makefile +28 -0
- data/lib/dominate/assets/middleware.rb +124 -0
- data/lib/dominate/assets/render.rb +44 -0
- data/lib/dominate/assets.rb +6 -0
- data/lib/dominate/dom.rb +15 -10
- data/lib/dominate/html.rb +33 -17
- data/lib/dominate/version.rb +1 -1
- data/lib/dominate/widget/helper.rb +7 -6
- data/lib/dominate/widget.rb +14 -12
- data/lib/dominate.rb +11 -2
- data/test/helper.rb +3 -0
- data/test/template_test.rb +1 -0
- metadata +8 -4
- data/Gemfile +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb04c61b1d509aa27a58a56ae57c0952dc272ad9
|
4
|
+
data.tar.gz: 9bacdf195170b8f86d27e4fb1eff7c2f28149c9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a9973834d2a6b1e0d3344da950e8349657000b43b1b10115fc24e8a3d425a8168ae8fcf6b2b9489720e36f8752038edaa260186d91bb83a82251d3ee6fcfa11
|
7
|
+
data.tar.gz: ba07354f0a6b3d38d522b3053a15706155160c31ddf71d2c2f63133ef958374677c423f65a4e381fa6554136ece59d90e605a4ef7c2562c32f94d6e1307bd6eb
|
data/.gems
ADDED
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0-p481
|
data/Makefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
.PHONY: install test server
|
2
|
+
|
3
|
+
define install_bs
|
4
|
+
which bs || (wget https://raw.githubusercontent.com/educabilia/bs/master/bin/bs && chmod +x bs && sudo mv bs /usr/local/bin)
|
5
|
+
|
6
|
+
@if [ -s .gs ]; then \
|
7
|
+
true; \
|
8
|
+
else \
|
9
|
+
mkdir .gs; \
|
10
|
+
touch .env; \
|
11
|
+
echo 'GEM_HOME=$$(pwd)/.gs' >> .env; \
|
12
|
+
echo 'GEM_PATH=$$(pwd)/.gs' >> .env; \
|
13
|
+
echo 'PATH=$$(pwd)/.gs/bin:$$PATH' >> .env; \
|
14
|
+
echo 'RACK_ENV=development' >> .env; \
|
15
|
+
fi;
|
16
|
+
|
17
|
+
bs gem install dep
|
18
|
+
bs gem install cutest-cj
|
19
|
+
bs gem install pry
|
20
|
+
bs gem install awesome_print
|
21
|
+
endef
|
22
|
+
|
23
|
+
install:
|
24
|
+
$(call install_bs)
|
25
|
+
bs dep install
|
26
|
+
|
27
|
+
test:
|
28
|
+
bs env $$(cat .env.test) cutest test/**/*_test.rb
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'rack/mime'
|
2
|
+
|
3
|
+
module Dominate
|
4
|
+
module Assets
|
5
|
+
class Middleware
|
6
|
+
STATIC_TYPES = %w(js css)
|
7
|
+
|
8
|
+
attr_reader :app, :env, :res
|
9
|
+
|
10
|
+
def initialize(app)
|
11
|
+
@app = app
|
12
|
+
end
|
13
|
+
|
14
|
+
def call env
|
15
|
+
dup.call! env
|
16
|
+
end
|
17
|
+
|
18
|
+
def call! env
|
19
|
+
@env = env
|
20
|
+
|
21
|
+
if assets_path
|
22
|
+
render_assets
|
23
|
+
else
|
24
|
+
res
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def res
|
31
|
+
@res ||= begin
|
32
|
+
if not assets_path
|
33
|
+
app.call(req.env)
|
34
|
+
else
|
35
|
+
Cuba::Response.new
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def req
|
41
|
+
@req ||= Rack::Request.new env
|
42
|
+
end
|
43
|
+
|
44
|
+
def assets_path
|
45
|
+
path[Regexp.new("^#{Dominate.config.asset_url}($|.*)")]
|
46
|
+
end
|
47
|
+
|
48
|
+
def path
|
49
|
+
env['PATH_INFO']
|
50
|
+
end
|
51
|
+
|
52
|
+
def type
|
53
|
+
if matched = path.match(/(?<=#{Dominate.config.asset_url}\/).*(?=\/)/)
|
54
|
+
matched[0]
|
55
|
+
else
|
56
|
+
''
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def name
|
61
|
+
cleaned = path.gsub(/\.#{ext}$/, '')
|
62
|
+
cleaned = cleaned.gsub(/^#{Dominate.config.asset_url}\//, '')
|
63
|
+
cleaned = cleaned.gsub(/^#{type}\//, '')
|
64
|
+
cleaned
|
65
|
+
end
|
66
|
+
|
67
|
+
def ext
|
68
|
+
if matched = path.match(/(?<=\.).*$/)
|
69
|
+
matched[0]
|
70
|
+
else
|
71
|
+
false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def render_assets
|
76
|
+
if name == 'all'
|
77
|
+
res.write render_all_files
|
78
|
+
else
|
79
|
+
res.write render_single_file
|
80
|
+
end
|
81
|
+
|
82
|
+
case type
|
83
|
+
when 'css', 'stylesheet', 'stylesheets'
|
84
|
+
content_type = 'text/css'
|
85
|
+
when 'js', 'javascript', 'javascripts'
|
86
|
+
content_type = 'text/javascript'
|
87
|
+
else
|
88
|
+
content_type = Rack::Mime.mime_type ext
|
89
|
+
end
|
90
|
+
|
91
|
+
res.headers["Content-Type"] = content_type
|
92
|
+
|
93
|
+
res.finish
|
94
|
+
end
|
95
|
+
|
96
|
+
def render_all_files
|
97
|
+
content = ''
|
98
|
+
files = Dominate.config.assets[ext]
|
99
|
+
path = "#{Dominate.config.asset_path}/#{type}"
|
100
|
+
|
101
|
+
files.each do |file|
|
102
|
+
content += load_file "#{path}/#{file}"
|
103
|
+
end
|
104
|
+
|
105
|
+
content
|
106
|
+
end
|
107
|
+
|
108
|
+
def render_single_file
|
109
|
+
path = "#{Dominate.config.asset_path}/#{type}"
|
110
|
+
load_file "#{path}/#{name}.#{ext}"
|
111
|
+
end
|
112
|
+
|
113
|
+
def load_file path
|
114
|
+
ext = path[/\.[^.]*$/][1..-1]
|
115
|
+
|
116
|
+
if STATIC_TYPES.include? ext
|
117
|
+
File.read path
|
118
|
+
else
|
119
|
+
Dominate::HTML.load_file path
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Dominate
|
2
|
+
module Assets
|
3
|
+
module Render
|
4
|
+
PARTIAL_REGEX = Regexp.new '([a-zA-Z_]+)$'
|
5
|
+
|
6
|
+
def self.setup app
|
7
|
+
app.settings[:render] ||= {}
|
8
|
+
app.use Middleware
|
9
|
+
|
10
|
+
load_engines
|
11
|
+
end
|
12
|
+
|
13
|
+
def render file, options = {}
|
14
|
+
path = "#{settings[:render][:views] || Dominate.config.view_path}"
|
15
|
+
layout_path = settings[:layout_path] || Dominate.config.layout_path
|
16
|
+
layout = "#{layout_path}/#{settings[:render][:layout] || Dominate.config.layout}"
|
17
|
+
content = Dominate::HTML.load_file "#{path}/#{file}", options, self
|
18
|
+
options[:content] = content
|
19
|
+
Dominate::HTML.load_file layout, options, self
|
20
|
+
end
|
21
|
+
|
22
|
+
def partial file, options = {}
|
23
|
+
file.gsub! PARTIAL_REGEX, '_\1'
|
24
|
+
path = "#{settings[:render][:views] || Dominate.config.view_path}"
|
25
|
+
Dominate::HTML.load_file "#{path}/#{file}", options, self
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def self.load_engines
|
31
|
+
if defined? Slim
|
32
|
+
Slim::Engine.set_default_options \
|
33
|
+
disable_escape: true,
|
34
|
+
use_html_safe: true,
|
35
|
+
disable_capture: false
|
36
|
+
|
37
|
+
if RACK_ENV == 'development'
|
38
|
+
Slim::Engine.set_default_options pretty: true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/dominate/dom.rb
CHANGED
@@ -26,23 +26,28 @@ module Dominate
|
|
26
26
|
HTML.load_file "#{view_path}/#{partial}", config, instance
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
if match = e.to_html.strip.match(PARTIAL_REGEX)
|
33
|
-
partial = match[1]
|
34
|
-
e.swap Nokogiri::HTML.fragment(
|
35
|
-
HTML.load_file "#{view_path}/#{partial}", config, instance
|
36
|
-
)
|
37
|
-
end
|
29
|
+
updated_html = updated_html.gsub(PARTIAL_REGEX) do |m|
|
30
|
+
partial = $~.captures.first
|
31
|
+
HTML.load_file "#{view_path}/#{partial}", config, instance
|
38
32
|
end
|
33
|
+
|
34
|
+
set_doc updated_html
|
35
|
+
|
36
|
+
# doc.traverse do |e|
|
37
|
+
# if match = e.to_html.strip.match(PARTIAL_REGEX)
|
38
|
+
# partial = match[1]
|
39
|
+
# e.swap Nokogiri::HTML.fragment(
|
40
|
+
# HTML.load_file "#{view_path}/#{partial}", config, instance
|
41
|
+
# )
|
42
|
+
# end
|
43
|
+
# end
|
39
44
|
end
|
40
45
|
|
41
46
|
def load_layout
|
42
47
|
path = "#{config.view_path}/#{config.layout}"
|
43
48
|
html = HTML.load_file path, config, instance
|
44
49
|
inner_html = doc.inner_html
|
45
|
-
|
50
|
+
doc.inner_html = html.gsub YIELD_REGEX, inner_html
|
46
51
|
end
|
47
52
|
|
48
53
|
def scope name, &block
|
data/lib/dominate/html.rb
CHANGED
@@ -7,28 +7,39 @@ module Dominate
|
|
7
7
|
def file file, instance = false, config = {}
|
8
8
|
c = (Dominate.config.to_h.merge config).to_deep_ostruct
|
9
9
|
path = "#{c.view_path}/#{file}"
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
html = load_file path, c, instance
|
11
|
+
|
12
|
+
if c.parse_dom
|
13
|
+
unless dom_cache = _dom_cache[path]
|
14
|
+
dom_cache = (_dom_cache[path] = Dom.new(html, instance, config))
|
15
|
+
end
|
16
|
+
|
17
|
+
dom = dom_cache.dup
|
18
|
+
|
19
|
+
if File.file? path + '.dom'
|
20
|
+
dom = Instance.new(instance, c).instance_eval File.read(path + '.dom')
|
21
|
+
end
|
22
|
+
|
23
|
+
dom
|
24
|
+
else
|
25
|
+
html
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
|
-
def load_file path, c, instance
|
29
|
+
def load_file path, c = {}, instance = self
|
23
30
|
html = _cache.fetch(path) {
|
24
31
|
template = false
|
25
32
|
|
26
|
-
|
27
|
-
|
33
|
+
if path[/\..*$/] && File.file?(path)
|
34
|
+
template = Tilt.new path, 1, outvar: '@_output'
|
35
|
+
else
|
36
|
+
VIEW_TYPES.each do |type|
|
37
|
+
f = "#{path}.#{type}"
|
28
38
|
|
29
|
-
|
30
|
-
|
31
|
-
|
39
|
+
if File.file? f
|
40
|
+
template = Tilt.new f, 1, outvar: '@_output'
|
41
|
+
break
|
42
|
+
end
|
32
43
|
end
|
33
44
|
end
|
34
45
|
|
@@ -43,11 +54,16 @@ module Dominate
|
|
43
54
|
html
|
44
55
|
end
|
45
56
|
|
57
|
+
private
|
58
|
+
|
46
59
|
# @private Used internally by #render to cache the
|
47
60
|
# ::Tilt templates.
|
48
61
|
def _cache
|
49
62
|
Thread.current[:_cache] ||= ::Tilt::Cache.new
|
50
63
|
end
|
51
|
-
|
64
|
+
|
65
|
+
def _dom_cache
|
66
|
+
Thread.current[:_dom_cache] ||= {}
|
67
|
+
end
|
52
68
|
end
|
53
69
|
end
|
data/lib/dominate/version.rb
CHANGED
@@ -44,12 +44,13 @@ module Dominate
|
|
44
44
|
resp = widget.send state
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
47
|
+
if resp.is_a? Dominate::Dom
|
48
|
+
html = "<div id='#{widget.id_for(state)}'>#{resp.html}</div>"
|
49
|
+
# resp.reset_html
|
50
|
+
# resp.doc.inner_html = html
|
51
|
+
# resp.html
|
52
|
+
html
|
53
|
+
elsif resp.is_a? String
|
53
54
|
html = "<div id='#{widget.id_for(state)}'>#{resp}</div>"
|
54
55
|
html
|
55
56
|
else
|
data/lib/dominate/widget.rb
CHANGED
@@ -58,12 +58,13 @@ module Dominate
|
|
58
58
|
resp = send(state)
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
if resp.is_a? Dominate::Dom
|
62
|
+
html = "<div id='#{id_for(state)}'>#{resp.html}</div>"
|
63
|
+
# resp.doc.inner_html = html
|
64
|
+
# resp.reset_html
|
65
|
+
# resp.html
|
66
|
+
html
|
67
|
+
elsif resp.is_a? String
|
67
68
|
html = "<div id='#{id_for(state)}'>#{resp}</div>"
|
68
69
|
html
|
69
70
|
else
|
@@ -143,12 +144,13 @@ module Dominate
|
|
143
144
|
resp = send(e)
|
144
145
|
end
|
145
146
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
147
|
+
if resp.is_a? Dominate::Dom
|
148
|
+
html = "<div id='#{id_for(e)}'>#{resp.html}</div>"
|
149
|
+
# resp.doc.inner_html = html
|
150
|
+
# resp.reset_html
|
151
|
+
# res.write resp.html
|
152
|
+
res.write html
|
153
|
+
elsif resp.is_a? String
|
152
154
|
html = "<div id='#{id_for(e)}'>#{resp}</div>"
|
153
155
|
res.write html
|
154
156
|
else
|
data/lib/dominate.rb
CHANGED
@@ -12,6 +12,7 @@ module Dominate
|
|
12
12
|
autoload :Scope, "dominate/scope"
|
13
13
|
autoload :Dom, "dominate/dom"
|
14
14
|
autoload :Widget, "dominate/widget"
|
15
|
+
autoload :Assets, "dominate/assets"
|
15
16
|
|
16
17
|
class NoFileFound < StandardError; end
|
17
18
|
|
@@ -28,11 +29,19 @@ module Dominate
|
|
28
29
|
# Resets the configuration to the default (empty hash)
|
29
30
|
def reset_config!
|
30
31
|
@config = OpenStruct.new({
|
31
|
-
|
32
|
+
parse_dom: false,
|
32
33
|
layout: 'app',
|
34
|
+
layout_path: './views/layouts',
|
35
|
+
view_path: './views',
|
33
36
|
widget_path: './widgets',
|
34
37
|
widget_url: '/widgets',
|
35
|
-
widgets: {}
|
38
|
+
widgets: {},
|
39
|
+
assets: OpenStruct.new({
|
40
|
+
js: {},
|
41
|
+
css: {}
|
42
|
+
}),
|
43
|
+
asset_url: '/assets',
|
44
|
+
asset_path: './assets'
|
36
45
|
})
|
37
46
|
end
|
38
47
|
|
data/test/helper.rb
CHANGED
data/test/template_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dominate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -171,13 +171,18 @@ executables: []
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
+
- .gems
|
174
175
|
- .gitignore
|
175
|
-
-
|
176
|
+
- .ruby-version
|
176
177
|
- LICENSE.txt
|
178
|
+
- Makefile
|
177
179
|
- README.md
|
178
180
|
- Rakefile
|
179
181
|
- dominate.gemspec
|
180
182
|
- lib/dominate.rb
|
183
|
+
- lib/dominate/assets.rb
|
184
|
+
- lib/dominate/assets/middleware.rb
|
185
|
+
- lib/dominate/assets/render.rb
|
181
186
|
- lib/dominate/dom.rb
|
182
187
|
- lib/dominate/html.rb
|
183
188
|
- lib/dominate/inflectors.rb
|
@@ -239,4 +244,3 @@ test_files:
|
|
239
244
|
- test/helper.rb
|
240
245
|
- test/template_test.rb
|
241
246
|
- test/widget_test.rb
|
242
|
-
has_rdoc:
|
data/Gemfile
DELETED