Module: Prick

Defined in:
lib/prick/version.rb,
lib/prick.rb,
lib/prick/git.rb,
lib/prick/build.rb,
lib/prick/migra.rb,
lib/prick/rdbms.rb,
lib/prick/ensure.rb,
lib/prick/schema.rb,
lib/prick/archive.rb,
lib/prick/project.rb,
lib/prick/version.rb,
lib/prick/database.rb,
lib/prick/constants.rb,
lib/prick/migration.rb,
lib/prick/exceptions.rb

Overview

Project related code starts here

Defined Under Namespace

Modules: Ensure, EnsureMethods, Git, Migra, Rdbms Classes: AbstractMethod, AbstractRelease, Build, Database, DumpFile, Error, Fail, Feature, FeatureMigration, Internal, Migration, MigrationPrerelease, MigrationRelease, NotYet, Prerelease, Project, Release, ReleaseMigration, Schema, Version

Constant Summary collapse

VERSION =
"0.2.0"
SHARE_PATH =

Shared files (part of the installation)

"#{File.dirname(File.dirname(__dir__))}/share"
DIRS =

Project directories

[
  RELEASE_DIR = "releases",
  MIGRATION_DIR = "migrations",
  FEATURE_DIR = "features",
  SCHEMA_DIR = "schemas",
  PRICK_DIR = "#{SCHEMA_DIR}/prick",
  PUBLIC_DIR = "#{SCHEMA_DIR}/public",
  VAR_DIR = "var",
  CACHE_DIR = "#{VAR_DIR}/cache",
  TMP_DIR = "tmp",
  CLONE_DIR = "tmp/clone",
  SPEC_DIR = "spec"
]
DUMP_EXT =

Dump files

"dump.gz"
DUMP_GLOB =
"*-[0-9]*.#{DUMP_EXT}"
IDENT_SUB_RE =

Matches an identifier. Identifiers consist of lower case letters, digits and underscores but not dashes because they’re used as separators

/[a-z][a-z0-9_]*/
IDENT_RE =
/^#{IDENT_SUB_RE}$/
NAME_SUB_RE =

A (system) name. Names are used for projects and usernames that are external to prick and can include both dashes and underscores but dashes have to be followed by a character and not a digit so ‘ident-1234’ is not allowed but ‘ident_1234’ and ‘ident1234’ are

/#{IDENT_SUB_RE}/
NAME_RE =
/^#{NAME_SUB_RE}$/
PROJECT_NAME_SUB_RE =

Matches a project name

NAME_SUB_RE
PROJECT_NAME_RE =
NAME_RE
CUSTOM_NAME_SUB_RE =

Matches a custom name

NAME_SUB_RE
CUSTOM_NAME_RE =
NAME_RE
FEATURE_NAME_SUB_RE =

Matches a feature name

NAME_SUB_RE
FEATURE_NAME_RE =
NAME_RE
USER_NAME_SUB_RE =

Matches a postgres user name

NAME_SUB_RE
USER_NAME_RE =
NAME_RE
MMP_SEMVER_SUB_RE =

Matches a major.minor.patch version

The *_SEMVER REs are derived from the canonical RE

/

(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)
(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?
(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?

/x

semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string.

/(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)/
MMP_SEMVER_RE =
/^#{MMP_SEMVER_SUB_RE}$/
PRE_SEMVER_SUB_RE =

Matches the prelease part of a semantic version

/pre\.\d+/
PRE_SEMVER_RE =
/^#{PRE_SEMVER_SUB_RE}$/
SEMVER_SUB_RE =

Matches a semantic version

/#{MMP_SEMVER_SUB_RE}(?:-#{PRE_SEMVER_SUB_RE})?/
SEMVER_RE =
/^#{SEMVER_SUB_RE}$/
VERSION_SUB_RE =

Version RE. The general syntax for a version is ‘<custom>-<version>_<feature>’

The RE defines the following captures:

$1 - custom name, can be nil
$2 - semantic version
$3 - feature name, can be nil
/
    (?:(#{CUSTOM_NAME_SUB_RE})-)?
    (#{SEMVER_SUB_RE})
    (?:_(#{FEATURE_NAME_SUB_RE}))?
/x
VERSION_RE =
/^#{VERSION_SUB_RE}$/
ABSTRACT_RELEASE_SUB_RE =

Matches an abstract release (either a release or a prerelease)

The RE defines the following captures:

$1 - custom name, can be nil
$2 - semantic version
/
    (?:(#{CUSTOM_NAME_SUB_RE})-)?
    (#{SEMVER_SUB_RE})
/x
ABSTRACT_RELEASE_RE =
/^#{ABSTRACT_RELEASE_SUB_RE}$/
RELEASE_SUB_RE =

Matches a (proper) release

The RE defines the following captures:

$1 - custom name, can be nil
$2 - semantic version
/
    (?:(#{CUSTOM_NAME_SUB_RE})-)?
    (#{MMP_SEMVER_SUB_RE})
/x
RELEASE_RE =
/^#{RELEASE_SUB_RE}$/
MIGRATION_SUB_RE =

Migration RE. The syntax is <version>_<version>

The RE defines the following captures

$1 - from version
$2 - from custom name, can be nil
$3 - from semantic version
$4 - to version
$5 - to custom name, can be nil
$6 - to semantic version
/(#{RELEASE_SUB_RE})_(#{RELEASE_SUB_RE})/
MIGRATION_RE =
/^#{MIGRATION_SUB_RE}$/
PRERELEASE_SUB_RE =

Matches a prerelease branch

The RE defines the following captures:

$1 - custom name, can be nil
$2 - semantic version
/
    (?:(#{CUSTOM_NAME_SUB_RE})-)?
    (#{MMP_SEMVER_SUB_RE}-#{PRE_SEMVER_SUB_RE})
/x
PRERELEASE_RE =
/^#{PRERELEASE_SUB_RE}$/
FEATURE_SUB_RE =

Matches a feature branch

The RE defines the following captures:

$1 - custom name, can be nil
$2 - semantic version
$3 - feature name
/#{ABSTRACT_RELEASE_SUB_RE}_(#{FEATURE_NAME_SUB_RE})/
FEATURE_RE =
/^#{FEATURE_SUB_RE}$/
PROJECT_SUB_RE =

Project release RE. The general syntax is ‘<project>-<custom>-<version>’

The RE defines the following captures:

$1 - project
$2 - version
$3 - custom name, can be nil
$4 - semantic version
/(#{PROJECT_NAME_SUB_RE})-(#{ABSTRACT_RELEASE_SUB_RE})/
PROJECT_RE =
/^#{PROJECT_SUB_RE}$/
DATABASE_SUB_RE =

Matches versioned databases. Note that databases never include the feature name. Features use the project database instead of a feature-specific database

The RE defines the following captures

$1 - project
$2 - version
$3 - custom name, can be nil
$4 - semantic version
PROJECT_SUB_RE
DATABASE_RE =
/^#{DATABASE_SUB_RE}$/
ALL_DATABASES_SUB_RE =

Matches project database and versioned databases

The RE defines the following captures

$1 - project
$2 - version, can be nil
$3 - custom name, can be nil
$4 - semantic version, can be nil
/(#{PROJECT_NAME_SUB_RE})(?:-(#{ABSTRACT_RELEASE_SUB_RE}))?/
ALL_DATABASES_RE =
/^#{ALL_DATABASES_SUB_RE}$/

Class Method Summary collapse

Class Method Details

.all_databases_re(project_name) ⇒ Object



197
# File 'lib/prick/constants.rb', line 197

def self.all_databases_re(project_name) /^#{all_databases_sub_re(project_name)}$/ end

.all_databases_sub_re(project_name) ⇒ Object



196
# File 'lib/prick/constants.rb', line 196

def self.all_databases_sub_re(project_name) /(#{project_name})(?:-(#{ABSTRACT_RELEASE_SUB_RE}))?/ end

.database_re(project_name) ⇒ Object



184
# File 'lib/prick/constants.rb', line 184

def self.database_re(project_name) /^#{database_sub_re(project_name)}$/ end

.database_sub_re(project_name) ⇒ Object



183
# File 'lib/prick/constants.rb', line 183

def self.database_sub_re(project_name) project_sub_re(project_name) end

.dump_glob(project_name) ⇒ Object



24
# File 'lib/prick/constants.rb', line 24

def self.dump_glob(project_name) "#{project_name}-*.#{DUMP_EXT}" end

.project_sub_re(project_name) ⇒ Object



167
168
169
# File 'lib/prick/constants.rb', line 167

def self.project_sub_re(project_name)
  /(#{Regexp.escape(project_name)})(-#{VERSION_SUB_RE})/
end

.release_re(project_name) ⇒ Object



170
# File 'lib/prick/constants.rb', line 170

def self.release_re(project_name) /^#{project_sub_re(project_name)}$/ end