Sha256: fa14beb6cfa692d335530d4573621397789e502e731cc55800feb8ee497f1702

Contents?: true

Size: 1.85 KB

Versions: 87

Compression:

Stored size: 1.85 KB

Contents

# The support you need when you use ActiveSupport

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

87 entries across 87 versions & 1 rubygems

Version Path
pact-support-1.16.5 lib/pact/shared/active_support_support.rb
pact-support-1.16.4 lib/pact/shared/active_support_support.rb
pact-support-1.16.3 lib/pact/shared/active_support_support.rb
pact-support-1.16.2 lib/pact/shared/active_support_support.rb
pact-support-1.17.0.pre.rc2 lib/pact/shared/active_support_support.rb
pact-support-1.17.0.pre.rc1 lib/pact/shared/active_support_support.rb
pact-support-1.16.1 lib/pact/shared/active_support_support.rb
pact-support-1.16.0 lib/pact/shared/active_support_support.rb
pact-support-1.15.5 lib/pact/shared/active_support_support.rb
pact-support-1.15.4 lib/pact/shared/active_support_support.rb
pact-support-1.15.3 lib/pact/shared/active_support_support.rb
pact-support-1.15.2 lib/pact/shared/active_support_support.rb
pact-support-1.15.1 lib/pact/shared/active_support_support.rb
pact-support-1.15.0 lib/pact/shared/active_support_support.rb
pact-support-1.14.3 lib/pact/shared/active_support_support.rb
pact-support-1.14.2 lib/pact/shared/active_support_support.rb
pact-support-1.14.1 lib/pact/shared/active_support_support.rb
pact-support-1.14.0 lib/pact/shared/active_support_support.rb
pact-support-1.13.0 lib/pact/shared/active_support_support.rb
pact-support-1.12.1 lib/pact/shared/active_support_support.rb