From 8fd2de90ce2172a75657f054bb12fbfbe457771a Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 2 May 2019 15:43:07 +0100 Subject: [PATCH 1/8] lein-release plugin: bumped version from 0.1.6 to 0.1.7-SNAPSHOT for next development cycle --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 9a33b0a..4edca0a 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject adl-support "0.1.6" +(defproject adl-support "0.1.7-SNAPSHOT" :description "A small library of functions called by generated ADL code." :url "https://github.com/simon-brooke/adl-support" :license {:name "MIT License" From ee5c576908c6c223ab7ed98b968fb580b3214396 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 2 May 2019 15:59:28 +0100 Subject: [PATCH 2/8] Deliberately moved documentation to /docs to play nice with github.io --- project.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/project.clj b/project.clj index 4edca0a..6604abc 100644 --- a/project.clj +++ b/project.clj @@ -15,8 +15,9 @@ :deploy-repositories [["releases" :clojars] ["snapshots" :clojars]] - :codox {:metadata {:doc "FIXME: write docs"} - :output-path "doc"} + :codox {:metadata {:doc "FIXME: write docs" + :doc/format :markdown} + :output-path "docs"} ;; `lein release` doesn't play nice with `git flow release`. Run `lein release` in the ;; `develop` branch, then merge the release tag into the `master` branch. From 4a37941899c0cff4c281e88908fa3fb2d841c023 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 2 May 2019 16:04:58 +0100 Subject: [PATCH 3/8] Moved all documentation from /doc to /docs --- doc/adl-support.core.html | 28 ------------- doc/adl-support.filters.html | 7 ---- doc/adl-support.forms-support.html | 15 ------- doc/adl-support.print-usage.html | 8 ---- doc/adl-support.rest-support.html | 9 ---- doc/adl-support.tags.html | 5 --- doc/adl-support.utils.html | 65 ----------------------------- doc/index.html | 8 ---- doc/intro.html | 4 -- doc/intro.md | 6 --- docs/adl-support.core.html | 3 ++ docs/adl-support.filters.html | 3 ++ docs/adl-support.forms-support.html | 3 ++ docs/adl-support.print-usage.html | 3 ++ docs/adl-support.rest-support.html | 3 ++ docs/adl-support.tags.html | 3 ++ docs/adl-support.utils.html | 3 ++ {doc => docs}/css/default.css | 0 {doc => docs}/css/highlight.css | 0 docs/index.html | 3 ++ {doc => docs}/js/highlight.min.js | 0 {doc => docs}/js/jquery.min.js | 0 {doc => docs}/js/page_effects.js | 0 23 files changed, 24 insertions(+), 155 deletions(-) delete mode 100644 doc/adl-support.core.html delete mode 100644 doc/adl-support.filters.html delete mode 100644 doc/adl-support.forms-support.html delete mode 100644 doc/adl-support.print-usage.html delete mode 100644 doc/adl-support.rest-support.html delete mode 100644 doc/adl-support.tags.html delete mode 100644 doc/adl-support.utils.html delete mode 100644 doc/index.html delete mode 100644 doc/intro.html delete mode 100644 doc/intro.md create mode 100644 docs/adl-support.core.html create mode 100644 docs/adl-support.filters.html create mode 100644 docs/adl-support.forms-support.html create mode 100644 docs/adl-support.print-usage.html create mode 100644 docs/adl-support.rest-support.html create mode 100644 docs/adl-support.tags.html create mode 100644 docs/adl-support.utils.html rename {doc => docs}/css/default.css (100%) rename {doc => docs}/css/highlight.css (100%) create mode 100644 docs/index.html rename {doc => docs}/js/highlight.min.js (100%) rename {doc => docs}/js/jquery.min.js (100%) rename {doc => docs}/js/page_effects.js (100%) diff --git a/doc/adl-support.core.html b/doc/adl-support.core.html deleted file mode 100644 index 8edc691..0000000 --- a/doc/adl-support.core.html +++ /dev/null @@ -1,28 +0,0 @@ - -adl-support.core documentation

adl-support.core

Application Description Language support - utility functions likely
-to be useful in user-written code.

*warn*

dynamic

The idea here is to have a function with which to show warnings to the user,
-which can be dynamically bound. Any binding should be a function of one
-argument, which it should print, log, or otherwise display.

compose-exception-reason

macro

(compose-exception-reason exception intro)(compose-exception-reason exception)
Compose and return a sensible reason message for this `exception`.
-

compose-reason-and-log

macro

(compose-reason-and-log exception intro)(compose-reason-and-log exception)
Compose a reason message for this `exception`, log it (with its
-stacktrace), and return the reason message.

do-or-log-and-return-reason

macro

(do-or-log-and-return-reason form)
Clojure stacktraces are unreadable. We have to do better; evaluate
-this `form` in a try-catch block; return a map. If the evaluation
-succeeds, the map will have a key `:result` whose value is the result;
-otherwise it will have a key `:error` which will be bound to the most
-sensible error message we can construct. Additionally, log the exception

do-or-log-error

macro

(do-or-log-error form & {:keys [message error-return], :or {message (clojure.core/seq (clojure.core/concat (clojure.core/list (quote clojure.core/str)) (clojure.core/list "A failure occurred in ") (clojure.core/list (list (quote quote) form))))}})
Evaluate the supplied `form` in a try/catch block. If the
-keyword param `:message` is supplied, the value will be used
-as the log message; if the keyword param `:error-return` is
-supplied, the value will be returned if an exception is caught.

do-or-return-reason

macro

(do-or-return-reason form intro)(do-or-return-reason form)
Clojure stacktraces are unreadable. We have to do better; evaluate
-this `form` in a try-catch block; return a map. If the evaluation
-succeeds, the map will have a key `:result` whose value is the result;
-otherwise it will have a key `:error` which will be bound to the most
-sensible error message we can construct.

do-or-warn

macro

(do-or-warn form)(do-or-warn form intro)
Evaluate this `form`; if any exception is thrown, show it to the user
-via the `*warn*` mechanism.

do-or-warn-and-log

macro

(do-or-warn-and-log form)(do-or-warn-and-log form intro)
Evaluate this `form`; if any exception is thrown, log the reason and
-show it to the user via the `*warn*` mechanism.

massage-params

Sending empty strings, or numbers as strings, to the database often isn't
-helpful. Massage these `params` and `form-params` to eliminate these problems.
-We must take key field values out of just params, but we should take all other
-values out of form-params - because we need the key to load the form in
-the first place, but just accepting values of other params would allow spoofing.

massage-value

(massage-value k m)
Return a map with one key, this `k` as a keyword, whose value is the binding of
-`k` in map `m`, as read by read.

raw-massage-params

(raw-massage-params request entity)(raw-massage-params request)
Sending empty strings, or numbers as strings, to the database often isn't
-helpful. Massage these `params` and `form-params` to eliminate these problems.
-Date and time fields also need massaging.

raw-resolve-template

(raw-resolve-template n)
FIXME: write docs

resolve-template

FIXME: write docs
\ No newline at end of file diff --git a/doc/adl-support.filters.html b/doc/adl-support.filters.html deleted file mode 100644 index eb4d979..0000000 --- a/doc/adl-support.filters.html +++ /dev/null @@ -1,7 +0,0 @@ - -adl-support.filters documentation

adl-support.filters

Application Description Language support - custom Selmer filters
-used in generated templates.

*default-international-dialing-prefix*

dynamic

The international dialing prefix to use, if none is specified.
-

email

(email arg)
If `arg` is, or appears to be, a valid email address, convert it into
-a `mailto:` link, else leave it be.

telephone

(telephone arg)
If `arg` is, or appears to be, a valid telephone number, convert it into
-a `tel:` link, else leave it be.
\ No newline at end of file diff --git a/doc/adl-support.forms-support.html b/doc/adl-support.forms-support.html deleted file mode 100644 index 165c2a7..0000000 --- a/doc/adl-support.forms-support.html +++ /dev/null @@ -1,15 +0,0 @@ - -adl-support.forms-support documentation

adl-support.forms-support

Application Description Language support - functions useful in
-generating forms.

all-keys-present?

macro

(all-keys-present? m keys)
Return true if all the keys in `keys` are present in the map `m`.
-

auxlist-data-name

macro

(auxlist-data-name auxlist)
The name to which data for this `auxlist` will be bound in the
-Selmer params.

get-current-value

macro

(get-current-value f params entity-name)
Use the function `f` and these `params` to fetch an `entity` record from the database.
-

get-menu-options

macro

(get-menu-options entity-name get-q list-q fk value)
Fetch options for a menu of `entity-name` from the database, using this
-`get-q` query and this `list-q` query, using the key `fk`, where the current
-value is this `value`.

prepare-insertion-params

macro

(prepare-insertion-params params fields)
Params for insertion into the database must have keys for all fields in the
-insert query, even if the value of some of those keys is nil. Massage these
-`params` to have a value for each field in these `fields`.

property-defaults

(property-defaults entity)
Get a map of property names and default values for all properties of this
-`entity` which have explicit defaults.

query-name

(query-name entity-or-name q-type)
Generate a query name for the query of type `q-type` (expected to be one
-of `:create`, `:delete`, `:get`, `:list`, `:search-strings`, `:update`) of
-the entity `entity-or-name` NOTE: if `entity-or-name` is passed as a string,
-it should be the full, unaltered name of the entity.
\ No newline at end of file diff --git a/doc/adl-support.print-usage.html b/doc/adl-support.print-usage.html deleted file mode 100644 index 85b573e..0000000 --- a/doc/adl-support.print-usage.html +++ /dev/null @@ -1,8 +0,0 @@ - -adl-support.print-usage documentation

adl-support.print-usage

Application Description Language support - print a usage message.
-

print-usage

(print-usage project-name parsed-options)(print-usage project-name parsed-options extra-args)
Print a UN*X style usage message. `project-name` should be the base name of
-the executable jar file you generate, `parsed-options` should be options as
-parsed by [clojure.tools.cli](https://github.com/clojure/tools.cli). If
-`extra-args` is supplied, it should be a map of name, documentation pairs
-for each additional argument which may be supplied.
\ No newline at end of file diff --git a/doc/adl-support.rest-support.html b/doc/adl-support.rest-support.html deleted file mode 100644 index 2e2e421..0000000 --- a/doc/adl-support.rest-support.html +++ /dev/null @@ -1,9 +0,0 @@ - -adl-support.rest-support documentation

adl-support.rest-support

Application Description Language support - functions useful in
-generating JSON route handlers.

do-or-server-fail

macro

(do-or-server-fail form status)
Evaluate this `form`; if it succeeds, return an HTTP response with this
-status code and the JSON-formatted result as body; if it fails, return an
-HTTP 500 response.

if-valid-user

macro

(if-valid-user form request error-return)(if-valid-user form request)
Evaluate this `form` only if there is a valid user in the session of
-this `request`; otherwise return the `error-return` value.

valid-user-or-forbid

macro

(valid-user-or-forbid form request)
Evaluate this `form` only if there is a valid user in the session of
-this `request`; otherwise return an HTTP forbidden response.

with-params-or-error

macro

(with-params-or-error form params required)
Evaluate this `form` only if these `params` contain all these `required` keys;
-otherwise return an HTTP 400 response.
\ No newline at end of file diff --git a/doc/adl-support.tags.html b/doc/adl-support.tags.html deleted file mode 100644 index 43dc61e..0000000 --- a/doc/adl-support.tags.html +++ /dev/null @@ -1,5 +0,0 @@ - -adl-support.tags documentation

adl-support.tags

Application Description Language support - custom Selmer tags used
-in generated templates.

add-tags

(add-tags)
FIXME: write docs

if-member-of-permitted

(if-member-of-permitted args context success failure)
If at least one of these `args` matches some group name in the `:user-roles`
-of this `context`, return this `success`, else this `failure`.
\ No newline at end of file diff --git a/doc/adl-support.utils.html b/doc/adl-support.utils.html deleted file mode 100644 index b6d9c58..0000000 --- a/doc/adl-support.utils.html +++ /dev/null @@ -1,65 +0,0 @@ - -adl-support.utils documentation

adl-support.utils

Application Description Language support - utility functions.
-

*locale*

dynamic

The locale for which files will be generated.
-

*output-path*

dynamic

The path to which generated files will be written.
-

*verbosity*

dynamic

The verbosity of output from the generator.
-

all-properties

macro

(all-properties entity)
Return all properties of this `entity` (including key properties).
-

attributes

(attributes element)(attributes element predicate)
Return the attributes of this `element`; if `predicate` is passed, return only those
-attributes satisfying the predicate.

base-type

(base-type property application)
FIXME: write docs

capitalise

(capitalise s)
Return a string like `s` but with each token capitalised.
-

child

(child element predicate)
Return the first child of this `element` satisfying this `predicate`.
-

child-with-tag

(child-with-tag element tag)(child-with-tag element tag predicate)
Return the first child of this `element` which has this `tag`;
-if `element` is `nil`, return `nil`. If `predicate` is supplied,
-return only the first child with the specified `tag` which satisfies
-the `predicate`.

children

(children element)(children element predicate)
Return the children of this `element`; if `predicate` is passed, return only those
-children satisfying the predicate.

children-with-tag

(children-with-tag element tag)(children-with-tag element tag predicate)
Return all children of this `element` which have this `tag`;
-if `element` is `nil`, return `nil`. If `predicate` is supplied,
-return only those children with the specified `tag` which satisfy
-the `predicate`.

column-name

(column-name property)
Return, as a string, the name for the column which represents this `property`.
-

descendant-with-tag

(descendant-with-tag element tag)(descendant-with-tag element tag predicate)
Return the first descendant of this `element`, recursively, which has this `tag`.
-If `predicate` is specified, return the first also satisfying this `predicate`.

descendants-with-tag

(descendants-with-tag element tag)(descendants-with-tag element tag predicate)
Return all descendants of this `element`, recursively, which have this `tag`.
-If `predicate` is specified, return only those also satisfying this `predicate`.

distinct-properties

(distinct-properties entity)
FIXME: write docs

editor-name

(editor-name entity application)
Return the path-part of the editor form for this `entity`. Note:
-assumes the editor form is the first form listed for the entity.

element?

(element? o)
True if `o` is a Clojure representation of an XML element.
-

emit-header

(emit-header prefix & content)
Emit this `content` as a sequence of wrapped lines each prefixed with
-`prefix`, and the whole delimited by rules.

entity-for-property

(entity-for-property property application)
If this `property` references an entity, return that entity from this `application`
-

entity?

(entity? x)
Return true if `x` is an ADL entity.
-

find-permissions

(find-permissions & elements)
Return appropriate the permissions of the first of these `elements` which
-has permissions.

formal-primary-key?

(formal-primary-key? prop-or-name entity)
Does this `prop-or-name` appear to be a property (or the name of a property)
-which is a formal primary key of this entity?

has-non-key-properties?

(has-non-key-properties? entity)
FIXME: write docs

has-primary-key?

(has-primary-key? entity)
FIXME: write docs

insertable-key-properties

macro

(insertable-key-properties entity)
FIXME: write docs

insertable-properties

macro

(insertable-properties entity)
Return all the properties of this `entity` (including key properties) into
-which user-supplied data can be inserted

insertable?

(insertable? property)
Return `true` it the value of this `property` may be set from user-supplied data.
-

is-quotable-type?

(is-quotable-type? property application)
True if the value for this field should be quoted.
-

key-names

(key-names entity)(key-names entity as-keywords?)
FIXME: write docs

key-properties

macro

(key-properties entity)
FIXME: write docs

path-part

(path-part form entity application)
Return the URL path part for this `form` of this `entity` within this `application`.
-Note that `form` may be a Clojure XML representation of a `form`, `list` or `page`
-ADL element, or may be one of the keywords `:form`, `:list`, `:page` in which case the
-first child of the `entity` of the specified type will be used.

permission-groups

(permission-groups permissions predicate)
Return a list of names of groups to which this `predicate` is true of
-some permission taken from these `permissions`, else nil.

pretty-name

(pretty-name element)
Return a version of the name of this `element` (entity, field,
-form, list, page, property) suitable for use in text visible to the user.

prompt

(prompt field-or-property form entity application)
Return an appropriate prompt for the given `field-or-property` taken from this
-`form` of this `entity` of this `application`, in the context of the current
-binding of `*locale*`. TODO: something more sophisticated about i18n

properties

macro

(properties entity)
Return all the properties of this `entity`.
-

property-for-field

(property-for-field field entity)
Return the property within this `entity` which matches this `field`.
-

property?

(property? o)
True if `o` is a property.
-

required-properties

(required-properties entity)
Return the properties of this `entity` which are required and are not
-system generated.

safe-name

(safe-name o)(safe-name o convention)
Return a safe name for the object `o`, given the specified `convention`.
-`o` is expected to be either a string or an element. Recognised values for
-`convention` are: #{:c :c-sharp :java :sql}

singularise

(singularise string)
Attempt to construct an idiomatic English-language singular of this string.
-

sort-by-name

(sort-by-name elements)
Sort these `elements` by their `:name` attribute.
-

system-generated?

(system-generated? property)
True if the value of the `property` is system generated, and
-should not be set by the user.

type-for-defined

(type-for-defined property application)
FIXME: write docs

typedef

(typedef property application)
If this `property` is of type `defined`, return its type definition from
-this `application`, else nil.

unique-link?

(unique-link? e1 e2)
True if there is exactly one link between entities `e1` and `e2`.
-

user-distinct-properties

(user-distinct-properties entity)
Return the properties of this `entity` which are user distinct
-

user-distinct-property-names

(user-distinct-property-names entity)
Return, as a set, the names of properties which are user distinct
-

visible-to

(visible-to permissions)
Return a list of names of groups to which are granted read access,
-given these `permissions`, else nil.

volatility

(volatility entity)
Return the cache ttl in seconds for records of this `entity`.
-

wrap-lines

(wrap-lines width text)(wrap-lines text)
Wrap lines in this `text` to this `width`; return a list of lines.
-

writeable-by

(writeable-by permissions)(writeable-by permissions has-value?)
Return a list of names of groups to which are granted write access,
-given these `permissions`, else nil.
-TODO: TOTHINKABOUT: properties are also writeable by `insert` and `noedit`, but only if the
-current value is nil.
\ No newline at end of file diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index b93bb22..0000000 --- a/doc/index.html +++ /dev/null @@ -1,8 +0,0 @@ - -Adl-support 0.1.4-SNAPSHOT

Adl-support 0.1.4-SNAPSHOT

Released under the MIT License

A small library of functions called by generated ADL code.

Installation

To install, add the following dependency to your project or build file:

[adl-support "0.1.4-SNAPSHOT"]

Topics

Namespaces

adl-support.filters

Application Description Language support - custom Selmer filters
-used in generated templates.

Public variables and functions:

adl-support.forms-support

Application Description Language support - functions useful in
-generating forms.

adl-support.print-usage

Application Description Language support - print a usage message.

Public variables and functions:

adl-support.rest-support

Application Description Language support - functions useful in
-generating JSON route handlers.

adl-support.tags

Application Description Language support - custom Selmer tags used
-in generated templates.

Public variables and functions:

\ No newline at end of file diff --git a/doc/intro.html b/doc/intro.html deleted file mode 100644 index 2114302..0000000 --- a/doc/intro.html +++ /dev/null @@ -1,4 +0,0 @@ - -Introduction to adl-support

Introduction to adl-support

-

adl-support is a small library of functions used by the Application Description Language system to generate elements of a Clojure web-app, which may be useful to people writing web-apps either based on Application Description Language or otherwise.

\ No newline at end of file diff --git a/doc/intro.md b/doc/intro.md deleted file mode 100644 index b946a58..0000000 --- a/doc/intro.md +++ /dev/null @@ -1,6 +0,0 @@ -# Introduction to adl-support - -`adl-support` is a small library of functions used by the [Application -Description Language](https://github.com/simon-brooke/adl) system to generate -elements of a Clojure web-app, which may be useful to people writing web-apps -either based on Application Description Language or otherwise. diff --git a/docs/adl-support.core.html b/docs/adl-support.core.html new file mode 100644 index 0000000..14f618c --- /dev/null +++ b/docs/adl-support.core.html @@ -0,0 +1,3 @@ + +adl-support.core documentation

adl-support.core

Application Description Language support - utility functions likely to be useful in user-written code.

*warn*

dynamic

The idea here is to have a function with which to show warnings to the user, which can be dynamically bound. Any binding should be a function of one argument, which it should print, log, or otherwise display.

compose-exception-reason

macro

(compose-exception-reason exception intro)(compose-exception-reason exception)

Compose and return a sensible reason message for this exception.

compose-reason-and-log

macro

(compose-reason-and-log exception intro)(compose-reason-and-log exception)

Compose a reason message for this exception, log it (with its stacktrace), and return the reason message.

do-or-log-and-return-reason

macro

(do-or-log-and-return-reason form)

Clojure stacktraces are unreadable. We have to do better; evaluate this form in a try-catch block; return a map. If the evaluation succeeds, the map will have a key :result whose value is the result; otherwise it will have a key :error which will be bound to the most sensible error message we can construct. Additionally, log the exception

do-or-log-error

macro

(do-or-log-error form & {:keys [message error-return], :or {message (clojure.core/seq (clojure.core/concat (clojure.core/list (quote clojure.core/str)) (clojure.core/list "A failure occurred in ") (clojure.core/list (list (quote quote) form))))}})

Evaluate the supplied form in a try/catch block. If the keyword param :message is supplied, the value will be used as the log message; if the keyword param :error-return is supplied, the value will be returned if an exception is caught.

do-or-return-reason

macro

(do-or-return-reason form intro)(do-or-return-reason form)

Clojure stacktraces are unreadable. We have to do better; evaluate this form in a try-catch block; return a map. If the evaluation succeeds, the map will have a key :result whose value is the result; otherwise it will have a key :error which will be bound to the most sensible error message we can construct.

do-or-warn

macro

(do-or-warn form)(do-or-warn form intro)

Evaluate this form; if any exception is thrown, show it to the user via the *warn* mechanism.

do-or-warn-and-log

macro

(do-or-warn-and-log form)(do-or-warn-and-log form intro)

Evaluate this form; if any exception is thrown, log the reason and show it to the user via the *warn* mechanism.

massage-params

Sending empty strings, or numbers as strings, to the database often isn’t helpful. Massage these params and form-params to eliminate these problems. We must take key field values out of just params, but we should take all other values out of form-params - because we need the key to load the form in the first place, but just accepting values of other params would allow spoofing.

massage-value

(massage-value k m)

Return a map with one key, this k as a keyword, whose value is the binding of k in map m, as read by read.

raw-massage-params

(raw-massage-params request entity)(raw-massage-params request)

Sending empty strings, or numbers as strings, to the database often isn’t helpful. Massage these params and form-params to eliminate these problems. Date and time fields also need massaging.

raw-resolve-template

(raw-resolve-template n)

FIXME: write docs

resolve-template

FIXME: write docs

\ No newline at end of file diff --git a/docs/adl-support.filters.html b/docs/adl-support.filters.html new file mode 100644 index 0000000..6de0d2c --- /dev/null +++ b/docs/adl-support.filters.html @@ -0,0 +1,3 @@ + +adl-support.filters documentation

adl-support.filters

Application Description Language support - custom Selmer filters used in generated templates.

*default-international-dialing-prefix*

dynamic

The international dialing prefix to use, if none is specified.

contains

(contains collection value)

FIXME: write docs

email

(email arg)

If arg is, or appears to be, a valid email address, convert it into a mailto: link, else leave it be.

telephone

(telephone arg)

If arg is, or appears to be, a valid telephone number, convert it into a tel: link, else leave it be.

\ No newline at end of file diff --git a/docs/adl-support.forms-support.html b/docs/adl-support.forms-support.html new file mode 100644 index 0000000..db36ed5 --- /dev/null +++ b/docs/adl-support.forms-support.html @@ -0,0 +1,3 @@ + +adl-support.forms-support documentation

adl-support.forms-support

Application Description Language support - functions useful in generating forms.

all-keys-present?

macro

(all-keys-present? m keys)

Return true if all the keys in keys are present in the map m.

auxlist-data-name

macro

(auxlist-data-name auxlist)

The name to which data for this auxlist will be bound in the Selmer params.

form-title

(form-title record form-name user-distinct-property-keys)

Construct an appropriate title for a form having this form-name, for an entity having these user-distinct-property-keys, given this record.

get-current-value

macro

(get-current-value f params entity-name)

Use the function f and these params to fetch an entity record from the database.

get-menu-options

macro

(get-menu-options entity-name get-q list-q fk value)

Fetch options for a menu of entity-name from the database, using this get-q query and this list-q query, using the key fk, where the current value is this value.

prepare-insertion-params

macro

(prepare-insertion-params params fields)

Params for insertion into the database must have keys for all fields in the insert query, even if the value of some of those keys is nil. Massage these params to have a value for each field in these fields.

property-defaults

(property-defaults entity)

Get a map of property names and default values for all properties of this entity which have explicit defaults.

query-name

(query-name entity-or-name q-type)

Generate a query name for the query of type q-type (expected to be one of :create, :delete, :get, :list, :search-strings, :update) of the entity entity-or-name NOTE: if entity-or-name is passed as a string, it should be the full, unaltered name of the entity.

\ No newline at end of file diff --git a/docs/adl-support.print-usage.html b/docs/adl-support.print-usage.html new file mode 100644 index 0000000..0138d85 --- /dev/null +++ b/docs/adl-support.print-usage.html @@ -0,0 +1,3 @@ + +adl-support.print-usage documentation

adl-support.print-usage

Application Description Language support - print a usage message.

print-usage

(print-usage project-name parsed-options)(print-usage project-name parsed-options extra-args)

Print a UN*X style usage message. project-name should be the base name of the executable jar file you generate, parsed-options should be options as parsed by clojure.tools.cli. If extra-args is supplied, it should be a map of name, documentation pairs for each additional argument which may be supplied.

\ No newline at end of file diff --git a/docs/adl-support.rest-support.html b/docs/adl-support.rest-support.html new file mode 100644 index 0000000..e93776d --- /dev/null +++ b/docs/adl-support.rest-support.html @@ -0,0 +1,3 @@ + +adl-support.rest-support documentation

adl-support.rest-support

Application Description Language support - functions useful in generating JSON route handlers.

do-or-server-fail

macro

(do-or-server-fail form status)

Evaluate this form; if it succeeds, return an HTTP response with this status code and the JSON-formatted result as body; if it fails, return an HTTP 500 response.

if-valid-user

macro

(if-valid-user form request error-return)(if-valid-user form request)

Evaluate this form only if there is a valid user in the session of this request; otherwise return the error-return value.

valid-user-or-forbid

macro

(valid-user-or-forbid form request)

Evaluate this form only if there is a valid user in the session of this request; otherwise return an HTTP forbidden response.

with-params-or-error

macro

(with-params-or-error form params required)

Evaluate this form only if these params contain all these required keys; otherwise return an HTTP 400 response.

\ No newline at end of file diff --git a/docs/adl-support.tags.html b/docs/adl-support.tags.html new file mode 100644 index 0000000..9631461 --- /dev/null +++ b/docs/adl-support.tags.html @@ -0,0 +1,3 @@ + +adl-support.tags documentation

adl-support.tags

Application Description Language support - custom Selmer tags used in generated templates.

add-tags

(add-tags)

FIXME: write docs

if-member-of-permitted

(if-member-of-permitted args context success failure)

If at least one of these args matches some group name in the :user-roles of this context, return this success, else this failure.

parse-arg

(parse-arg arg context)

FIXME: write docs

\ No newline at end of file diff --git a/docs/adl-support.utils.html b/docs/adl-support.utils.html new file mode 100644 index 0000000..7883341 --- /dev/null +++ b/docs/adl-support.utils.html @@ -0,0 +1,3 @@ + +adl-support.utils documentation

adl-support.utils

Application Description Language support - utility functions.

*locale*

dynamic

The locale for which files will be generated.

*output-path*

dynamic

The path to which generated files will be written.

*verbosity*

dynamic

The verbosity of output from the generator.

all-properties

macro

(all-properties entity)

Return all properties of this entity (including key properties).

attributes

(attributes element)(attributes element predicate)

Return the attributes of this element; if predicate is passed, return only those attributes satisfying the predicate.

base-type

(base-type property application)

FIXME: write docs

capitalise

(capitalise s)

Return a string like s but with each token capitalised.

child

(child element predicate)

Return the first child of this element satisfying this predicate.

child-with-tag

(child-with-tag element tag)(child-with-tag element tag predicate)

Return the first child of this element which has this tag; if element is nil, return nil. If predicate is supplied, return only the first child with the specified tag which satisfies the predicate.

children

(children element)(children element predicate)

Return the children of this element; if predicate is passed, return only those children satisfying the predicate.

children-with-tag

(children-with-tag element tag)(children-with-tag element tag predicate)

Return all children of this element which have this tag; if element is nil, return nil. If predicate is supplied, return only those children with the specified tag which satisfy the predicate.

column-name

(column-name property)

Return, as a string, the name for the column which represents this property.

descendant-with-tag

(descendant-with-tag element tag)(descendant-with-tag element tag predicate)

Return the first descendant of this element, recursively, which has this tag. If predicate is specified, return the first also satisfying this predicate.

descendants-with-tag

(descendants-with-tag element tag)(descendants-with-tag element tag predicate)

Return all descendants of this element, recursively, which have this tag. If predicate is specified, return only those also satisfying this predicate.

distinct-properties

(distinct-properties entity)

FIXME: write docs

editor-name

(editor-name entity application)

Return the path-part of the editor form for this entity. Note: assumes the editor form is the first form listed for the entity.

element?

(element? o)

True if o is a Clojure representation of an XML element.

emit-header

(emit-header prefix & content)

Emit this content as a sequence of wrapped lines each prefixed with prefix, and the whole delimited by rules.

entity-by-name

macro

(entity-by-name entity-name application)

Return the entity with this entity-name in this application. TODO: Candidate for move to adl-support.utils.

entity-for-property

(entity-for-property property application)

If this property references an entity, return that entity from this application

entity?

(entity? x)

Return true if x is an ADL entity.

find-permissions

(find-permissions & elements)

Return appropriate the permissions of the first of these elements which has permissions.

formal-primary-key?

(formal-primary-key? prop-or-name entity)

Does this prop-or-name appear to be a property (or the name of a property) which is a formal primary key of this entity?

has-non-key-properties?

(has-non-key-properties? entity)

FIXME: write docs

has-primary-key?

(has-primary-key? entity)

FIXME: write docs

insertable-key-properties

macro

(insertable-key-properties entity)

FIXME: write docs

insertable-properties

macro

(insertable-properties entity)

Return all the properties of this entity (including key properties) into which user-supplied data can be inserted

insertable?

(insertable? property)

Return true it the value of this property may be set from user-supplied data.

is-quotable-type?

(is-quotable-type? property application)

True if the value for this field should be quoted.

key-names

(key-names entity)(key-names entity as-keywords?)

FIXME: write docs

key-properties

macro

(key-properties entity)

FIXME: write docs

order-preserving-set

(order-preserving-set collection)

The Clojure set function does not preserve the order in which elements are passed to it. This function is like set, except 1. It returns a list, not a hashset, and 2. It is order-preserving.

path-part

(path-part form entity application)

Return the URL path part for this form of this entity within this application. Note that form may be a Clojure XML representation of a form, list or page ADL element, or may be one of the keywords :form, :list, :page in which case the first child of the entity of the specified type will be used.

permission-groups

(permission-groups permissions predicate)

Return a list of names of groups to which this predicate is true of some permission taken from these permissions, else nil.

pretty-name

(pretty-name element)

Return a version of the name of this element (entity, field, form, list, page, property) suitable for use in text visible to the user.

prompt

(prompt field-or-property form entity application)

Return an appropriate prompt for the given field-or-property taken from this form of this entity of this application, in the context of the current binding of *locale*. TODO: something more sophisticated about i18n

properties

macro

(properties entity)

Return all the properties of this entity.

property-for-field

(property-for-field field entity)

Return the property within this entity which matches this field.

property?

(property? o)

True if o is a property.

required-properties

(required-properties entity)

Return the properties of this entity which are required and are not system generated.

safe-name

(safe-name o)(safe-name o convention)

Return a safe name for the object o, given the specified convention. o is expected to be either a string or an element. Recognised values for convention are: #{:c :c-sharp :java :sql}

singularise

(singularise string)

Attempt to construct an idiomatic English-language singular of this string.

sort-by-name

(sort-by-name elements)

Sort these elements by their :name attribute.

system-generated?

(system-generated? property)

True if the value of the property is system generated, and should not be set by the user.

type-for-defined

(type-for-defined property application)

FIXME: write docs

typedef

(typedef property application)

If this property is of type defined, return its type definition from this application, else nil.

unique-link?

(unique-link? e1 e2)

True if there is exactly one link between entities e1 and e2.

user-distinct-properties

(user-distinct-properties entity)

Return the properties of this entity which are user distinct

user-distinct-property-names

(user-distinct-property-names entity)

Return, as a set, the names of properties which are user distinct

visible-to

(visible-to permissions)

Return a list of names of groups to which are granted read access, given these permissions, else nil.

volatility

(volatility entity)

Return the cache ttl in seconds for records of this entity.

wrap-lines

(wrap-lines width text)(wrap-lines text)

Wrap lines in this text to this width; return a list of lines.

writeable-by

(writeable-by permissions)(writeable-by permissions has-value?)

Return a list of names of groups to which are granted write access, given these permissions, else nil. TODO: TOTHINKABOUT: properties are also writeable by insert and noedit, but only if the current value is nil.

\ No newline at end of file diff --git a/doc/css/default.css b/docs/css/default.css similarity index 100% rename from doc/css/default.css rename to docs/css/default.css diff --git a/doc/css/highlight.css b/docs/css/highlight.css similarity index 100% rename from doc/css/highlight.css rename to docs/css/highlight.css diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..9ca0c71 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,3 @@ + +Adl-support 0.1.7-SNAPSHOT

Adl-support 0.1.7-SNAPSHOT

Released under the MIT License

A small library of functions called by generated ADL code.

Installation

To install, add the following dependency to your project or build file:

[adl-support "0.1.7-SNAPSHOT"]

Namespaces

adl-support.filters

Application Description Language support - custom Selmer filters used in generated templates.

adl-support.forms-support

Application Description Language support - functions useful in generating forms.

adl-support.print-usage

Application Description Language support - print a usage message.

Public variables and functions:

adl-support.rest-support

Application Description Language support - functions useful in generating JSON route handlers.

adl-support.tags

Application Description Language support - custom Selmer tags used in generated templates.

Public variables and functions:

\ No newline at end of file diff --git a/doc/js/highlight.min.js b/docs/js/highlight.min.js similarity index 100% rename from doc/js/highlight.min.js rename to docs/js/highlight.min.js diff --git a/doc/js/jquery.min.js b/docs/js/jquery.min.js similarity index 100% rename from doc/js/jquery.min.js rename to docs/js/jquery.min.js diff --git a/doc/js/page_effects.js b/docs/js/page_effects.js similarity index 100% rename from doc/js/page_effects.js rename to docs/js/page_effects.js From 35c061b51926be252ed3c66d91c1e5b81c1ad1af Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 12 Nov 2019 11:32:53 +0000 Subject: [PATCH 4/8] All tests pass; rather more satisfied with semantics of list-related-query-name --- src/adl_support/forms_support.clj | 2 +- src/adl_support/utils.clj | 23 +++++++++++++---------- test/adl_support/utils_test.clj | 18 +++++++++--------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/adl_support/forms_support.clj b/src/adl_support/forms_support.clj index 7ff50c6..81dacff 100644 --- a/src/adl_support/forms_support.clj +++ b/src/adl_support/forms_support.clj @@ -92,7 +92,7 @@ "The name to which data for this `auxlist` will be bound in the Selmer params." [auxlist] - `(safe-name (-> ~auxlist :attrs :property) :clojure)) + `(safe-name (str "auxlist-" (-> ~auxlist :attrs :property)) :clojure)) (defmacro all-keys-present? diff --git a/src/adl_support/utils.clj b/src/adl_support/utils.clj index e840e1a..2b12ead 100644 --- a/src/adl_support/utils.clj +++ b/src/adl_support/utils.clj @@ -579,21 +579,24 @@ (defn list-related-query-name "Return the canonical name of the HugSQL query to return all records on `farside` which match a given record on `nearside`, where `nearide` and - `farside` are both entities." + `farside` are both entities; and `property` is the nearside property on + which to join." ([property nearside farside as-symbol?] (let [unique? (= - (count - (filter - #(= (-> % :attrs :entity)(-> property :attrs :entity)) - (descendants-with-tag nearside :property))) - 1) + (count + (filter + #(= (-> % :attrs :entity)(-> property :attrs :entity)) + (descendants-with-tag nearside :property))) + 1) farname (if unique? (safe-name farside :sql) (safe-name property :sql)) nearname (singularise (safe-name nearside :sql)) n (case (-> property :attrs :type) - ;; TODO: I am deeply susicious of this. It's just improbable that - ;; the same recipe should work for all three cases. - ("link" "list") (str "list-" farname "-by-" nearname) - "entity" (str "list-" farname "-by-" nearname) + "list" (str "list-" farname "-by-" nearname) + "link" (s/join "-" + (list + "list" + (safe-name property :sql) "by" nearname)) + "entity" (str "list-" (safe-name nearside :sql) "-by-" (safe-name property :sql)) ;; default (str "ERROR-bad-property-type-" (-> ~property :attrs :type) "-of-" diff --git a/test/adl_support/utils_test.clj b/test/adl_support/utils_test.clj index 5132672..e4229df 100644 --- a/test/adl_support/utils_test.clj +++ b/test/adl_support/utils_test.clj @@ -308,7 +308,7 @@ (deftest list-related-query-name-tests (testing "list-related-query-name" - (let [e1 {:tag :entity, + (let [genders-entity {:tag :entity, :attrs {:volatility "6", :magnitude "1", :name "genders", :table "genders"}, :content [{:tag :documentation, :content ["All genders which may be assigned to\n electors."]} @@ -321,7 +321,7 @@ :content nil}]}]} {:tag :list, :attrs {:name "Genders", :properties "all"}} {:tag :form, :attrs {:name "Gender", :properties "all"}}]} - e2 {:tag :entity, + electors-entity {:tag :entity, :attrs {:volatility "6", :magnitude "1", :name "electors", :table "electors"}, :content [{:tag :documentation, :attrs nil, @@ -366,9 +366,9 @@ [{:tag :prompt, :attrs {:locale "en_GB.UTF-8", :prompt "Gender"}, :content nil}]}]} - property (child e2 #(= (-> % :attrs :name) "gender")) + property (child electors-entity #(= (-> % :attrs :name) "gender")) expected "list-electors-by-gender" - actual (list-related-query-name property e2 e1)] + actual (list-related-query-name property electors-entity genders-entity)] (is (= expected actual) "just checking...")) (let [e1 {:tag :entity :attrs {:name "dwellings"} @@ -394,7 +394,7 @@ expected "list-dwellings-by-address" actual (list-related-query-name property e2 e1)] (is (= expected actual) "List property"))) - (let [e1 {:tag :entity + (let [team-entity {:tag :entity :attrs {:name "teams"} :content [{:tag :key :content [{:tag :property @@ -403,7 +403,7 @@ :attrs {:name "members" :type "link" :entity "canvassers"}} {:tag :property :attrs {:name "organisers" :type "link" :entity "canvassers"}}]} - e2 {:tag :entity + canvasser-entity {:tag :entity :attrs {:name "canvassers"} :content [{:tag :key :content [{:tag :property @@ -413,17 +413,17 @@ (let [property {:tag :property :attrs {:name "members" :type "link" :entity "canvassers"}} expected "list-members-by-team" - actual (list-related-query-name property e1 e2)] + actual (list-related-query-name property team-entity canvasser-entity)] (is (= actual expected) "Link property - members")) (let [property {:tag :property :attrs {:name "organisers" :type "link" :entity "canvassers"}} expected "list-organisers-by-team" - actual (list-related-query-name property e1 e2)] + actual (list-related-query-name property team-entity canvasser-entity)] (is (= actual expected) "Link property - organisers")) (let [property {:tag :property :attrs {:name "memberships" :type "link" :entity "teams"}} expected "list-memberships-by-canvasser" - actual (list-related-query-name property e2 e1)] + actual (list-related-query-name property canvasser-entity team-entity)] (is (= actual expected) "Link property - membersips"))))) From 299802c2e5a070c1c5d6ed1e039a3b98c6125372 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 12 Nov 2019 16:14:27 +0000 Subject: [PATCH 5/8] Run `lein ancient`, and updated dependencies except Clojure. All tests pass. --- project.clj | 6 +++--- src/adl_support/utils.clj | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/project.clj b/project.clj index 6604abc..d0179d8 100644 --- a/project.clj +++ b/project.clj @@ -5,10 +5,10 @@ :url "https://opensource.org/licenses/MIT"} :dependencies [[org.clojure/clojure "1.8.0"] - [org.clojure/core.memoize "0.7.1"] + [org.clojure/core.memoize "0.8.2"] [org.clojure/math.numeric-tower "0.0.4"] - [org.clojure/tools.logging "0.4.1"] - [selmer "1.11.8"]] + [org.clojure/tools.logging "0.5.0"] + [selmer "1.12.17"]] :plugins [[lein-codox "0.10.4"] [lein-release "1.0.5"]] diff --git a/src/adl_support/utils.clj b/src/adl_support/utils.clj index 2b12ead..d8b233e 100644 --- a/src/adl_support/utils.clj +++ b/src/adl_support/utils.clj @@ -261,7 +261,7 @@ (s/join " " (map - #(apply str (cons (Character/toUpperCase (first %)) (rest %))) + s/capitalize (s/split s #"[^a-zA-Z0-9]+"))) s)) From 6b7d43599ad7e819d40ea1adc19cfe3ecbc0894c Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 12 Nov 2019 16:14:27 +0000 Subject: [PATCH 6/8] Run `lein ancient`, and updated dependencies except Clojure. All tests pass. --- CHANGELOG.md | 10 +++++++--- project.clj | 6 +++--- src/adl_support/utils.clj | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b99996..ea76e26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,21 @@ # Change Log All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/). -## 0.1.4 - 2018-0922 +## 0.1.5 - 2018-0922 ### Added Mainly documentation and tidy-up; Beta release. +[0.1.5]: https://github.com/simon_brooke/adl-support/compare/0.1.4...0.1.5 + ## 0.1.4 - 2018-09-20 This is not anticipated to be the actual Beta release; it's a dummy run to test the release and deployment process. Some required features are still missing. +[0.1.4]: https://github.com/simon_brooke/adl-support/compare/0.1.0...0.1.4 + ## 0.1.0 - 2018-06-17 ### Added Initial release. -[Unreleased]: https://github.com/your-name/adl-support/compare/0.1.1...HEAD -[0.1.1]: https://github.com/your-name/adl-support/compare/0.1.0...0.1.1 +[Unreleased]: https://github.com/simon_brooke/adl-support/compare/0.1.1...HEAD +[0.1.1]: https://github.com/simon_brooke/adl-support/compare/0.1.0...0.1.1 diff --git a/project.clj b/project.clj index 6604abc..d0179d8 100644 --- a/project.clj +++ b/project.clj @@ -5,10 +5,10 @@ :url "https://opensource.org/licenses/MIT"} :dependencies [[org.clojure/clojure "1.8.0"] - [org.clojure/core.memoize "0.7.1"] + [org.clojure/core.memoize "0.8.2"] [org.clojure/math.numeric-tower "0.0.4"] - [org.clojure/tools.logging "0.4.1"] - [selmer "1.11.8"]] + [org.clojure/tools.logging "0.5.0"] + [selmer "1.12.17"]] :plugins [[lein-codox "0.10.4"] [lein-release "1.0.5"]] diff --git a/src/adl_support/utils.clj b/src/adl_support/utils.clj index 2b12ead..d8b233e 100644 --- a/src/adl_support/utils.clj +++ b/src/adl_support/utils.clj @@ -261,7 +261,7 @@ (s/join " " (map - #(apply str (cons (Character/toUpperCase (first %)) (rest %))) + s/capitalize (s/split s #"[^a-zA-Z0-9]+"))) s)) From 05c2ef93d8deee64b3670c051cb43d11a9bed1cd Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 20 May 2025 09:38:32 +0100 Subject: [PATCH 7/8] Change to git.journeyman.cc as canonical repository --- README.md | 6 +++++- src/adl_support/core.clj | 4 ++-- src/adl_support/utils.clj | 10 ++++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dc6b14b..e00ae27 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # adl-support -A Clojure library designed to support auto-generated [ADL](https://github.com/simon-brooke/adl) code. This library should normally be included into projects generated by ADL, and consequently is licenced under the MIT license, which is less restrictive than the GNU General Public License which I normally use. +A Clojure library designed to support auto-generated [ADL](https://git.journeyman.cc/simon/adl) code. This library should normally be included into projects generated by ADL, and consequently is licenced under the MIT license, which is less restrictive than the GNU General Public License which I normally use. [![Clojars Project](https://img.shields.io/clojars/v/adl-support.svg)](https://clojars.org/adl-support) @@ -8,6 +8,10 @@ A Clojure library designed to support auto-generated [ADL](https://github.com/si You don't really use this; code auto-generated by ADL does. Some functions which may be more generally useful are in `adl-support.core`, q.v. +## Note: GitHub + +This project was hosted on GitHub at https://github.com/simon-brooke/adl-support. In accordance with journeyman policy the canonical repository is now [https://git.journeyman.cc/simon/adl-support](https://git.journeyman.cc/simon/adl-support). While the GitHub repository still exists it is no longer maintained and will in due course be colled. + ## License Copyright © 2018 Simon Brooke diff --git a/src/adl_support/core.clj b/src/adl_support/core.clj index bb3ae8f..bf9b068 100644 --- a/src/adl_support/core.clj +++ b/src/adl_support/core.clj @@ -37,7 +37,7 @@ `k` in map `m`, as read by read." [k m] (let [v (m k) - vr (if + vr (when (string? v) (try (json/read-str v) @@ -49,7 +49,7 @@ (number? vr) ;; there's a problem that json/read-str will read "07777 888999" as 7777 (re-matches #"^[0-9.]+$" v)) {(keyword k) vr} - true + :else {(keyword k) v}))) diff --git a/src/adl_support/utils.clj b/src/adl_support/utils.clj index d8b233e..7ce6ee6 100644 --- a/src/adl_support/utils.clj +++ b/src/adl_support/utils.clj @@ -276,7 +276,7 @@ (defn safe-name "Return a safe name for the object `o`, given the specified `convention`. `o` is expected to be either a string or an element. Recognised values for - `convention` are: #{:c :c-sharp :java :sql}" + `convention` are: #{:c :c-sharp :clojure :java :sql}" ([o] (cond (element? o) @@ -300,6 +300,7 @@ capitalised (capitalise string)] (case convention (:sql :c) (s/replace string #"[^a-zA-Z0-9_]" "_") + :clojure (s/replace string #"[^a-zA-Z0-9-]" "-") :c-sharp (s/replace capitalised #"[^a-zA-Z0-9]" "") :java (let [camel (s/replace capitalised #"[^a-zA-Z0-9]" "")] @@ -611,7 +612,12 @@ (symbol (str "db/" n)) n) (do - (*warn* "Argument passed to `list-related-query-name` was a non-entity") + (*warn* + (str "Argument " + (cond + (not (entity? nearside)) (or (-> nearside :attrs :name) nearside "nearside") + (not (entity? farside)) (or (-> farside :attrs :name) farside "farside")) + " passed to `list-related-query-name` was a non-entity")) nil)))) ([property nearside farside] (list-related-query-name property nearside farside false))) From e6c332283c9a2f790f458111b4592099d40dbda2 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 20 May 2025 09:43:26 +0100 Subject: [PATCH 8/8] lein-release plugin: preparing 0.1.7 release --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index d0179d8..79c7dca 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject adl-support "0.1.7-SNAPSHOT" +(defproject adl-support "0.1.7" :description "A small library of functions called by generated ADL code." :url "https://github.com/simon-brooke/adl-support" :license {:name "MIT License"