私はRubyクラスを持っており、その各メソッドは特定の条件に基づいてハッシュの配列のインデックスを保持しています.
例(コードは最初の投稿以降に編集されています)
module Dronestream
class Strike
class << self
...
def strike
@strike ||= all
end
def all
response['strike'] # returns an array of hashes, each individual strike
end
def in_country(country)
strike.keep_if { |strike| strike['country'] == country }
self
end
def in_town(town)
strike.keep_if { |strike| strike['town'] == town }
self
end
...
end
end
Dronestream::Strike.in_country('Yemen')
このようにして、 、またはを行うことができDronestream::Strike.in_town('Taizz')
、それぞれが配列を返します。でもできればDronestream::Strike.in_country('Yemen').in_town('Taizz')
、イエメンのあの町のストライキだけ返してもらいたいです。
しかし今のところ、それぞれの個別のメソッドは配列を返します。私が彼らに return を返せばself
、彼らは私が必要とするメソッドを持っていることを知っています. しかし、それらは配列を返さず、配列を呼び出すことができるように、たとえば呼び出すことも、それらを呼び出すこともできませfirst
んeach
。を作成しようとしましStrike < Array
たが、first
は のインスタンス メソッドでArray
あり、クラス メソッドではありません。
私は何をすべきか?
編集
これが私のテストスイートの一部です。以下の回答に従って、テストは個別に合格しますが、その後失敗します。
describe Dronestream::Strike do
let(:strike) { Dronestream::Strike }
before :each do
VCR.insert_cassette 'strike', :record => :new_episodes
@strike = nil
end
after do
VCR.eject_cassette
end
...
# passes when run by itself and when the whole file runs together
describe '#country' do
let(:country_name) { 'Yemen' }
it 'takes a country and returns strikes from that country' do
expect(strike.in_country(country_name).first['country']).to eq(country_name)
end
end
# passes when run by itself, but fails when the whole file runs together
describe '#in_town' do
let(:town_name) { 'Wadi Abida' }
it 'returns an array of strikes for a given town' do
expect(strike.in_town(town_name).first['town'].include?(town_name)).to be_true
end
end
...
end