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
- #fix_all_the_things(thing) ⇒ Object
-
#fix_json_formatting(json) ⇒ Object
Having Active Support JSON loaded somehow kills the formatting of pretty_generate for objects.
-
#fix_regexp(regexp) ⇒ Object
ActiveSupport JSON overwrites (i.e. TRAMPLES) the json methods of the Regexp class directly (beneath its destructive hooves of destruction).
- #remove_unicode(json) ⇒ Object
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 = {} {:json_class => 'Regexp', "o" => self., "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 |