Skip to content

Commit

Permalink
Test caller line parsing and digesting
Browse files Browse the repository at this point in the history
  • Loading branch information
bf4 committed Aug 18, 2015
1 parent f93a7e8 commit 215fb85
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 3 deletions.
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_path = caller.first[/\A\S+(?=:\d+:in)/]
base._cache_digest = Digest::MD5.hexdigest(File.read(serializer_file_path))
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
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 215fb85

Please sign in to comment.