Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 8 additions & 11 deletions lib/active_hash/relation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,14 @@ def initialize(klass, all_records, query_hash = nil)
self.klass = klass
self.all_records = all_records
self.query_hash = query_hash
self.records_dirty = false
self
end

def where(query_hash = :chain)
return ActiveHash::Base::WhereChain.new(self) if query_hash == :chain

self.records_dirty = true unless query_hash.nil? || query_hash.keys.empty?
self.query_hash.merge!(query_hash || {})
self
if query_hash == :chain
ActiveHash::Base::WhereChain.new(self)
else
self.class.new(klass, all_records, self.query_hash.merge(query_hash || {}))
end
end

def all(options = {})
Expand Down Expand Up @@ -111,22 +109,21 @@ def method_missing(method_name, *args)
instance_exec(*args, &self.klass.scopes[method_name])
end

attr_reader :query_hash, :klass, :all_records, :records_dirty
attr_reader :query_hash, :klass, :all_records

private

attr_writer :query_hash, :klass, :all_records, :records_dirty
attr_writer :query_hash, :klass, :all_records

def records
if !defined?(@records) || @records.nil? || records_dirty
if !defined?(@records) || @records.nil?
reload
else
@records
end
end

def filter_all_records_by_query_hash
self.records_dirty = false
return all_records if query_hash.blank?

# use index if searching by id
Expand Down
8 changes: 8 additions & 0 deletions spec/active_hash/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,14 @@ class Region < ActiveHash::Base
Country.where(:language => 'English').all? { |country| expect(country).to be_kind_of(Country) }
end

it "doesn't affect the original" do
countries = Country.where(:language => 'English')

expect(countries.size).to eq 2
expect(countries.where(name: "US").size).to eq 1
expect(countries.size).to eq 2
end

it "populates the data correctly" do
records = Country.where(:language => 'English')
expect(records.first.id).to eq(1)
Expand Down