Skip to content

We can set the URL using a string (event dispatch). This will end up calling a function with the same name as the string (an event handler). The function handler can then update the state.

;; state
(def state (atom { :content "" }))
(def session (atom { :page "home" }))

;; handlers
(defn about [] (clojure.core/swap! state assoc :content "About us"))
View sequel.rb
bq=db[:studies___s].select{[:s__id, :s__name, `"boolean" as type`, :bd__key___key, :b__value]}.left_join(:booleans___b, { :b__study_id => :s__id }).left_join(:boolean_definitions___bd, { :b__boolean_definition_id => :bd__id}).where(:bd__key => 'is_nihr').or(:bd__key => 'is_commercial')
tfq=db[:studies___s].select{[:s__id, :s__name, `"text" as type`, :tfd__key___key, :tf__value]}.left_join(:text_fields___tf, { :tf__study_id => :tf__id }).left_join(:text_field_definitions___tfd, { :tf__text_field_definition_id => :tfd__id}).where(:tfd__key => 'eudract_number').or(:tfd__key => 'portfolio_number')
eq=db[:studies___s].select{[:s__id, :s__name, `"enum" as type`, :e__key___key, :es__name___value]}.left_join(:enumeration_values___ev, { :ev__study_id => :s__id }).left_join(:enumerations___e, { :ev__enumeration_id => :e__id}).join(:enumeration_states___es, { :es__enumeration_id => :e__id }).where(:e__key => 'iras').or(:e__key => 'phase')
dq=db[:studies___s].select{[:s__id, :s__name, `"date" as type`, :sdd__key___key


The aim of this gem is to standardise reporting. It also allow registration of reports and have them appear in the UI.

It will be used for reports which can not otherwise be produced with the data grid.

To register a report:

Reporting.register(name:   'BRU Recruitment Report', 
View configuration.rb
require 'dry/container'
require 'logger'
module Oxygen
class Configuration
extend Dry::Container::Mixin
# default configuration
register('reports', [])
View pull.rb
# DoSomething has dependency on Configuration and pulls default from Configuration
module MyThingy
class DoSomething
def call(input, suffix = nil)
input + (suffix || default_suffix)


Reagent binds components to data using an atom. An atom is a ClojureScript reference type. An atom references an immutable value, but the reference itself is mutable, it can be changed using reset! and swap! to reference a different imumtable value. Changes to atom's are atomic.

The value can be retrived by dereferencing the atom using deref or the @ prefix.

Functions can be attached to atoms to watch for changes, the function will get the atoms old and new state as arguments.

Reagent provides its own atom, reagent/atom, which has watches setup to rerender compontents which reference the atom.

require 'mongo'

class DynaModel
  include Virtus.model

  def save
View stack
Testing documas-cljs.routing-test
Ran 8 tests containing 9 assertions.
0 failures, 0 errors.
Tests succeeded.
Compiling "target/testable.js" failed.
java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol clojure.lang.RT.seqFrom clojure.lang.RT.seq
core.clj:133 clojure.core/seq
View pres.rb
# given these models
class Study < AR::Base
class Site < AR::Base
class Visit < AR::Base

Data referenced in code

Sometimes data is referenced in code, for example a dynamically created "tab" has a key (it's unique id).

If we want to fetch that tab in our code, we do Tab.find_by_key('organisations'). This will break if a user deletes this tab.

Locking some fields of an entity should solve this.

EntityLock(entity_class, entity_uuid, attributes, reason)

Something went wrong with that request. Please try again.