From f93a7e8b413f0c3d4bd7a00a9a73a531c3e5ecd4 Mon Sep 17 00:00:00 2001 From: Eric Guo Date: Sat, 1 Aug 2015 12:28:33 +0800 Subject: [PATCH 1/7] need lookahead match for windows file path contain 'c:/git/' So we will got full file path instead of only c if caller.first is: c:/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `' CALLER_FILE = / /A # start of string \S+ # one or more non-spaces (?= # stop previous match when :\d+:in # a colon is followed by one or more digits # followed by a colon followed by in ) /x credit from https://gist.github.com/mikezter/540132 and @bf4 --- lib/active_model/serializer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 73874300..d1ab351c 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -29,8 +29,8 @@ module ActiveModel 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) + serializer_file_path = caller.first[/\A\S+(?=:\d+:in)/] + base._cache_digest = Digest::MD5.hexdigest(File.read(serializer_file_path)) super end From 215fb85c7fc10d8fce504e5a7f6256d8a364e16c Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 18 Aug 2015 17:32:27 -0400 Subject: [PATCH 2/7] Test caller line parsing and digesting --- lib/active_model/serializer.rb | 25 +++++++++++++++++++++++-- test/serializers/cache_test.rb | 27 ++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index d1ab351c..1395b778 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -12,6 +12,22 @@ module ActiveModel include Configuration include Associations + + # Matches + # "c:/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `'" + # AND + # "/c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `'" + # 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) diff --git a/test/serializers/cache_test.rb b/test/serializers/cache_test.rb index 60c35194..a57faa2d 100644 --- a/test/serializers/cache_test.rb +++ b/test/serializers/cache_test.rb @@ -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 `'" + 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 `'" + 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 `'" + 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 From fb719df5a87ade93f05e9a1e03b84c12cf196f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20M=2E=20D=2E=20Moura?= Date: Thu, 20 Aug 2015 23:28:04 -0300 Subject: [PATCH 3/7] adding appveyor.yml file --- appveyor.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..9fb578c9 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,24 @@ +version: '{build}' + +skip_tags: true + +environment: + matrix: + - ruby_version: "193" + - ruby_version: "193-x64" + - ruby_version: "200" + - ruby_version: "200-x64" + - ruby_version: "21" + - ruby_version: "21-x64" + - ruby_version: "22" + - ruby_version: "22-x64" + +install: + - SET PATH=C:\Ruby%ruby_version%\bin;%PATH% + - gem install bundler + - bundle install --retry=3 + +test_script: + - RAILS_ENV=test bundle exec rake + +build: off From 58968ebe952fa404e0473d5bd602fc63d33452ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20M=2E=20D=2E=20Moura?= Date: Fri, 21 Aug 2015 01:28:28 -0300 Subject: [PATCH 4/7] updating README to add windows build status --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 15e86947..df4f5035 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Build Status](https://travis-ci.org/rails-api/active_model_serializers.svg)](https://travis-ci.org/rails-api/active_model_serializers) +Windows Build Status - [![Build Status](https://ci.appveyor.com/api/projects/status/1dly7uj4l69bchmu) + ActiveModel::Serializer brings convention over configuration to your JSON generation. AMS does this through two components: **serializers** and **adapters**. From acb367989c9aba74bed9f768d012913d58d3822d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20M=2E=20D=2E=20Moura?= Date: Fri, 21 Aug 2015 01:45:45 -0300 Subject: [PATCH 5/7] updating appveyor.yml for better ouput --- appveyor.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 9fb578c9..feeece62 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,10 +15,13 @@ environment: install: - SET PATH=C:\Ruby%ruby_version%\bin;%PATH% + - ruby --version + - gem --version - gem install bundler + - bundler --version - bundle install --retry=3 test_script: - - RAILS_ENV=test bundle exec rake + - bundle exec rake build: off From 30463f88fa964563d891ca19c4e6f2fe37ae91b9 Mon Sep 17 00:00:00 2001 From: Eric Guo Date: Wed, 19 Aug 2015 13:30:56 +0800 Subject: [PATCH 6/7] Make testing suite running and pass in Windows thanks @bf4 give many help and suggestion, original PR https://github.com/rails-api/active_model_serializers/pull/1014 --- Gemfile | 3 +++ test/generators/serializer_generator_test.rb | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index baf12948..bdfff856 100644 --- a/Gemfile +++ b/Gemfile @@ -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] diff --git a/test/generators/serializer_generator_test.rb b/test/generators/serializer_generator_test.rb index 815468b7..e5c87d40 100644 --- a/test/generators/serializer_generator_test.rb +++ b/test/generators/serializer_generator_test.rb @@ -46,7 +46,11 @@ class SerializerGeneratorTest < Rails::Generators::TestCase 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 From 7afdad8c1791d44ffe44b5551fba832dc06c0e13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20M=2E=20D=2E=20Moura?= Date: Wed, 26 Aug 2015 03:20:53 -0300 Subject: [PATCH 7/7] removing ruby 2.2 from appveyor --- appveyor.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index feeece62..b32b350c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,8 +10,6 @@ environment: - ruby_version: "200-x64" - ruby_version: "21" - ruby_version: "21-x64" - - ruby_version: "22" - - ruby_version: "22-x64" install: - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%