diff -ur twitter/USAGE cucumber/USAGE --- twitter/USAGE 2009-05-06 23:36:10.000000000 -0600 +++ cucumber/USAGE 2009-05-20 01:51:20.000000000 -0600 @@ -1,5 +1,5 @@ Description: - - + + Usage: - + Only in cucumber: cucumber_generator.rb diff -ur twitter/templates/README.md cucumber/templates/README.md --- twitter/templates/README.md 2009-05-06 23:36:10.000000000 -0600 +++ cucumber/templates/README.md 2009-05-22 21:12:13.000000000 -0600 @@ -1,4 +1,4 @@ <%= name %> <%= "=" * name.size %> -A gem that provides... +A sinatra app the provides a gem that... diff -ur twitter/templates/Rakefile cucumber/templates/Rakefile --- twitter/templates/Rakefile 2009-05-22 21:11:36.000000000 -0600 +++ cucumber/templates/Rakefile 2009-05-22 21:33:17.000000000 -0600 @@ -3,6 +3,7 @@ require 'rubygems/specification' require 'date' require 'spec/rake/spectask' +require 'cucumber/rake/task' GEM = "<%= name %>" GEM_VERSION = "0.0.1" @@ -32,7 +33,7 @@ s.require_path = 'lib' s.autorequire = GEM - s.files = %w(LICENSE README.md Rakefile TODO) + Dir.glob("{lib,spec}/**/*") + s.files = %w(LICENSE README.md Rakefile TODO) + Dir.glob("{lib,features}/**/*") end Rake::GemPackageTask.new(spec) do |pkg| @@ -51,7 +52,13 @@ end end -task :default => :spec +task :default => :features + +desc "Run cucumber" +Cucumber::Rake::Task.new do |t| + t.cucumber_opts = %w{--format pretty} +end + desc "Run specs" Spec::Rake::SpecTask.new do |t| diff -ur twitter/templates/config.ru.erb cucumber/templates/config.ru.erb --- twitter/templates/config.ru.erb 2009-05-20 01:59:02.000000000 -0600 +++ cucumber/templates/config.ru.erb 2009-07-05 13:03:25.000000000 -0600 @@ -1,9 +1,6 @@ require 'rubygems' require '<%= name %>' -ENV['<%= name.upcase %>_READKEY'] = /\w{18}/.gen # this should really be what twitter gives you -ENV['<%= name.upcase %>_READSECRET'] = /\w{24}/.gen # this should really be what twitter gives you - #DataMapper.setup(:default, "mysql://atmos:fail@localhost/<%= name.capitalize %>_production") class <%= name.camelize %>Site < <%= name.camelize %>::App Only in cucumber/templates: features Only in cucumber/templates/lib/templates: app.rb.erb Only in twitter/templates/lib/templates: models Only in twitter/templates/lib/templates: sinatra Only in twitter/templates/lib/templates: views diff -ur twitter/templates/lib/templates.rb.erb cucumber/templates/lib/templates.rb.erb --- twitter/templates/lib/templates.rb.erb 2009-05-06 23:36:10.000000000 -0600 +++ cucumber/templates/lib/templates.rb.erb 2009-05-20 01:51:20.000000000 -0600 @@ -1,58 +1,9 @@ -gem 'oauth' -require 'oauth' -gem 'json' -require 'json' -gem 'haml', '~>2.0.9' +require 'rubygems' +require 'sinatra/base' require 'haml/util' require 'haml/engine' -gem 'chronic' -require 'chronic' -gem 'curb' -require 'curb' -require 'logger' - -gem 'data_objects', '~>0.9.11' -gem 'dm-core', '~>0.9.10' -gem 'dm-types', '~>0.9.10' -gem 'dm-validations', '~>0.9.10' -gem 'dm-timestamps', '~>0.9.10' -require 'dm-core' -require 'dm-types' -require 'dm-validations' -require 'dm-timestamps' -require 'sinatra/base' module <%= name.camelize %> - module Log - def self.logger - if @logger.nil? - @logger = Logger.new("<%= name %>.log") - @logger.level = Logger::INFO - end - @logger - end - end - - module OAuth - def self.consumer - ::OAuth::Consumer.new(ENV['<%= name.upcase %>_READKEY'], - ENV['<%= name.upcase %>_READSECRET'], - {:site => 'http://twitter.com'}) - end - end - - def self.retryable(options = {}, &block) - opts = { :tries => 1, :on => StandardError }.merge(options) - retry_exception, retries = opts[:on], opts[:tries] - - begin - return yield - rescue retry_exception - retry if (retries -= 1) > 0 - end - yield - end end -require File.dirname(__FILE__)+'/<%= name %>/models/user' -require File.dirname(__FILE__)+'/<%= name %>/sinatra/app' +require File.dirname(__FILE__)+'/<%= name %>/app' diff -ur twitter/templates/spec/spec_helper.rb.erb cucumber/templates/spec/spec_helper.rb.erb --- twitter/templates/spec/spec_helper.rb.erb 2009-05-22 21:29:00.000000000 -0600 +++ cucumber/templates/spec/spec_helper.rb.erb 2009-05-20 01:51:20.000000000 -0600 @@ -3,20 +3,17 @@ require 'rubygems' require 'randexp' require '<%= name %>' -require 'dm-core' +#require 'dm-core' require 'rack/test' -require 'webrat' -require 'dm-sweatshop' +require 'webrat/sinatra' +#require 'dm-sweatshop' require 'fakeweb' require 'pp' FakeWeb.allow_net_connect = false -ENV['<%= name.upcase %>_READKEY'] = /\w{18}/.gen -ENV['<%= name.upcase %>_READSECRET'] = /\w{18}/.gen -require File.dirname(__FILE__)+'/fixtures' - -DataMapper.setup(:default, 'sqlite3::memory:') +#require File.dirname(__FILE__)+'/fixtures' +#DataMapper.setup(:default, 'sqlite3::memory:') class Net::HTTPResponse def body=(content) @@ -31,14 +28,8 @@ config.include(Webrat::Matchers) config.before(:each) do - ::<%= name.camelize %>::App.environment = :development - DataMapper.auto_migrate! + #DataMapper.auto_migrate! FakeWeb.clean_registry - FakeWeb.register_uri(:post, "http://twitter.com:80/oauth/request_token", - [{:string => "oauth_token=requestkey&oauth_token_secret=requestsecret", :status => ["200", "OK"]}, - {:string => "", :status => ["401", "Unauthorized"]}, - {:string => "", :status => ["403", "Forbidden"]}, - {:string => "Bad Gateway", :status => ["502", "Bad Gateway"]} ]) end def app @@ -46,30 +37,4 @@ run <%= name.camelize %>::App end end - - def login_quentin - response = Net::HTTPSuccess.new('1.0', 200, nil) - response.body = "{\"description\":\"lulz\",\"profile_background_image_url\":\"http:\\/\\/static.twitter.com\\/images\\/themes\\/theme3\\/bg.gif\",\"utc_offset\":-25200,\"friends_count\":157,\"profile_background_color\":\"EDECE9\",\"profile_text_color\":\"634047\",\"url\":\"http:\\/\\/example.org\",\"name\":\"Quentin Blake\",\"favourites_count\":6,\"profile_link_color\":\"088253\",\"protected\":false,\"status\":{\"truncated\":false,\"in_reply_to_status_id\":null,\"text\":\"stu stu studio\",\"in_reply_to_user_id\":null,\"favorited\":false,\"created_at\":\"Tue Mar 31 19:02:12 +0000 2009\",\"id\":1426242614,\"source\":\"twitterrific<\\/a>\"},\"created_at\":\"Sun Mar 18 20:07:13 +0000 2007\",\"statuses_count\":2560,\"profile_background_tile\":false,\"time_zone\":\"Mountain Time (US & Canada)\",\"profile_sidebar_fill_color\":\"E3E2DE\",\"profile_image_url\":\"http:\\/\\/static.twitter.com\\/images\\/default_profile_normal.png\",\"notifications\":false,\"profile_sidebar_border_color\":\"D3D2CF\",\"location\":\"Boulder, Colorado\",\"id\":1484261,\"following\":false,\"followers_count\":368,\"screen_name\":\"caboose\"}" - login(response) - last_response.headers['Location'].should eql('/') - end - - def unauthorized_quentin - response = Net::HTTPUnauthorized.new('1.0', 401, nil) - response.body = "Unauthorized" - lambda { login(response) }.should raise_error(ArgumentError) - end - - def login(response) - token = 'oU5W1XD2TTZhWT6Snfii9JbVBUkJOurCKhWQHz98765' - - consumer = mock('Consumer', {:request => response}) - request_token = mock('RequestToken', {:get_access_token => mock('AccessToken', {:token => 'foo', :secret => 'bar'})}) - - OAuth::Consumer.stub!(:new).and_return(consumer) - OAuth::RequestToken.stub!(:new).and_return(request_token) - - get '/callback', :oauth_token => token - last_response - end end diff -ur twitter/templates/spec/templates_spec.rb.erb cucumber/templates/spec/templates_spec.rb.erb --- twitter/templates/spec/templates_spec.rb.erb 2009-05-06 23:36:10.000000000 -0600 +++ cucumber/templates/spec/templates_spec.rb.erb 2009-05-20 01:51:20.000000000 -0600 @@ -1,59 +1,8 @@ require File.dirname(__FILE__) + '/spec_helper' -describe "visiting /" do - describe "when unauthenticated" do - it "should display the about page" do - get '/' - last_response.should have_selector("h2:contains('Do you use twitter?')") - end - end - describe "when unauthorized" do - it "should raise an error" do - lambda { unauthorized_quentin }.should raise_error - end - end - describe "when authenticated" do - it "should display a greeting" do - login_quentin - get '/' - last_response.should have_selector("h2:contains('Hello There, you little twitterer!')") - end - end -end - -describe "visiting /peace" do - describe "when authenticated" do - it "should clear the session and redirect to the home page" do - login_quentin - get '/peace' - last_response.headers['Location'].should eql('/') - - get last_response.headers['Location'] - last_response.should have_selector("h2:contains('Do you use twitter?')") - end - end -end - -describe "triggering a 404" do - it "should display the failed page" do - pending - get '/lost' - last_response.should have_selector("p:contains('Something went wonky.')") - end -end - -describe "visiting /authenticate" do - it "should redirect to twitter for authentication" do - get '/authenticate' - last_response.headers['Location'].should eql('http://twitter.com/oauth/authorize?oauth_token=requestkey') - end -end - -describe "<%= name.camelize %>::User" do - it "can create users from twitter ids that exist" do - lambda { <%= name.camelize %>::User.create_twitter_user('atmos') }.should_not raise_error - end - it "can't create users from twitter ids that do not exist" do - lambda { <%= name.camelize %>::User.create_twitter_user(/\w{18}/.gen) }.should raise_error(<%= name.camelize %>::User::UserCreationError) +describe "<%= name.camelize %>" do + it "should do nothing" do + get '/' + last_response.should have_selector("h2:contains('Hello There, buddy!')") end end Only in twitter: twitter_generator.rb