Sha256: a8944f8bb330f65d2eb161241e7687678ee2a288a2d31a8622f4e0a372f8ae05

Contents?: true

Size: 944 Bytes

Versions: 10

Compression:

Stored size: 944 Bytes

Contents

module PassiveRecord
  module Core
    class Query < Struct.new(:klass, :conditions)
      def all
        return [] unless conditions
        klass.all.select do |instance|
          conditions.all? do |(field,value)|
            if value.is_a?(Hash)
              assn = instance.send(field)
              matched = assn && value.all? do |(assn_field,val)|
                if assn.is_a?(Array)
                  assn.any? do |assc_model|
                    assc_model.send(assn_field) == val
                  end
                else
                  assn.send(assn_field) == val
                end
              end

              matched
            else
              instance.send(field) == value
            end
          end
        end
      end

      def first
        all.first
      end

      def create
        klass.create(conditions)
      end

      def first_or_create
        first || create
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
passive_record-0.2.3 lib/passive_record/core/query.rb
passive_record-0.2.2 lib/passive_record/core/query.rb
passive_record-0.2.1 lib/passive_record/core/query.rb
passive_record-0.2.0 lib/passive_record/core/query.rb
passive_record-0.1.8 lib/passive_record/core/query.rb
passive_record-0.1.7 lib/passive_record/core/query.rb
passive_record-0.1.6 lib/passive_record/core/query.rb
passive_record-0.1.5 lib/passive_record/core/query.rb
passive_record-0.1.4 lib/passive_record/core/query.rb
passive_record-0.1.3 lib/passive_record/core/query.rb