diff options
author | elijah <elijah@riseup.net> | 2014-10-22 01:27:08 -0700 |
---|---|---|
committer | elijah <elijah@riseup.net> | 2014-10-22 01:27:08 -0700 |
commit | e44e2085f1e186264692096db1b7d426849ab7d7 (patch) | |
tree | 89a80a4df3e72d53c51532006498a7582a691df5 | |
parent | a6b4ff1c21915475655a4a28c163904687d1035e (diff) |
json bugfix: upgrading CertificateAuthority gem broke everything, since it depends on ActiveSupport, which in turn badly modifies how JSON works. This commit does some hacky stuff to prevent ActiveSupport from messing with JSON and allows us to mess with JSON.
-rw-r--r-- | lib/leap_cli.rb | 4 | ||||
-rw-r--r-- | lib/override/json.rb | 11 | ||||
-rw-r--r-- | lib/override/to_json.rb | 20 |
3 files changed, 35 insertions, 0 deletions
diff --git a/lib/leap_cli.rb b/lib/leap_cli.rb index 6cd625e..baff32f 100644 --- a/lib/leap_cli.rb +++ b/lib/leap_cli.rb @@ -5,6 +5,10 @@ end $ruby_version = RUBY_VERSION.split('.').collect{ |i| i.to_i }.extend(Comparable) +# ensure leap_cli/lib/overrides has the highest priority +# (these files override bad behavior in gems that overrides JSON) +$:.unshift(File.expand_path('../override',__FILE__)) + require 'leap/platform' require 'leap_cli/version' diff --git a/lib/override/json.rb b/lib/override/json.rb new file mode 100644 index 0000000..8857a22 --- /dev/null +++ b/lib/override/json.rb @@ -0,0 +1,11 @@ +# +# This exists solely to prevent other gems we depend on from +# importing json/ext (e.g. require 'json'). +# +# If json/ext is imported, json/pure cannot work, and we heavily +# rely on the specific behavior of json/pure. +# +# This trick only works if this directory is early in the +# include path. +# +require 'json/pure' diff --git a/lib/override/to_json.rb b/lib/override/to_json.rb new file mode 100644 index 0000000..73fbe5c --- /dev/null +++ b/lib/override/to_json.rb @@ -0,0 +1,20 @@ +# +# activesupport/lib/core_ext/object/to_json.rb overrides to_json for +# most core objects like so: +# +# [Object, Array, FalseClass, Float, Hash, Integer, NilClass, String, TrueClass].each do |klass| +# klass.class_eval do +# # Dumps object in JSON (JavaScript Object Notation). See www.json.org for more info. +# def to_json(options = nil) +# ActiveSupport::JSON.encode(self, options) +# end +# end +# end +# +# We cannot tolerate this. We need the normal to_json to be called, not +# ActiveSupport's custom version. +# +# This file exists to override the behavior of ActiveSupport. This file will get included +# instead of the normal to_json.rb. +# + |