singem 0.0.3 → 0.0.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.
- data/Rakefile +1 -1
- data/lib/generators/twitter/templates/Rakefile +1 -1
- data/lib/generators/twitter/templates/features/support/env.rb.erb +1 -44
- data/lib/generators/twitter/templates/spec/helpers.rb.erb +43 -0
- data/lib/generators/twitter/templates/spec/spec_helper.rb.erb +7 -44
- data/lib/generators/twitter/twitter_generator.rb +1 -0
- metadata +2 -2
- data/lib/generators/foo.txt +0 -284
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@ spec = Gem::Specification.new do |s|
|
|
26
26
|
s.add_dependency "rubigen", ">= 1.5.2"
|
27
27
|
s.add_dependency "rack-test", "~>0.1.0"
|
28
28
|
s.add_dependency "webrat", "~>0.4.3"
|
29
|
-
s.add_dependency "fakeweb", "~>1.2.
|
29
|
+
s.add_dependency "fakeweb", "~>1.2.4"
|
30
30
|
s.add_dependency 'haml', "~>2.0.9"
|
31
31
|
|
32
32
|
s.require_path = 'lib'
|
@@ -6,50 +6,7 @@ require 'dm-sweatshop'
|
|
6
6
|
require 'pp'
|
7
7
|
|
8
8
|
require File.dirname(__FILE__)+'/../../lib/<%= name %>'
|
9
|
-
|
10
|
-
module <%= name.camelize %>::AppHelpers
|
11
|
-
def app
|
12
|
-
@app = Rack::Builder.new do
|
13
|
-
run <%= name.camelize %>::App
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def login_quentin
|
18
|
-
response = Net::HTTPSuccess.new('1.0', 200, nil)
|
19
|
-
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\":\"<a href=\\\"http:\\/\\/iconfactory.com\\/software\\/twitterrific\\\">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\"}"
|
20
|
-
login(response)
|
21
|
-
end
|
22
|
-
|
23
|
-
def unauthorized_quentin
|
24
|
-
response = Net::HTTPUnauthorized.new('1.0', 401, nil)
|
25
|
-
response.body = "Unauthorized"
|
26
|
-
lambda { login(response) }.should raise_error(ArgumentError)
|
27
|
-
end
|
28
|
-
|
29
|
-
def login(response)
|
30
|
-
token = 'oU5W1XD2TTZhWT6Snfii9JbVBUkJOurCKhWQHz98765'
|
31
|
-
|
32
|
-
consumer = mock('Consumer', {:request => response})
|
33
|
-
request_token = mock('RequestToken', {:get_access_token => mock('AccessToken', {:token => 'foo', :secret => 'bar'})})
|
34
|
-
|
35
|
-
OAuth::Consumer.stub!(:new).and_return(consumer)
|
36
|
-
OAuth::RequestToken.stub!(:new).and_return(request_token)
|
37
|
-
|
38
|
-
visit "/callback?oauth_token=#{token}"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
Webrat.configure do |config|
|
43
|
-
config.mode = :rack_test
|
44
|
-
config.application_port = 4567
|
45
|
-
end
|
46
|
-
|
47
|
-
class Net::HTTPResponse
|
48
|
-
def body=(content)
|
49
|
-
@body = content
|
50
|
-
@read = true
|
51
|
-
end
|
52
|
-
end
|
9
|
+
require File.dirname(__FILE__)+'/../../spec/helpers'
|
53
10
|
|
54
11
|
World(Rack::Test::Methods)
|
55
12
|
World(Spec::Mocks::ExampleMethods)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Net::HTTPResponse
|
2
|
+
def body=(content)
|
3
|
+
@body = content
|
4
|
+
@read = true
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
Webrat.configure do |config|
|
9
|
+
config.mode = :rack_test
|
10
|
+
config.application_port = 4567
|
11
|
+
end
|
12
|
+
|
13
|
+
module <%= name.camelize %>::AppHelpers
|
14
|
+
def app
|
15
|
+
@app = Rack::Builder.new do
|
16
|
+
run <%= name.camelize %>::App
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def login_quentin
|
21
|
+
response = Net::HTTPSuccess.new('1.0', 200, nil)
|
22
|
+
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\":\"<a href=\\\"http:\\/\\/iconfactory.com\\/software\\/twitterrific\\\">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\"}"
|
23
|
+
login(response)
|
24
|
+
end
|
25
|
+
|
26
|
+
def unauthorized_quentin
|
27
|
+
response = Net::HTTPUnauthorized.new('1.0', 401, nil)
|
28
|
+
response.body = "Unauthorized"
|
29
|
+
lambda { login(response) }.should raise_error(ArgumentError)
|
30
|
+
end
|
31
|
+
|
32
|
+
def login(response)
|
33
|
+
token = 'oU5W1XD2TTZhWT6Snfii9JbVBUkJOurCKhWQHz98765'
|
34
|
+
|
35
|
+
consumer = mock('Consumer', {:request => response})
|
36
|
+
request_token = mock('RequestToken', {:get_access_token => mock('AccessToken', {:token => 'foo', :secret => 'bar'})})
|
37
|
+
|
38
|
+
OAuth::Consumer.stub!(:new).and_return(consumer)
|
39
|
+
OAuth::RequestToken.stub!(:new).and_return(request_token)
|
40
|
+
|
41
|
+
visit "/callback?oauth_token=#{token}"
|
42
|
+
end
|
43
|
+
end
|
@@ -3,10 +3,10 @@ $:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'randexp'
|
5
5
|
require '<%= name %>'
|
6
|
-
require 'dm-core'
|
7
6
|
require 'rack/test'
|
8
7
|
require 'webrat'
|
9
8
|
require 'dm-sweatshop'
|
9
|
+
gem 'fakeweb', '~>1.2.4'
|
10
10
|
require 'fakeweb'
|
11
11
|
require 'pp'
|
12
12
|
|
@@ -15,61 +15,24 @@ ENV['<%= name.upcase %>_READKEY'] = /\w{18}/.gen
|
|
15
15
|
ENV['<%= name.upcase %>_READSECRET'] = /\w{18}/.gen
|
16
16
|
|
17
17
|
require File.dirname(__FILE__)+'/fixtures'
|
18
|
+
require File.dirname(__FILE__)+'/helpers'
|
18
19
|
|
19
20
|
DataMapper.setup(:default, 'sqlite3::memory:')
|
20
21
|
|
21
|
-
class Net::HTTPResponse
|
22
|
-
def body=(content)
|
23
|
-
@body = content
|
24
|
-
@read = true
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
22
|
Spec::Runner.configure do |config|
|
29
23
|
config.include(Rack::Test::Methods)
|
30
24
|
config.include(Webrat::Methods)
|
31
25
|
config.include(Webrat::Matchers)
|
26
|
+
config.include(<%= name.camelize %>::AppHelpers)
|
32
27
|
|
33
28
|
config.before(:each) do
|
34
29
|
::<%= name.camelize %>::App.environment = :development
|
35
30
|
DataMapper.auto_migrate!
|
36
31
|
FakeWeb.clean_registry
|
37
32
|
FakeWeb.register_uri(:post, "http://twitter.com:80/oauth/request_token",
|
38
|
-
[{:
|
39
|
-
{:
|
40
|
-
{:
|
41
|
-
{:
|
42
|
-
end
|
43
|
-
|
44
|
-
def app
|
45
|
-
@app = Rack::Builder.new do
|
46
|
-
run <%= name.camelize %>::App
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def login_quentin
|
51
|
-
response = Net::HTTPSuccess.new('1.0', 200, nil)
|
52
|
-
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\":\"<a href=\\\"http:\\/\\/iconfactory.com\\/software\\/twitterrific\\\">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\"}"
|
53
|
-
login(response)
|
54
|
-
last_response.headers['Location'].should eql('/')
|
55
|
-
end
|
56
|
-
|
57
|
-
def unauthorized_quentin
|
58
|
-
response = Net::HTTPUnauthorized.new('1.0', 401, nil)
|
59
|
-
response.body = "Unauthorized"
|
60
|
-
lambda { login(response) }.should raise_error(ArgumentError)
|
61
|
-
end
|
62
|
-
|
63
|
-
def login(response)
|
64
|
-
token = 'oU5W1XD2TTZhWT6Snfii9JbVBUkJOurCKhWQHz98765'
|
65
|
-
|
66
|
-
consumer = mock('Consumer', {:request => response})
|
67
|
-
request_token = mock('RequestToken', {:get_access_token => mock('AccessToken', {:token => 'foo', :secret => 'bar'})})
|
68
|
-
|
69
|
-
OAuth::Consumer.stub!(:new).and_return(consumer)
|
70
|
-
OAuth::RequestToken.stub!(:new).and_return(request_token)
|
71
|
-
|
72
|
-
get '/callback', :oauth_token => token
|
73
|
-
last_response
|
33
|
+
[{:body => "oauth_token=requestkey&oauth_token_secret=requestsecret", :status => ["200", "OK"]},
|
34
|
+
{:body => "", :status => ["401", "Unauthorized"]},
|
35
|
+
{:body => "", :status => ["403", "Forbidden"]},
|
36
|
+
{:body => "Bad Gateway", :status => ["502", "Bad Gateway"]} ])
|
74
37
|
end
|
75
38
|
end
|
@@ -38,6 +38,7 @@ class TwitterGenerator < RubiGen::Base
|
|
38
38
|
|
39
39
|
# rspec stubs
|
40
40
|
m.template "spec/spec_helper.rb.erb", "spec/spec_helper.rb"
|
41
|
+
m.template "spec/helpers.rb.erb", "spec/helpers.rb"
|
41
42
|
m.template "spec/templates_spec.rb.erb", "spec/#{name}_spec.rb"
|
42
43
|
m.template "spec/fixtures.rb.erb", "spec/fixtures.rb"
|
43
44
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: singem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Donohoe
|
@@ -110,7 +110,6 @@ files:
|
|
110
110
|
- lib/generators/cucumber/templates/spec/templates_spec.rb.erb
|
111
111
|
- lib/generators/cucumber/templates/TODO
|
112
112
|
- lib/generators/cucumber/USAGE
|
113
|
-
- lib/generators/foo.txt
|
114
113
|
- lib/generators/singem
|
115
114
|
- lib/generators/singem/singem_generator.rb
|
116
115
|
- lib/generators/singem/templates
|
@@ -157,6 +156,7 @@ files:
|
|
157
156
|
- lib/generators/twitter/templates/README.md
|
158
157
|
- lib/generators/twitter/templates/spec
|
159
158
|
- lib/generators/twitter/templates/spec/fixtures.rb.erb
|
159
|
+
- lib/generators/twitter/templates/spec/helpers.rb.erb
|
160
160
|
- lib/generators/twitter/templates/spec/spec_helper.rb.erb
|
161
161
|
- lib/generators/twitter/templates/spec/templates_spec.rb.erb
|
162
162
|
- lib/generators/twitter/templates/TODO
|
data/lib/generators/foo.txt
DELETED
@@ -1,284 +0,0 @@
|
|
1
|
-
diff -ur twitter/USAGE cucumber/USAGE
|
2
|
-
--- twitter/USAGE 2009-05-06 23:36:10.000000000 -0600
|
3
|
-
+++ cucumber/USAGE 2009-05-20 01:51:20.000000000 -0600
|
4
|
-
@@ -1,5 +1,5 @@
|
5
|
-
Description:
|
6
|
-
-
|
7
|
-
-
|
8
|
-
+
|
9
|
-
+
|
10
|
-
Usage:
|
11
|
-
-
|
12
|
-
+
|
13
|
-
Only in cucumber: cucumber_generator.rb
|
14
|
-
diff -ur twitter/templates/README.md cucumber/templates/README.md
|
15
|
-
--- twitter/templates/README.md 2009-05-06 23:36:10.000000000 -0600
|
16
|
-
+++ cucumber/templates/README.md 2009-05-22 21:12:13.000000000 -0600
|
17
|
-
@@ -1,4 +1,4 @@
|
18
|
-
<%= name %>
|
19
|
-
<%= "=" * name.size %>
|
20
|
-
|
21
|
-
-A gem that provides...
|
22
|
-
+A sinatra app the provides a gem that...
|
23
|
-
diff -ur twitter/templates/Rakefile cucumber/templates/Rakefile
|
24
|
-
--- twitter/templates/Rakefile 2009-05-22 21:11:36.000000000 -0600
|
25
|
-
+++ cucumber/templates/Rakefile 2009-05-22 21:33:17.000000000 -0600
|
26
|
-
@@ -3,6 +3,7 @@
|
27
|
-
require 'rubygems/specification'
|
28
|
-
require 'date'
|
29
|
-
require 'spec/rake/spectask'
|
30
|
-
+require 'cucumber/rake/task'
|
31
|
-
|
32
|
-
GEM = "<%= name %>"
|
33
|
-
GEM_VERSION = "0.0.1"
|
34
|
-
@@ -32,7 +33,7 @@
|
35
|
-
|
36
|
-
s.require_path = 'lib'
|
37
|
-
s.autorequire = GEM
|
38
|
-
- s.files = %w(LICENSE README.md Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
|
39
|
-
+ s.files = %w(LICENSE README.md Rakefile TODO) + Dir.glob("{lib,features}/**/*")
|
40
|
-
end
|
41
|
-
|
42
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
43
|
-
@@ -51,7 +52,13 @@
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
-task :default => :spec
|
48
|
-
+task :default => :features
|
49
|
-
+
|
50
|
-
+desc "Run cucumber"
|
51
|
-
+Cucumber::Rake::Task.new do |t|
|
52
|
-
+ t.cucumber_opts = %w{--format pretty}
|
53
|
-
+end
|
54
|
-
+
|
55
|
-
|
56
|
-
desc "Run specs"
|
57
|
-
Spec::Rake::SpecTask.new do |t|
|
58
|
-
diff -ur twitter/templates/config.ru.erb cucumber/templates/config.ru.erb
|
59
|
-
--- twitter/templates/config.ru.erb 2009-05-20 01:59:02.000000000 -0600
|
60
|
-
+++ cucumber/templates/config.ru.erb 2009-07-05 13:03:25.000000000 -0600
|
61
|
-
@@ -1,9 +1,6 @@
|
62
|
-
require 'rubygems'
|
63
|
-
require '<%= name %>'
|
64
|
-
|
65
|
-
-ENV['<%= name.upcase %>_READKEY'] = /\w{18}/.gen # this should really be what twitter gives you
|
66
|
-
-ENV['<%= name.upcase %>_READSECRET'] = /\w{24}/.gen # this should really be what twitter gives you
|
67
|
-
-
|
68
|
-
#DataMapper.setup(:default, "mysql://atmos:fail@localhost/<%= name.capitalize %>_production")
|
69
|
-
|
70
|
-
class <%= name.camelize %>Site < <%= name.camelize %>::App
|
71
|
-
Only in cucumber/templates: features
|
72
|
-
Only in cucumber/templates/lib/templates: app.rb.erb
|
73
|
-
Only in twitter/templates/lib/templates: models
|
74
|
-
Only in twitter/templates/lib/templates: sinatra
|
75
|
-
Only in twitter/templates/lib/templates: views
|
76
|
-
diff -ur twitter/templates/lib/templates.rb.erb cucumber/templates/lib/templates.rb.erb
|
77
|
-
--- twitter/templates/lib/templates.rb.erb 2009-05-06 23:36:10.000000000 -0600
|
78
|
-
+++ cucumber/templates/lib/templates.rb.erb 2009-05-20 01:51:20.000000000 -0600
|
79
|
-
@@ -1,58 +1,9 @@
|
80
|
-
-gem 'oauth'
|
81
|
-
-require 'oauth'
|
82
|
-
-gem 'json'
|
83
|
-
-require 'json'
|
84
|
-
-gem 'haml', '~>2.0.9'
|
85
|
-
+require 'rubygems'
|
86
|
-
+require 'sinatra/base'
|
87
|
-
require 'haml/util'
|
88
|
-
require 'haml/engine'
|
89
|
-
-gem 'chronic'
|
90
|
-
-require 'chronic'
|
91
|
-
-gem 'curb'
|
92
|
-
-require 'curb'
|
93
|
-
-require 'logger'
|
94
|
-
-
|
95
|
-
-gem 'data_objects', '~>0.9.11'
|
96
|
-
-gem 'dm-core', '~>0.9.10'
|
97
|
-
-gem 'dm-types', '~>0.9.10'
|
98
|
-
-gem 'dm-validations', '~>0.9.10'
|
99
|
-
-gem 'dm-timestamps', '~>0.9.10'
|
100
|
-
-require 'dm-core'
|
101
|
-
-require 'dm-types'
|
102
|
-
-require 'dm-validations'
|
103
|
-
-require 'dm-timestamps'
|
104
|
-
-require 'sinatra/base'
|
105
|
-
|
106
|
-
module <%= name.camelize %>
|
107
|
-
- module Log
|
108
|
-
- def self.logger
|
109
|
-
- if @logger.nil?
|
110
|
-
- @logger = Logger.new("<%= name %>.log")
|
111
|
-
- @logger.level = Logger::INFO
|
112
|
-
- end
|
113
|
-
- @logger
|
114
|
-
- end
|
115
|
-
- end
|
116
|
-
-
|
117
|
-
- module OAuth
|
118
|
-
- def self.consumer
|
119
|
-
- ::OAuth::Consumer.new(ENV['<%= name.upcase %>_READKEY'],
|
120
|
-
- ENV['<%= name.upcase %>_READSECRET'],
|
121
|
-
- {:site => 'http://twitter.com'})
|
122
|
-
- end
|
123
|
-
- end
|
124
|
-
-
|
125
|
-
- def self.retryable(options = {}, &block)
|
126
|
-
- opts = { :tries => 1, :on => StandardError }.merge(options)
|
127
|
-
- retry_exception, retries = opts[:on], opts[:tries]
|
128
|
-
-
|
129
|
-
- begin
|
130
|
-
- return yield
|
131
|
-
- rescue retry_exception
|
132
|
-
- retry if (retries -= 1) > 0
|
133
|
-
- end
|
134
|
-
- yield
|
135
|
-
- end
|
136
|
-
end
|
137
|
-
|
138
|
-
-require File.dirname(__FILE__)+'/<%= name %>/models/user'
|
139
|
-
-require File.dirname(__FILE__)+'/<%= name %>/sinatra/app'
|
140
|
-
+require File.dirname(__FILE__)+'/<%= name %>/app'
|
141
|
-
diff -ur twitter/templates/spec/spec_helper.rb.erb cucumber/templates/spec/spec_helper.rb.erb
|
142
|
-
--- twitter/templates/spec/spec_helper.rb.erb 2009-05-22 21:29:00.000000000 -0600
|
143
|
-
+++ cucumber/templates/spec/spec_helper.rb.erb 2009-05-20 01:51:20.000000000 -0600
|
144
|
-
@@ -3,20 +3,17 @@
|
145
|
-
require 'rubygems'
|
146
|
-
require 'randexp'
|
147
|
-
require '<%= name %>'
|
148
|
-
-require 'dm-core'
|
149
|
-
+#require 'dm-core'
|
150
|
-
require 'rack/test'
|
151
|
-
-require 'webrat'
|
152
|
-
-require 'dm-sweatshop'
|
153
|
-
+require 'webrat/sinatra'
|
154
|
-
+#require 'dm-sweatshop'
|
155
|
-
require 'fakeweb'
|
156
|
-
require 'pp'
|
157
|
-
|
158
|
-
FakeWeb.allow_net_connect = false
|
159
|
-
-ENV['<%= name.upcase %>_READKEY'] = /\w{18}/.gen
|
160
|
-
-ENV['<%= name.upcase %>_READSECRET'] = /\w{18}/.gen
|
161
|
-
|
162
|
-
-require File.dirname(__FILE__)+'/fixtures'
|
163
|
-
-
|
164
|
-
-DataMapper.setup(:default, 'sqlite3::memory:')
|
165
|
-
+#require File.dirname(__FILE__)+'/fixtures'
|
166
|
-
+#DataMapper.setup(:default, 'sqlite3::memory:')
|
167
|
-
|
168
|
-
class Net::HTTPResponse
|
169
|
-
def body=(content)
|
170
|
-
@@ -31,14 +28,8 @@
|
171
|
-
config.include(Webrat::Matchers)
|
172
|
-
|
173
|
-
config.before(:each) do
|
174
|
-
- ::<%= name.camelize %>::App.environment = :development
|
175
|
-
- DataMapper.auto_migrate!
|
176
|
-
+ #DataMapper.auto_migrate!
|
177
|
-
FakeWeb.clean_registry
|
178
|
-
- FakeWeb.register_uri(:post, "http://twitter.com:80/oauth/request_token",
|
179
|
-
- [{:string => "oauth_token=requestkey&oauth_token_secret=requestsecret", :status => ["200", "OK"]},
|
180
|
-
- {:string => "", :status => ["401", "Unauthorized"]},
|
181
|
-
- {:string => "", :status => ["403", "Forbidden"]},
|
182
|
-
- {:string => "Bad Gateway", :status => ["502", "Bad Gateway"]} ])
|
183
|
-
end
|
184
|
-
|
185
|
-
def app
|
186
|
-
@@ -46,30 +37,4 @@
|
187
|
-
run <%= name.camelize %>::App
|
188
|
-
end
|
189
|
-
end
|
190
|
-
-
|
191
|
-
- def login_quentin
|
192
|
-
- response = Net::HTTPSuccess.new('1.0', 200, nil)
|
193
|
-
- 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\":\"<a href=\\\"http:\\/\\/iconfactory.com\\/software\\/twitterrific\\\">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\"}"
|
194
|
-
- login(response)
|
195
|
-
- last_response.headers['Location'].should eql('/')
|
196
|
-
- end
|
197
|
-
-
|
198
|
-
- def unauthorized_quentin
|
199
|
-
- response = Net::HTTPUnauthorized.new('1.0', 401, nil)
|
200
|
-
- response.body = "Unauthorized"
|
201
|
-
- lambda { login(response) }.should raise_error(ArgumentError)
|
202
|
-
- end
|
203
|
-
-
|
204
|
-
- def login(response)
|
205
|
-
- token = 'oU5W1XD2TTZhWT6Snfii9JbVBUkJOurCKhWQHz98765'
|
206
|
-
-
|
207
|
-
- consumer = mock('Consumer', {:request => response})
|
208
|
-
- request_token = mock('RequestToken', {:get_access_token => mock('AccessToken', {:token => 'foo', :secret => 'bar'})})
|
209
|
-
-
|
210
|
-
- OAuth::Consumer.stub!(:new).and_return(consumer)
|
211
|
-
- OAuth::RequestToken.stub!(:new).and_return(request_token)
|
212
|
-
-
|
213
|
-
- get '/callback', :oauth_token => token
|
214
|
-
- last_response
|
215
|
-
- end
|
216
|
-
end
|
217
|
-
diff -ur twitter/templates/spec/templates_spec.rb.erb cucumber/templates/spec/templates_spec.rb.erb
|
218
|
-
--- twitter/templates/spec/templates_spec.rb.erb 2009-05-06 23:36:10.000000000 -0600
|
219
|
-
+++ cucumber/templates/spec/templates_spec.rb.erb 2009-05-20 01:51:20.000000000 -0600
|
220
|
-
@@ -1,59 +1,8 @@
|
221
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
222
|
-
|
223
|
-
-describe "visiting /" do
|
224
|
-
- describe "when unauthenticated" do
|
225
|
-
- it "should display the about page" do
|
226
|
-
- get '/'
|
227
|
-
- last_response.should have_selector("h2:contains('Do you use twitter?')")
|
228
|
-
- end
|
229
|
-
- end
|
230
|
-
- describe "when unauthorized" do
|
231
|
-
- it "should raise an error" do
|
232
|
-
- lambda { unauthorized_quentin }.should raise_error
|
233
|
-
- end
|
234
|
-
- end
|
235
|
-
- describe "when authenticated" do
|
236
|
-
- it "should display a greeting" do
|
237
|
-
- login_quentin
|
238
|
-
- get '/'
|
239
|
-
- last_response.should have_selector("h2:contains('Hello There, you little twitterer!')")
|
240
|
-
- end
|
241
|
-
- end
|
242
|
-
-end
|
243
|
-
-
|
244
|
-
-describe "visiting /peace" do
|
245
|
-
- describe "when authenticated" do
|
246
|
-
- it "should clear the session and redirect to the home page" do
|
247
|
-
- login_quentin
|
248
|
-
- get '/peace'
|
249
|
-
- last_response.headers['Location'].should eql('/')
|
250
|
-
-
|
251
|
-
- get last_response.headers['Location']
|
252
|
-
- last_response.should have_selector("h2:contains('Do you use twitter?')")
|
253
|
-
- end
|
254
|
-
- end
|
255
|
-
-end
|
256
|
-
-
|
257
|
-
-describe "triggering a 404" do
|
258
|
-
- it "should display the failed page" do
|
259
|
-
- pending
|
260
|
-
- get '/lost'
|
261
|
-
- last_response.should have_selector("p:contains('Something went wonky.')")
|
262
|
-
- end
|
263
|
-
-end
|
264
|
-
-
|
265
|
-
-describe "visiting /authenticate" do
|
266
|
-
- it "should redirect to twitter for authentication" do
|
267
|
-
- get '/authenticate'
|
268
|
-
- last_response.headers['Location'].should eql('http://twitter.com/oauth/authorize?oauth_token=requestkey')
|
269
|
-
- end
|
270
|
-
-end
|
271
|
-
-
|
272
|
-
-describe "<%= name.camelize %>::User" do
|
273
|
-
- it "can create users from twitter ids that exist" do
|
274
|
-
- lambda { <%= name.camelize %>::User.create_twitter_user('atmos') }.should_not raise_error
|
275
|
-
- end
|
276
|
-
- it "can't create users from twitter ids that do not exist" do
|
277
|
-
- lambda { <%= name.camelize %>::User.create_twitter_user(/\w{18}/.gen) }.should raise_error(<%= name.camelize %>::User::UserCreationError)
|
278
|
-
+describe "<%= name.camelize %>" do
|
279
|
-
+ it "should do nothing" do
|
280
|
-
+ get '/'
|
281
|
-
+ last_response.should have_selector("h2:contains('Hello There, buddy!')")
|
282
|
-
end
|
283
|
-
end
|
284
|
-
Only in twitter: twitter_generator.rb
|