Module: Appfuel::Repository

Defined in:
lib/appfuel/storage/repository/runner.rb,
lib/appfuel/storage/repository.rb,
lib/appfuel/storage/repository/base.rb,
lib/appfuel/storage/repository/expr.rb,
lib/appfuel/storage/repository/mapper.rb,
lib/appfuel/storage/repository/criteria.rb,
lib/appfuel/storage/repository/settings.rb,
lib/appfuel/storage/repository/order_expr.rb,
lib/appfuel/storage/repository/expr_parser.rb,
lib/appfuel/storage/repository/initializer.rb,
lib/appfuel/storage/repository/mapping_dsl.rb,
lib/appfuel/storage/repository/storage_map.rb,
lib/appfuel/storage/repository/mapping_entry.rb,
lib/appfuel/storage/repository/search_parser.rb,
lib/appfuel/storage/repository/expr_transform.rb,
lib/appfuel/storage/repository/expr_conjunction.rb,
lib/appfuel/storage/repository/search_transform.rb,
lib/appfuel/storage/repository/mapping_collection.rb

Overview

Used in the validation system by custom predicates to ask the question if an entity exists in the database

Defined Under Namespace

Classes: Base, Criteria, Expr, ExprConjunction, ExprParser, ExprTransform, Initializer, Mapper, MappingCollection, MappingDsl, MappingEntry, OrderExpr, Runner, SearchParser, SearchTransform, Settings, StorageMap

Class Method Summary collapse

Class Method Details

.create_builder(repo, &block) ⇒ Object



76
77
78
79
80
# File 'lib/appfuel/storage/repository.rb', line 76

def self.create_builder(repo, &block)
  ->(storage, criteria) {
    repo.instance_exec(storage, criteria, &block)
  }
end

.create_repo(type, domain_name) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/appfuel/storage/repository.rb', line 68

def self.create_repo(type, domain_name)
  repo_class = "Appfuel::#{type.to_s.classify}::Repository"
  unless Kernel.const_defined?(repo_class)
    fail "Could not find #{repo_class} for entity builder #{domain_name}"
  end
  Kernel.const_get(repo_class).new
end

.entity_builder(domain_name, type, opts = {}, &block) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/appfuel/storage/repository.rb', line 55

def self.entity_builder(domain_name, type, opts = {}, &block)
  fail "entity builder must be used with a block" unless block_given?

  root = opts[:root] || Appfuel.default_app_name
  repo = create_repo(type, domain_name)
  repo.class.load_path_from_container_namespace("#{root}.#{domain_name}")

  app_container = Appfuel.app_container(root)
  category      = "domain_builders.#{type}"
  builder_key   = repo.qualify_container_key(domain_name, category)
  app_container.register(builder_key, create_builder(repo, &block))
end

.mapping(domain_name, to:, model:, **opts, &block) ⇒ DbEntityMapper

Mapping uses the map_dsl_class to define and map mapping entries into the mapping registry

Examples:

Simple mapping

mapping 'foo.bar', db: foo_table_one do
  map 'id'
  map 'project_user_id', 'user.id'
end

Note: When no :key value is given to options then the entity base
      name is used. The following would be equivalent:

mapping 'offers.offer', db: foo_table_two do
  ...
end

Parameters:

  • entity_name (String)

    domain name of the entity we are mapping

  • db_class (String)

    name of the database class used in mapping

Returns:

  • (DbEntityMapper)


45
46
47
48
49
50
51
52
53
# File 'lib/appfuel/storage/repository.rb', line 45

def self.mapping(domain_name, to:, model:, **opts, &block)
  dsl = MappingDsl.new(domain_name, to: to, model: model, **opts)
  dsl.instance_eval(&block)

  container   = Appfuel.app_container(dsl.container_name)
  mappings    = container['repository_mappings']
  storage_map = dsl.create_storage_map
  mappings.load(storage_map)
end