twitter_bot_generator 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/README.md +86 -29
  4. data/bin/twitter_bot_generator +16 -3
  5. data/lib/twitter_bot_generator/templates/.gitignore.erb +1 -1
  6. data/lib/twitter_bot_generator/templates/Gemfile.erb +1 -0
  7. data/lib/twitter_bot_generator/templates/README.md.erb +39 -0
  8. data/lib/twitter_bot_generator/templates/src/streaming-test_bot.rb.erb +11 -0
  9. data/lib/twitter_bot_generator/templates/src/test_bot.rb.erb +3 -1
  10. data/lib/twitter_bot_generator/templates/src/userstream-test_bot.rb.erb +11 -0
  11. data/lib/twitter_bot_generator/templates/streaming-bot.rb.erb +34 -0
  12. data/lib/twitter_bot_generator/templates/streaming-spec.rb.erb +9 -0
  13. data/lib/twitter_bot_generator/templates/test/streaming-test_bot_test.rb.erb +16 -0
  14. data/lib/twitter_bot_generator/templates/test/test_bot_test.rb.erb +4 -0
  15. data/lib/twitter_bot_generator/templates/test/userstream-test_bot_test.rb.erb +12 -0
  16. data/lib/twitter_bot_generator/templates/userstream-bot.rb.erb +28 -0
  17. data/lib/twitter_bot_generator/templates/userstream-spec.rb.erb +9 -0
  18. data/lib/twitter_bot_generator/version.rb +1 -1
  19. data/lib/twitter_bot_generator.rb +49 -14
  20. data/such_test_bot/.gitignore +3 -0
  21. data/such_test_bot/Gemfile +4 -0
  22. data/such_test_bot/Procfile +1 -0
  23. data/such_test_bot/README.md +44 -0
  24. data/such_test_bot/bot.rb +16 -0
  25. data/such_test_bot/lib/greetings.txt +3 -0
  26. data/such_test_bot/spec.rb +3 -0
  27. data/such_test_bot/src/such_test_bot.rb +25 -0
  28. data/such_test_bot/test/such_test_bot_test.rb +22 -0
  29. data/such_test_bot/test.rb +3 -0
  30. data/test/generated_default_bot.rb +9 -0
  31. data/test/generated_streaming_bot.rb +9 -0
  32. data/test/generated_userstream_bot.rb +9 -0
  33. data/test/scaffold_generator_test.rb +6 -1
  34. data/test/test_helper.rb +10 -7
  35. data/twitter_bot_generator.gemspec +17 -1
  36. metadata +42 -5
  37. data/test/generated_bot_test.rb +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b18a537127a7c7ef076d12b91be3d3c76df3389f
4
- data.tar.gz: d4c1f1bf6593a680dfa9a63d15bdbd4bcc85cc9c
3
+ metadata.gz: 9354d645a4a295e9321481d95149c5a5d62653ba
4
+ data.tar.gz: 47d124b7b15a814c7b2f84982ddb190394baaaf3
5
5
  SHA512:
6
- metadata.gz: 7f74ac28c801bfc1f7c57d653a8e5d83afeb1260253ea47e7255798b01571d2abd77d2ba809b21297c94e07f85a7c72938b8c334520416df9bc06ae0962a5d9b
7
- data.tar.gz: c0324015959982b927a493b55c163fe17af1057cbbcf124f00d12061298ad3849f1de666fc5477d7469d2f7ce99a02b78a2ef8395232e0b5e0d7235f82a25791
6
+ metadata.gz: a25ce81c2b3142f8198e335d4a8b841208638c9b1f45cf182caf0b86fe10b74524b11c7410082eb5df75c32ce53f16157b5e847ce3576123c3eca768f6dd2257
7
+ data.tar.gz: b690edbf48ebae94bedf29ad9032b358e3a93d073a02c901eadbe14411ca2e0fba46ec4242b2645254b6586a59c08176d353ed11710df211873224453a8b1a90
data/.travis.yml CHANGED
@@ -4,7 +4,7 @@ cache: bundler
4
4
  rvm:
5
5
  - 2.0.0
6
6
 
7
- script: 'bundle exec rake'
7
+ script: 'bundle exec rake && bundle exec ruby test/generated_default_bot.rb && bundle exec ruby test/generated_streaming_bot.rb && bundle exec ruby test/generated_userstream_bot.rb'
8
8
 
9
9
  notifications:
10
10
  email:
data/README.md CHANGED
@@ -1,45 +1,102 @@
1
1
  # twitter_bot_generator
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/twitter_bot_generator.svg)](http://badge.fury.io/rb/twitter_bot_generator)
4
+
5
+ [![Build Status](https://travis-ci.org/coleww/twitter_bot_generator.svg?branch=master)](https://travis-ci.org/coleww/twitter_bot_generator)
6
+
7
+ [![Coverage Status](https://coveralls.io/repos/coleww/twitter_bot_generator/badge.png?branch=master)](https://coveralls.io/r/coleww/twitter_bot_generator?branch=master)
8
+
3
9
  #### I GENERATE TWITTER BOTS! RUBY IS JOY!
4
10
 
11
+
5
12
  ## Installation
6
13
 
7
14
  $ gem install twitter_bot_generator
8
15
 
9
16
  ## Usage
10
17
 
11
- $ twitter_bot_generator --help
12
- twitter_bot_generator <yr_bots_name_camel_cased>
13
- ## creates a new directory called <yr_bots_name_camel_cased> in the current working directory,
14
- and fills it with a bunch of boilerplate goodness
15
-
16
- $ twitter_bot_generator wat_fun
17
- scaffolding a twitter bot that is named wat_fun!
18
- mkdir wat_fun/
19
- mkdir wat_fun/lib
20
- mkdir wat_fun/src
21
- mkdir wat_fun/test
22
- touch wat_fun/bot.rb
23
- touch wat_fun/.gitignore
24
- touch wat_fun/Gemfile
25
- touch wat_fun/README.md
26
- touch wat_fun/Procfile
27
- touch wat_fun/spec.rb
28
- touch wat_fun/test.rb
29
- touch wat_fun/test/wat_fun_test.rb
30
- touch wat_fun/src/wat_fun.rb
31
- touch wat_fun/lib/greetings.txt
32
- done generating! your turn now!
33
- $ cd wat_fun
34
- $ bundle install
35
- $ ./test.rb
36
- $ ./spec.rb
37
- HAVE FUN BE SAFE PLAY NICE
38
-
39
- This will create a skeleton class named YrBotNameSnakeCaseStyleYes, some smokescreen minitest::unit tests, and a variety of other "ruby app on free heroku instance" boiler plate. You will need to manually set the config variables with yr twitter api keys on heroku for deployment or add figaro or some such... documentation/scripts forthcoming
18
+ ```
19
+ $ twitter_bot_generator --help
20
+ twitter_bot_generator <yr_bots_name_camel_cased>
21
+ ## creates a new directory called <yr_bots_name_camel_cased> in the current working directory,
22
+ and fills it with a bunch of boilerplate goodness
23
+
24
+ $ twitter_bot_generator wat_fun
25
+ scaffolding a twitter bot that is named wat_fun!
26
+ mkdir wat_fun/
27
+ mkdir wat_fun/lib
28
+ mkdir wat_fun/src
29
+ mkdir wat_fun/test
30
+ touch wat_fun/bot.rb
31
+ touch wat_fun/.gitignore
32
+ touch wat_fun/Gemfile
33
+ touch wat_fun/README.md
34
+ touch wat_fun/Procfile
35
+ touch wat_fun/spec.rb
36
+ touch wat_fun/test.rb
37
+ touch wat_fun/test/wat_fun_test.rb
38
+ touch wat_fun/src/wat_fun.rb
39
+ touch wat_fun/lib/greetings.txt
40
+ done generating! your turn now!
41
+ $ cd wat_fun
42
+ $ bundle install
43
+ $ ruby test.rb
44
+ $ ruby spec.rb
45
+ HAVE FUN BE SAFE PLAY NICE
46
+ ```
47
+
48
+ This will create a skeleton class named YrBotNameSnakeCaseStyleYes, some smokescreen minitest::unit tests, and a variety of other "ruby app on free heroku instance" boiler plate.
49
+
50
+ ## Deployment (heroku)
51
+
52
+ Once your bot has been well tested on the command line you'll need to get it out into the world!
53
+
54
+ 0. You probably need git and the heroku toolbet installed and also a heroku account.
55
+ 0. Make a twitter account for your bot. Give it a photo and header and some biographical information
56
+ 0. Go into settings > mobile and add a cell phone number that you can send a text from.
57
+ not all carriers will work :(
58
+ without a mobile number, twitter won't let you get the api keys you need to deploy
59
+ if your mobile number is associated with your personal account, temporarily delete it from that account so you can use it for your bot. Twitter doesn't care.
60
+ 0. go to apps.twitter.com and sign in again
61
+ 0. click create a new app
62
+ 0. fill in the details. just put down the github repo link or twitter page for the bot as website/callback url. no one will ever see this except you.
63
+ 0. once your app is created, click "modify app permissions" and set the app to read and write
64
+ 0. wait a lil bit for permissions to change.......
65
+ 0. click 'generate my access token'
66
+ 0. wait a lil bit to get access tokens.....
67
+ 0. SUCCESS! copy the access tokens down to a scratch txt file, but make sure not to commit it to source control/git/etc.! That would be bad because these things are secrets.
68
+ 0. From the command line:
69
+
70
+ ```
71
+ heroku create
72
+ heroku config:set TWITTER_CONSUMER_KEY=INSERT-YR-SECRETS-HERE
73
+ heroku config:set TWITTER_CONSUMER_SECRET=INSERT-YR-SECRETS-HERE
74
+ heroku config:set TWITTER_ACCESS_TOKEN=INSERT-YR-SECRETS-HERE
75
+ heroku config:set TWITTER_ACCESS_SECRET=INSERT-YR-SECRETS-HERE
76
+ ```
77
+
78
+ 0. go back to twitter.com and delete yr mobile phone from the bot account. you may also want to disable email notifications as well.
79
+ 0. THE MAIN EVENT:
80
+
81
+ ```
82
+ git push heroku master
83
+ heroku ps:scale bot=1
84
+ ```
85
+
86
+ 0. go to your bot's page and you should see it's first tweet! Or something?
40
87
 
41
88
  This gem was made for use in the twitter-art-robot-[tutorial](http://github.com/coleww/twitter-art-tutorial) and more details and documentation and such will be there when things happen. :dancers:
42
89
 
90
+ Depends on:
91
+
92
+ https://github.com/sferik/twitter
93
+
94
+ And sometimes:
95
+
96
+ https://github.com/tweetstream/tweetstream
97
+
98
+
99
+
43
100
  ## Contribute
44
101
 
45
102
  all kinds of issues in the thing to the upper right! =>
@@ -3,13 +3,26 @@
3
3
  require 'twitter_bot_generator'
4
4
 
5
5
  begin
6
- if !ARGV[0] || ARGV[0] == '--help'
7
- puts 'twitter_bot_generator <yr_bots_name_camel_cased>'
6
+
7
+ if !ARGV[0] || ARGV.any?{ |a| a == '--help' || a == '-H' }
8
+ puts 'twitter_bot_generator <yr_bots_name_camel_cased> (--<OPTIONAL OPTION>)'
8
9
  puts '## creates a new directory called <yr_bots_name_camel_cased> in the current working directory, '
9
10
  puts 'and fills it with a bunch of boilerplate goodness'
11
+ puts 'for building a bot that says stuff at a semi-random interval'
12
+ puts 'OPTIONAL ALTERNATIVE OPTIONS:'
13
+ puts '--streaming || -S: generates a bot that listens to the "gardenhose"'
14
+ puts '--userstream || -U: generates a bot that listens for tweets @ it'
15
+ puts 'have fun be kind to each other thanks goodbye!'
10
16
  else
11
- TwitterBotGenerator.generate ARGV[0].gsub('-', '_')
17
+
18
+ bot_name = ARGV[0].downcase.gsub(/[^a-z]/, '_')
19
+
20
+ TwitterBotGenerator.generate bot_name, ARGV[1] || ''
21
+
12
22
  end
23
+
13
24
  rescue
25
+
14
26
  puts 'something horrible has happened'
27
+
15
28
  end
@@ -1,3 +1,3 @@
1
1
  .DS_Store
2
2
  */.DS_Store
3
- notes.todo
3
+ *.todo
@@ -1,3 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
  ruby '2.0.0'
3
3
  gem 'twitter'
4
+ gem "tweetstream"
@@ -1,5 +1,44 @@
1
1
  # <%= bot_name %>
2
2
  A Twitter Bot
3
3
 
4
+ ## Development
5
+
4
6
  > bundle install
5
7
  > ruby test.rb
8
+ > ruby spec.rb
9
+
10
+ ## Deployment (heroku)
11
+
12
+ Once your bot has been well tested on the command line you'll need to get it out into the world!
13
+
14
+ 0. You probably need git and the heroku toolbet installed and also a heroku account.
15
+ 0. Make a twitter account for your bot. Give it a photo and header and some biographical information
16
+ 0. Go into settings > mobile and add a cell phone number that you can send a text from.
17
+ not all carriers will work :(
18
+ without a mobile number, twitter won't let you get the api keys you need to deploy
19
+ if your mobile number is associated with your personal account, temporarily delete it from that account so you can use it for your bot. Twitter doesn't care.
20
+ 0. go to apps.twitter.com and sign in again
21
+ 0. click create a new app
22
+ 0. fill in the details. just put down the github repo link or twitter page for the bot as website/callback url. no one will ever see this except you.
23
+ 0. once your app is created, click "modify app permissions" and set the app to read and write
24
+ 0. wait a lil bit to get access tokens
25
+ 0. SUCCESS! copy the access tokens down to a scratch txt file, but make sure not to commit it to source control/git/etc.! That would be bad because these things are secrets.
26
+ 0. From the command line:
27
+
28
+ ```
29
+ heroku create
30
+ heroku config:set TWITTER_CONSUMER_KEY=INSERT-YR-SECRETS-HERE
31
+ heroku config:set TWITTER_CONSUMER_SECRET=INSERT-YR-SECRETS-HERE
32
+ heroku config:set TWITTER_ACCESS_TOKEN=INSERT-YR-SECRETS-HERE
33
+ heroku config:set TWITTER_ACCESS_SECRET=INSERT-YR-SECRETS-HERE
34
+ ```
35
+
36
+ 0. go back to twitter.com and delete yr mobile phone from the bot account. you may also want to disable email notifications as well.
37
+ 0. THE MAIN EVENT:
38
+
39
+ ```
40
+ git push heroku master
41
+ heroku ps:scale bot=1
42
+ ```
43
+
44
+ 0. go to your bot's page and you should see it's first tweet! Or something?
@@ -0,0 +1,11 @@
1
+ class <%= class_name %>
2
+
3
+ class << self
4
+
5
+ def matches? text
6
+ !!(text =~ /hello world/)
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -15,7 +15,9 @@ class <%= class_name %>
15
15
  private
16
16
 
17
17
  def load_txt_file file_name
18
- (File.readlines (File.join 'lib', file_name)).map &:strip
18
+ home_sweet_home = File.expand_path File.dirname __FILE__
19
+ ultimate_pathway = File.join home_sweet_home, '..', 'lib', file_name
20
+ (File.readlines ultimate_pathway).map &:strip
19
21
  end
20
22
 
21
23
  end
@@ -0,0 +1,11 @@
1
+ class <%= class_name %>
2
+
3
+ class << self
4
+
5
+ def respond_to text
6
+ text.reverse
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'src/<%= bot_name %>.rb'
2
+ require "twitter"
3
+ require "tweetstream"
4
+
5
+ Twitter.configure do |config|
6
+ config.consumer_key = ENV['TWITTER_CONSUMER_KEY']
7
+ config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
8
+ config.oauth_token = ENV['TWITTER_OAUTH_TOKEN']
9
+ config.oauth_token_secret = ENV['TWITTER_OAUTH_SECRET']
10
+ end
11
+
12
+ TweetStream.configure do |config|
13
+ config.consumer_key = ENV['TWITTER_CONSUMER_KEY']
14
+ config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
15
+ config.oauth_token = ENV['TWITTER_OAUTH_TOKEN']
16
+ config.oauth_token_secret = ENV['TWITTER_OAUTH_SECRET']
17
+ config.auth_method = :oauth
18
+ end
19
+
20
+ loop do
21
+ begin
22
+ puts "starting search"
23
+ TweetStream::Client.new.sample(language: 'en') do |tweet|
24
+ if <%= class_name %>.matches? tweet.text
25
+ puts "got one!"
26
+ Twitter.retweet tweet.id
27
+ end
28
+ end
29
+ rescue
30
+ puts 'FAILURE'
31
+ ensure
32
+ sleep 300
33
+ end
34
+ end
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative 'src/<%= bot_name %>'
3
+
4
+ puts "hello world! ?"
5
+ puts <%= class_name %>.matches? "hello world!"
6
+ puts "hello canada! ?"
7
+ puts <%= class_name %>.matches? "hello canada!"
8
+ puts "replace this with meaningful example strings to test yr app!"
9
+ puts <%= class_name %>.matches? "replace this with meaningful example strings to test yr app!"
@@ -0,0 +1,16 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+
4
+ require_relative '../src/<%= bot_name %>.rb'
5
+
6
+ class Test<%= class_name %> < MiniTest::Test
7
+
8
+ def test_matches_hello_world
9
+ assert_equal true, (<%= class_name %>.matches? 'hello world')
10
+ end
11
+
12
+ def test_doesnt_match_hello_canada
13
+ assert_equal false, (<%= class_name %>.matches? 'hello canada')
14
+ end
15
+
16
+ end
@@ -1,4 +1,6 @@
1
1
  require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+
2
4
  require_relative '../src/<%= bot_name %>.rb'
3
5
 
4
6
  class Test<%= class_name %> < MiniTest::Test
@@ -9,10 +11,12 @@ class Test<%= class_name %> < MiniTest::Test
9
11
 
10
12
  def test_hides_greetings
11
13
  refute_respond_to <%= class_name %>, :greetings
14
+ assert_instance_of String, <%= class_name %>.send(:greetings)[0]
12
15
  end
13
16
 
14
17
  def test_hides_io_metal
15
18
  refute_respond_to <%= class_name %>, :load_txt_file
19
+ assert_equal 3, <%= class_name %>.send(:load_txt_file, 'greetings.txt').length
16
20
  end
17
21
 
18
22
  end
@@ -0,0 +1,12 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+
4
+ require_relative '../src/<%= bot_name %>.rb'
5
+
6
+ class Test<%= class_name %> < MiniTest::Test
7
+
8
+ def test_reverses_hello_world
9
+ assert_match (<%= class_name %>.respond_to 'hello world'), 'dlrow olleh'
10
+ end
11
+
12
+ end
@@ -0,0 +1,28 @@
1
+ require_relative 'src/<%= bot_name %>.rb'
2
+ require "twitter"
3
+ require "tweetstream"
4
+
5
+ Twitter.configure do |config|
6
+ config.consumer_key = ENV['TWITTER_CONSUMER_KEY']
7
+ config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
8
+ config.oauth_token = ENV['TWITTER_OAUTH_TOKEN']
9
+ config.oauth_token_secret = ENV['TWITTER_OAUTH_SECRET']
10
+ end
11
+
12
+ TweetStream.configure do |config|
13
+ config.consumer_key = ENV['TWITTER_CONSUMER_KEY']
14
+ config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
15
+ config.oauth_token = ENV['TWITTER_OAUTH_TOKEN']
16
+ config.oauth_token_secret = ENV['TWITTER_OAUTH_SECRET']
17
+ config.auth_method = :oauth
18
+ end
19
+
20
+ TweetStream::Client.new.userstream do |tweet|
21
+ puts "@#{tweet.user.screen_name} asks: #{tweet.text}"
22
+ begin
23
+ puts (answer = <%= class_name %>.respond_to tweet.text)
24
+ Twitter.update(answer, :in_reply_to_status_id => tweet.id)
25
+ rescue => e
26
+ puts e
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative 'src/<%= bot_name %>'
3
+
4
+ puts "hello world! ?"
5
+ puts <%= class_name %>.respond_to "hello world!"
6
+ puts "hello applesauce! ?"
7
+ puts <%= class_name %>.respond_to "hello applesauce!"
8
+ puts "replace this with meaningful example strings to test yr app!"
9
+ puts <%= class_name %>.respond_to "replace this with meaningful example strings to test yr app!"
@@ -1,4 +1,4 @@
1
1
  class TwitterBotGenerator
2
- VERSION = "0.1.6"
2
+ VERSION = "0.2.0"
3
3
  end
4
4
 
@@ -6,21 +6,46 @@ class TwitterBotGenerator
6
6
 
7
7
  class << self
8
8
 
9
- def generate bot_name
10
- puts "scaffolding a twitter bot that is named #{bot_name}!"
9
+ def generate bot_name, flag=''
10
+ welcome_message bot_name, flag
11
+ make_directories! bot_name
12
+ write_files! bot_name, flag
13
+ exit_message bot_name
14
+ end
15
+
16
+ protected
17
+
18
+ def welcome_message bot_name, flag
19
+ descriptor = ''
20
+ if flag == '--streaming' || flag == '-S'
21
+ descriptor = 'streaming '
22
+ elsif flag == '--userstream' || flag == '-U'
23
+ descriptor = 'userstream '
24
+ end
25
+ puts "scaffolding a #{descriptor}twitter bot named #{bot_name}!"
26
+ end
27
+
28
+ def make_directories! bot_name
11
29
  Dir.mkdir bot_name
12
- dirname = "#{bot_name}/"
13
- puts "mkdir #{dirname}"
30
+ puts "mkdir #{bot_name}/"
14
31
  folders.each do |folder|
15
- Dir.mkdir dirname + folder
16
- puts "mkdir #{dirname + folder}"
32
+ folder_path = File.join bot_name, folder
33
+ Dir.mkdir folder_path
34
+ puts "mkdir #{folder_path}/"
17
35
  end
18
- (files bot_name).each do |(file_name, contents)|
19
- puts "touch #{dirname}#{file_name}"
20
- File.open bot_name + '/' + file_name, 'w' do |f|
36
+ end
37
+
38
+ def write_files! bot_name, flag
39
+ (files bot_name, flag).each do |(file_name, contents)|
40
+ file_path = File.join bot_name, file_name
41
+ puts "touch #{file_path}"
42
+ File.open file_path, 'w' do |f|
21
43
  f.write contents
22
44
  end
23
45
  end
46
+ end
47
+
48
+ def exit_message bot_name
24
49
  puts 'done generating! your turn now!'
25
50
  puts "$ cd #{bot_name}"
26
51
  puts '$ bundle install'
@@ -29,13 +54,13 @@ class TwitterBotGenerator
29
54
  puts 'HAVE FUN BE SAFE PLAY NICE'
30
55
  end
31
56
 
32
- protected
57
+ private
33
58
 
34
59
  def folders
35
60
  %w(lib src test)
36
61
  end
37
62
 
38
- def files bot_name
63
+ def files bot_name, flag
39
64
  varz = grab_a_binding_for bot_name
40
65
  {
41
66
  'bot.rb' => (render_code 'bot.rb', varz),
@@ -48,7 +73,19 @@ class TwitterBotGenerator
48
73
  "test/#{bot_name}_test.rb" => (render_code 'test/test_bot_test.rb', varz),
49
74
  "src/#{bot_name}.rb" => (render_code 'src/test_bot.rb', varz),
50
75
  'lib/greetings.txt' => (render_code 'lib/greetings.txt', varz)
51
- }
76
+ }.tap do |filz|
77
+ if flag == '--streaming' || flag == '-S'
78
+ filz['bot.rb'] = (render_code 'streaming-bot.rb', varz)
79
+ filz['spec.rb'] = (render_code 'streaming-spec.rb', varz)
80
+ filz["test/#{bot_name}_test.rb"] = (render_code 'test/streaming-test_bot_test.rb', varz)
81
+ filz["src/#{bot_name}.rb"] = (render_code 'src/streaming-test_bot.rb', varz)
82
+ elsif flag == '--userstream' || flag == '-U'
83
+ filz['bot.rb'] = (render_code 'userstream-bot.rb', varz)
84
+ filz['spec.rb'] = (render_code 'userstream-spec.rb', varz)
85
+ filz["test/#{bot_name}_test.rb"] = (render_code 'test/userstream-test_bot_test.rb', varz)
86
+ filz["src/#{bot_name}.rb"] = (render_code 'src/userstream-test_bot.rb', varz)
87
+ end
88
+ end
52
89
  end
53
90
 
54
91
  def grab_a_binding_for bot_name
@@ -60,8 +97,6 @@ class TwitterBotGenerator
60
97
  (get_template file_name).result varz
61
98
  end
62
99
 
63
- private
64
-
65
100
  def camelize str
66
101
  ((str.split '_').map &:capitalize).join
67
102
  end
@@ -0,0 +1,3 @@
1
+ .DS_Store
2
+ */.DS_Store
3
+ *.todo
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+ ruby '2.0.0'
3
+ gem 'twitter'
4
+ gem "tweetstream"
@@ -0,0 +1 @@
1
+ bot: ruby bot.rb
@@ -0,0 +1,44 @@
1
+ # such_test_bot
2
+ A Twitter Bot
3
+
4
+ ## Development
5
+
6
+ > bundle install
7
+ > ruby test.rb
8
+ > ruby spec.rb
9
+
10
+ ## Deployment (heroku)
11
+
12
+ Once your bot has been well tested on the command line you'll need to get it out into the world!
13
+
14
+ 0. You probably need git and the heroku toolbet installed and also a heroku account.
15
+ 0. Make a twitter account for your bot. Give it a photo and header and some biographical information
16
+ 0. Go into settings > mobile and add a cell phone number that you can send a text from.
17
+ not all carriers will work :(
18
+ without a mobile number, twitter won't let you get the api keys you need to deploy
19
+ if your mobile number is associated with your personal account, temporarily delete it from that account so you can use it for your bot. Twitter doesn't care.
20
+ 0. go to apps.twitter.com and sign in again
21
+ 0. click create a new app
22
+ 0. fill in the details. just put down the github repo link or twitter page for the bot as website/callback url. no one will ever see this except you.
23
+ 0. once your app is created, click "modify app permissions" and set the app to read and write
24
+ 0. wait a lil bit to get access tokens
25
+ 0. SUCCESS! copy the access tokens down to a scratch txt file, but make sure not to commit it to source control/git/etc.! That would be bad because these things are secrets.
26
+ 0. From the command line:
27
+
28
+ ```
29
+ heroku create
30
+ heroku config:set TWITTER_CONSUMER_KEY=INSERT-YR-SECRETS-HERE
31
+ heroku config:set TWITTER_CONSUMER_SECRET=INSERT-YR-SECRETS-HERE
32
+ heroku config:set TWITTER_ACCESS_TOKEN=INSERT-YR-SECRETS-HERE
33
+ heroku config:set TWITTER_ACCESS_SECRET=INSERT-YR-SECRETS-HERE
34
+ ```
35
+
36
+ 0. go back to twitter.com and delete yr mobile phone from the bot account. you may also want to disable email notifications as well.
37
+ 0. THE MAIN EVENT:
38
+
39
+ ```
40
+ git push heroku master
41
+ heroku ps:scale bot=1
42
+ ```
43
+
44
+ 0. go to your bot's page and you should see it's first tweet! Or something?
@@ -0,0 +1,16 @@
1
+ require_relative 'src/such_test_bot.rb'
2
+ require 'twitter'
3
+ twitter = Twitter::REST::Client.new do |config|
4
+ config.consumer_key = ENV['TWITTER_CONSUMER_KEY']
5
+ config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
6
+ config.access_token = ENV['TWITTER_ACCESS_TOKEN']
7
+ config.access_token_secret = ENV['TWITTER_ACCESS_SECRET']
8
+ end
9
+
10
+ loop do
11
+ begin
12
+ twitter.update SuchTestBot.generate
13
+ ensure
14
+ sleep 10800 + (rand 5400)
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ Hello World!
2
+ Hello Twitter!
3
+ Hello Ruby!
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative 'src/such_test_bot'
3
+ 12.times { puts SuchTestBot.generate }
@@ -0,0 +1,25 @@
1
+ class SuchTestBot
2
+
3
+ class << self
4
+
5
+ def generate
6
+ greetings.sample
7
+ end
8
+
9
+ protected
10
+
11
+ def greetings
12
+ @greetings ||= load_txt_file 'greetings.txt'
13
+ end
14
+
15
+ private
16
+
17
+ def load_txt_file file_name
18
+ home_sweet_home = File.expand_path File.dirname __FILE__
19
+ ultimate_pathway = File.join home_sweet_home, '..', 'lib', file_name
20
+ (File.readlines ultimate_pathway).map &:strip
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,22 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+
4
+ require_relative '../src/such_test_bot.rb'
5
+
6
+ class TestSuchTestBot < MiniTest::Test
7
+
8
+ def test_generate_returns_hello_world
9
+ assert_match /Hello/, SuchTestBot.generate
10
+ end
11
+
12
+ def test_hides_greetings
13
+ refute_respond_to SuchTestBot, :greetings
14
+ assert_instance_of String, SuchTestBot.send(:greetings)[0]
15
+ end
16
+
17
+ def test_hides_io_metal
18
+ refute_respond_to SuchTestBot, :load_txt_file
19
+ assert_equal 3, SuchTestBot.send(:load_txt_file, 'greetings.txt').length
20
+ end
21
+
22
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir.glob('./test/*_test.rb').each { |file| require file }
@@ -0,0 +1,9 @@
1
+ require_relative 'test_helper'
2
+
3
+ wipe_such_test_bot!
4
+ TwitterBotGenerator.generate 'such_test_bot'
5
+
6
+ puts 'Running the test suite for the generated DEFAULT bot'
7
+ Dir.chdir('such_test_bot')
8
+ puts load '../such_test_bot/test/such_test_bot_test.rb'
9
+ Dir.chdir('..')
@@ -0,0 +1,9 @@
1
+ require_relative 'test_helper'
2
+
3
+ wipe_such_test_bot!
4
+ TwitterBotGenerator.generate 'such_test_bot', '--streaming'
5
+
6
+ puts 'Running the test suite for the generated STREAMING bot'
7
+ Dir.chdir('such_test_bot')
8
+ puts load '../such_test_bot/test/such_test_bot_test.rb'
9
+ Dir.chdir('..')
@@ -0,0 +1,9 @@
1
+ require_relative 'test_helper'
2
+
3
+ wipe_such_test_bot!
4
+ TwitterBotGenerator.generate 'such_test_bot', '--userstream'
5
+
6
+ puts 'Running the test suite for the generated USERSTREAM bot'
7
+ Dir.chdir('such_test_bot')
8
+ puts load '../such_test_bot/test/such_test_bot_test.rb'
9
+ Dir.chdir('..')
@@ -1,5 +1,10 @@
1
1
  require_relative 'test_helper'
2
2
 
3
+ wipe_such_test_bot!
4
+ TwitterBotGenerator.generate 'such_test_bot'
5
+
6
+ puts 'testing the scaffolding'
7
+
3
8
  class TestTwitterBotGenerator < MiniTest::Test
4
9
 
5
10
  def test_it_creates_an_app_directory
@@ -27,7 +32,7 @@ class TestTwitterBotGenerator < MiniTest::Test
27
32
  def test_it_creates_a_gitignore
28
33
  assert_equal true, (File.exists? './such_test_bot/.gitignore')
29
34
  assert_match /.DS_Store/, (File.read './such_test_bot/.gitignore')
30
- assert_match /notes.todo/, (File.read './such_test_bot/.gitignore')
35
+ assert_match /\*.todo/, (File.read './such_test_bot/.gitignore')
31
36
  end
32
37
 
33
38
  def test_it_creates_a_gemfile
data/test/test_helper.rb CHANGED
@@ -1,15 +1,11 @@
1
1
  require 'minitest/autorun'
2
- require 'minitest/autorun'
3
2
  require 'minitest/pride'
4
3
  require 'coveralls'
5
4
  Coveralls.wear!
6
5
 
7
6
  require_relative "../lib/twitter_bot_generator.rb"
8
7
 
9
- # before :all do
10
- TwitterBotGenerator.generate 'such_test_bot'
11
-
12
- Minitest.after_run do
8
+ def wipe_such_test_bot!
13
9
  ['./such_test_bot/Gemfile',
14
10
  './such_test_bot/README.md',
15
11
  './such_test_bot/test.rb',
@@ -19,10 +15,17 @@ Minitest.after_run do
19
15
  './such_test_bot/test/such_test_bot_test.rb',
20
16
  './such_test_bot/lib/greetings.txt',
21
17
  './such_test_bot/src/such_test_bot.rb',
22
- './such_test_bot/.gitignore'].each { |file| File.unlink file }
18
+ './such_test_bot/.gitignore'].each { |file| File.unlink file if File.exists? file }
23
19
 
24
20
  ['./such_test_bot/lib',
25
21
  './such_test_bot/src',
26
22
  './such_test_bot/test',
27
- './such_test_bot'].each { |dir| Dir.rmdir dir }
23
+ './such_test_bot'].each { |dir| Dir.rmdir dir if Dir.exists? dir}
24
+ true
25
+ end
26
+
27
+ Minitest.after_run do
28
+ # leave behind a default scaffold ALWAYS
29
+ wipe_such_test_bot!
30
+ TwitterBotGenerator.generate 'such_test_bot'
28
31
  end
@@ -9,7 +9,23 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Cole Willsea"]
10
10
  spec.email = ["coleww@gmail.com"]
11
11
  spec.summary = %q{Generates a twitter bot template from command line.}
12
- spec.description = %q{gem install twitter_bot_generator && twitter_bot_generator new_twitter_bot}
12
+ spec.description = <<-EOF
13
+ Scaffolds a new boilerplate twitter bot project from the command line.
14
+ By default will create a bot that tweets a "hello world" type greeting once every 3-4.5 hours
15
+ Can also pass a --streaming flag to create a bot that listens to the "gardenhose"
16
+ Or a --userstream flag for a bot that listens for tweets @ it.
17
+ To use:
18
+
19
+ $ gem install twitter_bot_generator
20
+ $ twitter_bot_generator --help
21
+ $ twitter_bot_generator my_new_bot
22
+ $ cd my_new_bot
23
+ $ bundle install
24
+ $ ruby test.rb
25
+ $ ruby spec.rb
26
+
27
+ etc.
28
+ EOF
13
29
  spec.homepage = "https://github.com/coleww/twitter_bot_generator"
14
30
  spec.license = "MIT"
15
31
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter_bot_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cole Willsea
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-13 00:00:00.000000000 Z
11
+ date: 2014-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,7 +80,22 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description: gem install twitter_bot_generator && twitter_bot_generator new_twitter_bot
83
+ description: |2
84
+ Scaffolds a new boilerplate twitter bot project from the command line.
85
+ By default will create a bot that tweets a "hello world" type greeting once every 3-4.5 hours
86
+ Can also pass a --streaming flag to create a bot that listens to the "gardenhose"
87
+ Or a --userstream flag for a bot that listens for tweets @ it.
88
+ To use:
89
+
90
+ $ gem install twitter_bot_generator
91
+ $ twitter_bot_generator --help
92
+ $ twitter_bot_generator my_new_bot
93
+ $ cd my_new_bot
94
+ $ bundle install
95
+ $ ruby test.rb
96
+ $ ruby spec.rb
97
+
98
+ etc.
84
99
  email:
85
100
  - coleww@gmail.com
86
101
  executables:
@@ -104,11 +119,31 @@ files:
104
119
  - lib/twitter_bot_generator/templates/bot.rb.erb
105
120
  - lib/twitter_bot_generator/templates/lib/greetings.txt.erb
106
121
  - lib/twitter_bot_generator/templates/spec.rb.erb
122
+ - lib/twitter_bot_generator/templates/src/streaming-test_bot.rb.erb
107
123
  - lib/twitter_bot_generator/templates/src/test_bot.rb.erb
124
+ - lib/twitter_bot_generator/templates/src/userstream-test_bot.rb.erb
125
+ - lib/twitter_bot_generator/templates/streaming-bot.rb.erb
126
+ - lib/twitter_bot_generator/templates/streaming-spec.rb.erb
108
127
  - lib/twitter_bot_generator/templates/test.rb.erb
128
+ - lib/twitter_bot_generator/templates/test/streaming-test_bot_test.rb.erb
109
129
  - lib/twitter_bot_generator/templates/test/test_bot_test.rb.erb
130
+ - lib/twitter_bot_generator/templates/test/userstream-test_bot_test.rb.erb
131
+ - lib/twitter_bot_generator/templates/userstream-bot.rb.erb
132
+ - lib/twitter_bot_generator/templates/userstream-spec.rb.erb
110
133
  - lib/twitter_bot_generator/version.rb
111
- - test/generated_bot_test.rb
134
+ - such_test_bot/.gitignore
135
+ - such_test_bot/Gemfile
136
+ - such_test_bot/Procfile
137
+ - such_test_bot/README.md
138
+ - such_test_bot/bot.rb
139
+ - such_test_bot/lib/greetings.txt
140
+ - such_test_bot/spec.rb
141
+ - such_test_bot/src/such_test_bot.rb
142
+ - such_test_bot/test.rb
143
+ - such_test_bot/test/such_test_bot_test.rb
144
+ - test/generated_default_bot.rb
145
+ - test/generated_streaming_bot.rb
146
+ - test/generated_userstream_bot.rb
112
147
  - test/scaffold_generator_test.rb
113
148
  - test/test_helper.rb
114
149
  - twitter_bot_generator.gemspec
@@ -137,6 +172,8 @@ signing_key:
137
172
  specification_version: 4
138
173
  summary: Generates a twitter bot template from command line.
139
174
  test_files:
140
- - test/generated_bot_test.rb
175
+ - test/generated_default_bot.rb
176
+ - test/generated_streaming_bot.rb
177
+ - test/generated_userstream_bot.rb
141
178
  - test/scaffold_generator_test.rb
142
179
  - test/test_helper.rb
@@ -1,6 +0,0 @@
1
- # require_relative 'test_helper'
2
-
3
- # # Running the test suite for the generated bot
4
- # Dir.chdir('such_test_bot')
5
- # puts Dir.entries(".").join
6
- # require_relative '../such_test_bot/test/such_test_bot_test.rb'