Skip to content

Commit

Permalink
Reimplement Fixtures.identify so that it consistently generates ident…
Browse files Browse the repository at this point in the history
…ities across ruby versions.

[#2633 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
  • Loading branch information
metaskills authored and jeremy committed May 18, 2009
1 parent a69b28a commit 87adecf
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
9 changes: 5 additions & 4 deletions activerecord/lib/active_record/fixtures.rb
@@ -1,6 +1,7 @@
require 'erb'
require 'yaml'
require 'csv'
require 'zlib'
require 'active_support/dependencies'
require 'active_support/test_case'
require 'active_support/core_ext/logger'
Expand Down Expand Up @@ -434,6 +435,7 @@ class FixtureClassNotFound < StandardError #:nodoc:
# Any fixture labeled "DEFAULTS" is safely ignored.

class Fixtures < (RUBY_VERSION < '1.9' ? YAML::Omap : Hash)
MAX_ID = 2 ** 31 - 1
DEFAULT_FILTER_RE = /\.ya?ml$/

@@all_cached_fixtures = {}
Expand Down Expand Up @@ -525,11 +527,10 @@ def self.create_fixtures(fixtures_directory, table_names, class_names = {})
cached_fixtures(connection, table_names)
end

# Returns a consistent identifier for +label+. This will always
# be a positive integer, and will always be the same for a given
# label, assuming the same OS, platform, and version of Ruby.
# Returns a consistent, platform-independent identifier for +label+.
# Identifiers are positive integers less than 2^32.
def self.identify(label)
label.to_s.hash.abs
Zlib.crc32(label.to_s) % MAX_ID
end

attr_reader :table_name, :name
Expand Down
5 changes: 5 additions & 0 deletions activerecord/test/cases/fixtures_test.rb
Expand Up @@ -518,6 +518,11 @@ def test_identifies_symbols
assert_equal(Fixtures.identify(:foo), Fixtures.identify(:foo))
end

def test_identifies_consistently
assert_equal 1281023246, Fixtures.identify(:ruby)
assert_equal 2140105598, Fixtures.identify(:sapphire_2)
end

TIMESTAMP_COLUMNS = %w(created_at created_on updated_at updated_on)

def test_populates_timestamp_columns
Expand Down

0 comments on commit 87adecf

Please sign in to comment.