HTTParty的响应对象在引用时似乎返回#parsed_response
。例如:
response = HTTParty.get(some_url)
response # => { some: 'random', stuff: 'in here' }
response.parsed_response # => { some: 'random', stuff: 'in here' }
另外,如果你检查response
的类,它不是哈希值,而是响应对象
response.class # => HTTParty::Response
这很有用,因为您可以查看response
上的其他内容,例如response.code
,也可以非常方便地引用响应以获取parsed_response
。
我怎样才能在自己的课堂上做这样的事情?但是在引用类时我不想返回哈希,而是希望它返回一个字符串。
以下是我想要做的具体示例:
not_a_string = MyClass.new('hello', [1, 2, 3])
not_a_string # => 'hello'
not_a_string.stuff # => [1, 2, 3]
所以在rspec中,测试应该像这样通过:
not_a_string = MyClass.new('hello', [1, 2, 3])
not_a_string.should == 'hello' # passes
答案 0 :(得分:4)
这对你有用吗?
class MyClass < String
attr_reader :stuff
def initialize(string, stuff)
super string
@stuff = stuff
end
end
它像这样工作
irb(main):002:0> t = MyClass.new('hello', [1, 2, 3])
=> "hello"
irb(main):003:0> t.stuff
=> [1, 2, 3]
irb(main):004:0> t.class
=> MyClass
- 编辑:改进的解决方案 -
这更清洁
class MyClass < Struct.new(:string, :stuff)
def ==(other)
string == other
end
def inspect
string.inspect
end
end
相同的输出:)
irb(main):002:0> t = MyClass.new('hello', [1, 2, 3])
=> "hello"
irb(main):003:0> t.stuff
=> [1, 2, 3]
irb(main):004:0> t.class
=> MyClass
答案 1 :(得分:1)
为了您的目的,定义inspect
和==
:
class Test
def initialize(string)
@string = string.to_s
end
def inspect
@string.inspect
end
def ==(other)
@string == other
end
end
t = Test.new 'asd' #=> "asd"
t #=> "asd"
t == 'asd' #=> true
答案 2 :(得分:0)
是的,这是一个很好的功能:) 您所要做的就是创建一个检查方法;)这里是一个例子:
class Greeter
def initialize(name)
@name = name.capitalize
end
def salute
puts "Hello #{@name}!"
end
def inspect
"hey"
end
end
g = Greeter.new 'world'
g # hey
干杯!