sinatra_more 0.2.5 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -46,10 +46,12 @@ of tools, helpers and components that will make Sinatra suitable for more comple
46
46
  Here is a small list of what sinatra_more contains:
47
47
 
48
48
  * Generic view and tag helpers (<tt>tag</tt>, <tt>content_tag</tt>, <tt>input_tag</tt>, ...)
49
- * Asset helpers (<tt>link_to</tt>, <tt>image_tag</tt>, <tt>javascript_include_tag</tt>, ...)
50
- * Form helpers and builder support (<tt>form_tag</tt>, <tt>form_for</tt>, <tt>field_set_tag</tt>, <tt>text_field</tt>, ...)
49
+ * Asset tag helpers (<tt>link_to</tt>, <tt>image_tag</tt>, <tt>javascript_include_tag</tt>, ...)
50
+ * Full form helpers and builders support (<tt>form_tag</tt>, <tt>form_for</tt>, <tt>field_set_tag</tt>, <tt>text_field</tt>, ...)
51
+ * Generally useful formatting extensions (<tt>relative_time_ago</tt>, <tt>js_escape_html</tt>, <tt>sanitize_html</tt>)
51
52
  * Plug and play setup for the excellent Warden authentication system
52
- * Code generators for creating a new sinatra application
53
+ * Robust 'mailer' support for sinatra (akin to <tt>ActionMailer</tt> but simpler and powered by <tt>pony</tt>) (COMING SOON)
54
+ * Code generators for creating a new sinatra application (COMING SOON)
53
55
 
54
56
  Keep in mind, the user will be able to pull in these components seperately and leave out those that are not required.
55
57
 
@@ -333,7 +335,14 @@ I hope to create or merge in an even better 'default' form_builder in the near f
333
335
  * (from RackUtils) Escape ampersands, brackets and quotes to their HTML/XML entities.
334
336
  * <tt>relative_time_ago(date)</tt>
335
337
  * Returns relative time in words referencing the given date
336
- * <tt>relative_time_ago(2.days.ago)</tt> => "2 days ago"
338
+ * <tt>relative_time_ago(2.days.ago)</tt> => "2 days"
339
+ * <tt>relative_time_ago(5.minutes.ago)</tt> => "5 minutes"
340
+ * <tt>relative_time_ago(2800.days.ago)</tt> => "over 7 years"
341
+ * <tt>time_in_words(date)</tt>
342
+ * Returns relative time in the past or future using appropriate date format
343
+ * <tt>time_in_words(2.days.ago)</tt> => "2 days ago"
344
+ * <tt>time_in_words(100.days.ago)</tt> => "Tuesday, July 21"
345
+ * <tt>time_in_words(1.day.from_now)</tt> => "tomorrow"
337
346
  * <tt>escape_javascript(html_content)</tt>
338
347
  * Escapes html to allow passing information to javascript. Used for passing data inside an ajax .js.erb template
339
348
  * <tt>escape_javascript("<h1>Hey</h1>")</tt>
@@ -417,10 +426,16 @@ name then you need to specify that as follows:
417
426
 
418
427
  SinatraMore::WardenPlugin::PasswordStrategy.user_class = CustomUser
419
428
 
420
- Similarly, the strategy used expects that you have an <tt>authenticate</tt> method on your user class as follows:
429
+ In addition, the strategy used expects that you have an <tt>authenticate</tt> method with the specific signature below:
421
430
 
422
- def authenticate(username, password)
431
+ class CustomUser
432
+ # ...
423
433
  # Returns user record if user and password match; otherwise return false
434
+ def authenticate(username, password)
435
+ user = User.find(username)
436
+ user.has_password?(password) ? user : false
437
+ end
438
+ # ...
424
439
  end
425
440
 
426
441
  Using this plugin you also do need to define your own routes for managing warden sessions. An example is below:
@@ -445,12 +460,12 @@ Using this plugin you also do need to define your own routes for managing warden
445
460
  redirect '/session/login'
446
461
  end
447
462
 
448
- I was made aware of other sinatra/warden extensions which work very similarly to the system I outline for this plugin.
463
+ I was made aware of other sinatra/warden plugins which work very similarly to the system I outline for this plugin.
449
464
  Most notably is the sinatra_warden plugin by Justin Smestad (http://github.com/jsmestad/sinatra_warden)
450
465
  Eventually I plan to vendor that gem or just remove support for this piece of my plugin completely.
451
466
 
452
- If anybody has any thoughts on this, please let me know. There is something convenient to me about having
453
- access to a plug-and-play warden solution directly from this gem.
467
+ If anybody has any thoughts on this or the warden integration in general, please let me know.
468
+ Nonetheless, there is a certain convenience for me having access to a plug-and-play warden solution directly from this gem.
454
469
 
455
470
  == Acknowledgements
456
471
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.2.7
@@ -2,10 +2,11 @@ module SinatraMore
2
2
  module FormatHelpers
3
3
 
4
4
  # Returns escaped text to protect against malicious content
5
- def h(text)
5
+ def escape_html(text)
6
6
  Rack::Utils.escape_html(text)
7
7
  end
8
- alias escape_html h
8
+ alias h escape_html
9
+ alias sanitize_html escape_html
9
10
 
10
11
  # Returns escaped text to protect against malicious content
11
12
  # Returns blank if the text is empty
@@ -14,9 +15,11 @@ module SinatraMore
14
15
  h text
15
16
  end
16
17
 
17
- # Returns relative time in words referencing the given date
18
- # relative_time_ago(Time.now)
19
- def relative_time_ago(date)
18
+
19
+ # Smart time helper which returns relative text representing times for recent dates
20
+ # and absolutes for dates that are far removed from the current date
21
+ # time_in_words(10.days.ago) => '10 days ago'
22
+ def time_in_words(date)
20
23
  date = date.to_date
21
24
  date = Date.parse(date, true) unless /Date.*/ =~ date.class.to_s
22
25
  days = (date - Date.today).to_i
@@ -31,6 +34,25 @@ module SinatraMore
31
34
  return date.strftime('%A, %B %e') if days.abs < 182
32
35
  return date.strftime('%A, %B %e, %Y')
33
36
  end
37
+ alias time_ago time_in_words
38
+
39
+ # Returns relative time in words referencing the given date
40
+ # relative_time_ago(Time.now) => 'about a minute ago'
41
+ def relative_time_ago(from_time)
42
+ distance_in_minutes = (((Time.now - from_time.to_time).abs)/60).round
43
+ case distance_in_minutes
44
+ when 0..1 then 'about a minute'
45
+ when 2..44 then "#{distance_in_minutes} minutes"
46
+ when 45..89 then 'about 1 hour'
47
+ when 90..1439 then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
48
+ when 1440..2879 then '1 day'
49
+ when 2880..43199 then "#{(distance_in_minutes / 1440).round} days"
50
+ when 43200..86399 then 'about 1 month'
51
+ when 86400..525599 then "#{(distance_in_minutes / 43200).round} months"
52
+ when 525600..1051199 then 'about 1 year'
53
+ else "over #{(distance_in_minutes / 525600).round} years"
54
+ end
55
+ end
34
56
 
35
57
  # Used in xxxx.js.erb files to escape html so that it can be passed to javascript from sinatra
36
58
  # escape_javascript("<h1>Hey</h1>")
@@ -43,6 +65,7 @@ module SinatraMore
43
65
  end
44
66
 
45
67
  alias js_escape escape_javascript
68
+ alias js_escape_html escape_javascript
46
69
  alias escape_for_javascript escape_javascript
47
70
 
48
71
  end
data/sinatra_more.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra_more}
8
- s.version = "0.2.5"
8
+ s.version = "0.2.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nathan Esquenazi"]
@@ -25,27 +25,60 @@ class TestFormatHelpers < Test::Unit::TestCase
25
25
  end
26
26
  end
27
27
 
28
- context 'for #relative_time_ago method' do
28
+ context 'for #time_in_words method' do
29
29
  should "display today" do
30
- assert_equal 'today', relative_time_ago(Time.now)
30
+ assert_equal 'today', time_in_words(Time.now)
31
31
  end
32
32
  should "display yesterday" do
33
- assert_equal 'yesterday', relative_time_ago(1.day.ago)
33
+ assert_equal 'yesterday', time_in_words(1.day.ago)
34
34
  end
35
35
  should "display tomorrow" do
36
- assert_equal 'tomorrow', relative_time_ago(1.day.from_now)
36
+ assert_equal 'tomorrow', time_in_words(1.day.from_now)
37
37
  end
38
38
  should "return future number of days" do
39
- assert_equal 'in 4 days', relative_time_ago(4.days.from_now)
39
+ assert_equal 'in 4 days', time_in_words(4.days.from_now)
40
40
  end
41
41
  should "return past days ago" do
42
- assert_equal '4 days ago', relative_time_ago(4.days.ago)
42
+ assert_equal '4 days ago', time_in_words(4.days.ago)
43
43
  end
44
44
  should "return formatted archived date" do
45
- assert_equal 100.days.ago.strftime('%A, %B %e'), relative_time_ago(100.days.ago)
45
+ assert_equal 100.days.ago.strftime('%A, %B %e'), time_in_words(100.days.ago)
46
46
  end
47
47
  should "return formatted archived year date" do
48
- assert_equal 500.days.ago.strftime('%A, %B %e, %Y'), relative_time_ago(500.days.ago)
48
+ assert_equal 500.days.ago.strftime('%A, %B %e, %Y'), time_in_words(500.days.ago)
49
+ end
50
+ end
51
+
52
+ context 'for #relative_time_ago method' do
53
+ should 'display now as a minute ago' do
54
+ assert_equal 'about a minute', relative_time_ago(1.minute.ago)
55
+ end
56
+ should "display a few minutes ago" do
57
+ assert_equal '4 minutes', relative_time_ago(4.minute.ago)
58
+ end
59
+ should "display an hour ago" do
60
+ assert_equal 'about 1 hour', relative_time_ago(1.hour.ago + 5.minutes.ago.sec)
61
+ end
62
+ should "display a few hours ago" do
63
+ assert_equal 'about 3 hours', relative_time_ago(3.hour.ago + 5.minutes.ago.sec)
64
+ end
65
+ should "display a day ago" do
66
+ assert_equal '1 day', relative_time_ago(1.day.ago)
67
+ end
68
+ should "display a few days ago" do
69
+ assert_equal '5 days', relative_time_ago(5.days.ago - 5.minutes.ago.sec)
70
+ end
71
+ should "display a month ago" do
72
+ assert_equal 'about 1 month', relative_time_ago(32.days.ago + 5.minutes.ago.sec)
73
+ end
74
+ should "display a few months ago" do
75
+ assert_equal '6 months', relative_time_ago(180.days.ago - 5.minutes.ago.sec)
76
+ end
77
+ should "display a year ago" do
78
+ assert_equal 'about 1 year', relative_time_ago(365.days.ago - 5.minutes.ago.sec)
79
+ end
80
+ should "display a few years ago" do
81
+ assert_equal 'over 7 years', relative_time_ago(2800.days.ago - 5.minutes.ago.sec)
49
82
  end
50
83
  end
51
84
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra_more
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Esquenazi