rack-app-front_end 0.3.0 → 0.5.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/.rspec +1 -1
- data/.travis.yml +17 -2
- data/README.md +7 -1
- data/VERSION +1 -1
- data/lib/rack/app/front_end.rb +11 -8
- data/lib/rack/app/front_end/endpoint_methods.rb +28 -0
- data/lib/rack/app/front_end/folder_mounter.rb +7 -16
- data/lib/rack/app/front_end/template.rb +9 -15
- data/lib/rack/app/front_end/template/default_layout.rb +8 -0
- data/lib/rack/app/front_end/utils.rb +13 -2
- data/lib/rack/app/front_end/version.rb +1 -3
- data/rack-app-front_end.gemspec +6 -9
- metadata +12 -26
- data/lib/rack/app/front_end/layout.rb +0 -21
- data/lib/rack/app/front_end/template/plain_text.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d6dbf80557515cdc26e9a3d860655fcc405e6b5
|
4
|
+
data.tar.gz: 94b8f3f6d3432c16563123064b9013ba6089223d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53408b6280b21513df6da1af7f364bd9f60a8f76f66b838783a95d0dc4164c37b0c15228762a4518b524114e51d6dea5beb585e67a6ef665d6b60bc23314830c
|
7
|
+
data.tar.gz: 795681e871974c662a086285ec078f46c7bceb7ca2830e7c0b8a58b3fc888e721291dd518c8e673d155e1f70f8b1f229bc37d1f38c38051b14598889b55c1a4a
|
data/.rspec
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
#--format documentation
|
2
2
|
--color
|
data/.travis.yml
CHANGED
@@ -1,4 +1,19 @@
|
|
1
1
|
language: ruby
|
2
|
+
script: rspec spec
|
3
|
+
|
2
4
|
rvm:
|
3
|
-
|
4
|
-
|
5
|
+
|
6
|
+
- 1.9
|
7
|
+
- 2.0
|
8
|
+
- 2.1
|
9
|
+
|
10
|
+
- ruby-head
|
11
|
+
- jruby-head
|
12
|
+
|
13
|
+
branches:
|
14
|
+
only:
|
15
|
+
- master
|
16
|
+
|
17
|
+
notifications:
|
18
|
+
email:
|
19
|
+
- adamluzsi@gmail.com
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Rack::App::FrontEnd
|
1
|
+
# Rack::App::FrontEnd [](https://travis-ci.org/adamluzsi/rack-app-front_end.rb)
|
2
2
|
|
3
3
|
This is an extend module for Rack::App to have FrontEnd framework extensions for the core app class
|
4
4
|
|
@@ -29,6 +29,12 @@ class App < Rack::App
|
|
29
29
|
mount_folder '/from/project/root/path'
|
30
30
|
mount_folder 'relative/folder/from/this/file/to/folder'
|
31
31
|
|
32
|
+
|
33
|
+
get '/some_url' do
|
34
|
+
@items = []
|
35
|
+
render 'some.html.erb'
|
36
|
+
end
|
37
|
+
|
32
38
|
end
|
33
39
|
|
34
40
|
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/lib/rack/app/front_end.rb
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
require 'rack/app'
|
2
2
|
module Rack::App::FrontEnd
|
3
3
|
|
4
|
+
require 'tilt'
|
5
|
+
require 'tilt/plain'
|
6
|
+
|
4
7
|
require 'rack/app/front_end/version'
|
5
8
|
require 'rack/app/front_end/utils'
|
6
9
|
require 'rack/app/front_end/template'
|
7
|
-
require 'rack/app/front_end/layout'
|
8
10
|
require 'rack/app/front_end/view'
|
9
11
|
require 'rack/app/front_end/folder_mounter'
|
12
|
+
require 'rack/app/front_end/endpoint_methods'
|
13
|
+
|
14
|
+
def self.extended(klass)
|
15
|
+
klass.__send__(:include, ::Rack::App::FrontEnd::EndpointMethods)
|
16
|
+
end
|
10
17
|
|
11
18
|
def mount_folder(folder_path)
|
12
19
|
Rack::App::FrontEnd::FolderMounter.new(self).mount(Rack::App::FrontEnd::Utils.get_full_path(folder_path))
|
@@ -15,12 +22,8 @@ module Rack::App::FrontEnd
|
|
15
22
|
alias mount_templates_from mount_folder
|
16
23
|
|
17
24
|
def layout(layout_path=nil)
|
18
|
-
@layout = Rack::App::FrontEnd::
|
19
|
-
@layout
|
20
|
-
end
|
21
|
-
|
22
|
-
def default_layout
|
23
|
-
# code here
|
25
|
+
@layout = Rack::App::FrontEnd::Utils.get_full_path(layout_path) unless layout_path.nil?
|
26
|
+
@layout
|
24
27
|
end
|
25
28
|
|
26
|
-
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Rack::App::FrontEnd::EndpointMethods
|
2
|
+
|
3
|
+
def render(template_path)
|
4
|
+
|
5
|
+
template_full_path = if template_path.to_s[0] == '/'
|
6
|
+
project_file_path = Rack::App::Utils.pwd(template_path)
|
7
|
+
File.exist?(project_file_path) ? project_file_path : template_path
|
8
|
+
|
9
|
+
else
|
10
|
+
|
11
|
+
app_dirname = File.join(
|
12
|
+
File.dirname([caller[0]].flatten.first.split(/\.(?:rb|ru):\d/)[0]),
|
13
|
+
Rack::App::FrontEnd::Utils.underscore(self.class)
|
14
|
+
)
|
15
|
+
|
16
|
+
File.join(app_dirname, template_path)
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
options = {}
|
21
|
+
options[:layout]= self.class.layout if self.class.respond_to?(:layout)
|
22
|
+
template = Rack::App::FrontEnd::Template.new(template_full_path, options)
|
23
|
+
|
24
|
+
return template.render(self)
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class Rack::App::FrontEnd::FolderMounter
|
2
2
|
|
3
|
+
LAST_MODIFIED_HEADER = "Last-Modified"
|
4
|
+
|
3
5
|
def initialize(app_class)
|
4
6
|
@app_class = app_class
|
5
7
|
end
|
@@ -8,8 +10,7 @@ class Rack::App::FrontEnd::FolderMounter
|
|
8
10
|
template_paths_for(absolute_folder_path).each do |template_path|
|
9
11
|
|
10
12
|
request_path = request_path_by(absolute_folder_path, template_path)
|
11
|
-
|
12
|
-
create_endpoint_for(request_path, template)
|
13
|
+
create_endpoint_for(request_path, template_path)
|
13
14
|
|
14
15
|
end
|
15
16
|
end
|
@@ -17,31 +18,21 @@ class Rack::App::FrontEnd::FolderMounter
|
|
17
18
|
protected
|
18
19
|
|
19
20
|
def template_paths_for(source_folder_path)
|
20
|
-
Dir.glob(File.join(source_folder_path, '**', '*'))
|
21
|
-
.select { |p| not File.directory?(p) }
|
21
|
+
Dir.glob(File.join(source_folder_path, '**', '*')).select { |p| not File.directory?(p) }
|
22
22
|
end
|
23
23
|
|
24
|
-
def create_endpoint_for(request_path,
|
24
|
+
def create_endpoint_for(request_path, template_path)
|
25
25
|
@app_class.class_eval do
|
26
26
|
|
27
27
|
get(request_path) do
|
28
|
-
|
29
|
-
if result.respond_to?(:each)
|
30
|
-
response.body = result
|
31
|
-
else
|
32
|
-
response.write(self.class.layout.render(result))
|
33
|
-
end
|
34
|
-
response.finish
|
28
|
+
render(template_path)
|
35
29
|
end
|
36
30
|
|
37
31
|
end
|
38
32
|
end
|
39
33
|
|
40
34
|
def request_path_by(source_folder_path, template_path)
|
41
|
-
Rack::Utils.clean_path_info
|
42
|
-
.sub(source_folder_path, '')
|
43
|
-
.split(File::Separator).join('/')
|
44
|
-
|
35
|
+
Rack::Utils.clean_path_info(template_path.sub(source_folder_path, '').split(File::Separator).join('/'))
|
45
36
|
end
|
46
37
|
|
47
38
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'tilt'
|
2
2
|
class Rack::App::FrontEnd::Template
|
3
3
|
|
4
|
-
require 'rack/app/front_end/template/
|
4
|
+
require 'rack/app/front_end/template/default_layout'
|
5
5
|
|
6
6
|
def render(*args, &block)
|
7
7
|
return render_result(*args, &block)
|
@@ -9,29 +9,23 @@ class Rack::App::FrontEnd::Template
|
|
9
9
|
|
10
10
|
protected
|
11
11
|
|
12
|
-
def initialize(file_path,
|
13
|
-
@fallback_handler = fallback_handler
|
12
|
+
def initialize(file_path, options={})
|
14
13
|
@file_path = file_path
|
14
|
+
@options = options
|
15
15
|
end
|
16
16
|
|
17
17
|
def render_result(*args, &block)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
@fallback_handler.new(@file_path).render(*args, &block)
|
22
|
-
end
|
18
|
+
return Rack::App::File::Streamer.new(@file_path) unless it_is_a_template?
|
19
|
+
|
20
|
+
layout.render{ Tilt.new(@file_path).render(*args,&block) }
|
23
21
|
end
|
24
22
|
|
25
23
|
def it_is_a_template?
|
26
24
|
not Tilt.templates_for(@file_path).empty?
|
27
25
|
end
|
28
26
|
|
29
|
-
def
|
30
|
-
|
31
|
-
Tilt.templates_for(@file_path).each do |template_engine|
|
32
|
-
file_content = template_engine.new { file_content }.render(*args, &block)
|
33
|
-
end
|
34
|
-
return file_content
|
27
|
+
def layout
|
28
|
+
@options[:layout] ? Tilt.new(@options[:layout]) : DefaultLayout
|
35
29
|
end
|
36
30
|
|
37
|
-
end
|
31
|
+
end
|
@@ -4,11 +4,22 @@ module Rack::App::FrontEnd::Utils
|
|
4
4
|
|
5
5
|
def get_full_path(file_path,caller_index=1)
|
6
6
|
return nil if file_path.nil?
|
7
|
-
if file_path.to_s[0] ==
|
7
|
+
if file_path.to_s[0] == '/'
|
8
8
|
Rack::App::Utils.pwd(file_path)
|
9
9
|
else
|
10
|
-
File.join(File.dirname(caller[caller_index].split(':')[0]),file_path)
|
10
|
+
File.expand_path(File.join(File.dirname(caller[caller_index].split(':')[0]),file_path))
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
# Based on ActiveSupport, removed inflections.
|
15
|
+
# https://github.com/rails/rails/blob/v4.1.0.rc1/activesupport/lib/active_support/inflector/methods.rb
|
16
|
+
def underscore(camel_cased_word)
|
17
|
+
word = camel_cased_word.to_s.gsub('::', '/')
|
18
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
19
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
20
|
+
word.tr!("-", "_")
|
21
|
+
word.downcase!
|
22
|
+
word
|
23
|
+
end
|
24
|
+
|
14
25
|
end
|
data/rack-app-front_end.gemspec
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'rack/app/front_end/version'
|
5
2
|
|
6
3
|
Gem::Specification.new do |spec|
|
7
4
|
|
8
5
|
spec.name = "rack-app-front_end"
|
9
|
-
spec.version =
|
6
|
+
spec.version = File.read(File.join(File.dirname(__FILE__), 'VERSION')).strip
|
10
7
|
spec.authors = ["Adam Luzsi"]
|
11
8
|
spec.email = ["adamluzsi@gmail.com"]
|
12
9
|
|
@@ -19,13 +16,13 @@ Gem::Specification.new do |spec|
|
|
19
16
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
17
|
spec.require_paths = ["lib"]
|
21
18
|
|
22
|
-
spec.
|
23
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
-
spec.add_development_dependency "rspec"
|
19
|
+
spec.required_ruby_version = '>= 1.9.3'
|
25
20
|
|
26
|
-
spec.add_development_dependency "
|
21
|
+
spec.add_development_dependency "bundler"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
27
24
|
|
28
|
-
spec.add_dependency 'rack-app'
|
25
|
+
spec.add_dependency 'rack-app','>= 0.10.0'
|
29
26
|
spec.add_dependency 'kramdown'
|
30
27
|
spec.add_dependency 'tilt'
|
31
28
|
|
metadata
CHANGED
@@ -1,45 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-app-front_end
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
@@ -53,7 +39,7 @@ dependencies:
|
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: rspec
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - ">="
|
@@ -72,14 +58,14 @@ dependencies:
|
|
72
58
|
requirements:
|
73
59
|
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: 0.10.0
|
76
62
|
type: :runtime
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
68
|
+
version: 0.10.0
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: kramdown
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,10 +112,10 @@ files:
|
|
126
112
|
- bin/console
|
127
113
|
- bin/setup
|
128
114
|
- lib/rack/app/front_end.rb
|
115
|
+
- lib/rack/app/front_end/endpoint_methods.rb
|
129
116
|
- lib/rack/app/front_end/folder_mounter.rb
|
130
|
-
- lib/rack/app/front_end/layout.rb
|
131
117
|
- lib/rack/app/front_end/template.rb
|
132
|
-
- lib/rack/app/front_end/template/
|
118
|
+
- lib/rack/app/front_end/template/default_layout.rb
|
133
119
|
- lib/rack/app/front_end/utils.rb
|
134
120
|
- lib/rack/app/front_end/version.rb
|
135
121
|
- lib/rack/app/front_end/view.rb
|
@@ -145,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
131
|
requirements:
|
146
132
|
- - ">="
|
147
133
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
134
|
+
version: 1.9.3
|
149
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
136
|
requirements:
|
151
137
|
- - ">="
|
@@ -1,21 +0,0 @@
|
|
1
|
-
class Rack::App::FrontEnd::Layout < Rack::App::FrontEnd::Template
|
2
|
-
|
3
|
-
def render(content)
|
4
|
-
return render_result(content)
|
5
|
-
end
|
6
|
-
|
7
|
-
protected
|
8
|
-
|
9
|
-
def render_result(content)
|
10
|
-
if it_is_a_template? and layout_file_is_exists?
|
11
|
-
render_with_tilt_templates([], -> { content })
|
12
|
-
else
|
13
|
-
return content
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def layout_file_is_exists?
|
18
|
-
File.exists?(@file_path)
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class Rack::App::FrontEnd::Template::PlainText
|
2
|
-
|
3
|
-
include Enumerable
|
4
|
-
|
5
|
-
def each(&block)
|
6
|
-
file { |f| f.each(&block) }
|
7
|
-
end
|
8
|
-
|
9
|
-
def render(object=nil)
|
10
|
-
file { |f| f.read }
|
11
|
-
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
def initialize(file_path)
|
16
|
-
@file_path = file_path
|
17
|
-
@file = File.open(file_path)
|
18
|
-
end
|
19
|
-
|
20
|
-
def file(&block)
|
21
|
-
@file.reopen(@file_path) if @file.closed?
|
22
|
-
return block.call(@file)
|
23
|
-
ensure
|
24
|
-
@file.close
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|