class ROM::FMP::Dataset

Constants

DEFAULT_REQUEST_OPTIONS

Attributes

connection[R]

include Equalizer.new(:name, :connection)

data[R]
layout[R]
name[R]

include Equalizer.new(:name, :connection)

queries[R]
table[R]

include Equalizer.new(:name, :connection)

Public Class Methods

new(_layout, _data=[], _queries=[]) click to toggle source

Store layout, data, query in new dataset.

Calls superclass method
# File lib/rom/fmp/dataset.rb, line 27
def initialize(_layout, _data=[], _queries=[])
  @layout = _layout
  @queries = _queries
  #puts "DATASET NEW queries:#{@queries}"
  super(_data)
end

Public Instance Methods

all(options={}) click to toggle source
# File lib/rom/fmp/dataset.rb, line 53
def all(options={})
  wrap_data(layout.all(DEFAULT_REQUEST_OPTIONS.merge(options)))
end
any(options={}) click to toggle source
# File lib/rom/fmp/dataset.rb, line 49
def any(options={})
  wrap_data(layout.any(options))
end
call() click to toggle source

Combines all queries, sends to FM, returns result in new dataset.

# File lib/rom/fmp/dataset.rb, line 88
def call
  compiled_query = compile_query
  wrap_data(compiled_query ? layout.find(*compiled_query) : layout.all(DEFAULT_REQUEST_OPTIONS))
end
compile_query() click to toggle source

Mixes chained queries together into single query. Now works with multiple-request queries (using new rfm scope feature). Other ways: consider mixing multi-request queries with intersection: (result1 & result2), or with the new scope feature: query1(scope:query2(scope:query3))

# File lib/rom/fmp/dataset.rb, line 97
def compile_query
  #puts "DATASET COMPILE self #{self}"
  #puts "DATASET COMPILE queries #{queries}"
  
  # Old way: works but doesn't handle fmp compound queries.
  #query.each_with_object([{},{}]){|x,o| o[0].merge!(x[0] || {}); o[1].merge!(x[1] || {})}
  
  # New way: handles compound queries. Reqires ginjo-rfm 3.0.11.
  return unless queries  # This should help introspecting dataset that results from record deletion. TODO: test this.
  queries.inject {|new_query,scope| apply_scope(new_query, scope)} ##puts "SCOPE INJECTION scope:#{scope} new_query:#{new_query}";
end
count(*args) click to toggle source
# File lib/rom/fmp/dataset.rb, line 57
def count(*args)
  compiled_query = compile_query
  compiled_query ? layout.count(*compiled_query) : layout.total_count
end
create(args={}) click to toggle source
# File lib/rom/fmp/dataset.rb, line 62
def create(args={})
  get_results(:create, [args]) unless args.empty?
end
delete(record_id) click to toggle source
# File lib/rom/fmp/dataset.rb, line 70
def delete(record_id)
  get_results(:delete, record_id)
end
each() click to toggle source

Triggers actual fm action.

# File lib/rom/fmp/dataset.rb, line 82
def each
  # passes block - if any - to upstream each.
  to_a.each(&Proc.new)
end
find(*args) click to toggle source

Creates new dataset with existing data & queries, plus new query

# File lib/rom/fmp/dataset.rb, line 44
def find(*args)
  #self.class.new(layout, data, (queries.dup << args))
  wrap_data(data, (queries.dup << args))
end
get_results(_method, query=queries, _layout=layout) click to toggle source

Send method & query to layout, and wrap results in new dataset.

# File lib/rom/fmp/dataset.rb, line 115
def get_results(_method, query=queries, _layout=layout)
  wrap_data(_layout.send(_method, *query), query, _layout)
end
to_a() click to toggle source

Triggers actual fm action.

# File lib/rom/fmp/dataset.rb, line 77
def to_a
  (data.nil? || data.empty?) ? call.data.to_a : data.to_a
end
update(record_id, args={}) click to toggle source
# File lib/rom/fmp/dataset.rb, line 66
def update(record_id, args={})
  get_results(:edit, [record_id, args]) unless args.empty?
end
where(*args) click to toggle source

Creates new dataset with current args and resultset. Not lazy. This may not be how rom or sql uses 'where'. Find out more.

# File lib/rom/fmp/dataset.rb, line 38
def where(*args)
  #self.class.new(layout, layout.find(*args), args)
  get_results(:find, args)
end
wrap_data(_data=data, _queries=queries, _layout=layout) click to toggle source

Returns new dataset containing, data, layout, query.

# File lib/rom/fmp/dataset.rb, line 110
def wrap_data(_data=data, _queries=queries, _layout=layout)
  self.class.new(_layout, _data, _queries)
end