lux-fw 0.1.35 → 0.2.1
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 +5 -5
- data/.version +1 -1
- data/bin/cli/am +67 -41
- data/bin/cli/assets +1 -1
- data/bin/cli/console +3 -2
- data/bin/cli/eval +11 -2
- data/bin/cli/exceptions +1 -1
- data/bin/cli/generate +4 -0
- data/bin/cli/render +18 -0
- data/bin/cli/routes +3 -1
- data/bin/cli/server +4 -1
- data/bin/lux +10 -1
- data/bin/txt/nginx.conf +35 -18
- data/lib/common/class_attributes.rb +10 -10
- data/lib/common/{before_and_after.rb → class_callbacks.rb} +12 -21
- data/lib/common/crypt.rb +10 -6
- data/lib/common/dynamic_class.rb +12 -7
- data/lib/common/generic_model.rb +6 -6
- data/lib/common/hash_with_indifferent_access.rb +6 -284
- data/lib/{lux/helper/lib/html_tag.rb → common/html_tag_builder.rb} +1 -1
- data/lib/common/policy.rb +2 -2
- data/lib/common/url.rb +6 -4
- data/lib/lux-fw.rb +2 -13
- data/lib/lux/api/api.rb +34 -47
- data/lib/lux/api/lib/dsl.rb +2 -2
- data/lib/lux/api/lib/model_api.rb +40 -23
- data/lib/lux/api/lib/response.rb +30 -5
- data/lib/lux/application/application.rb +182 -0
- data/lib/lux/{controller → application}/lib/nav.rb +18 -21
- data/lib/lux/application/lib/plugs.rb +10 -0
- data/lib/lux/application/lib/render.rb +58 -0
- data/lib/lux/application/lib/route_test.rb +64 -0
- data/lib/lux/cache/cache.rb +27 -16
- data/lib/lux/cell/cell.rb +66 -54
- data/lib/lux/config/config.rb +51 -27
- data/lib/lux/current/current.rb +122 -0
- data/lib/lux/{page → current}/lib/encrypt_params.rb +2 -2
- data/lib/lux/{page → current}/lib/static_file.rb +29 -25
- data/lib/lux/delayed_job/delayed_job.rb +4 -4
- data/lib/lux/error/error.rb +31 -16
- data/lib/lux/helper/helper.rb +32 -37
- data/lib/lux/helper/helpers/application_helper.rb +3 -0
- data/lib/lux/helper/helpers/html_helper.rb +3 -0
- data/lib/lux/helper/helpers/mailer_helper.rb +11 -0
- data/lib/lux/lux.rb +40 -30
- data/lib/lux/mailer/mailer.rb +46 -29
- data/lib/lux/{page → response}/lib/flash.rb +1 -1
- data/lib/lux/response/lib/header.rb +21 -0
- data/lib/lux/response/response.rb +237 -0
- data/lib/lux/template/template.rb +20 -18
- data/lib/overload/array.rb +5 -0
- data/lib/overload/auto_loader.rb +27 -0
- data/lib/overload/blank.rb +8 -2
- data/lib/overload/float.rb +10 -0
- data/lib/overload/hash.rb +5 -12
- data/lib/overload/integer.rb +1 -5
- data/lib/overload/nil.rb +5 -0
- data/lib/overload/object.rb +1 -0
- data/lib/overload/r.rb +5 -0
- data/lib/overload/string.rb +4 -5
- data/lib/overload/{date.rb → time.rb} +23 -3
- metadata +37 -73
- data/bin/forever +0 -65
- data/bin/job_que +0 -39
- data/lib/lux/api/lib/application_api.rb +0 -38
- data/lib/lux/api/lib/doc_builder.rb +0 -19
- data/lib/lux/api/lib/rescue.rb +0 -8
- data/lib/lux/controller/controller.rb +0 -185
- data/lib/lux/controller/lib/plugs.rb +0 -10
- data/lib/lux/html/html.rb +0 -3
- data/lib/lux/html/lib/form.rb +0 -81
- data/lib/lux/html/lib/input.rb +0 -71
- data/lib/lux/html/lib/input_types.rb +0 -287
- data/lib/lux/lib/lux.rb +0 -51
- data/lib/lux/page/lib/response.rb +0 -178
- data/lib/lux/page/page.rb +0 -292
- data/lib/lux/rescue_from/rescue_from.rb +0 -63
- data/lib/plugins/assets/assets_plug.rb +0 -31
- data/lib/plugins/assets/helper_module_adapter.rb +0 -51
- data/lib/plugins/assets/init.rb +0 -4
- data/lib/plugins/db_helpers/array_and_hstore.rb +0 -64
- data/lib/plugins/db_helpers/arrays_and_tags.rb +0 -23
- data/lib/plugins/db_helpers/before_save.rb +0 -44
- data/lib/plugins/db_helpers/cached_find_by.rb +0 -45
- data/lib/plugins/db_helpers/class_and_instance.rb +0 -120
- data/lib/plugins/db_helpers/dataset_plugin.rb +0 -101
- data/lib/plugins/db_helpers/filter_wrappers.rb +0 -21
- data/lib/plugins/db_helpers/link_plugin.rb +0 -95
- data/lib/plugins/db_helpers/localize_plugin.rb +0 -57
- data/lib/plugins/db_helpers/primary_keys.rb +0 -36
- data/lib/plugins/db_helpers/typero_attributes.rb +0 -69
- data/lib/plugins/db_logger/init.rb +0 -18
- data/lib/plugins/db_logger/lux_response_adapter.rb +0 -9
- data/lib/plugins/paginate/helper.rb +0 -32
- data/lib/plugins/paginate/sequel_adapter.rb +0 -18
- data/lib/vendor/mini_assets/lib/asset.rb +0 -71
- data/lib/vendor/mini_assets/lib/asset/css.rb +0 -19
- data/lib/vendor/mini_assets/lib/asset/js.rb +0 -17
- data/lib/vendor/mini_assets/lib/base.rb +0 -69
- data/lib/vendor/mini_assets/lib/base/javascript.rb +0 -13
- data/lib/vendor/mini_assets/lib/base/stylesheet.rb +0 -5
- data/lib/vendor/mini_assets/lib/manifest.rb +0 -18
- data/lib/vendor/mini_assets/lib/opts.rb +0 -16
- data/lib/vendor/mini_assets/mini_assets.rb +0 -74
- data/lib/vendor/oauth/lib/facebook.rb +0 -35
- data/lib/vendor/oauth/lib/github.rb +0 -37
- data/lib/vendor/oauth/lib/google.rb +0 -41
- data/lib/vendor/oauth/lib/linkedin.rb +0 -41
- data/lib/vendor/oauth/lib/stackexchange.rb +0 -37
- data/lib/vendor/oauth/lib/twitter.rb +0 -41
- data/lib/vendor/oauth/oauth.rb +0 -46
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 48df51990bdf390ef6f780d624e0bb1624f54dfc5721dee1c77749f02e2ec472
|
|
4
|
+
data.tar.gz: bde0c404e918b91825e90b9e7a183199266d225ece56c54b28e1366366350bc7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fc6c0f8bf80608399dac5afe4dd9f7d01d78fd99cbcf45e3cf746e986eabd8a08ba6650722569c6e0f64266fd202a27b44ec6e6e3cfdf8683951605bb03b030f
|
|
7
|
+
data.tar.gz: 106570f909cc6109a9d1f6f7f719d82e4b7514e4b214b62fcc81015590c7e607bf39fbb97c74fe2e1add9986ca260c840743c3f1121b751ef81372c789e32327
|
data/.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1
|
|
1
|
+
0.2.1
|
data/bin/cli/am
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
require 'dotenv'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Dotenv.load
|
|
7
|
+
Bundler.require(:default)
|
|
8
|
+
|
|
9
|
+
# load app config
|
|
10
|
+
require './config/db'
|
|
11
|
+
|
|
12
|
+
# Sequel extension and plugin test
|
|
13
|
+
DB.run %[DROP TABLE IF EXISTS lux_tests;]
|
|
14
|
+
DB.run %[CREATE TABLE lux_tests (int_array integer[] default '{}', text_array text[] default '{}');]
|
|
15
|
+
class LuxTest < Sequel::Model; end;
|
|
16
|
+
LuxTest.new.save
|
|
17
|
+
die('"DB.extension :pg_array" not loaded') unless LuxTest.first.int_array.class == Sequel::Postgres::PGArray
|
|
18
|
+
DB.run %[DROP TABLE IF EXISTS lux_tests;]
|
|
6
19
|
|
|
7
20
|
class AutoMigrate
|
|
8
21
|
attr_accessor :fields
|
|
9
22
|
|
|
10
23
|
class << self
|
|
11
|
-
def table
|
|
12
|
-
die "
|
|
24
|
+
def table table_name
|
|
25
|
+
die "Table [#{table_name}] not in plural -> expected [#{table_name.to_s.pluralize}]" unless table_name.to_s.pluralize == table_name.to_s
|
|
26
|
+
|
|
27
|
+
die 'Table name "%s" is not permited' % table_name if [:categories].include?(table_name)
|
|
13
28
|
|
|
14
29
|
unless DB.table_exists?(table_name.to_s)
|
|
15
30
|
# http://sequel.jeremyevans.net/rdoc/files/doc/schema_modification_rdoc.html
|
|
@@ -49,6 +64,20 @@ class AutoMigrate
|
|
|
49
64
|
def initialize table_name
|
|
50
65
|
@table_name = table_name
|
|
51
66
|
@fields = {}
|
|
67
|
+
|
|
68
|
+
klass = @table_name.to_s.classify
|
|
69
|
+
|
|
70
|
+
if Object.const_defined?(klass)
|
|
71
|
+
puts 'Table name "%s" is not allowed - class "%s" is allready defined'.red % [table_name, klass]
|
|
72
|
+
exit
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
eval %[class ::%s < Sequel::Model; end;] % klass
|
|
76
|
+
@object = klass.constantize.new
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def transaction_do text
|
|
80
|
+
self.class.transaction_do text
|
|
52
81
|
end
|
|
53
82
|
|
|
54
83
|
def log_run what
|
|
@@ -61,13 +90,12 @@ class AutoMigrate
|
|
|
61
90
|
type = vals[0]
|
|
62
91
|
opts = vals[1]
|
|
63
92
|
|
|
64
|
-
opts[:limit]
|
|
93
|
+
opts[:limit] ||= 255 if type == :string
|
|
65
94
|
opts[:default] ||= false if type == :boolean
|
|
66
|
-
|
|
67
|
-
opts[:
|
|
68
|
-
opts[:
|
|
69
|
-
opts[:
|
|
70
|
-
opts[:default] = [] if opts[:array]
|
|
95
|
+
opts[:null] = true unless opts[:null].class.name == 'FalseClass'
|
|
96
|
+
opts[:array] ||= false
|
|
97
|
+
opts[:unique] ||= false
|
|
98
|
+
opts[:default] = [] if opts[:array]
|
|
71
99
|
end
|
|
72
100
|
end
|
|
73
101
|
|
|
@@ -76,27 +104,22 @@ class AutoMigrate
|
|
|
76
104
|
db_type = type
|
|
77
105
|
db_type = :varchar if type == :string
|
|
78
106
|
db_type = Time if type == :datetime
|
|
107
|
+
|
|
79
108
|
if opts[:array]
|
|
80
109
|
db_type = '%s(%s)' % [db_type, opts[:limit]] if type == :string
|
|
81
110
|
db_type = '%s[]' % db_type
|
|
82
111
|
else
|
|
83
112
|
db_type = 'varchar(%s)' % opts[:limit] if opts[:limit]
|
|
84
113
|
end
|
|
114
|
+
|
|
85
115
|
db_type
|
|
86
116
|
end
|
|
87
117
|
|
|
88
118
|
def update
|
|
89
|
-
|
|
90
|
-
obj = @table_name.to_s.classify.constantize
|
|
91
|
-
o = obj.new
|
|
92
|
-
rescue
|
|
93
|
-
puts "Object #{@table_name.to_s.classify.red} does not exist, yet table #{@table_name.to_s.red} exists!"
|
|
94
|
-
return
|
|
95
|
-
end
|
|
119
|
+
puts "Table #{@table_name.to_s.yellow}, #{@fields.keys.length} fields"
|
|
96
120
|
|
|
97
121
|
# remove extra fields
|
|
98
|
-
|
|
99
|
-
for field in (existing_fields - @fields.keys.map(&:to_s))
|
|
122
|
+
for field in (@object.columns - @fields.keys - [:id])
|
|
100
123
|
print "Remove colum #{@table_name}.#{field} (y/N): ".light_blue
|
|
101
124
|
if STDIN.gets.chomp.downcase.index('y')
|
|
102
125
|
DB.drop_column @table_name, field
|
|
@@ -104,8 +127,6 @@ class AutoMigrate
|
|
|
104
127
|
end
|
|
105
128
|
end
|
|
106
129
|
|
|
107
|
-
puts "Table #{@table_name.to_s.yellow}, #{@fields.keys.length} fields"
|
|
108
|
-
|
|
109
130
|
# loop trough defined fileds in schema
|
|
110
131
|
for field, opts_in in @fields
|
|
111
132
|
type = opts_in[0]
|
|
@@ -114,20 +135,19 @@ class AutoMigrate
|
|
|
114
135
|
db_type = get_db_column_type(field)
|
|
115
136
|
|
|
116
137
|
# create missing columns
|
|
117
|
-
unless
|
|
138
|
+
unless @object.columns.index(field.to_sym)
|
|
118
139
|
DB.add_column @table_name, field, db_type, opts
|
|
119
140
|
|
|
120
141
|
if opts[:array]
|
|
121
142
|
default = type == :string ? "ARRAY[]::character varying[]" : "ARRAY[]::integer[]"
|
|
122
|
-
|
|
123
|
-
self.class.transaction_do "ALTER TABLE #{@table_name} ALTER COLUMN #{field} SET DEFAULT #{default};"
|
|
143
|
+
transaction_do "ALTER TABLE #{@table_name} ALTER COLUMN #{field} SET DEFAULT #{default};"
|
|
124
144
|
end
|
|
125
145
|
|
|
126
146
|
puts " add_column #{field}, #{db_type}, #{opts.to_json}".green
|
|
127
147
|
next
|
|
128
148
|
end
|
|
129
149
|
|
|
130
|
-
if current =
|
|
150
|
+
if current = @object.db_schema[field]
|
|
131
151
|
# unhandled db schema changes will not happen
|
|
132
152
|
# ---
|
|
133
153
|
# field - field name
|
|
@@ -136,22 +156,28 @@ class AutoMigrate
|
|
|
136
156
|
# opts - new proposed types
|
|
137
157
|
|
|
138
158
|
# if we have type set as array and in db it is not array, fix that
|
|
139
|
-
if opts[:array]
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
159
|
+
if opts[:array]
|
|
160
|
+
# covert to array unless is array
|
|
161
|
+
if !current[:db_type].include?('[]')
|
|
162
|
+
transaction_do %[
|
|
163
|
+
alter table #{@table_name} alter #{field} drop default;
|
|
164
|
+
alter table #{@table_name} alter #{field} type #{current[:db_type]}[] using array[#{field}];
|
|
165
|
+
alter table #{@table_name} alter #{field} set default '{}';
|
|
166
|
+
]
|
|
167
|
+
|
|
168
|
+
puts " Coverted #{@table_name}.#{field} to array type".green
|
|
169
|
+
elsif !current[:default]
|
|
170
|
+
# force default for array to be present
|
|
171
|
+
default = type == :string ? "ARRAY[]::character varying[]" : "ARRAY[]::integer[]"
|
|
172
|
+
transaction_do %[alter table #{@table_name} alter #{field} set default #{default};]
|
|
173
|
+
end
|
|
148
174
|
end
|
|
149
175
|
|
|
150
176
|
# if we have array but scema says no array
|
|
151
177
|
if !opts[:array] && current[:db_type].include?('[]')
|
|
152
178
|
m = current[:type] == :integer ? "#{field}[0]" : "array_to_string(#{field}, ',')"
|
|
153
179
|
|
|
154
|
-
|
|
180
|
+
transaction_do %[
|
|
155
181
|
alter table #{@table_name} alter #{field} drop default;
|
|
156
182
|
alter table #{@table_name} alter #{field} type #{current[:db_type].sub('[]','')} using #{m};
|
|
157
183
|
]
|
|
@@ -160,14 +186,14 @@ class AutoMigrate
|
|
|
160
186
|
end
|
|
161
187
|
|
|
162
188
|
# if varchar limit size has changed
|
|
163
|
-
if type == :string && current[:max_length] != opts[:limit]
|
|
164
|
-
|
|
189
|
+
if type == :string && !opts[:array] && current[:max_length] != opts[:limit]
|
|
190
|
+
transaction_do "ALTER TABLE #{@table_name} ALTER COLUMN #{field} TYPE varchar(#{opts[:limit]});"
|
|
165
191
|
puts " #{field} limit, #{current[:max_length]}-> #{opts[:limit]}".green
|
|
166
192
|
end
|
|
167
193
|
|
|
168
194
|
# covert from varchar to text
|
|
169
195
|
if type == :text && current[:max_length]
|
|
170
|
-
|
|
196
|
+
transaction_do "ALTER TABLE #{@table_name} ALTER COLUMN #{field} SET DATA TYPE text"
|
|
171
197
|
puts " #{field} limit from #{current[:max_length]} to no limit (text type)".green
|
|
172
198
|
end
|
|
173
199
|
|
|
@@ -221,7 +247,7 @@ class AutoMigrate
|
|
|
221
247
|
end
|
|
222
248
|
|
|
223
249
|
def rename field_old, field_new
|
|
224
|
-
existing_fields = @table_name.to_s.classify.constantize.new.
|
|
250
|
+
existing_fields = @table_name.to_s.classify.constantize.new.columns
|
|
225
251
|
|
|
226
252
|
if existing_fields.index(field_old.to_sym) && ! existing_fields.index(field_new.to_sym)
|
|
227
253
|
DB.rename_column(@table_name, field_old, field_new)
|
|
@@ -236,11 +262,11 @@ class AutoMigrate
|
|
|
236
262
|
opts = args[1] || {}
|
|
237
263
|
|
|
238
264
|
if [:string, :integer, :text, :boolean, :datetime, :date, :jsonb].index(type)
|
|
239
|
-
@fields[name] = [type, opts]
|
|
265
|
+
@fields[name.to_sym] = [type, opts]
|
|
240
266
|
elsif [:decimal].index(type)
|
|
241
267
|
opts[:precision] ||= 8
|
|
242
268
|
opts[:scale] ||= 2
|
|
243
|
-
@fields[name] = [:decimal, opts]
|
|
269
|
+
@fields[name.to_sym] = [:decimal, opts]
|
|
244
270
|
elsif type == :timestamps
|
|
245
271
|
opts[:null] ||= false
|
|
246
272
|
@fields[:created_at] = [:datetime, opts]
|
data/bin/cli/assets
CHANGED
|
@@ -37,5 +37,5 @@ puts "Asset precomlile done in #{speed}"
|
|
|
37
37
|
|
|
38
38
|
if ARGV.last && ARGV.last[0,5] == 's3://'
|
|
39
39
|
puts 'Copy to %s'.green % ARGV.last
|
|
40
|
-
system 'aws s3 sync ./public %s --cache-control "max-age=31536000,
|
|
40
|
+
system 'aws s3 sync ./public %s --cache-control "max-age=31536000, public"' % ARGV.last
|
|
41
41
|
end
|
data/bin/cli/console
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
ENV['LUX_VERBOSE'] ||= 'true'
|
|
4
|
-
|
|
5
3
|
load_start = Time.now
|
|
6
4
|
|
|
7
5
|
require 'awesome_print'
|
|
8
6
|
require 'clipboard'
|
|
9
7
|
require './config/application'
|
|
10
8
|
|
|
9
|
+
Lux.config.show_server_errors = true
|
|
10
|
+
Lux.config.log_to_stdout = true
|
|
11
|
+
|
|
11
12
|
if File.exist?('./config/console.rb')
|
|
12
13
|
puts '* loading ./config/console.rb'
|
|
13
14
|
require './config/console'
|
data/bin/cli/eval
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
require './config/application'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
if File.exist?('./config/console.rb')
|
|
6
|
+
puts '* loading ./config/console.rb'
|
|
7
|
+
load './config/console.rb'
|
|
8
|
+
end
|
|
6
9
|
|
|
7
10
|
command = ARGV.join('; ')
|
|
8
11
|
|
|
@@ -12,4 +15,10 @@ data = eval command
|
|
|
12
15
|
puts '-'
|
|
13
16
|
puts 'Class : %s' % data.class
|
|
14
17
|
puts '-'
|
|
15
|
-
|
|
18
|
+
|
|
19
|
+
if data.class == String && data.include?('</body>')
|
|
20
|
+
require 'nokogiri'
|
|
21
|
+
puts Nokogiri::XML(data, &:noblanks)
|
|
22
|
+
else
|
|
23
|
+
ap data
|
|
24
|
+
end
|
data/bin/cli/exceptions
CHANGED
|
@@ -19,7 +19,7 @@ end
|
|
|
19
19
|
|
|
20
20
|
show = ARGV[0] ? ARGV[0].to_i : nil
|
|
21
21
|
|
|
22
|
-
error_folders = Dir['%s/*' % ERROR_FOLDER].sort_by { |x| File.mtime(x) }
|
|
22
|
+
error_folders = Dir['%s/*' % ERROR_FOLDER].sort_by { |x| File.mtime(x) }.reverse
|
|
23
23
|
|
|
24
24
|
if error_folders.length == 0
|
|
25
25
|
puts 'Nothing found in %s'.light_blue % ERROR_FOLDER
|
data/bin/cli/generate
CHANGED
data/bin/cli/render
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
ENV['LUX_VERBOSE'] = 'true'
|
|
4
|
+
|
|
5
|
+
require './config/application'
|
|
6
|
+
|
|
7
|
+
unless ARGV[0]
|
|
8
|
+
Cli.die 'lux render GET /about'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
path, http_method = ARGV.reverse
|
|
12
|
+
http_method ||= :get
|
|
13
|
+
|
|
14
|
+
data = Lux(path)
|
|
15
|
+
|
|
16
|
+
data[:body] = 'BODY lenght: %s kB' % (data[:body].length.to_f/1024).round(1)
|
|
17
|
+
|
|
18
|
+
ap data
|
data/bin/cli/routes
CHANGED
data/bin/cli/server
CHANGED
data/bin/lux
CHANGED
|
@@ -29,6 +29,11 @@ Dotenv.load
|
|
|
29
29
|
@port = 3000
|
|
30
30
|
lux_root = File.expand_path '../..', __FILE__
|
|
31
31
|
|
|
32
|
+
if Dir.exists?('.git')
|
|
33
|
+
test_root = `bundle show lux-fw`.chomp
|
|
34
|
+
lux_root = test_root if test_root.include?('lux')
|
|
35
|
+
end
|
|
36
|
+
|
|
32
37
|
puts 'Lux (%s, v%s)' % [lux_root, File.read('%s/.version' % lux_root)] unless ARGV[0]
|
|
33
38
|
|
|
34
39
|
ARGV.options do |opts|
|
|
@@ -40,6 +45,9 @@ ARGV.options do |opts|
|
|
|
40
45
|
opts.on("-p", "--port=val", "port (3000)", String) do |v|
|
|
41
46
|
@port = v.to_i
|
|
42
47
|
end
|
|
48
|
+
opts.on("-f", "--flags=val", "CRSL", String) do |v|
|
|
49
|
+
@flags = v
|
|
50
|
+
end
|
|
43
51
|
end.parse!
|
|
44
52
|
|
|
45
53
|
commands = {}
|
|
@@ -51,13 +59,14 @@ commands['eval'] = 'eval code or file'
|
|
|
51
59
|
commands['exceptions'] = 'show stored exceptions, last created first'
|
|
52
60
|
commands['generate'] = 'generates models and views based on templates'
|
|
53
61
|
commands['get'] = 'get local URL'
|
|
54
|
-
# commands['job_que'] = 'process job que with loaded enviroment'
|
|
55
62
|
commands['nginx'] = 'parse and install config/nginx.conf'
|
|
56
63
|
commands['production'] = 'run puma in production mode'
|
|
57
64
|
commands['routes'] = 'list routes'
|
|
65
|
+
commands['render'] = 'render single page'
|
|
58
66
|
commands['server'] = 'run puma development server'
|
|
59
67
|
commands['systemd'] = 'parse and install config/systemd.conf'
|
|
60
68
|
commands['stat'] = 'goaccess stat to public/goaccess.html'
|
|
69
|
+
# commands['job_que'] = 'process job que with loaded enviroment'
|
|
61
70
|
|
|
62
71
|
command = ARGV.shift
|
|
63
72
|
|
data/bin/txt/nginx.conf
CHANGED
|
@@ -1,29 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
worker_connections 1024;
|
|
5
|
-
}
|
|
1
|
+
# /etc/nginx/nginx.conf
|
|
2
|
+
# worker_processes 4; # one per proc "grep processor /proc/cpuinfo | wc -l"
|
|
3
|
+
# worker_connections 1024;
|
|
6
4
|
|
|
7
5
|
server {
|
|
8
|
-
listen 80
|
|
9
|
-
server_name .
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
listen 80 default_server;
|
|
7
|
+
# server_name .novi-informator.hr;
|
|
8
|
+
|
|
9
|
+
root $ROOT/public;
|
|
10
|
+
error_log $ROOT/log/nginx-error.log;
|
|
12
11
|
|
|
13
12
|
passenger_enabled on;
|
|
14
13
|
passenger_friendly_error_pages on;
|
|
15
14
|
|
|
15
|
+
# (1024 * TOTAL_RAM * 0.75) / MB_PER_PROECESS
|
|
16
|
+
# passenger_max_pool_size 163;
|
|
17
|
+
# passenger_min_instances 163;
|
|
18
|
+
|
|
19
|
+
client_body_timeout 12;
|
|
20
|
+
client_body_in_file_only clean;
|
|
21
|
+
client_body_buffer_size 32K; # form POST
|
|
22
|
+
client_header_timeout 12;
|
|
23
|
+
client_max_body_size 50M;
|
|
24
|
+
keepalive_timeout 20;
|
|
25
|
+
send_timeout 10;
|
|
26
|
+
sendfile on;
|
|
27
|
+
|
|
28
|
+
gzip on;
|
|
29
|
+
gzip_comp_level 2;
|
|
30
|
+
gzip_min_length 1000;
|
|
31
|
+
gzip_proxied expired no-cache no-store private auth;
|
|
32
|
+
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
|
|
33
|
+
|
|
34
|
+
access_log off;
|
|
35
|
+
|
|
16
36
|
location = /favicon.ico {
|
|
17
|
-
|
|
18
|
-
|
|
37
|
+
log_not_found off;
|
|
38
|
+
access_log off;
|
|
19
39
|
}
|
|
20
40
|
|
|
21
41
|
location ^~ /assets/ {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
42
|
+
gzip_static on;
|
|
43
|
+
expires max;
|
|
44
|
+
add_header Cache-Control public;
|
|
25
45
|
}
|
|
26
|
-
|
|
27
|
-
client_max_body_size 1G;
|
|
28
|
-
keepalive_timeout 20;
|
|
29
|
-
}
|
|
46
|
+
}
|
|
@@ -55,17 +55,17 @@ module ClassAttributes
|
|
|
55
55
|
|
|
56
56
|
# defines class variable in current lux thread
|
|
57
57
|
# User.current = @user
|
|
58
|
-
def current klass, name
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
# def current klass, name
|
|
59
|
+
# klass.class.send(:define_method, name) do |*args|
|
|
60
|
+
# Thread.current[:lux] ||= {}
|
|
61
|
+
# Thread.current[:lux]['%s-%s' % [klass, name]]
|
|
62
|
+
# end
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
end
|
|
64
|
+
# klass.class.send(:define_method, '%s=' % name) do |value|
|
|
65
|
+
# Thread.current[:lux] ||= {}
|
|
66
|
+
# Thread.current[:lux]['%s-%s' % [klass, name]] = value
|
|
67
|
+
# end
|
|
68
|
+
# end
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
class Object
|