mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
Merge pull request #1 from bf4/parse_windows_paths
Test caller line parsing and digesting
This commit is contained in:
commit
90bff2f15b
@ -12,6 +12,22 @@ module ActiveModel
|
||||
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
|
||||
@ -29,8 +45,7 @@ module ActiveModel
|
||||
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
|
||||
|
||||
@ -161,6 +176,12 @@ module ActiveModel
|
||||
@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)
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
require 'test_helper'
|
||||
require 'tempfile'
|
||||
module ActiveModel
|
||||
class Serializer
|
||||
class CacheTest < Minitest::Test
|
||||
@ -125,10 +126,34 @@ module ActiveModel
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user