Module: Pact::ActiveSupportSupport

Extended by:
ActiveSupportSupport
Included in:
ActiveSupportSupport, DifferenceIndicator, Interaction, Matchers::EmbeddedDiffFormatter, QueryHash, QueryString, Reification, Term
Defined in:
lib/pact/shared/active_support_support.rb

Instance Method Summary collapse

Instance Method Details

#fix_all_the_things(thing) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/pact/shared/active_support_support.rb', line 8

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

#fix_json_formatting(json) ⇒ Object

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.…



40
41
42
43
44
45
46
# File 'lib/pact/shared/active_support_support.rb', line 40

def fix_json_formatting json
  if json =~ /\{".*?":"/
    JSON.pretty_generate(JSON.parse(json, create_additions: false))
  else
    json
  end
end

#fix_regexp(regexp) ⇒ Object

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!



29
30
31
32
33
34
# File 'lib/pact/shared/active_support_support.rb', line 29

def fix_regexp regexp
  def regexp.as_json options = {}
    {:json_class => 'Regexp', "o" => self.options, "s" => self.source }
  end
  regexp
end

#remove_unicode(json) ⇒ Object



48
49
50
# File 'lib/pact/shared/active_support_support.rb', line 48

def remove_unicode json
  json.gsub(/\\u([0-9A-Za-z]{4})/) {|s| [$1.to_i(16)].pack("U")}
end