Skip to content

Commit

Permalink
Merge pull request #1071 from Eric-Guo/appveyor
Browse files Browse the repository at this point in the history
Make testing suite running and pass in Windows
  • Loading branch information
joaomdmoura committed Aug 22, 2015
2 parents acb3679 + 30463f8 commit 82bd084
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 4 deletions.
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ if version == "master"
else
gem "rails", "~> #{version}.0"
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
25 changes: 23 additions & 2 deletions lib/active_model/serializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,22 @@ class Serializer
include Configuration
include Associations


# Matches
# "c:/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `<top (required)>'"
# AND
# "/c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `<top (required)>'"
# AS
# c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb
CALLER_FILE = /
\A # start of string
\S+ # one or more non-spaces
(?= # stop previous match when
:\d+ # a colon is followed by one or more digits
:in # followed by a colon followed by in
)
/x

class << self
attr_accessor :_attributes
attr_accessor :_attributes_keys
Expand All @@ -29,8 +45,7 @@ def self.inherited(base)
base._attributes = self._attributes.try(:dup) || []
base._attributes_keys = self._attributes_keys.try(:dup) || {}
base._urls = []
serializer_file = File.open(caller.first[/^[^:]+/])
base._cache_digest = Digest::MD5.hexdigest(serializer_file.read)
base._cache_digest = digest_caller_file(caller.first)
super
end

Expand Down Expand Up @@ -161,6 +176,12 @@ def self.serializers_cache
@serializers_cache ||= ThreadSafe::Cache.new
end

def self.digest_caller_file(caller_line)
serializer_file_path = caller_line[CALLER_FILE]
serializer_file_contents = IO.read(serializer_file_path)
Digest::MD5.hexdigest(serializer_file_contents)
end

attr_reader :options

def self.get_serializer_for(klass)
Expand Down
6 changes: 5 additions & 1 deletion test/generators/serializer_generator_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@ def test_generates_attributes_and_associations
def test_with_no_attributes_does_not_add_extra_space
run_generator ["account"]
assert_file "app/serializers/account_serializer.rb" do |content|
assert_no_match /\n\nend/, content
if RUBY_PLATFORM =~ /mingw/
assert_no_match /\r\n\r\nend/, content
else
assert_no_match /\n\nend/, content
end
end
end
end
27 changes: 26 additions & 1 deletion test/serializers/cache_test.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require 'test_helper'
require 'tempfile'
module ActiveModel
class Serializer
class CacheTest < Minitest::Test
Expand Down Expand Up @@ -125,10 +126,34 @@ def test_uses_file_digest_in_cache_key
assert_equal(@blog_serializer.attributes, ActionController::Base.cache_store.fetch(@blog.cache_key_with_digest))
end

def _cache_digest_definition
def test_cache_digest_definition
assert_equal(::Model::FILE_DIGEST, @post_serializer.class._cache_digest)
end

def test_serializer_file_path_on_nix
path = "/Users/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb"
caller_line = "#{path}:1:in `<top (required)>'"
assert_equal caller_line[ActiveModel::Serializer::CALLER_FILE], path
end

def test_serializer_file_path_on_windows
path = "c:/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb"
caller_line = "#{path}:1:in `<top (required)>'"
assert_equal caller_line[ActiveModel::Serializer::CALLER_FILE], path
end

def test_digest_caller_file
contents = "puts 'AMS rocks'!"
file = Tempfile.new("some_ruby.rb")
file.write(contents)
path = file.path
caller_line = "#{path}:1:in `<top (required)>'"
file.close
assert_equal ActiveModel::Serializer.digest_caller_file(caller_line), Digest::MD5.hexdigest(contents)
ensure
file.unlink
end

private
def render_object_with_cache(obj)
ActiveModel::SerializableResource.new(obj).serializable_hash
Expand Down

0 comments on commit 82bd084

Please sign in to comment.