diff options
-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. +# + |