Sha256: dcec5da7d4415679503a19c7d59690ee80b1b97166118962a50d11718ee0f842
Contents?: true
Size: 1.8 KB
Versions: 3
Compression:
Stored size: 1.8 KB
Contents
module Pact module ActiveSupportSupport extend self def fix_all_the_things thing if thing.is_a?(Regexp) fix_regexp(thing) elsif thing.is_a?(Array) thing.each{ | it | fix_all_the_things it } elsif thing.is_a?(Hash) thing.values.each{ | it | fix_all_the_things it } elsif thing.class.name.start_with?("Pact") thing.instance_variables.collect{ | iv_name | thing.instance_variable_get(iv_name)}.each do | iv | fix_all_the_things iv end end thing end # ActiveSupport JSON overwrites (i.e. TRAMPLES) the json methods of the Regexp class directly # (beneath its destructive hooves of destruction). # This does not seem to be able to be undone without affecting the JSON serialisation in the # calling project, so the best way I've found to fix this issue is to reattach the # original as_json to the Regexp instances in the ConsumerContract before we write them to the # pact file. If anyone can find a better way, please submit a pull request ASAP! def fix_regexp regexp def regexp.as_json options = {} {:json_class => 'Regexp', "o" => self.options, "s" => self.source } end regexp end # Having Active Support JSON loaded somehow kills the formatting of pretty_generate for objects. # Don't ask me why, but it still seems to work for hashes, so the hacky work around is to # reparse the generated JSON into a hash and pretty_generate that... sigh... # Oh ActiveSupport, why.... def fix_json_formatting json if json =~ /\{".*?":"/ JSON.pretty_generate(JSON.parse(json, create_additions: false)) else json end end def remove_unicode json json.gsub(/\\u([0-9A-Za-z]{4})/) {|s| [$1.to_i(16)].pack("U")} end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
pact-support-0.1.2 | lib/pact/shared/active_support_support.rb |
pact-support-0.1.1 | lib/pact/shared/active_support_support.rb |
pact-support-0.1.0 | lib/pact/shared/active_support_support.rb |