snails 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 982126d7b4bff6dd0a06db8fad9a2979e68aa315
4
- data.tar.gz: d32bc442d6eec60a33f28929af7dda910890fbde
3
+ metadata.gz: 3590d188f5ba6f0e5d8ea137f194b56febf14da2
4
+ data.tar.gz: 8a5a30da16236c741b3f391fadf55911f709dc64
5
5
  SHA512:
6
- metadata.gz: 18ef4ef42b0dc867de881b3df64657eeafe48bcbe0ad83aadc1875e0592b4d5e9976ade5e3f8f1d80b2508bbcc565a02a7a661ac33f69cd8961a2990964d432a
7
- data.tar.gz: 6f1cbc8265728f3b5c6a2df2bdb7bbcdba0642c6358658548d287e8ab01a259ccce213801174d46d5962ac8d1e307acf72338a069a415ca7fd51c153ffeb91fa
6
+ metadata.gz: 26578d70dd7892a27e41cbc655927e6444344f6f73198de4ae9cb72f7f49cb5abd8e9f8bdeae8614edac80c62e65741c4a2f6900c42fc8847f89f15aec7953a7
7
+ data.tar.gz: e9ad79ffe2670aa1c273b22e40778328b7c96bbb156ab5a5480a35998b3dc897c3ca348f8e08c8f8e9e0ecb8c99b24a817cdeaf72b230afa7b2ca15a7982662a
data/lib/snails/app.rb CHANGED
@@ -8,87 +8,6 @@ sinatra/flash
8
8
 
9
9
  module Snails
10
10
 
11
- module RequiredParams
12
- def requires!(req, hash = params)
13
- if req.is_a?(Hash)
14
- req.each do |k, vals|
15
- if vals.is_a?(Array) or vals.is_a?(Hash)
16
- halt(400, "Missing: #{k} in #{hash}") if hash[k].nil?
17
- requires!(vals, hash[k])
18
- else
19
- requires!(k, hash)
20
- end
21
- end
22
- elsif req.nil? or (req.is_a?(Symbol) and hash[req].nil?) \
23
- or (req.is_a?(Array) and req.any? { |p| hash[p].nil? })
24
- halt(400, "Required parameters: #{req} (in #{hash})")
25
- end
26
- end
27
- end
28
-
29
- class App < Sinatra::Base
30
-
31
- def self.inherited(base)
32
- Snails.apps << base
33
- super
34
- end
35
-
36
- set :protection, except: :frame_options
37
- set :views, Snails.root.join('lib', 'views')
38
- set :session_secret, ENV.fetch('SESSION_SECRET') { SecureRandom.hex }
39
- set :static_paths, %w(/css /img /js /files /fonts favicon.ico)
40
-
41
- enable :sessions
42
- enable :method_override
43
- enable :logging
44
-
45
- register Sinatra::Flash
46
- use Rack::CommonLogger, Snails.logger
47
- use Rack::Static, urls: static_paths, root: 'public'
48
-
49
- configure :production, :staging do
50
- set :raise_errors, true
51
- set :dump_errors, false
52
- end
53
-
54
- configure :development do
55
- set :raise_errors, true
56
- set :show_exceptions, true
57
- set :log_level, Logger::DEBUG
58
- end
59
-
60
- helpers do
61
- include RequiredParams
62
- include Snails::ViewHelpers
63
- include Sinatra::ContentFor
64
- def logger; Snails.logger; end
65
- end
66
-
67
- error do
68
- err = request.env['sinatra.error']
69
- logger.error err.message
70
- logger.error err.backtrace.first(3).join("\n")
71
- halt(500, err.message)
72
- end
73
-
74
- not_found do
75
- show_error(404)
76
- end
77
-
78
- protected
79
-
80
- def deliver(data, code = 200, format = :json)
81
- status(code)
82
- content_type(format)
83
- data.public_send("to_#{format}")
84
- end
85
-
86
- def show_error(code)
87
- erb :"errors/#{code}", layout: false
88
- end
89
-
90
- end
91
-
92
11
  module All
93
12
 
94
13
  def self.registered(app)
@@ -166,9 +85,9 @@ module Snails
166
85
 
167
86
  cwd = Pathname.new(Dir.pwd)
168
87
  app.set :sprockets, Sprockets::Environment.new(cwd)
169
- app.set :digest_assets, false #
170
- app.set :assets_prefix, app.assets_prefix || '/assets' # URL
171
- app.set :assets_paths, app.assets_paths || %w(assets) # source files
88
+ app.set :digest_assets, false
89
+ app.set :assets_prefix, app.respond_to?(:assets_prefix) ? app.assets_prefix : '/assets' # URL
90
+ app.set :assets_paths, app.respond_to?(:assets_paths) ? app.assets_paths : %w(assets) # source files
172
91
  app.set :assets_public_path, -> { cwd.join('public', 'assets') } # output dir
173
92
  app.set :assets_precompile, %w(js/main.js css/main.css)
174
93
  app.set :assets_remove_digests, false
@@ -263,6 +182,24 @@ module Snails
263
182
 
264
183
  end
265
184
 
185
+ module RequiredParams
186
+ def requires!(req, hash = params)
187
+ if req.is_a?(Hash)
188
+ req.each do |k, vals|
189
+ if vals.is_a?(Array) or vals.is_a?(Hash)
190
+ halt(400, "Missing: #{k} in #{hash}") if hash[k].nil?
191
+ requires!(vals, hash[k])
192
+ else
193
+ requires!(k, hash)
194
+ end
195
+ end
196
+ elsif req.nil? or (req.is_a?(Symbol) and hash[req].nil?) \
197
+ or (req.is_a?(Array) and req.any? { |p| hash[p].nil? })
198
+ halt(400, "Required parameters: #{req} (in #{hash})")
199
+ end
200
+ end
201
+ end
202
+
266
203
  module FormHelpers
267
204
 
268
205
  def form_input(object, field, options = {})
@@ -301,6 +238,13 @@ module Snails
301
238
  label + "<textarea #{style} tabindex='#{index}' id='#{id}' name='#{name}'>#{object.send(field)}</textarea>"
302
239
  end
303
240
 
241
+ def form_select(object, field, option_list, options = {})
242
+ id, name, index, label = input_base(object, field, options)
243
+ style = options[:style] ? "style='#{options[:style]}'" : ''
244
+ options = form_select_options(option_list, object.send(field))
245
+ label + "<select #{style} tabindex='#{index}' id='#{id}' name='#{name}'>#{options}</select>"
246
+ end
247
+
304
248
  def form_select_options(list, selected = nil)
305
249
  list.map do |name, val|
306
250
  val = name if val.nil?
@@ -322,12 +266,19 @@ module Snails
322
266
  form_id = opts.delete(:form_id) || path.gsub(/[^a-z0-9]/, '_').gsub(/_+/, '_')
323
267
  css_class = opts.delete(:css_class) || ''
324
268
  input_html = opts.delete(:input_html) || ''
325
- confirm_text = opts.delete(:confirm_text) || 'Seguro?'
326
269
  submit_val = opts.delete(:value) || text
327
- '<form id="' + form_id + '" style="display:inline" method="post" action="' + url(path) + '" onsubmit="return confirm(\'' + confirm_text + '\');">
328
- ' + input_html + '
329
- <button name="submit" type="submit" class="' + css_class + ' button" value="' + submit_val + '">' + text + '</button>
330
- </form>'
270
+ style = "style='display:inline; #{opts[:style]}'"
271
+
272
+ onsubmit = if str = opts[:onsubmit]
273
+ "onsubmit=\"#{str}\""
274
+ else
275
+ confirm_text = opts.delete(:confirm_text) || 'Seguro?'
276
+ "onsubmit='return confirm(\"#{confirm_text}\");'"
277
+ end
278
+
279
+ form_tag = "<form id='#{form_id}' method='post' action='#{url(path)}' #{style} #{onsubmit}>"
280
+ button = "<button name='submit' type='submit' class='button #{css_class}' value='#{submit_val}'>#{text}</button>"
281
+ form_tag + input_html + button + '</form>'
331
282
  end
332
283
 
333
284
  def delete_link(options = {})
@@ -480,4 +431,67 @@ module Snails
480
431
 
481
432
  end
482
433
 
434
+ class App < Sinatra::Base
435
+
436
+ def self.inherited(base)
437
+ Snails.apps << base
438
+ super
439
+ end
440
+
441
+ set :protection, except: :frame_options
442
+ set :views, Snails.root.join('lib', 'views')
443
+ set :session_secret, ENV.fetch('SESSION_SECRET') { SecureRandom.hex }
444
+ set :static_paths, %w(/css /img /js /files /fonts favicon.ico)
445
+
446
+ enable :sessions
447
+ enable :method_override
448
+ enable :logging
449
+
450
+ register Sinatra::Flash
451
+ use Rack::CommonLogger, Snails.logger
452
+ use Rack::Static, urls: static_paths, root: 'public'
453
+
454
+ configure :production, :staging do
455
+ set :raise_errors, true
456
+ set :dump_errors, false
457
+ end
458
+
459
+ configure :development do
460
+ set :raise_errors, true
461
+ set :show_exceptions, true
462
+ set :log_level, Logger::DEBUG
463
+ end
464
+
465
+ helpers do
466
+ include RequiredParams
467
+ include ViewHelpers
468
+ include Sinatra::ContentFor
469
+ def logger; Snails.logger; end
470
+ end
471
+
472
+ error do
473
+ err = request.env['sinatra.error']
474
+ logger.error err.message
475
+ logger.error err.backtrace.first(3).join("\n")
476
+ halt(500, err.message)
477
+ end
478
+
479
+ not_found do
480
+ show_error(404)
481
+ end
482
+
483
+ protected
484
+
485
+ def deliver(data, code = 200, format = :json)
486
+ status(code)
487
+ content_type(format)
488
+ data.public_send("to_#{format}")
489
+ end
490
+
491
+ def show_error(code)
492
+ erb :"errors/#{code}", layout: false
493
+ end
494
+
495
+ end
496
+
483
497
  end
@@ -0,0 +1,12 @@
1
+ # $:.unshift(File.expand_path('../../lib', __FILE__))
2
+
3
+ ENV['RACK_ENV'] = 'test'
4
+
5
+ require 'rubygems'
6
+ require 'bundler'
7
+ Bundler.require(:default, :test)
8
+
9
+ RSpec.configure do |config|
10
+ config.formatter = :fuubar
11
+ config.color = true
12
+ end
data/snails.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "snails"
6
- s.version = '0.1.6'
6
+ s.version = '0.1.7'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ['Tomás Pollak']
9
9
  s.email = ['tomas@forkhq.com']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomás Pollak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-03 00:00:00.000000000 Z
11
+ date: 2019-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -143,6 +143,7 @@ files:
143
143
  - lib/snails.rb
144
144
  - lib/snails/app.rb
145
145
  - lib/snails/mailer.rb
146
+ - lib/snails/rspec.rb
146
147
  - lib/snails/tasks.rb
147
148
  - snails.gemspec
148
149
  homepage: