stale_fish 1.3.0.pre → 1.3.0.pre1
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/README.rdoc +27 -30
- data/VERSION +1 -1
- data/lib/stale_fish/fixture.rb +7 -7
- data/lib/stale_fish.rb +19 -0
- data/spec/unit/fixture_spec.rb +5 -0
- data/spec/unit/stale_fish_spec.rb +19 -2
- data/stale_fish.gemspec +1 -7
- metadata +1 -7
- data/spec/fixtures/deprecated_yaml.yml +0 -12
- data/spec/fixtures/google.html +0 -0
- data/spec/fixtures/malformed_stale_fish.yml +0 -5
- data/spec/fixtures/stale_fish.yml +0 -11
- data/spec/fixtures/stale_fish_fakeweb.yml +0 -13
- data/spec/fixtures/yahoo.html +0 -0
data/README.rdoc
CHANGED
@@ -1,42 +1,41 @@
|
|
1
1
|
= Stale Fish
|
2
2
|
|
3
|
-
|
3
|
+
StaleFish is a utility for storing web requests as fixtures, faking web requests, and ensuring fixtures stay fresh by checking request at periodic intervals.
|
4
|
+
It works at a global level, without modifying code or writing extensive stubs.
|
4
5
|
|
5
6
|
== NOTICE
|
6
7
|
|
7
|
-
1.3.x is a complete rewrite of the StaleFish utility.
|
8
|
-
|
9
|
-
The information below has not been corrected or updated.
|
8
|
+
1.3.x is a complete rewrite of the StaleFish utility. It is incompatible with previous versions of StaleFish.
|
10
9
|
|
11
10
|
== Features
|
12
11
|
|
13
|
-
*
|
14
|
-
*
|
15
|
-
*
|
16
|
-
*
|
12
|
+
* Manage FakeWeb through StaleFish
|
13
|
+
* Fixtures are updated based on a per-fixture update interval
|
14
|
+
* Fixture update interval supports the ActiveSupport relative time DSL (ex. '30.minutes', '2.days', '1.year')
|
15
|
+
* Configuration file and fixture data is version control friendly
|
16
|
+
* Specify which fixtures are checked for freshness using :all, :only, & :except arguement options
|
17
|
+
* Force update of all fixtures regardless of freshness (bypass freshness check)
|
17
18
|
* Test Framework agnostic (tested with Test::Unit & RSpec)
|
18
|
-
* Update all fixtures, specified fixtures, or forced update are all supported through the StaleFish.update_stale(*args) method
|
19
|
-
* Fixtures are ONLY updated when a valid HTTP request is made, if server returns anything other than 200, an error is thrown failing the tests.
|
20
19
|
|
21
20
|
== How To
|
22
21
|
|
23
|
-
Simply drop in a YAML file in your application (
|
22
|
+
Simply drop in a YAML file in your application (recommended location: {test/spec}/fixtures/stale_fish.yml) and issue the following commands.
|
24
23
|
|
25
24
|
A sample YAML file:
|
26
25
|
|
27
26
|
stale:
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
last_updated_at:
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
27
|
+
twitter: # fixture name (this must be unique)
|
28
|
+
file: 'timeline.json' # fixture save location
|
29
|
+
update_interval: 30.days # update interval
|
30
|
+
check_against: http://twitter.com/api/timeline # data to update fixture with when stale
|
31
|
+
request_type: POST # request type to use when updating: GET, POST
|
32
|
+
last_updated_at: # timestamp of last fixture update (can be left blank)
|
33
|
+
gh_commits:
|
34
|
+
file: 'commits.xml'
|
35
|
+
update_interval: 3.days
|
36
|
+
check_against: http://api.github.com/commits.xml
|
37
|
+
request_type: GET
|
38
|
+
last_updated_at:
|
40
39
|
|
41
40
|
Specify one block for every fixture you would like to update. The frequency field takes any relative date included in the ActiveSupport library.
|
42
41
|
|
@@ -46,7 +45,7 @@ For a single test add it to a before block
|
|
46
45
|
|
47
46
|
describe UsersController do
|
48
47
|
before do
|
49
|
-
StaleFish.update_stale
|
48
|
+
StaleFish.update_stale
|
50
49
|
end
|
51
50
|
....
|
52
51
|
end
|
@@ -57,7 +56,7 @@ For all tests add the following to spec_helper.rb
|
|
57
56
|
|
58
57
|
Spec::Runner.configure do |config|
|
59
58
|
...
|
60
|
-
config.before do
|
59
|
+
config.before :suite do
|
61
60
|
StaleFish.update_stale
|
62
61
|
end
|
63
62
|
....
|
@@ -68,9 +67,6 @@ For all tests add the following to spec_helper.rb
|
|
68
67
|
For all tests add the following to test_helper.rb
|
69
68
|
|
70
69
|
class Test::Unit::TestCase
|
71
|
-
...
|
72
|
-
self.use_transactional_fixtures = true
|
73
|
-
self.use_instantiated_fixtures = false
|
74
70
|
...
|
75
71
|
setup do
|
76
72
|
StaleFish.update_stale
|
@@ -78,14 +74,15 @@ For all tests add the following to test_helper.rb
|
|
78
74
|
...
|
79
75
|
end
|
80
76
|
|
77
|
+
|
81
78
|
== More Info
|
82
79
|
|
83
80
|
View the wiki: http://wiki.github.com/jsmestad/stale_fish
|
84
81
|
|
85
82
|
== Thanks
|
86
83
|
|
87
|
-
|
84
|
+
This utility uses FakeWeb, thanks to those contributors for there excellent work.
|
88
85
|
|
89
86
|
== Copyright
|
90
87
|
|
91
|
-
Copyright (c) 2009 Justin Smestad. See LICENSE for details.
|
88
|
+
Copyright (c) 2009-2010 Justin Smestad. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.0.
|
1
|
+
1.3.0.pre1
|
data/lib/stale_fish/fixture.rb
CHANGED
@@ -10,7 +10,7 @@ module StaleFish
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def is_stale?
|
13
|
-
if (last_updated_at + update_interval) < Time.now
|
13
|
+
if last_updated_at.nil? || (last_updated_at + update_interval) < Time.now
|
14
14
|
return true
|
15
15
|
else
|
16
16
|
return false
|
@@ -19,14 +19,14 @@ module StaleFish
|
|
19
19
|
|
20
20
|
def update!
|
21
21
|
uri, type = URI.parse(check_against), request_type.downcase.to_sym
|
22
|
-
Net::HTTP.start(uri.host)
|
22
|
+
Net::HTTP.start(uri.host) do |http|
|
23
23
|
response = if type == :post
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
http.post(uri.path)
|
25
|
+
else
|
26
|
+
http.get(uri.path)
|
27
|
+
end
|
28
28
|
write_response_to_file(response.body)
|
29
|
-
|
29
|
+
end
|
30
30
|
|
31
31
|
self.last_updated_at = Time.now
|
32
32
|
end
|
data/lib/stale_fish.rb
CHANGED
@@ -9,6 +9,13 @@ module StaleFish
|
|
9
9
|
# no one likes stale fish.
|
10
10
|
class << self
|
11
11
|
|
12
|
+
def setup(config_location=nil)
|
13
|
+
self.configuration = config_location
|
14
|
+
load
|
15
|
+
register_fixtures
|
16
|
+
block_requests
|
17
|
+
end
|
18
|
+
|
12
19
|
def configuration=(config)
|
13
20
|
@configuration = config
|
14
21
|
end
|
@@ -22,12 +29,16 @@ module StaleFish
|
|
22
29
|
end
|
23
30
|
|
24
31
|
def update_stale(options={})
|
32
|
+
reset_fixtures = false
|
33
|
+
|
25
34
|
allow_requests
|
26
35
|
fixtures(options).each do |fixture|
|
27
36
|
if fixture.is_stale?
|
28
37
|
fixture.update!
|
38
|
+
reset_fixtures = true
|
29
39
|
end
|
30
40
|
end
|
41
|
+
register_fixtures if reset_fixtures
|
31
42
|
block_requests
|
32
43
|
write
|
33
44
|
end
|
@@ -37,6 +48,7 @@ module StaleFish
|
|
37
48
|
fixtures(options).each do |fixture|
|
38
49
|
fixture.update!
|
39
50
|
end
|
51
|
+
register_fixtures
|
40
52
|
block_requests
|
41
53
|
write
|
42
54
|
end
|
@@ -81,5 +93,12 @@ module StaleFish
|
|
81
93
|
def block_requests
|
82
94
|
FakeWeb.allow_net_connect = false
|
83
95
|
end
|
96
|
+
|
97
|
+
def register_fixtures
|
98
|
+
FakeWeb.clean_registry
|
99
|
+
fixtures.each do |fixture|
|
100
|
+
fixture.register_lock!
|
101
|
+
end
|
102
|
+
end
|
84
103
|
end
|
85
104
|
end
|
data/spec/unit/fixture_spec.rb
CHANGED
@@ -37,6 +37,11 @@ describe StaleFish::Fixture do
|
|
37
37
|
it "should return false when fresh" do
|
38
38
|
@fresh_fixture.is_stale?.should == false
|
39
39
|
end
|
40
|
+
|
41
|
+
it "should return true when last_updated_at is empty" do
|
42
|
+
@stale_fixture.last_updated_at = nil
|
43
|
+
@stale_fixture.is_stale?.should == true
|
44
|
+
end
|
40
45
|
end
|
41
46
|
|
42
47
|
context "#update!" do
|
@@ -3,9 +3,22 @@ require File.join(File.dirname(__FILE__), *%w[.. spec_helper])
|
|
3
3
|
describe StaleFish do
|
4
4
|
before do
|
5
5
|
@stale_fixture = StaleFish::Fixture.new(:last_updated_at => 1.week.ago,
|
6
|
-
:update_interval => 1.day
|
6
|
+
:update_interval => 1.day,
|
7
|
+
:request_type => 'GET',
|
8
|
+
:check_against => 'http://google.com/index.html')
|
7
9
|
@fresh_fixture = StaleFish::Fixture.new(:last_updated_at => 1.day.from_now,
|
8
|
-
:update_interval => 1.day
|
10
|
+
:update_interval => 1.day,
|
11
|
+
:request_type => 'GET',
|
12
|
+
:check_against => 'http://google.com/index.html')
|
13
|
+
end
|
14
|
+
|
15
|
+
context ".setup" do
|
16
|
+
it "should call appropriate functions" do
|
17
|
+
StaleFish.should_receive(:load)
|
18
|
+
StaleFish.should_receive(:register_fixtures)
|
19
|
+
StaleFish.should_receive(:block_requests)
|
20
|
+
StaleFish.setup
|
21
|
+
end
|
9
22
|
end
|
10
23
|
|
11
24
|
context ".configuration" do
|
@@ -121,4 +134,8 @@ describe StaleFish do
|
|
121
134
|
StaleFish.send(:block_requests).should == false
|
122
135
|
end
|
123
136
|
end
|
137
|
+
|
138
|
+
context ".register_fixtures" do
|
139
|
+
|
140
|
+
end
|
124
141
|
end
|
data/stale_fish.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{stale_fish}
|
8
|
-
s.version = "1.3.0.
|
8
|
+
s.version = "1.3.0.pre1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Justin Smestad"]
|
@@ -24,12 +24,6 @@ Gem::Specification.new do |s|
|
|
24
24
|
"VERSION",
|
25
25
|
"lib/stale_fish.rb",
|
26
26
|
"lib/stale_fish/fixture.rb",
|
27
|
-
"spec/fixtures/deprecated_yaml.yml",
|
28
|
-
"spec/fixtures/google.html",
|
29
|
-
"spec/fixtures/malformed_stale_fish.yml",
|
30
|
-
"spec/fixtures/stale_fish.yml",
|
31
|
-
"spec/fixtures/stale_fish_fakeweb.yml",
|
32
|
-
"spec/fixtures/yahoo.html",
|
33
27
|
"spec/spec.opts",
|
34
28
|
"spec/spec_helper.rb",
|
35
29
|
"spec/support/stale_fish.yml",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stale_fish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.
|
4
|
+
version: 1.3.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Smestad
|
@@ -50,12 +50,6 @@ files:
|
|
50
50
|
- VERSION
|
51
51
|
- lib/stale_fish.rb
|
52
52
|
- lib/stale_fish/fixture.rb
|
53
|
-
- spec/fixtures/deprecated_yaml.yml
|
54
|
-
- spec/fixtures/google.html
|
55
|
-
- spec/fixtures/malformed_stale_fish.yml
|
56
|
-
- spec/fixtures/stale_fish.yml
|
57
|
-
- spec/fixtures/stale_fish_fakeweb.yml
|
58
|
-
- spec/fixtures/yahoo.html
|
59
53
|
- spec/spec.opts
|
60
54
|
- spec/spec_helper.rb
|
61
55
|
- spec/support/stale_fish.yml
|
data/spec/fixtures/google.html
DELETED
File without changes
|
@@ -1,13 +0,0 @@
|
|
1
|
-
stale:
|
2
|
-
configuration:
|
3
|
-
use_fakeweb: true
|
4
|
-
yahoo:
|
5
|
-
file_path: ./tmp/yahoo.html
|
6
|
-
source_url: http://www.yahoo.com/
|
7
|
-
update_frequency: 1.day
|
8
|
-
last_updated_at: 2009-11-30T18:26:20-07:00
|
9
|
-
google:
|
10
|
-
file_path: ./tmp/google.html
|
11
|
-
source_url: http://www.google.com/
|
12
|
-
update_frequency: 2.weeks
|
13
|
-
last_updated_at: 2009-11-30T18:26:20-07:00
|
data/spec/fixtures/yahoo.html
DELETED
File without changes
|