基本上我有兩個模塊:CoreExtensions::CamelcasedJsonString
和…::CamelcasedJsonSymbol
。後者覆蓋Symbol#to_s
,以便該方法返回一個String
,該擴展名爲第一個模塊。我不希望每個字符串都是CamelcasedJsonString
。這就是我嘗試應用特定擴展實例的原因。帶模塊的紅寶石核心擴展
我的問題是,Symbol#to_s
看來以後我包括我的模塊(最後的規範失敗)再次被改寫:
require 'rubygems' if RUBY_VERSION < '1.9'
require 'spec'
module CoreExtensions
module CamelcasedJsonString; end
module CamelcasedJsonSymbol
alias to_s_before_core_extension to_s
def to_s(*args)
to_s_before_core_extension(*args).extend(CamelcasedJsonString)
end
end
::Symbol.send :include, CamelcasedJsonSymbol
end
describe Symbol do
subject { :chunky_bacon }
it "should be a CamelcasedJsonSymbol" do
subject.should be_a(CoreExtensions::CamelcasedJsonSymbol)
end
it "should respond to #to_s_before_core_extension" do
subject.should respond_to(:to_s_before_core_extension)
end
specify "#to_s should return a CamelcasedJsonString" do
subject.to_s.should be_a(CoreExtensions::CamelcasedJsonString)
end
end
然而,下面的示例:
require 'rubygems' if RUBY_VERSION < '1.9'
require 'spec'
module CoreExtensions
module CamelcasedJsonString; end
end
class Symbol
alias to_s_before_core_extension to_s
def to_s(*args)
to_s_before_core_extension(*args).extend(CoreExtensions::CamelcasedJsonString)
end
end
describe Symbol do
subject { :chunky_bacon }
it "should respond to #to_s_before_core_extension" do
subject.should respond_to(:to_s_before_core_extension)
end
specify "#to_s should return a CamelcasedJsonString" do
subject.to_s.should be_a(CoreExtensions::CamelcasedJsonString)
end
end
更新:2010年1月24日
我的問題的背景是,我嘗試將巨大的嵌套散列 結構轉換爲JSON字符串。這個散列表中的每個鍵都是 中的典型下劃線表示法中的Ruby Symbol
。使用JSON 數據的JavaScript庫期望這些密鑰是camelcase符號中的字符串。我認爲重寫Symbol#to_json
方法可能是最簡單的方法。但是 沒有解決問題,因爲Hash#to_json
在每個密鑰上首先調用#to_s
和之後的 #to_json
。所以我覺得這可能是一個解決方案來擴展 通過Symbol#to_s
與覆蓋該特定字符串實例的 #to_json
方法返回擁有 一個#to_json
方法,它返回自己在駝峯表示法的字符串模塊returnd所有字符串。
我不確定是否有簡單的方法來猴子補丁Hash#to_json
。
如果有人想看看到我使用JSON實現,這裏是鏈接:http://github.com/flori/json/blob/master/lib/json/pure/generator.rb(線239和下面是利息)
我有一個巨大的嵌套散列結構。每個鍵都是下劃線符號的紅寶石符號。我嘗試將每個符號轉換爲camelcase符號中的字符串,因爲使用JSON數據的JavaScript庫期望在此符號中使用鍵。我認爲我的方法可能比遍歷整個散列更快。 例如:{:chunky_bacon =>「某個值」} .to_json應該像'{「chunkyBacon」:「某個值」}' – t6d 2010-01-23 15:08:05
感謝您的澄清。不要猶豫,相應地修改你的問題。查看我的更新回答 – 2010-01-23 19:06:14
到目前爲止,非常感謝您的幫助。我更新了我的問題。問題是Hash#to_json不會調用某事物。如符號#to_json,而不是符號#to_s#to_json。如果有一個簡單的方法來修補Hash#to_json補丁,我真的不會。 – t6d 2010-01-24 11:48:38