bluebird 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +9 -0
- data/README.md +2 -2
- data/lib/bluebird.rb +1 -0
- data/lib/bluebird/partial.rb +1 -0
- data/lib/bluebird/strategies/via.rb +4 -0
- data/lib/bluebird/strategies/via/config.rb +15 -0
- data/lib/bluebird/strategies/via/strategy.rb +62 -0
- data/lib/bluebird/tweet.rb +18 -20
- data/lib/bluebird/version.rb +1 -1
- data/spec/strategies/via/strategy_spec.rb +85 -0
- data/spec/tweet_spec.rb +53 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWQ5YzRmNjg2NjhlNDRlZDk2NjZhNWM1MmMyOGUwZmRjZWI3NmUzMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjUxZjAwMDM0MjljNjE2NzQ2MTc1ZmNhYWMxYmZkM2QxZTQ3ZTVkYw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YThhNjgwNmYwZWJhMWYwZmRlMDNjY2JkN2I1ZmY2NDc4MjhhNTY4YWY0OTNk
|
10
|
+
NTcwOGVmNjRlM2I3MDNmNDE5ZDE2YWQ2OTBkOTc4ZTM0NTMxZjBlNjM0MzEz
|
11
|
+
ZDE4NjYyOGRlZDRmOTk3YWU3MTUyZTc1NTkwZDU0ZWRkYzg2ZjM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWFlZGQ5MDdkMWY5MmFlNTg3OThkMWE5MzM2YTZhYWJlZmQ4MWQ0N2M0ZDBj
|
14
|
+
ZjE4YmMwOTZmYjgwMzE5MjMwYTY5M2VjYjU5OTI5ZThhYmI0MmYyN2ExN2Mz
|
15
|
+
OTgzNzUyYzlhODIwMWIwYjIwNDAwNDYwYmRhNDIwZGM3OGZiMGY=
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Bluebird
|
1
|
+
# Bluebird [![Gem Version](https://emrekutlu-test-1.appspot.com/gems/bluebird/version.png?right_bg=4183c4)](https://rubygems.org/gems/bluebird)
|
2
2
|
|
3
3
|
Bluebird modifies your tweets, mostly to fit 140 characters.
|
4
4
|
It uses "strategies". Every strategy makes its own modifications to the tweets.
|
@@ -41,7 +41,7 @@ end
|
|
41
41
|
|
42
42
|
If you want to change defaults for Rails, create a file in <code>initializers</code> folder and copy the code above.
|
43
43
|
|
44
|
-
By default bluebird runs three strategies in these order; <code>strip</code>, <code>squeeze</code> and <code>
|
44
|
+
By default bluebird runs three strategies in these order; <code>strip</code>, <code>squeeze</code> and <code>truncate_text</code>. For detailed information about each strategy, visit [Strategies](https://github.com/emrekutlu/bluebird/wiki/Strategies).
|
45
45
|
|
46
46
|
## Usage
|
47
47
|
|
data/lib/bluebird.rb
CHANGED
data/lib/bluebird/partial.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
module Bluebird
|
2
|
+
module Strategies
|
3
|
+
module Via
|
4
|
+
class Strategy < Bluebird::Strategies::Base
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def run(tweet, config)
|
8
|
+
if run?(config.via.username)
|
9
|
+
add_separator(tweet)
|
10
|
+
tweet.add_partial(text(config.via), :via)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def run?(username)
|
17
|
+
username_exists?(username) ? true : raise('Bluebird: config.via.username is missing.')
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_separator(tweet)
|
21
|
+
if add_separator?(tweet)
|
22
|
+
add_separator_partial?(tweet) ? add_separator_partial(tweet) : add_space_to_last_partial(tweet)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def text(via_config)
|
27
|
+
"#{via_config.prefix} @#{via_config.username}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def username_exists?(username)
|
31
|
+
if username
|
32
|
+
username.strip!
|
33
|
+
!username.eql?('')
|
34
|
+
else
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_separator_partial?(tweet)
|
40
|
+
!tweet.partials.last.text?
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_separator?(tweet)
|
44
|
+
tweet.partials.length > 0
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_separator_partial(tweet)
|
48
|
+
tweet.add_partial(' ', :text)
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_space_to_last_partial(tweet)
|
52
|
+
last = tweet.partials.last
|
53
|
+
unless last.content.end_with?(' ')
|
54
|
+
last.content += ' '
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/bluebird/tweet.rb
CHANGED
@@ -7,7 +7,8 @@ module Bluebird
|
|
7
7
|
|
8
8
|
def initialize(status, opts = {})
|
9
9
|
@original_status = status
|
10
|
-
@partials =
|
10
|
+
@partials = []
|
11
|
+
extract_partials(status)
|
11
12
|
@media = opts[:media] if opts.has_key?(:media)
|
12
13
|
end
|
13
14
|
|
@@ -39,6 +40,19 @@ module Bluebird
|
|
39
40
|
partials.select { |partial| partial.cashtag? }
|
40
41
|
end
|
41
42
|
|
43
|
+
def add_partial(content, partial_type)
|
44
|
+
if eligible_content?(content)
|
45
|
+
partial = Partial.new(content, partial_type)
|
46
|
+
|
47
|
+
if (last = partials.last)
|
48
|
+
last.next_partial = partial
|
49
|
+
partial.prev_partial = last
|
50
|
+
end
|
51
|
+
|
52
|
+
partials << partial
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
42
56
|
private
|
43
57
|
|
44
58
|
def total_partial_length
|
@@ -59,35 +73,19 @@ module Bluebird
|
|
59
73
|
entities = extract_entities_with_indices(status, extract_url_without_protocol: true)
|
60
74
|
length = status.char_length
|
61
75
|
index = 0
|
62
|
-
partials = []
|
63
76
|
|
64
77
|
entities.each do |entity|
|
65
78
|
first = entity[:indices].first
|
66
79
|
last = entity[:indices].last
|
67
80
|
|
68
|
-
add_partial(
|
69
|
-
add_partial(
|
81
|
+
add_partial(status[index, first - index], :text)
|
82
|
+
add_partial(status[first, last - first], entity_type(entity))
|
70
83
|
|
71
84
|
index = last
|
72
85
|
end
|
73
86
|
|
74
87
|
if ending_partial?(index, length)
|
75
|
-
add_partial(
|
76
|
-
end
|
77
|
-
|
78
|
-
partials
|
79
|
-
end
|
80
|
-
|
81
|
-
def add_partial(partials, content, partial_type)
|
82
|
-
if eligible_content?(content)
|
83
|
-
partial = Partial.new(content, partial_type)
|
84
|
-
|
85
|
-
if (last = partials.last)
|
86
|
-
last.next_partial = partial
|
87
|
-
partial.prev_partial = last
|
88
|
-
end
|
89
|
-
|
90
|
-
partials << partial
|
88
|
+
add_partial(status[index, length - index], :text)
|
91
89
|
end
|
92
90
|
end
|
93
91
|
|
data/lib/bluebird/version.rb
CHANGED
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bluebird::Strategies::Via::Strategy do
|
4
|
+
|
5
|
+
let!(:strategy) { Bluebird::Strategies::Via::Strategy }
|
6
|
+
|
7
|
+
describe '#username_exists?' do
|
8
|
+
context 'When username is nil' do
|
9
|
+
it 'returns false' do
|
10
|
+
expect(strategy.send(:username_exists?, nil)).to be_false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
context "When username is ''" do
|
14
|
+
it 'returns false' do
|
15
|
+
expect(strategy.send(:username_exists?, '')).to be_false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
context "When username is ' '" do
|
19
|
+
it 'returns false' do
|
20
|
+
expect(strategy.send(:username_exists?, ' ')).to be_false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
context 'When username is iekutlu' do
|
24
|
+
it 'returns false' do
|
25
|
+
expect(strategy.send(:username_exists?, 'iekutlu')).to be_true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#text' do
|
31
|
+
it "adds 'prefix' to the begining" do
|
32
|
+
config = Bluebird::Strategies::Via::Config
|
33
|
+
config.username = 'iekutlu'
|
34
|
+
config.prefix = 'via'
|
35
|
+
expect(strategy.send(:text, config).start_with?('via')).to be_true
|
36
|
+
end
|
37
|
+
it 'adds username to the end' do
|
38
|
+
config = Bluebird::Strategies::Via::Config
|
39
|
+
config.username = 'iekutlu'
|
40
|
+
expect(strategy.send(:text, config).end_with?('@iekutlu')).to be_true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#add_separator?' do
|
45
|
+
context 'When tweet is not empty' do
|
46
|
+
it 'returns true' do
|
47
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum')
|
48
|
+
expect(strategy.send(:add_separator?, tweet)).to be_true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
context 'When tweet is empty' do
|
52
|
+
it 'returns false' do
|
53
|
+
tweet = Bluebird::Tweet.new('')
|
54
|
+
expect(strategy.send(:add_separator?, tweet)).to be_false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#add_separator_partial' do
|
60
|
+
it "adds a new text partial whose content is ' '" do
|
61
|
+
tweet = Bluebird::Tweet.new('Lorem #ipsum')
|
62
|
+
strategy.send(:add_separator_partial, tweet)
|
63
|
+
last = tweet.partials.last
|
64
|
+
expect(last.text?).to be_true
|
65
|
+
expect(last.content).to eq ' '
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#add_space_to_last_partial' do
|
70
|
+
context 'When text partial has trailing space' do
|
71
|
+
it 'does not add trailing space' do
|
72
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum ')
|
73
|
+
strategy.send(:add_space_to_last_partial, tweet)
|
74
|
+
expect(tweet.status).to eq 'Lorem ipsum '
|
75
|
+
end
|
76
|
+
end
|
77
|
+
context 'When text partial does not have trailing space' do
|
78
|
+
it 'adds trailing space' do
|
79
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum')
|
80
|
+
strategy.send(:add_space_to_last_partial, tweet)
|
81
|
+
expect(tweet.status).to eq 'Lorem ipsum '
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/spec/tweet_spec.rb
CHANGED
@@ -60,6 +60,13 @@ describe Bluebird::Tweet do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
describe '#extract_partials' do
|
63
|
+
|
64
|
+
context 'When status is empty' do
|
65
|
+
it 'does not add any partial' do
|
66
|
+
tweet = Bluebird::Tweet.new('')
|
67
|
+
expect(tweet.partials.length).to eq 0
|
68
|
+
end
|
69
|
+
end
|
63
70
|
it 'breaks tweet into partials' do
|
64
71
|
tweet = Bluebird::Tweet.new('Lorem ipsum')
|
65
72
|
expect(tweet.partials.length).to eq 1
|
@@ -206,4 +213,50 @@ describe Bluebird::Tweet do
|
|
206
213
|
expect(partial.mention?).to be_true
|
207
214
|
end
|
208
215
|
end
|
216
|
+
|
217
|
+
describe '#add_partial' do
|
218
|
+
|
219
|
+
it 'sets the partial type' do
|
220
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum dolor')
|
221
|
+
tweet.add_partial(' sit amet', :sit_amet)
|
222
|
+
expect(tweet.partials.last.partial_type).to be :sit_amet
|
223
|
+
end
|
224
|
+
|
225
|
+
context 'When there is no partials' do
|
226
|
+
it 'adds a new partial to the end of the tweet' do
|
227
|
+
tweet = Bluebird::Tweet.new('')
|
228
|
+
tweet.add_partial('Lorem ipsum', :text)
|
229
|
+
expect(tweet.partials.length).to be 1
|
230
|
+
partial = tweet.partials.first
|
231
|
+
expect(partial.prev_partial).to be nil
|
232
|
+
expect(partial.next_partial).to be nil
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
context 'When there is already one partial' do
|
237
|
+
it 'adds a new partial to the end of the tweet' do
|
238
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum dolor')
|
239
|
+
expect(tweet.partials.length).to eq 1
|
240
|
+
tweet.add_partial(' sit amet', :text)
|
241
|
+
expect(tweet.partials.length).to eq 2
|
242
|
+
expect(tweet.partials.last.content).to eq ' sit amet'
|
243
|
+
end
|
244
|
+
it 'sets the next_partial of the first partial' do
|
245
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum dolor')
|
246
|
+
first_partial = tweet.partials.first
|
247
|
+
tweet.add_partial(' sit amet', :sit_amet)
|
248
|
+
last_partial = tweet.partials.last
|
249
|
+
expect(first_partial.prev_partial).to be nil
|
250
|
+
expect(first_partial.next_partial).to be last_partial
|
251
|
+
end
|
252
|
+
it 'sets the prev_partial of the new partial' do
|
253
|
+
tweet = Bluebird::Tweet.new('Lorem ipsum dolor')
|
254
|
+
first_partial = tweet.partials.first
|
255
|
+
tweet.add_partial(' sit amet', :sit_amet)
|
256
|
+
last_partial = tweet.partials.last
|
257
|
+
expect(last_partial.prev_partial).to be first_partial
|
258
|
+
expect(last_partial.next_partial).to be nil
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
209
262
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bluebird
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- İ. Emre Kutlu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twitter-text
|
@@ -74,6 +74,7 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- .gitignore
|
77
|
+
- CHANGELOG.md
|
77
78
|
- Gemfile
|
78
79
|
- LICENSE.txt
|
79
80
|
- README.md
|
@@ -90,12 +91,16 @@ files:
|
|
90
91
|
- lib/bluebird/strategies/truncate_text.rb
|
91
92
|
- lib/bluebird/strategies/truncate_text/config.rb
|
92
93
|
- lib/bluebird/strategies/truncate_text/strategy.rb
|
94
|
+
- lib/bluebird/strategies/via.rb
|
95
|
+
- lib/bluebird/strategies/via/config.rb
|
96
|
+
- lib/bluebird/strategies/via/strategy.rb
|
93
97
|
- lib/bluebird/tweet.rb
|
94
98
|
- lib/bluebird/version.rb
|
95
99
|
- spec/spec_helper.rb
|
96
100
|
- spec/strategies/squeeze/strategy_spec.rb
|
97
101
|
- spec/strategies/strip/strategy_spec.rb
|
98
102
|
- spec/strategies/truncate_text/strategy_spec.rb
|
103
|
+
- spec/strategies/via/strategy_spec.rb
|
99
104
|
- spec/tweet_spec.rb
|
100
105
|
homepage: http://github.com/emrekutlu/bluebird
|
101
106
|
licenses:
|
@@ -126,4 +131,5 @@ test_files:
|
|
126
131
|
- spec/strategies/squeeze/strategy_spec.rb
|
127
132
|
- spec/strategies/strip/strategy_spec.rb
|
128
133
|
- spec/strategies/truncate_text/strategy_spec.rb
|
134
|
+
- spec/strategies/via/strategy_spec.rb
|
129
135
|
- spec/tweet_spec.rb
|