bootstripe 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +2 -0
- data/Rakefile +1 -0
- data/bootstripe.gemspec +24 -0
- data/lib/bootstripe/array_additions.rb +21 -0
- data/lib/bootstripe/date_additions.rb +39 -0
- data/lib/bootstripe/number_additions.rb +46 -0
- data/lib/bootstripe/string_additions.rb +13 -0
- data/lib/bootstripe/version.rb +3 -0
- data/lib/bootstripe/www_middleware.rb +17 -0
- data/lib/bootstripe.rb +10 -0
- data/spec/array_additions_spec.rb +13 -0
- data/spec/number_additions_spec.rb +16 -0
- data/spec/spec_helper.rb +4 -0
- metadata +73 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bootstripe.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "bootstripe/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "bootstripe"
|
7
|
+
s.version = Bootstripe::VERSION
|
8
|
+
s.authors = ["Mike Laurence"]
|
9
|
+
s.email = ["mike@bytebin.com"]
|
10
|
+
s.homepage = "http://bytebin.com"
|
11
|
+
s.summary = %q{A handful of useful additions for Ruby}
|
12
|
+
s.description = %q{A handful of useful additions for Ruby}
|
13
|
+
|
14
|
+
s.rubyforge_project = "bootstripe"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Array
|
2
|
+
def mean
|
3
|
+
sum / size
|
4
|
+
end
|
5
|
+
|
6
|
+
def count(&action)
|
7
|
+
return size unless block_given?
|
8
|
+
self.inject(0){ |memo,item| memo += 1 if action.call(item); memo }
|
9
|
+
end
|
10
|
+
|
11
|
+
def compakt
|
12
|
+
self.reject do |i|
|
13
|
+
(i.respond_to?(:length) && i.length == 0) ||
|
14
|
+
(i.respond_to?(:match) && i.match(/^\s+$/))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def random(num_elements = 1)
|
19
|
+
num_elements == 1 ? self[Kernel.rand(size)] : sort_by{ Kernel.rand }.slice(0...num_elements)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module DateAdditions
|
2
|
+
def future_in_words
|
3
|
+
the_day = self.to_date
|
4
|
+
day_name = the_day.strftime("%A")
|
5
|
+
|
6
|
+
case the_day
|
7
|
+
when Date.current then "Today"
|
8
|
+
when Date.current + 1 then "Tomorrow"
|
9
|
+
|
10
|
+
when the_day <= (Date.current + 6.days).to_date then "this coming #{day_name} the #{the_day.day.ordinalize}"
|
11
|
+
when the_day <= (Date.current + 13.days).to_date then "next #{day_name} the #{the_day.day.ordinalize}"
|
12
|
+
else "#{the_day.strftime('%A %b')} #{the_day.day.ordinalize}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# https://gist.github.com/896635
|
18
|
+
class Time
|
19
|
+
include DateAdditions
|
20
|
+
class << self
|
21
|
+
def next(day, from = nil)
|
22
|
+
day = [:sunday,:monday,:tuesday,:wednesday,:thursday,:friday,:saturday].find_index(day) if day.class == Symbol
|
23
|
+
one_day = 60 * 60 * 24
|
24
|
+
original_date = from || current
|
25
|
+
result = original_date
|
26
|
+
result += one_day until result > original_date && result.wday == day
|
27
|
+
result
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Date
|
33
|
+
include DateAdditions
|
34
|
+
def to_time
|
35
|
+
#Convert a fraction of a day to a number of microseconds
|
36
|
+
usec = (sec_fraction * 60 * 60 * 24 * (10**6)).to_i
|
37
|
+
Time.gm(year, month, day, hour, min, sec, usec)
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class Numeric
|
2
|
+
def to_period(brief = false)
|
3
|
+
total_seconds = self.to_i
|
4
|
+
|
5
|
+
days = total_seconds / 86400
|
6
|
+
hours = (total_seconds / 3600) - (days * 24)
|
7
|
+
minutes = (total_seconds / 60) - (hours * 60) - (days * 1440)
|
8
|
+
seconds = total_seconds % 60
|
9
|
+
|
10
|
+
display = ''
|
11
|
+
display_concat = ''
|
12
|
+
if days > 0
|
13
|
+
display = display + display_concat + "#{days}d"
|
14
|
+
display_concat = ' '
|
15
|
+
end
|
16
|
+
if hours > 0
|
17
|
+
display = display + display_concat + "#{hours}h"
|
18
|
+
display_concat = ' '
|
19
|
+
end
|
20
|
+
if minutes > 0 and (!brief or days == 0)
|
21
|
+
display = display + display_concat + "#{minutes}m"
|
22
|
+
display_concat = ' '
|
23
|
+
end
|
24
|
+
if seconds > 0 and (!brief or days == 0)
|
25
|
+
display = display + display_concat + "#{seconds}s"
|
26
|
+
end
|
27
|
+
display
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_formatted_time
|
31
|
+
return '00:00' if self == 0
|
32
|
+
|
33
|
+
minutes = (self / 60).floor
|
34
|
+
seconds = (self % 60).round
|
35
|
+
minutes = '0' + minutes.to_s if minutes.to_s.length == 1
|
36
|
+
seconds = '0' + seconds.to_s if seconds.to_s.length == 1
|
37
|
+
"#{minutes}:#{seconds}"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
class BigDecimal
|
43
|
+
def as_json(options = {})
|
44
|
+
to_f
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class WwwMiddleware
|
2
|
+
def initialize(app)
|
3
|
+
@app = app
|
4
|
+
end
|
5
|
+
|
6
|
+
def call(env)
|
7
|
+
request = Rack::Request.new(env)
|
8
|
+
if request.host.starts_with?("www.")
|
9
|
+
[301, {"Location" => request.url.sub("//www.", "//")}, self]
|
10
|
+
else
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def each(&block)
|
16
|
+
end
|
17
|
+
end
|
data/lib/bootstripe.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
|
5
|
+
it 'should compact blank objects and leave non-blank objects in place' do
|
6
|
+
[0, 1, 2, 3].compakt.should == [0, 1, 2, 3]
|
7
|
+
[0, '', :symbol].compakt.should == [0, :symbol]
|
8
|
+
[[], [1, 2]].compakt.should == [[1, 2]]
|
9
|
+
[{ :stuff => :junk }, {}, 'stuff'].compakt.should == [{ :stuff => :junk }, 'stuff']
|
10
|
+
[' ', ' I need trimming! '].compakt.should == [' I need trimming! ']
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Numeric do
|
4
|
+
|
5
|
+
it 'should report 00:00' do
|
6
|
+
0.to_formatted_time.should eq '00:00'
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should report 01:01' do
|
10
|
+
(60.75).to_formatted_time.should eq '01:01'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should report 11:13' do
|
14
|
+
(673.2).to_formatted_time.should eq '11:13'
|
15
|
+
end
|
16
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bootstripe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mike Laurence
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-10 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70273530058540 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70273530058540
|
25
|
+
description: A handful of useful additions for Ruby
|
26
|
+
email:
|
27
|
+
- mike@bytebin.com
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- Rakefile
|
35
|
+
- bootstripe.gemspec
|
36
|
+
- lib/bootstripe.rb
|
37
|
+
- lib/bootstripe/array_additions.rb
|
38
|
+
- lib/bootstripe/date_additions.rb
|
39
|
+
- lib/bootstripe/number_additions.rb
|
40
|
+
- lib/bootstripe/string_additions.rb
|
41
|
+
- lib/bootstripe/version.rb
|
42
|
+
- lib/bootstripe/www_middleware.rb
|
43
|
+
- spec/array_additions_spec.rb
|
44
|
+
- spec/number_additions_spec.rb
|
45
|
+
- spec/spec_helper.rb
|
46
|
+
homepage: http://bytebin.com
|
47
|
+
licenses: []
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options: []
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
requirements: []
|
65
|
+
rubyforge_project: bootstripe
|
66
|
+
rubygems_version: 1.8.11
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: A handful of useful additions for Ruby
|
70
|
+
test_files:
|
71
|
+
- spec/array_additions_spec.rb
|
72
|
+
- spec/number_additions_spec.rb
|
73
|
+
- spec/spec_helper.rb
|