lux-fw 0.5.36 → 0.5.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.version +1 -1
- data/bin/build_gem +2 -0
- data/bin/cli/routes.rb +4 -1
- data/lib/README.md +1 -1
- data/lib/lux/README.md +2 -2
- data/lib/lux/application/README.md +6 -1
- data/lib/lux/application/application.rb +9 -6
- data/lib/lux/application/lib/magic_routes.rb +16 -0
- data/lib/lux/application/lib/nav.rb +5 -1
- data/lib/lux/controller/controller.rb +8 -9
- data/lib/lux/current/current.rb +9 -3
- data/lib/lux/lux.rb +3 -1
- data/lib/overload/hash.rb +20 -2
- metadata +30 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4eabd8ade1e698ed7f377a9d0e14f819b72be8847f403c1b380ebf4997994716
|
4
|
+
data.tar.gz: 5b2092385c1fae7b70ddfebe2efd4b0c97a3e03a3baec4bdb260156941c7e13d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3e77f76261c629cff38cac6740968dd8c30acd620f4a5dd0370c1c0d3c4cdda8453586c67ab0bafae1205a7e22907db7b771af268009f9f401c656c454fc488
|
7
|
+
data.tar.gz: e71564c624c06c921da14ba3ac53a0a904ad1343af90c5bddcfa9fce06845fa1feb91a55964265dbe5514bfa7f63e3d6a8ccda9c68aec7e51aef2a973662e0b3
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.37
|
data/bin/build_gem
CHANGED
data/bin/cli/routes.rb
CHANGED
@@ -43,13 +43,14 @@ LuxCli.class_eval do
|
|
43
43
|
route = '/%s' % route unless route.include?('/')
|
44
44
|
route += '/*' unless target.include?('#')
|
45
45
|
route = "#{@prefix}/*" if route .include?('#')
|
46
|
+
|
46
47
|
print "#{indent}#{route}".ljust(50)
|
47
48
|
print target.ljust(50)
|
48
49
|
|
49
50
|
if controller && !target.include?('#')
|
50
51
|
puts
|
51
52
|
for el in controller.instance_methods(false)
|
52
|
-
print " #{route.to_s.sub('/*', '/')}#{el}".ljust(50)
|
53
|
+
print " #{route.to_s.sub('/*', '/').gsub('//', '/')}#{el}".ljust(50)
|
53
54
|
puts [target, el].join(' # ')
|
54
55
|
end
|
55
56
|
else
|
@@ -61,6 +62,8 @@ LuxCli.class_eval do
|
|
61
62
|
if @target
|
62
63
|
target = @target.is_a?(String) && !@target.include?('#') ? @target + "##{obj}" : @target
|
63
64
|
show_route obj, target
|
65
|
+
elsif obj.is_a?(Array)
|
66
|
+
show_route obj[0], obj[1]
|
64
67
|
elsif obj.is_a?(Hash)
|
65
68
|
show_route obj.keys.first, obj.values.first
|
66
69
|
elsif block_given?
|
data/lib/README.md
CHANGED
data/lib/lux/README.md
CHANGED
@@ -65,7 +65,7 @@ Lux.app do
|
|
65
65
|
|
66
66
|
###
|
67
67
|
|
68
|
-
routes do
|
68
|
+
routes do |r|
|
69
69
|
# we show on root method, that target can be multiple object types, 5 variants
|
70
70
|
root [RootController, :index] # calls RootController#index
|
71
71
|
root 'root#call' # calls RootController#call
|
@@ -76,7 +76,12 @@ Lux.app do
|
|
76
76
|
# we can route based on the user status
|
77
77
|
root User.current ? 'main/root' : 'guest'
|
78
78
|
|
79
|
+
# simple route
|
80
|
+
r.about 'static#about'
|
81
|
+
|
79
82
|
# map "/api" to "api_router" method
|
83
|
+
r.api :api_router
|
84
|
+
# or
|
80
85
|
map api: :api_router
|
81
86
|
|
82
87
|
# with MainController
|
@@ -4,19 +4,20 @@
|
|
4
4
|
|
5
5
|
class Lux::Application
|
6
6
|
class_callback :config # pre boot app config
|
7
|
-
class_callback :
|
7
|
+
class_callback :rack_boot # rack_handler is passed as argument
|
8
8
|
class_callback :info # called by "lux config" cli
|
9
9
|
class_callback :before # before any page load
|
10
10
|
class_callback :routes # routes resolve
|
11
11
|
class_callback :after # after any page load
|
12
12
|
|
13
|
-
|
13
|
+
rack_boot do |rack_handler|
|
14
14
|
# deafult host is required
|
15
15
|
unless Lux.config.host.to_s.include?('http')
|
16
16
|
raise 'Invalid "Lux.config.host"'
|
17
17
|
end
|
18
18
|
|
19
19
|
if Lux.config(:dump_errors)
|
20
|
+
require 'binding_of_caller'
|
20
21
|
require 'better_errors'
|
21
22
|
|
22
23
|
rack_handler.use BetterErrors::Middleware
|
@@ -280,7 +281,7 @@ class Lux::Application
|
|
280
281
|
case data = object.call
|
281
282
|
when Array
|
282
283
|
response.status = data.first
|
283
|
-
response.body data[2]
|
284
|
+
response.body data[2].is_a?(Array) ? data[2][0] : data[2]
|
284
285
|
else
|
285
286
|
response.body data
|
286
287
|
end
|
@@ -340,13 +341,15 @@ class Lux::Application
|
|
340
341
|
def main
|
341
342
|
return if deliver_static_assets
|
342
343
|
|
344
|
+
magic = MagicRoutes.new self
|
345
|
+
|
343
346
|
catch(:done) do
|
344
|
-
class_callback :before
|
345
|
-
class_callback :routes unless body?
|
347
|
+
class_callback :before, magic
|
348
|
+
class_callback :routes, magic unless body?
|
346
349
|
end
|
347
350
|
|
348
351
|
catch(:done) do
|
349
|
-
class_callback :after
|
352
|
+
class_callback :after, magic
|
350
353
|
end
|
351
354
|
rescue => e
|
352
355
|
response.body { nil }
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Maps routes to method missing for cleaner interface
|
2
|
+
# routes do |r|
|
3
|
+
# map :about => 'root#about'
|
4
|
+
# r.about 'root#about'
|
5
|
+
class Lux::Application::MagicRoutes
|
6
|
+
|
7
|
+
def initialize app
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing route, *args, &block
|
12
|
+
@app.map [route, args.first || block]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
@@ -22,11 +22,15 @@ class Lux::Application::Nav
|
|
22
22
|
parts = @path.last.split('.')
|
23
23
|
|
24
24
|
if parts[1]
|
25
|
-
@format = parts.pop.to_s.downcase.to_sym
|
25
|
+
@format = @format_once = parts.pop.to_s.downcase.to_sym
|
26
26
|
@path.last = parts.join('.')
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
def get_format_once
|
31
|
+
@format_once.tap { @format_once = nil }
|
32
|
+
end
|
33
|
+
|
30
34
|
def active_shift
|
31
35
|
@active = @path.shift
|
32
36
|
end
|
@@ -39,15 +39,6 @@ class Lux::Controller
|
|
39
39
|
@base_template = self.class.to_s.include?('::') ? self.class.to_s.sub(/Controller$/,'').underscore : self.class.to_s.sub(/Controller$/,'').downcase
|
40
40
|
end
|
41
41
|
|
42
|
-
# because we can call action multiple times
|
43
|
-
# ensure we execute filters only once
|
44
|
-
def filter fiter_name, arg=nil
|
45
|
-
return if @executed_filters[fiter_name]
|
46
|
-
@executed_filters[fiter_name] = true
|
47
|
-
|
48
|
-
Object.class_callback fiter_name, self, @controller_action
|
49
|
-
end
|
50
|
-
|
51
42
|
def cache *args, &block
|
52
43
|
Lux.cache.fetch *args, &block
|
53
44
|
end
|
@@ -246,4 +237,12 @@ class Lux::Controller
|
|
246
237
|
end
|
247
238
|
end
|
248
239
|
|
240
|
+
# because we can call action multiple times
|
241
|
+
# ensure we execute filters only once
|
242
|
+
def filter fiter_name, arg=nil
|
243
|
+
return if @executed_filters[fiter_name]
|
244
|
+
@executed_filters[fiter_name] = true
|
245
|
+
|
246
|
+
Object.class_callback fiter_name, self, @controller_action
|
247
|
+
end
|
249
248
|
end
|
data/lib/lux/current/current.rb
CHANGED
@@ -39,6 +39,7 @@ class Lux::Current
|
|
39
39
|
@nav = Lux::Application::Nav.new request
|
40
40
|
end
|
41
41
|
|
42
|
+
# Domain part of the host
|
42
43
|
def domain
|
43
44
|
host = Lux.current.request.host.split('.')
|
44
45
|
host_country = host.pop
|
@@ -46,32 +47,35 @@ class Lux::Current
|
|
46
47
|
host_name ? "#{host_name}.#{host_country}" : host_country
|
47
48
|
end
|
48
49
|
|
50
|
+
# Full host with port
|
49
51
|
def host
|
50
52
|
"#{request.env['rack.url_scheme']}://#{request.host}:#{request.port}".sub(':80','')# rescue 'http://locahost:3000'
|
51
53
|
end
|
52
54
|
|
55
|
+
# Current scope variables hash
|
53
56
|
def var
|
54
57
|
Thread.current[:lux][:var] ||= Hashie::Mash.new
|
55
58
|
end
|
56
59
|
|
57
|
-
#
|
60
|
+
# Cache data in current page
|
58
61
|
def cache key
|
59
62
|
data = Thread.current[:lux][:cache][key]
|
60
63
|
return data if data
|
61
64
|
Thread.current[:lux][:cache][key] = yield
|
62
65
|
end
|
63
66
|
|
64
|
-
#
|
67
|
+
# Set current.can_clear_cache = true in production for admins
|
65
68
|
def no_cache?
|
66
69
|
@can_clear_cache = true if Lux.dev?
|
67
70
|
@can_clear_cache && @request.env['HTTP_CACHE_CONTROL'].to_s.downcase == 'no-cache' ? true : false
|
68
71
|
end
|
69
72
|
|
73
|
+
# Redirect from current page
|
70
74
|
def redirect *args
|
71
75
|
response.redirect *args
|
72
76
|
end
|
73
77
|
|
74
|
-
#
|
78
|
+
# Execute action once per page
|
75
79
|
def once id=nil, data=nil, &block
|
76
80
|
id ||= Digest::SHA1.hexdigest caller[0] if block
|
77
81
|
|
@@ -82,11 +86,13 @@ class Lux::Current
|
|
82
86
|
block_given? ? yield : data
|
83
87
|
end
|
84
88
|
|
89
|
+
# Generete unique ID par page render
|
85
90
|
def uid
|
86
91
|
Thread.current[:uid_cnt] ||= 0
|
87
92
|
"uid-#{Thread.current[:uid_cnt]+=1}"
|
88
93
|
end
|
89
94
|
|
95
|
+
# Add to list of files in use
|
90
96
|
def files_in_use file=nil
|
91
97
|
if block_given?
|
92
98
|
return yield(file) unless @files_in_use.include?(file)
|
data/lib/lux/lux.rb
CHANGED
@@ -139,7 +139,9 @@ module ::Lux
|
|
139
139
|
# must be called when serving web pages from rackup
|
140
140
|
def serve rack_handler
|
141
141
|
@rackup_start = true
|
142
|
-
|
142
|
+
|
143
|
+
# Boot Lux
|
144
|
+
Object.class_callback :rack_boot, Lux::Application, rack_handler
|
143
145
|
rack_handler.run self
|
144
146
|
end
|
145
147
|
|
data/lib/overload/hash.rb
CHANGED
@@ -109,6 +109,11 @@ class Hash
|
|
109
109
|
transform_keys!{ |key| key.to_sym rescue key }
|
110
110
|
end
|
111
111
|
|
112
|
+
def pretty_generate
|
113
|
+
JSON.pretty_generate(self).gsub(/"([\w\-]+)":/) { %["#{$1.yellow}":] }
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns hash with only se
|
112
117
|
def slice *keys
|
113
118
|
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
114
119
|
keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if has_key?(k) }
|
@@ -124,8 +129,21 @@ class Hash
|
|
124
129
|
omit
|
125
130
|
end
|
126
131
|
|
127
|
-
|
128
|
-
|
132
|
+
# Returns a hash that includes everything but the given keys.
|
133
|
+
# hash = { a: true, b: false, c: nil}
|
134
|
+
# hash.except(:c) # => { a: true, b: false}
|
135
|
+
# hash # => { a: true, b: false, c: nil}
|
136
|
+
#
|
137
|
+
# This is useful for limiting a set of parameters to everything but a few known toggles:
|
138
|
+
# @person.update(params[:person].except(:admin))
|
139
|
+
def except(*keys)
|
140
|
+
dup.except!(*keys)
|
141
|
+
end
|
142
|
+
|
143
|
+
# Hash#except in place, modifying current hash
|
144
|
+
def except!(*keys)
|
145
|
+
keys.each { |key| delete(key) }
|
146
|
+
self
|
129
147
|
end
|
130
148
|
end
|
131
149
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lux-fw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dino Reic
|
@@ -262,6 +262,34 @@ dependencies:
|
|
262
262
|
- - "~>"
|
263
263
|
- !ruby/object:Gem::Version
|
264
264
|
version: '2'
|
265
|
+
- !ruby/object:Gem::Dependency
|
266
|
+
name: binding_of_caller
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - "~>"
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '0'
|
272
|
+
type: :runtime
|
273
|
+
prerelease: false
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
275
|
+
requirements:
|
276
|
+
- - "~>"
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: '0'
|
279
|
+
- !ruby/object:Gem::Dependency
|
280
|
+
name: nokogiri
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - "~>"
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '1'
|
286
|
+
type: :runtime
|
287
|
+
prerelease: false
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - "~>"
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '1'
|
265
293
|
description: Ruby framework optimized for speed and linghtness
|
266
294
|
email: rejotl@gmail.com
|
267
295
|
executables:
|
@@ -302,6 +330,7 @@ files:
|
|
302
330
|
- "./lib/lux/README.md"
|
303
331
|
- "./lib/lux/application/README.md"
|
304
332
|
- "./lib/lux/application/application.rb"
|
333
|
+
- "./lib/lux/application/lib/magic_routes.rb"
|
305
334
|
- "./lib/lux/application/lib/nav.rb"
|
306
335
|
- "./lib/lux/application/lib/render.rb"
|
307
336
|
- "./lib/lux/cache/.DS_Store"
|