lb-project 0.1.1 → 0.2.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/lb-project.gemspec +2 -0
- data/lib/lb/project.rb +11 -3
- data/lib/lb/project/api.rb +5 -5
- data/lib/lb/project/registry/registration.rb +1 -1
- data/lib/lb/project/roda.rb +61 -0
- data/lib/lb/project/route.rb +4 -1
- data/lib/lb/project/settings.rb +1 -0
- data/lib/lb/project/site.rb +80 -0
- data/lib/lb/project/version.rb +1 -1
- data/lib/lb/project/view.rb +2 -2
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c27f7acd45b2567e52fb686194cea98e7ca4d656900616c8bab1cb7f0ab481d3
|
4
|
+
data.tar.gz: dc1683fcba720d1d548e039ad619287be10f486a3c2afea1e33a50170257bc58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03340f24aef69ad08d89b22fd9a6b8f6670530d8c16c48add9ad72e75456529ee4bffac76c62819b424288fb2559d1b9001165f70b78c86c0db4e99083a5f47f
|
7
|
+
data.tar.gz: 14fbadd80b4c7fea37d9c8452c2910397f4e8643ddf6154614b58141e465666d7e639df9d1434abd9e4378f7505f4e9f1c23487122126305bbfe44ff3500f386
|
data/lb-project.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |gem|
|
|
28
28
|
gem.add_dependency 'dry-struct', '~> 0.5'
|
29
29
|
gem.add_dependency 'dry-types', '~> 0.13'
|
30
30
|
gem.add_dependency 'dry-view', '~> 0.5'
|
31
|
+
gem.add_dependency 'rack_csrf', '~> 2.6'
|
31
32
|
gem.add_dependency 'roda', '~> 3.7'
|
32
33
|
gem.add_dependency 'roda-i18n', '~> 0.4'
|
33
34
|
|
@@ -37,5 +38,6 @@ Gem::Specification.new do |gem|
|
|
37
38
|
gem.add_development_dependency 'guard-rspec', '~> 4.7', '>= 4.7.3'
|
38
39
|
gem.add_development_dependency 'guard-rubocop', '~> 1.3'
|
39
40
|
gem.add_development_dependency 'rubocop', '~> 0.52'
|
41
|
+
gem.add_development_dependency 'shotgun', '~> 0.9.2'
|
40
42
|
gem.add_development_dependency 'slim', '~> 3.0'
|
41
43
|
end
|
data/lib/lb/project.rb
CHANGED
@@ -6,6 +6,7 @@ require 'yaml'
|
|
6
6
|
# Web
|
7
7
|
require 'roda'
|
8
8
|
require 'roda/plugins/public'
|
9
|
+
require 'rack/csrf'
|
9
10
|
|
10
11
|
# r18n
|
11
12
|
require 'r18n-core'
|
@@ -22,6 +23,9 @@ require 'lb/project/version'
|
|
22
23
|
# Custom Types
|
23
24
|
require 'lb/project/types'
|
24
25
|
|
26
|
+
# Site
|
27
|
+
require 'lb/project/site'
|
28
|
+
|
25
29
|
# Config
|
26
30
|
require 'lb/project/config'
|
27
31
|
require 'lb/project/settings'
|
@@ -51,6 +55,10 @@ module LB
|
|
51
55
|
self
|
52
56
|
end
|
53
57
|
|
58
|
+
def self.settings
|
59
|
+
@settings
|
60
|
+
end
|
61
|
+
|
54
62
|
# Get root path
|
55
63
|
#
|
56
64
|
# @return [dir_name]
|
@@ -132,9 +140,6 @@ end
|
|
132
140
|
# API
|
133
141
|
require 'lb/project/api'
|
134
142
|
|
135
|
-
# Site
|
136
|
-
require 'lb/project/site'
|
137
|
-
|
138
143
|
# Routing
|
139
144
|
require 'lb/project/route'
|
140
145
|
require 'lb/project/app'
|
@@ -149,3 +154,6 @@ require 'lb/project/page'
|
|
149
154
|
|
150
155
|
# Render
|
151
156
|
require 'lb/project/render'
|
157
|
+
|
158
|
+
# Roda Plugin
|
159
|
+
require 'lb/project/roda'
|
data/lib/lb/project/api.rb
CHANGED
@@ -34,7 +34,7 @@ module LB
|
|
34
34
|
#
|
35
35
|
# @api private
|
36
36
|
#
|
37
|
-
def
|
37
|
+
def template_path
|
38
38
|
LB::Project.template_path
|
39
39
|
end
|
40
40
|
|
@@ -44,7 +44,7 @@ module LB
|
|
44
44
|
#
|
45
45
|
# @api private
|
46
46
|
#
|
47
|
-
def
|
47
|
+
def public_path
|
48
48
|
LB::Project.public_path
|
49
49
|
end
|
50
50
|
|
@@ -54,15 +54,15 @@ module LB
|
|
54
54
|
#
|
55
55
|
# @api private
|
56
56
|
#
|
57
|
-
def
|
57
|
+
def config
|
58
58
|
LB::Project.config
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
61
|
+
def t(*params)
|
62
62
|
LB::Project.t(*params)
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def logger
|
66
66
|
LB::Project.logger
|
67
67
|
end
|
68
68
|
end
|
@@ -44,7 +44,7 @@ module LB
|
|
44
44
|
|
45
45
|
def self.define_registry_as(registry_name, rmethod)
|
46
46
|
define_method("register_#{registry_name}_as") do |key|
|
47
|
-
send(rmethod).register(key.
|
47
|
+
send(rmethod).register(key.to_sym, self)
|
48
48
|
instance_variable_set("@#{registry_name}_key", key.to_s)
|
49
49
|
end
|
50
50
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Roda
|
4
|
+
# LB::Project Roda Plugins
|
5
|
+
module RodaPlugins
|
6
|
+
# LB::Project plugin
|
7
|
+
module LBProject
|
8
|
+
# Plugin instance methods
|
9
|
+
module InstanceMethods
|
10
|
+
def page(name, overrides = {})
|
11
|
+
page = LB::Project::Page.page_registry[name].new
|
12
|
+
page.call(current_context(page.with(overrides)))
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def current_site
|
18
|
+
site.with_flash(flash)
|
19
|
+
end
|
20
|
+
|
21
|
+
def current_context(page)
|
22
|
+
{
|
23
|
+
context: ::Struct.new(:site, :page).new(current_site, page),
|
24
|
+
locals: {}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def site
|
29
|
+
LB::Project.settings.site.new.with(csrf_config.merge(session_config))
|
30
|
+
end
|
31
|
+
|
32
|
+
def csrf_config
|
33
|
+
{
|
34
|
+
csrf_token: -> { Rack::Csrf.token(request.env) },
|
35
|
+
csrf_metatag: -> { Rack::Csrf.metatag(request.env) },
|
36
|
+
csrf_tag: -> { Rack::Csrf.tag(request.env) }
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def session_config
|
41
|
+
{
|
42
|
+
session: -> { request.session }
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Plugin request methods
|
48
|
+
module RequestMethods
|
49
|
+
def parent
|
50
|
+
File.dirname script_name
|
51
|
+
end
|
52
|
+
|
53
|
+
def redirect_parent
|
54
|
+
redirect parent
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
register_plugin :lb_project, LBProject
|
60
|
+
end
|
61
|
+
end
|
data/lib/lb/project/route.rb
CHANGED
@@ -8,7 +8,10 @@ module LB
|
|
8
8
|
translations = [File.join(LB::Project.root, 'locales')]
|
9
9
|
route.plugin :i18n, translations: translations
|
10
10
|
route.opts[:root] = LB::Project.root
|
11
|
-
route.plugin :public, root:
|
11
|
+
route.plugin :public, root: LB::Project.config.public_path
|
12
|
+
route.plugin :flash
|
13
|
+
route.plugin :lb_project
|
14
|
+
route.plugin :json
|
12
15
|
end
|
13
16
|
end
|
14
17
|
end
|
data/lib/lb/project/settings.rb
CHANGED
data/lib/lb/project/site.rb
CHANGED
@@ -6,6 +6,11 @@ module LB
|
|
6
6
|
class Site
|
7
7
|
include R18n::Helpers
|
8
8
|
|
9
|
+
DEFAULT_MESSAGE_TYPES = {
|
10
|
+
notice: { level: :success, timeout: 5 },
|
11
|
+
alert: { level: :error, timeout: 0 }
|
12
|
+
}.freeze
|
13
|
+
|
9
14
|
def initialize(context = {})
|
10
15
|
@context = context
|
11
16
|
end
|
@@ -18,6 +23,12 @@ module LB
|
|
18
23
|
options.fetch(*args)
|
19
24
|
end
|
20
25
|
|
26
|
+
def with(opts)
|
27
|
+
options.merge!(opts)
|
28
|
+
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
21
32
|
def path_for(bundle, type)
|
22
33
|
path = 'webpack-assets.json'
|
23
34
|
file = File.read(path)
|
@@ -36,6 +47,75 @@ module LB
|
|
36
47
|
def image_path(path)
|
37
48
|
"#{LB::Project.config.image_base_path}/#{path}"
|
38
49
|
end
|
50
|
+
|
51
|
+
def escaped_json(data)
|
52
|
+
"JSON#{Rack::Utils.escape_html(JSON.generate(escape_all(data)))}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def escape_all(data)
|
56
|
+
case data
|
57
|
+
when Array
|
58
|
+
escape_array(data)
|
59
|
+
when Hash
|
60
|
+
escape_hash(data)
|
61
|
+
when String
|
62
|
+
Rack::Utils.escape_html(data)
|
63
|
+
else
|
64
|
+
data
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def escape_array(data)
|
69
|
+
data.map(&method(:escape_all))
|
70
|
+
end
|
71
|
+
|
72
|
+
def escape_hash(data)
|
73
|
+
data.map do |key, value|
|
74
|
+
[key, escape_all(value)]
|
75
|
+
end.to_h
|
76
|
+
end
|
77
|
+
|
78
|
+
def flash?
|
79
|
+
%i[notice alert].any? { |type| flash[type] }
|
80
|
+
end
|
81
|
+
|
82
|
+
def with_flash(flash)
|
83
|
+
with(flash: flash)
|
84
|
+
end
|
85
|
+
|
86
|
+
def flash
|
87
|
+
self[:flash, {}]
|
88
|
+
end
|
89
|
+
|
90
|
+
def csrf_token
|
91
|
+
self[:csrf_token].call
|
92
|
+
end
|
93
|
+
|
94
|
+
def csrf_metatag
|
95
|
+
self[:csrf_metatag].call
|
96
|
+
end
|
97
|
+
|
98
|
+
def csrf_tag
|
99
|
+
self[:csrf_tag].call
|
100
|
+
end
|
101
|
+
|
102
|
+
def session
|
103
|
+
self[:session].call
|
104
|
+
end
|
105
|
+
|
106
|
+
def logged_in?
|
107
|
+
session.key?(:user_id)
|
108
|
+
end
|
109
|
+
|
110
|
+
def message_types
|
111
|
+
DEFAULT_MESSAGE_TYPES
|
112
|
+
end
|
113
|
+
|
114
|
+
def messages
|
115
|
+
flash.map do |type, message|
|
116
|
+
{ message: message }.merge(MESSAGE_TYPES[type])
|
117
|
+
end
|
118
|
+
end
|
39
119
|
end
|
40
120
|
end
|
41
121
|
end
|
data/lib/lb/project/version.rb
CHANGED
data/lib/lb/project/view.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lb-project
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Firas Zaidan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-initializer
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack_csrf
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.6'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.6'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: roda
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +198,20 @@ dependencies:
|
|
184
198
|
- - "~>"
|
185
199
|
- !ruby/object:Gem::Version
|
186
200
|
version: '0.52'
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: shotgun
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - "~>"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: 0.9.2
|
208
|
+
type: :development
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 0.9.2
|
187
215
|
- !ruby/object:Gem::Dependency
|
188
216
|
name: slim
|
189
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,6 +262,7 @@ files:
|
|
234
262
|
- lib/lb/project/registry.rb
|
235
263
|
- lib/lb/project/registry/registration.rb
|
236
264
|
- lib/lb/project/render.rb
|
265
|
+
- lib/lb/project/roda.rb
|
237
266
|
- lib/lb/project/route.rb
|
238
267
|
- lib/lb/project/settings.rb
|
239
268
|
- lib/lb/project/site.rb
|