Module: Pluckr
- Defined in:
- lib/pluckr.rb,
lib/pluckr/batch.rb,
lib/pluckr/query.rb,
lib/pluckr/errors.rb,
lib/pluckr/aliases.rb,
lib/pluckr/version.rb,
lib/pluckr/relation.rb,
lib/pluckr/schema/one.rb,
lib/pluckr/schema/node.rb,
lib/pluckr/compiler/sql.rb,
lib/pluckr/schema/field.rb,
lib/pluckr/schema/scope.rb,
lib/pluckr/result/object.rb,
lib/pluckr/schema/exists.rb,
lib/pluckr/result/builder.rb,
lib/pluckr/schema/aggregate.rb,
lib/pluckr/schema/conditions.rb,
lib/pluckr/schema/definition.rb,
lib/pluckr/reflection/association.rb
Overview
A declarative read-query layer for ActiveRecord.
DSL -> schema AST -> reflection -> SQL compiler -> flat row -> result object
Defined Under Namespace
Modules: Aliases, Compiler, Reflection, Result, Schema Classes: Batch, ConfigurationError, Error, InvalidAssociation, MissingSource, Query, Relation, UnknownAssociation, UnknownField, UnsupportedAssociation
Constant Summary collapse
- VERSION =
"0.1.0"
Class Method Summary collapse
- .batch(&block) ⇒ Object
-
.select_all(connection, sql, name:, label: "#{name} Pluckr") ⇒ Object
Every read of a read model goes through here, so one subscription covers
fetch,find,forandPluckr.batchalike.
Class Method Details
.batch(&block) ⇒ Object
213 214 215 |
# File 'lib/pluckr/batch.rb', line 213 def self.batch(&block) Batch.build(&block).fetch end |
.select_all(connection, sql, name:, label: "#{name} Pluckr") ⇒ Object
Every read of a read model goes through here, so one subscription covers
fetch, find, for and Pluckr.batch alike. The statements Pluckr does
not compile are absent by design: count/exists? and the primary keys of
a paginated .for are ActiveRecord's own, and arrive as sql.active_record.
ActiveSupport::Notifications.subscribe("fetch.pluckr") do |*, payload|
payload[:name] # => "UserSummary"
payload[:sql] # => "SELECT ..."
payload[:rows] # => 100
end
40 41 42 43 44 |
# File 'lib/pluckr.rb', line 40 def self.select_all(connection, sql, name:, label: "#{name} Pluckr") ActiveSupport::Notifications.instrument("fetch.pluckr", name: name, sql: sql) do |payload| connection.select_all(sql, label).tap { |result| payload[:rows] = result.length } end end |