tweetomator 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31e3ee1e6bd6f03201bb4d2a15874d8ff25b593b
4
- data.tar.gz: ace90182fe472f30bbc7d26b46da1d7e0f25d245
3
+ metadata.gz: 6c236c8c5a61cb44e41f72ea90ff1456d9410a12
4
+ data.tar.gz: def353fd186f96425936d53df3a4ad20cbfaf257
5
5
  SHA512:
6
- metadata.gz: 53dcfc56dd8bca5f777e2bea6a4cd0c8664d698022de0690c1d0bd5501e99a9afdd46593dcd07ea6fb61a0c3f3ccab346f94cb6e99275d48949fe7915e778fce
7
- data.tar.gz: 885982c6c364023887db1cec88b2593a4067e1ef1e921ac26a07cda4218026f908fbb885c5630a2fbaf08de90e5d03ba679709649eb247d269e27f53b32e7715
6
+ metadata.gz: b79c91124edaa43786d5ebf22e34b84a533fb254ae4409afa49c96ee7f9286c70abf0cfc4ee6fde7fe7fa7bed66cc7597c95373286d74fe4e09426b0a26e346c
7
+ data.tar.gz: 14d1b4c40016cc50c67f2e5b00ad4a89b9cf3687358eab21131791b57725782385fd6f91ad9948edb9d4b4d1fc5029d18b8ba57a9cbf31bf87c48abed2e73f3f
@@ -3,6 +3,7 @@ class Composer
3
3
  @max_length = config.twitter_config.tweet_max_length
4
4
  @blacklist = config.blacklist
5
5
  @stop_words = config.stop_words
6
+ @default_hashtag = config.default_hashtag
6
7
  @twitter_client = twitter_client
7
8
  @tweet_finder = tweet_finder
8
9
  @emoji_finder = emoji_finder
@@ -56,20 +56,21 @@ class MarkovComposer < Composer
56
56
 
57
57
  def clean_up(text)
58
58
  text = text.strip.capitalize
59
- if text[text.length-1].match('[A-Za-z]') != nil && text.length < @max_length
59
+ if text[text.length - 1].match('[A-Za-z]') != nil && text.length < @max_length
60
60
  text << %w(. ! ? . .).sample
61
61
  end
62
62
  text
63
63
  end
64
64
 
65
65
  def create_tweet(text)
66
- if [1, 2, 3].sample < 3
66
+ hashtags = []
67
+ hashtags << @default_hashtag if @default_hashtag != '' && (text.length + @default_hashtag.length + 2) < @max_length
68
+ tweet = Tweet.new(text, hashtags, @twitter_client)
69
+ if [true, false].sample
67
70
  hashtag = @lines.sample.split.reject { |w| w.strip.nil? || /[^A-Za-z]/.match(w.strip) != nil || @stop_words.include?(w.strip) }.sample
68
- if hashtag != nil && (text.length + hashtag.length + 1) < @max_length
69
- return Tweet.new(text, hashtag.downcase, @twitter_client)
70
- end
71
+ tweet.hashtags << hashtag if hashtag != nil && (tweet.length + hashtag.length + 2) < @max_length
71
72
  end
72
- return Tweet.new(text, '', @twitter_client)
73
+ tweet
73
74
  end
74
75
 
75
76
  def insert_emoji(tweet)
@@ -77,4 +78,8 @@ class MarkovComposer < Composer
77
78
  tweet.append(@emoji_finder.find)
78
79
  end
79
80
  end
81
+
82
+ def hashtag_fits?(tweet, hashtag)
83
+ hashtag != nil && (tweet.length + hashtag.length + 1) < @max_length
84
+ end
80
85
  end
@@ -17,7 +17,7 @@ class RandomComposer < Composer
17
17
  text = trim(text, hashtag.length)
18
18
  text = replace_a_word(text.split.sample, text)
19
19
  text = replace_a_word(emoji, text)
20
- Tweet.new(text.capitalize, hashtag, @twitter_client)
20
+ Tweet.new(text.capitalize, [hashtag], @twitter_client)
21
21
  end
22
22
 
23
23
  def compose_image_query(query)
data/lib/config/config.rb CHANGED
@@ -37,9 +37,9 @@ end
37
37
  class TweetomatorConfig
38
38
  include Validatable
39
39
 
40
- attr_reader :twitter_config, :flickr_config, :topics, :blacklist, :stop_words, :delay_in_seconds, :composer_type, :input_text_file
40
+ attr_reader :twitter_config, :flickr_config, :topics, :blacklist, :stop_words, :delay_in_seconds, :composer_type, :input_text_file, :default_hashtag
41
41
 
42
- def initialize(twitter_config, flickr_config, topics, blacklist, stop_words, delay_in_seconds, composer_type, input_text_file)
42
+ def initialize(twitter_config, flickr_config, topics, blacklist, stop_words, delay_in_seconds, composer_type, input_text_file, default_hashtag='')
43
43
  @twitter_config = twitter_config
44
44
  @flickr_config = flickr_config
45
45
  @topics = topics
@@ -48,5 +48,6 @@ class TweetomatorConfig
48
48
  @delay_in_seconds = delay_in_seconds
49
49
  @composer_type = composer_type
50
50
  @input_text_file = input_text_file
51
+ @default_hashtag = default_hashtag
51
52
  end
52
53
  end
data/lib/tweet.rb CHANGED
@@ -1,27 +1,27 @@
1
1
  class Tweet
2
- attr_reader :hashtag
2
+ attr_accessor :hashtags
3
3
 
4
- def initialize(text, hashtag, twitter_client)
4
+ def initialize(text, hashtags, twitter_client)
5
5
  @text = text
6
- @hashtag = hashtag
6
+ @hashtags = hashtags
7
7
  @twitter_client = twitter_client
8
8
  end
9
9
 
10
10
  def post!(image = '')
11
11
  if image.length > 0 && File.exists?(image)
12
- @twitter_client.update_with_media(self.with_hashtag, File.new(image))
12
+ @twitter_client.update_with_media(self.with_hashtags, File.new(image))
13
13
  File.delete(image)
14
14
  else
15
- @twitter_client.update(self.with_hashtag)
15
+ @twitter_client.update(self.with_hashtags)
16
16
  end
17
17
  end
18
18
 
19
- def with_hashtag
20
- (@hashtag && @hashtag.length > 0) ? "#{@text} ##{@hashtag}" : @text
19
+ def with_hashtags
20
+ (@hashtags && @hashtags.size > 0) ? "#{@text}#{hashtags.reduce('') { |str, h| str << " ##{h}" }}" : @text
21
21
  end
22
22
 
23
23
  def length
24
- with_hashtag.length
24
+ with_hashtags.length
25
25
  end
26
26
 
27
27
  def append(text)
@@ -1,3 +1,3 @@
1
1
  class Tweetomator
2
- VERSION = '1.2.2'
2
+ VERSION = '1.2.4'
3
3
  end
@@ -19,6 +19,7 @@ class TestMarkovComposer < Minitest::Unit::TestCase
19
19
  mock_config = Minitest::Mock.new
20
20
  mock_config.expect :twitter_config, mock_twitter_config
21
21
  mock_config.expect :blacklist, @blacklist
22
+ mock_config.expect :default_hashtag, 'potato'
22
23
  mock_config.expect :stop_words, @stop_words
23
24
  mock_config.expect :input_text_file, 'text.txt'
24
25
  mock_text_reader = MiniTest::Mock.new
@@ -32,7 +33,6 @@ class TestMarkovComposer < Minitest::Unit::TestCase
32
33
 
33
34
  def test_that_tweet_is_short_enough
34
35
  tweet = @markov_composer.compose_tweet
35
- puts tweet.with_hashtag
36
- assert tweet.with_hashtag.length <= @max_length, true
36
+ assert tweet.with_hashtags.length <= @max_length, true
37
37
  end
38
38
  end
@@ -23,22 +23,23 @@ class TestRandomComposer < Minitest::Unit::TestCase
23
23
  mock_config.expect :twitter_config, mock_twitter_config
24
24
  mock_config.expect :max_length, @max_length
25
25
  mock_config.expect :blacklist, @blacklist
26
+ mock_config.expect :default_hashtag, 'potato'
26
27
  mock_config.expect :stop_words, @stop_words
27
28
  @random_composer = RandomComposer.new(mock_config, mock_tweet_client, mock_tweet_finder, mock_emoji_finder)
28
29
  end
29
30
 
30
31
  def test_that_tweet_is_short_enough
31
32
  tweet = @random_composer.compose_tweet
32
- assert tweet.with_hashtag.length <= @max_length, true
33
+ assert tweet.with_hashtags.length <= @max_length, true
33
34
  end
34
35
 
35
36
  def test_that_blacklisted_words_are_removed
36
37
  tweet = @random_composer.compose_tweet
37
- refute tweet.with_hashtag.split.any? { |word| @blacklist.include?(word) }, true
38
+ refute tweet.with_hashtags.split.any? { |word| @blacklist.include?(word) }, true
38
39
  end
39
40
 
40
41
  def test_that_links_are_removed
41
42
  tweet = @random_composer.compose_tweet
42
- refute tweet.with_hashtag.split.any? { |word| %w(kck.st/1pLytCe http://nyan.cat).include?(word) }, true
43
+ refute tweet.with_hashtags.split.any? { |word| %w(kck.st/1pLytCe http://nyan.cat).include?(word) }, true
43
44
  end
44
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweetomator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nat Young
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-05 00:00:00.000000000 Z
11
+ date: 2015-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler