summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2014-10-22 01:27:08 -0700
committerelijah <elijah@riseup.net>2014-10-22 01:27:08 -0700
commite44e2085f1e186264692096db1b7d426849ab7d7 (patch)
tree89a80a4df3e72d53c51532006498a7582a691df5
parenta6b4ff1c21915475655a4a28c163904687d1035e (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.rb4
-rw-r--r--lib/override/json.rb11
-rw-r--r--lib/override/to_json.rb20
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.
+#
+