readingtime 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +6 -0
- data/README.md +31 -24
- data/lib/readingtime.rb +20 -2
- data/lib/readingtime/core_ext.rb +8 -3
- data/lib/readingtime/version.rb +1 -1
- data/spec/readingtime_spec.rb +18 -0
- metadata +23 -18
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 01c44cb3bfde84a62cb226ff37d727a9842cc28f
|
4
|
+
data.tar.gz: ed919fb05b30d745a486d0f7a685248b038c1a2f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1a77483f0233efda41152c352cb7979399d3c9f97a2c6d7a93dac307e092750dde8055a70a1509eaefc129b2ce2be769edcd3256b8a079fbc7ceb448a8e1cbf1
|
7
|
+
data.tar.gz: 12a9e3694359349b3b7247adff6e3c04605279907973ac3898ee8cff3dc9ebe40e73666be6b78291a4c700000c40a085e346cb1d3d347de2e4cb44f9065694b3
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Estimate Reading Time
|
2
2
|
|
3
|
-
[![Build Status](https://secure.travis-ci.org/garethrees/readingtime.png)](http://travis-ci.org/garethrees/readingtime)
|
4
|
-
|
3
|
+
[![Build Status](https://secure.travis-ci.org/garethrees/readingtime.png)](http://travis-ci.org/garethrees/readingtime) [![Code Climate](https://codeclimate.com/github/garethrees/coderwall_ruby.png)](https://codeclimate.com/github/garethrees/coderwall_ruby)
|
5
4
|
|
6
5
|
I use [iA Writer](http://iawriter.com "iA Writer") and find the *estimated reading time* feature pretty handy. I thought it would be cool to add at the top of my blog articles on the web as [others](http://nicepaul.com "The personal blog of @nicepaul") do.
|
7
6
|
|
@@ -11,29 +10,29 @@ I use [iA Writer](http://iawriter.com "iA Writer") and find the *estimated readi
|
|
11
10
|
|
12
11
|
### Install
|
13
12
|
|
14
|
-
|
13
|
+
gem install readingtime
|
15
14
|
|
16
15
|
### In irb
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
$ irb
|
18
|
+
> require 'readingtime'
|
19
|
+
=> true
|
20
|
+
> @words = "Lorem ipsum dolor sit amet"
|
21
|
+
> @words.reading_time
|
22
|
+
=> "00:01"
|
24
23
|
|
25
24
|
### In Your App
|
26
25
|
|
27
|
-
|
26
|
+
<article>
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
<header>
|
29
|
+
<h1><%= @article.title %></h1>
|
30
|
+
<span class="readingtime">Estimated reading time – <%= @article.body.reading_time %></span>
|
31
|
+
</header>
|
33
32
|
|
34
|
-
|
33
|
+
<%= @article.body %>
|
35
34
|
|
36
|
-
|
35
|
+
</article>
|
37
36
|
|
38
37
|
And voila!
|
39
38
|
|
@@ -43,14 +42,22 @@ And voila!
|
|
43
42
|
|
44
43
|
You can also send in options to modify the formatting.
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
45
|
+
# Default output
|
46
|
+
@article.body.reading_time :format => :basic
|
47
|
+
=> "03:36"
|
48
|
+
|
49
|
+
# Longer text output
|
50
|
+
@article.body.reading_time :format => :long
|
51
|
+
=> "3 minutes and 36 seconds"
|
52
|
+
|
53
|
+
# Full text output
|
54
|
+
@article.body.reading_time :format => :full
|
55
|
+
=> "1 hr 3 mins 36 secs"
|
56
|
+
|
57
|
+
# Raw output [hours, minutes, seconds]
|
58
|
+
@article.body.reading_time :format => :raw
|
59
|
+
=> [1, 12, 23]
|
53
60
|
|
54
61
|
## Thanks
|
55
62
|
|
56
|
-
Credit goes to [Brian Cray](http://briancray.com/2010/04/09/estimated-reading-time-web-design "Brian Cray - Estimated Reading Time in Web Design") for explaining how to do it in PHP.
|
63
|
+
Credit goes to [Brian Cray](http://briancray.com/2010/04/09/estimated-reading-time-web-design "Brian Cray - Estimated Reading Time in Web Design") for explaining how to do it in PHP.
|
data/lib/readingtime.rb
CHANGED
@@ -1,8 +1,18 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
Dir[File.dirname(__FILE__) + '/readingtime/*.rb'].each do |file|
|
2
|
+
require file
|
3
|
+
end
|
3
4
|
|
4
5
|
module Readingtime
|
5
6
|
|
7
|
+
def self.hms(secs)
|
8
|
+
h, m, s = 0, 0, 0
|
9
|
+
h = secs / 3600
|
10
|
+
secs -= h * 3600
|
11
|
+
m = secs / 60
|
12
|
+
secs -= m * 60
|
13
|
+
[h, m, secs]
|
14
|
+
end
|
15
|
+
|
6
16
|
def self.minutes_in_seconds(words)
|
7
17
|
(words / 200).floor * 60
|
8
18
|
end
|
@@ -28,4 +38,12 @@ module Readingtime
|
|
28
38
|
end
|
29
39
|
end
|
30
40
|
|
41
|
+
def self.format_full(hms)
|
42
|
+
r, h, m, s = [], hms[0], hms[1], hms[2]
|
43
|
+
r << "#{h} #{h == 1 ? 'hr' : 'hrs'}" if h > 0
|
44
|
+
r << "#{m} #{m == 1 ? 'min' : 'mins'}" if m > 0
|
45
|
+
r << "#{s} #{s == 1 ? 'sec' : 'secs'}" if s > 0
|
46
|
+
r.join(" ")
|
47
|
+
end
|
48
|
+
|
31
49
|
end
|
data/lib/readingtime/core_ext.rb
CHANGED
@@ -5,7 +5,7 @@ String.class_eval do
|
|
5
5
|
word_size = self.calculate_size
|
6
6
|
minutes = Readingtime.minutes_in_seconds(word_size)
|
7
7
|
seconds = Readingtime.seconds(word_size)
|
8
|
-
|
8
|
+
|
9
9
|
case format_options
|
10
10
|
when :basic
|
11
11
|
Readingtime.format_seconds((minutes + seconds))
|
@@ -13,12 +13,17 @@ String.class_eval do
|
|
13
13
|
Readingtime.format_words((minutes + seconds))
|
14
14
|
when :approx
|
15
15
|
Readingtime.format_approx((minutes + seconds))
|
16
|
+
when :full
|
17
|
+
hms = Readingtime.hms(minutes + seconds)
|
18
|
+
Readingtime.format_full(hms)
|
19
|
+
when :raw
|
20
|
+
Readingtime.hms(minutes + seconds)
|
16
21
|
end
|
17
|
-
|
22
|
+
|
18
23
|
end
|
19
24
|
|
20
25
|
def calculate_size
|
21
26
|
self.scan(/(\w|-)+/).size
|
22
27
|
end
|
23
28
|
|
24
|
-
end
|
29
|
+
end
|
data/lib/readingtime/version.rb
CHANGED
data/spec/readingtime_spec.rb
CHANGED
@@ -35,6 +35,22 @@ describe Readingtime do
|
|
35
35
|
Readingtime.format_seconds(1).should == "00:01"
|
36
36
|
end
|
37
37
|
|
38
|
+
it "should format the reading time in words" do
|
39
|
+
Readingtime.format_full([1, 0, 0]).should == "1 hr"
|
40
|
+
Readingtime.format_full([2, 0, 0]).should == "2 hrs"
|
41
|
+
Readingtime.format_full([1, 1, 0]).should == "1 hr 1 min"
|
42
|
+
Readingtime.format_full([2, 2, 0]).should == "2 hrs 2 mins"
|
43
|
+
Readingtime.format_full([1, 1, 1]).should == "1 hr 1 min 1 sec"
|
44
|
+
Readingtime.format_full([2, 2, 2]).should == "2 hrs 2 mins 2 secs"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should format the reading time in an array of hours, minutes, seconds" do
|
48
|
+
Readingtime.hms(3600).should == [1, 0, 0]
|
49
|
+
Readingtime.hms(60).should == [0, 1, 0]
|
50
|
+
Readingtime.hms(10).should == [0, 0, 10]
|
51
|
+
Readingtime.hms(1).should == [0, 0, 1]
|
52
|
+
end
|
53
|
+
|
38
54
|
it "should accept an options hash to format the output" do
|
39
55
|
two_hundred_words.reading_time(:format => :basic).should == "01:00"
|
40
56
|
two_hundred_words.reading_time(:format => :long).should == "1 minutes and 0 seconds"
|
@@ -45,6 +61,8 @@ describe Readingtime do
|
|
45
61
|
|
46
62
|
it "should return a time in seconds when using approx with time less than 1 minute" do
|
47
63
|
ten_words.reading_time(:format => :approx).should == "3 seconds"
|
64
|
+
three_hundred_words.reading_time(:format => :full).should == '1 min 33 secs'
|
65
|
+
two_hundred_words.reading_time(:format => :raw).should == [0, 1, 0]
|
48
66
|
end
|
49
67
|
|
50
68
|
end
|
metadata
CHANGED
@@ -1,38 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: readingtime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Gareth Rees
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: rspec
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- - ~>
|
31
|
+
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '2.6'
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.6'
|
36
41
|
description: Estimates reading time of a Ruby String object
|
37
42
|
email:
|
38
43
|
- gareth@garethrees.co.uk
|
@@ -40,7 +45,8 @@ executables: []
|
|
40
45
|
extensions: []
|
41
46
|
extra_rdoc_files: []
|
42
47
|
files:
|
43
|
-
- .gitignore
|
48
|
+
- ".gitignore"
|
49
|
+
- ".travis.yml"
|
44
50
|
- Gemfile
|
45
51
|
- README.md
|
46
52
|
- Rakefile
|
@@ -51,27 +57,26 @@ files:
|
|
51
57
|
- spec/readingtime_spec.rb
|
52
58
|
homepage: http://github.com/garethrees/readingtime
|
53
59
|
licenses: []
|
60
|
+
metadata: {}
|
54
61
|
post_install_message:
|
55
62
|
rdoc_options: []
|
56
63
|
require_paths:
|
57
64
|
- lib
|
58
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
66
|
requirements:
|
61
|
-
- -
|
67
|
+
- - ">="
|
62
68
|
- !ruby/object:Gem::Version
|
63
69
|
version: '0'
|
64
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
71
|
requirements:
|
67
|
-
- -
|
72
|
+
- - ">="
|
68
73
|
- !ruby/object:Gem::Version
|
69
74
|
version: '0'
|
70
75
|
requirements: []
|
71
76
|
rubyforge_project: readingtime
|
72
|
-
rubygems_version:
|
77
|
+
rubygems_version: 2.2.0
|
73
78
|
signing_key:
|
74
|
-
specification_version:
|
79
|
+
specification_version: 4
|
75
80
|
summary: Estimates reading time
|
76
81
|
test_files:
|
77
82
|
- spec/readingtime_spec.rb
|