stale_fish 1.2.3

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/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ tmp/*
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Justin Smestad
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,85 @@
1
+ = Stale Fish
2
+
3
+ This gem provides a method for keeping your fixtures in sync with their sources. This will prevent the scenario where your build is broken in production, but CI has a green build to do outdated fixture data. StaleFish also allows for FakeWeb integration and URI management.
4
+
5
+ == Features
6
+
7
+ * Fixture update frequency uses the ActiveSupport relative time DSL
8
+ * Versioned configuration file & fixtures means fixtures are only updated once per project.
9
+ * Manage FakeWeb stubbed URI's through StaleFish
10
+ * Automatic detection for Rails & Rack apps (default configuration locations)
11
+ * Test Framework agnostic (tested with Test::Unit & RSpec)
12
+ * Update all fixtures, specified fixtures, or forced update are all supported through the StaleFish.update_stale(*args) method
13
+ * 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.
14
+
15
+ == How To
16
+
17
+ Simply drop in a YAML file in your application (default location: {test/spec}/stale_fish.yml; overwrite by setting StaleFish::Utility.config_path) and issue the following commands.
18
+
19
+ A sample YAML file:
20
+
21
+ stale:
22
+ configuration:
23
+ use_fakeweb: true
24
+ yahoo:
25
+ file_path: RAILS_ROOT + '/spec/fixtures/yahoo.html'
26
+ source_url: http://www.yahoo.com
27
+ last_updated_at:
28
+ update_frequency: 1.day
29
+ google:
30
+ file_path: RAILS_ROOT + '/spec/fixtures/github_commit.json'
31
+ source_url: http://api.github.com/post_commit/
32
+ last_updated_at:
33
+ update_frequency: 2.weeks
34
+
35
+ Specify one block for every fixture you would like to update. The frequency field takes any relative date included in the ActiveSupport library.
36
+
37
+ === RSpec
38
+
39
+ For a single test add it to a before block
40
+
41
+ describe UsersController do
42
+ before do
43
+ StaleFish.update_stale("facebook", "yahoo")
44
+ end
45
+ ....
46
+ end
47
+
48
+ For all tests add the following to spec_helper.rb
49
+
50
+ require 'stale_fish'
51
+
52
+ Spec::Runner.configure do |config|
53
+ ...
54
+ config.before do
55
+ StaleFish.update_stale
56
+ end
57
+ ....
58
+ end
59
+
60
+ === Test::Unit
61
+
62
+ For all tests add the following to test_helper.rb
63
+
64
+ class Test::Unit::TestCase
65
+ ...
66
+ self.use_transactional_fixtures = true
67
+ self.use_instantiated_fixtures = false
68
+ ...
69
+ setup do
70
+ StaleFish.update_stale
71
+ end
72
+ ...
73
+ end
74
+
75
+ == More Info
76
+
77
+ View the wiki: http://wiki.github.com/jsmestad/stale_fish
78
+
79
+ == Thanks
80
+
81
+ Paul Sadauskas for his work on Resourceful (used by StaleFish to provide accurate http handling when updating fixtures)
82
+
83
+ == Copyright
84
+
85
+ Copyright (c) 2009 Justin Smestad. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "stale_fish"
8
+ gem.summary = %Q{ keeps fixtures synchronized with sources to prevent outdated fixtures going undetected. }
9
+ gem.email = "justin.smestad@gmail.com"
10
+ gem.homepage = "http://github.com/jsmestad/stale_fish"
11
+ gem.authors = ["Justin Smestad"]
12
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
+
14
+ gem.add_dependency "fakeweb", ">= 1.2.4"
15
+ gem.add_dependency "resourceful", "~> 0.6.1"
16
+ gem.add_dependency "activesupport", ">= 2.1.2"
17
+ end
18
+
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
21
+ end
22
+
23
+ require 'spec/rake/spectask'
24
+ Spec::Rake::SpecTask.new(:spec) do |spec|
25
+ spec.libs << 'lib' << 'spec'
26
+ spec.spec_files = FileList['spec/**/*_spec.rb']
27
+ end
28
+
29
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
30
+ spec.libs << 'lib' << 'spec'
31
+ spec.pattern = 'spec/**/*_spec.rb'
32
+ spec.rcov = true
33
+ end
34
+
35
+
36
+ task :default => :spec
37
+
38
+ require 'rake/rdoctask'
39
+ Rake::RDocTask.new do |rdoc|
40
+ if File.exist?('VERSION.yml')
41
+ config = YAML.load(File.read('VERSION.yml'))
42
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
43
+ else
44
+ version = ""
45
+ end
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "stale_popcorn #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
52
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.2.3
@@ -0,0 +1,26 @@
1
+ module StaleFish
2
+
3
+ class << self
4
+ attr_accessor :use_fakeweb
5
+ end
6
+
7
+ self.use_fakeweb = true
8
+
9
+ class FixtureDefinition
10
+ alias_method :update_without_fakeweb, :update!
11
+
12
+ def update!
13
+ FakeWeb.allow_net_connect = true
14
+ update_without_fakeweb
15
+ FakeWeb.allow_net_connect = false
16
+ end
17
+
18
+ def register_uri
19
+ if StaleFish.use_fakeweb && !FakeWeb.registered_uri?(:any, source_url)
20
+ FakeWeb.register_uri(:any, source_url, :body => file_path)
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,34 @@
1
+ module StaleFish
2
+
3
+ class FixtureDefinition
4
+ attr_accessor :tag, :file_path, :source_url, :last_updated_at, :response
5
+ attr_accessor :update_frequency
6
+
7
+ def is_stale?
8
+ StaleFish.force_flag || last_updated_at.nil? || ((DateTime.now + eval(update_frequency)) < last_updated_at)
9
+ end
10
+
11
+ def update!
12
+ begin
13
+ self.response = StaleFish.http.resource(source_url).get
14
+ File.open(eval(file_path), 'w') { |file| file.write(response.body.to_s) }
15
+ self.last_updated_at = DateTime.now
16
+ rescue Resourceful::UnsuccessfulHttpRequestError
17
+ raise StaleFish::FixtureUpdateFailure, "#{key}'s source: #{value['source']} returned unsuccessfully."
18
+ rescue ArgumentError
19
+ raise StaleFish::MalformedSourceURL, "#{key}'s source: #{value['source']} is not a valid URL path. Most likely it's missing a trailing slash."
20
+ end
21
+ end
22
+
23
+ def output_hash
24
+ <<-EOF
25
+ #{tag}:
26
+ file_path: #{file_path}
27
+ source_url: #{source_url}
28
+ update_frequency: #{update_frequency}
29
+ last_updated_at: #{last_updated_at}
30
+ EOF
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,67 @@
1
+ require 'singleton'
2
+
3
+ module StaleFish
4
+ module Utility
5
+ class << self
6
+ attr_accessor :config_path
7
+ end
8
+
9
+ def self.valid_path?
10
+ !config_path.nil? ? File.exist?(config_path) : false
11
+ end
12
+
13
+ def self.loader
14
+ raise Errno::ENOENT, 'invalid config path: #{Utility.config_path}; ensure StaleFish::Utility.valid_path? is true' unless Utility.valid_path?
15
+
16
+ data = YAML.load_file(config_path)
17
+
18
+ config = data['stale'].delete('configuration')
19
+ StaleFish.use_fakeweb = (config['use_fakeweb'] || false) unless config.nil?
20
+
21
+ raise YAML::Error, 'missing root element' unless data['stale']
22
+
23
+ # Reset these
24
+ StaleFish.fixtures = []
25
+ StaleFish.force_flag = false
26
+
27
+ deprecated_var_names = {
28
+ 'file_path' => 'filepath',
29
+ 'update_frequency' => 'frequency',
30
+ 'source_url' => 'source',
31
+ 'last_updated_at' => 'updated'
32
+ }
33
+
34
+ data['stale'].each do |key, value|
35
+ definition = FixtureDefinition.new
36
+ definition.tag = key
37
+ %w{ file_path update_frequency source_url }.each do |field|
38
+ if value[deprecated_var_names[field]]
39
+ $stderr.puts "Deprecation warning: #{field} has been replaced with #{deprecated_var_names[field]}. Please update #{Utility.config_path}."
40
+ definition.send((field + '=').to_sym, value[deprecated_var_names[field]])
41
+ else
42
+ raise YAML::Error, "missing #{field} node for #{key} in #{Utility.config_path}" unless value[field]
43
+ definition.send((field + '=').to_sym, value[field])
44
+ end
45
+ end
46
+
47
+ $stderr.puts "Deprecation warning: updated has been changed to last_updated_at; this change is automatic." if value.has_key?('updated')
48
+ definition.last_updated_at = value['last_updated_at'] || value[deprecated_var_names['last_updated_at']] || nil
49
+
50
+ StaleFish.fixtures << definition
51
+ end
52
+ end
53
+
54
+ def self.writer
55
+ string = <<-EOF
56
+ stale:
57
+ configuration:
58
+ use_fakeweb: #{StaleFish.use_fakeweb}
59
+ EOF
60
+ StaleFish.fixtures.each do |fix|
61
+ string << fix.output_hash
62
+ end
63
+
64
+ File.open(config_path, "w+") { |f| f.write(string) }
65
+ end
66
+ end
67
+ end
data/lib/stale_fish.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'singleton'
2
+ require 'ftools'
3
+ require 'yaml'
4
+ require 'rubygems'
5
+ require 'activesupport' # only used for time helpers
6
+ require 'resourceful'
7
+
8
+ require 'stale_fish/utility'
9
+ require 'stale_fish/fixture_definition'
10
+
11
+ begin
12
+ require 'fakeweb'
13
+ require 'stale_fish/fakeweb'
14
+ rescue LoadError; end
15
+
16
+ module StaleFish
17
+ # no one likes stale fish.
18
+
19
+ class FixtureUpdateFailure < StandardError; end
20
+ class MalformedSourceURL < StandardError; end
21
+
22
+ class << self
23
+ attr_accessor :configuration
24
+ attr_accessor :http
25
+ attr_accessor :fixtures
26
+ attr_accessor :force_flag
27
+ end
28
+
29
+ self.fixtures = []
30
+ Utility.config_path = 'stale_fish.yml'
31
+ self.http = Resourceful::HttpAccessor.new
32
+
33
+ def self.update_stale(*args)
34
+ # TODO move this to its own spot
35
+ Utility.loader if self.fixtures.empty?
36
+ self.force_flag = args.pop[:force] if args.last.is_a?(Hash)
37
+
38
+ stale = if args.empty?
39
+ fixtures.select { |f| f.is_stale? }
40
+ else
41
+ fixtures.select { |f| f.is_stale? && args.include?(f.tag) }
42
+ end
43
+
44
+ stale.each do |fixture|
45
+ fixture.update!
46
+ end
47
+
48
+ fixtures.each { |fixture| fixture.register_uri if StaleFish.use_fakeweb }
49
+
50
+ Utility.writer
51
+ return stale.size
52
+ end
53
+
54
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe StaleFish do
4
+
5
+ before do
6
+ @deprecated_yaml = File.dirname(__FILE__) + "/fixtures/deprecated_yaml.yml"
7
+ end
8
+
9
+ it "should assign the config file" do
10
+ StaleFish::Utility.config_path = @deprecated_yaml
11
+ StaleFish::Utility.config_path.should == @deprecated_yaml
12
+ StaleFish::Utility.valid_path?.should == true
13
+ end
14
+
15
+ it "should map to valid attributes" do
16
+ pending
17
+ StaleFish::Utility.loader
18
+ end
19
+
20
+ end
@@ -0,0 +1,12 @@
1
+ ---
2
+ stale:
3
+ yahoo:
4
+ filepath: ./tmp/yahoo.html
5
+ source: http://www.yahoo.com/
6
+ updated:
7
+ frequency: 1.day
8
+ google:
9
+ filepath: ./tmp/google.html
10
+ source: http://www.google.com/
11
+ updated:
12
+ frequency: 2.weeks
File without changes
@@ -0,0 +1,5 @@
1
+ stale:
2
+ google:
3
+ file_path: google.html
4
+ yahoo:
5
+ update_frequency: 2.weeks.ago
@@ -0,0 +1,11 @@
1
+ stale:
2
+ yahoo:
3
+ file_path: ./tmp/yahoo.html
4
+ source_url: http://www.yahoo.com/
5
+ last_updated_at:
6
+ update_frequency: 1.day
7
+ google:
8
+ file_path: ./tmp/google.html
9
+ source_url: http://www.google.com/
10
+ last_updated_at:
11
+ update_frequency: 2.weeks
@@ -0,0 +1,13 @@
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-09-25T17:31:11-06: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-09-25T17:31:11-06:00
File without changes
@@ -0,0 +1,9 @@
1
+ require 'spec'
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ require 'stale_fish'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
@@ -0,0 +1,104 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "StaleFish" do
4
+
5
+ before do
6
+ @valid_yaml = File.dirname(__FILE__) + "/fixtures/stale_fish.yml"
7
+ end
8
+
9
+ it "should assign the config file" do
10
+ StaleFish::Utility.config_path = @valid_yaml
11
+ StaleFish::Utility.config_path.should == @valid_yaml
12
+ StaleFish::Utility.valid_path?.should == true
13
+ end
14
+
15
+ context "when loading the yaml file" do
16
+
17
+ it "should raise errors on malformed yaml" do
18
+ StaleFish::Utility.config_path = File.dirname(__FILE__) + "/fixtures/malformed_stale_fish.yml"
19
+ lambda { StaleFish::Utility.loader }.should_not raise_error(Errno::ENOENT)
20
+ lambda { StaleFish::Utility.loader }.should raise_error(YAML::Error)
21
+ end
22
+
23
+ it "shouldn't fail on valid yaml" do
24
+ StaleFish::Utility.config_path = @valid_yaml
25
+ lambda { StaleFish::Utility.loader }.should_not raise_error(YAML::Error)
26
+ end
27
+
28
+ it "should establish the fixture definitions" do
29
+ StaleFish::Utility.config_path = @valid_yaml
30
+ lambda { StaleFish::Utility.loader }
31
+ end
32
+
33
+ end
34
+
35
+ context "after loading the config" do
36
+
37
+ before(:each) do
38
+ FileUtils.cp(@valid_yaml, File.dirname(__FILE__) + "/fixtures/stale_fish.orig.yml")
39
+ StaleFish::Utility.config_path = @valid_yaml
40
+ StaleFish::Utility.valid_path?.should == true
41
+ StaleFish::Utility.loader
42
+ end
43
+
44
+ it "should update all stale fixtures" do
45
+ StaleFish.update_stale.should == 2
46
+ end
47
+
48
+ it "should update only the passed fixtures, if stale" do
49
+ StaleFish.update_stale('google').should == 1
50
+ end
51
+
52
+ it "should update all passed fixtures, when passed the :force flag" do
53
+ StaleFish.update_stale('google').should == 1
54
+ StaleFish.update_stale('google', :force => true).should == 1
55
+ end
56
+
57
+ it "should not have any remaining fixtures to update" do
58
+ StaleFish.update_stale.should == 2
59
+ StaleFish.fixtures = [] # this will force a reload of the YAML file.
60
+ StaleFish.fixtures.should == [] # ensure it was reset
61
+ StaleFish::Utility.loader
62
+ StaleFish.update_stale.should == 0
63
+ end
64
+
65
+ it "should notify user, and rollback, if source is no longer valid"
66
+
67
+ after(:each) do
68
+ FileUtils.mv(@valid_yaml, File.dirname(__FILE__)+"/../tmp/stale_fish.test.yml")
69
+ FileUtils.mv(File.dirname(__FILE__)+"/fixtures/stale_fish.orig.yml", @valid_yaml)
70
+ StaleFish.fixtures = []
71
+ end
72
+
73
+ end
74
+
75
+ context "with FakeWeb" do
76
+
77
+ before(:each) do
78
+ @fakeweb_yaml = File.dirname(__FILE__) + '/fixtures/stale_fish_fakeweb.yml'
79
+ StaleFish::Utility.config_path = @fakeweb_yaml
80
+ StaleFish::Utility.valid_path?.should == true
81
+ StaleFish::Utility.loader
82
+ StaleFish.use_fakeweb = true
83
+ StaleFish.use_fakeweb.should == true
84
+ end
85
+
86
+ it "should register any FakeWeb URI's" do
87
+ definition = StaleFish.fixtures.first
88
+ definition.register_uri
89
+ FakeWeb.registered_uri?(definition.source_url).should == true
90
+ end
91
+
92
+ it "should turn off FakeWeb.allow_net_connect to process stale fixtures" do
93
+ FakeWeb.allow_net_connect = false
94
+ lambda { StaleFish.update_stale(:force => true) }.should_not raise_error
95
+ lambda { StaleFish.update_stale(:force => true) }.should_not change { FakeWeb.allow_net_connect? }
96
+ end
97
+
98
+ after(:each) do
99
+ StaleFish.fixtures = []
100
+ end
101
+
102
+ end
103
+
104
+ end
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{stale_fish}
8
+ s.version = "1.2.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Justin Smestad"]
12
+ s.date = %q{2009-10-03}
13
+ s.email = %q{justin.smestad@gmail.com}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "LICENSE",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "lib/stale_fish.rb",
25
+ "lib/stale_fish/fakeweb.rb",
26
+ "lib/stale_fish/fixture_definition.rb",
27
+ "lib/stale_fish/utility.rb",
28
+ "spec/deprecation_spec.rb",
29
+ "spec/fixtures/deprecated_yaml.yml",
30
+ "spec/fixtures/google.html",
31
+ "spec/fixtures/malformed_stale_fish.yml",
32
+ "spec/fixtures/stale_fish.yml",
33
+ "spec/fixtures/stale_fish_fakeweb.yml",
34
+ "spec/fixtures/yahoo.html",
35
+ "spec/spec_helper.rb",
36
+ "spec/stale_fish_spec.rb",
37
+ "stale_fish.gemspec",
38
+ "tmp/.gitignore"
39
+ ]
40
+ s.homepage = %q{http://github.com/jsmestad/stale_fish}
41
+ s.rdoc_options = ["--charset=UTF-8"]
42
+ s.require_paths = ["lib"]
43
+ s.rubygems_version = %q{1.3.5}
44
+ s.summary = %q{keeps fixtures synchronized with sources to prevent outdated fixtures going undetected.}
45
+ s.test_files = [
46
+ "spec/deprecation_spec.rb",
47
+ "spec/spec_helper.rb",
48
+ "spec/stale_fish_spec.rb"
49
+ ]
50
+
51
+ if s.respond_to? :specification_version then
52
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
53
+ s.specification_version = 3
54
+
55
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
56
+ s.add_runtime_dependency(%q<fakeweb>, [">= 1.2.4"])
57
+ s.add_runtime_dependency(%q<resourceful>, ["~> 0.6.1"])
58
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.1.2"])
59
+ else
60
+ s.add_dependency(%q<fakeweb>, [">= 1.2.4"])
61
+ s.add_dependency(%q<resourceful>, ["~> 0.6.1"])
62
+ s.add_dependency(%q<activesupport>, [">= 2.1.2"])
63
+ end
64
+ else
65
+ s.add_dependency(%q<fakeweb>, [">= 1.2.4"])
66
+ s.add_dependency(%q<resourceful>, ["~> 0.6.1"])
67
+ s.add_dependency(%q<activesupport>, [">= 2.1.2"])
68
+ end
69
+ end
data/tmp/.gitignore ADDED
File without changes
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stale_fish
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Justin Smestad
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-03 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: fakeweb
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.4
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: resourceful
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.6.1
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: activesupport
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 2.1.2
44
+ version:
45
+ description:
46
+ email: justin.smestad@gmail.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - LICENSE
53
+ - README.rdoc
54
+ files:
55
+ - .gitignore
56
+ - LICENSE
57
+ - README.rdoc
58
+ - Rakefile
59
+ - VERSION
60
+ - lib/stale_fish.rb
61
+ - lib/stale_fish/fakeweb.rb
62
+ - lib/stale_fish/fixture_definition.rb
63
+ - lib/stale_fish/utility.rb
64
+ - spec/deprecation_spec.rb
65
+ - spec/fixtures/deprecated_yaml.yml
66
+ - spec/fixtures/google.html
67
+ - spec/fixtures/malformed_stale_fish.yml
68
+ - spec/fixtures/stale_fish.yml
69
+ - spec/fixtures/stale_fish_fakeweb.yml
70
+ - spec/fixtures/yahoo.html
71
+ - spec/spec_helper.rb
72
+ - spec/stale_fish_spec.rb
73
+ - stale_fish.gemspec
74
+ - tmp/.gitignore
75
+ has_rdoc: true
76
+ homepage: http://github.com/jsmestad/stale_fish
77
+ licenses: []
78
+
79
+ post_install_message:
80
+ rdoc_options:
81
+ - --charset=UTF-8
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: "0"
89
+ version:
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: "0"
95
+ version:
96
+ requirements: []
97
+
98
+ rubyforge_project:
99
+ rubygems_version: 1.3.5
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: keeps fixtures synchronized with sources to prevent outdated fixtures going undetected.
103
+ test_files:
104
+ - spec/deprecation_spec.rb
105
+ - spec/spec_helper.rb
106
+ - spec/stale_fish_spec.rb