README.md

Path: README.md
Last Update: Sat Feb 23 07:13:29 +0000 2019

# Anise

[Hompage](rubyworks.github.com/anise) / [Report Issue](github.com/rubyworks/anise/issues) / [Source Code](github.com/rubyworks/anise) / [Mailing List](groups.google.com/group/rubyworks-mailinglist) / [IRC Channel](chat.us.freenode.new/rubyworks)

[![Build Status](secure.travis-ci.org/rubyworks/anise.png)](http://travis-ci.org/rubyworks/anise)

## Introduction

Anise is an Annotation System for the Ruby programming language. Unlike most other annotations systems it is not a comment-based or macro-based system that sits over-and-above the rest of the code. Rather, Anise is a dynamic annotations system operating at runtime.

## Installation

To install with RubyGems simply open a console and type:

    gem install anise

To manually install you will need Setup.rb (see setup.rubyforge.org). Then download the tarball package and do:

    $ tar -xvzf anise-0.2.0.tgz
    $ cd anise-0.2.0
    $ sudo setup.rb all

## Instruction

The following example briefly demonstrates all three major features. To use any of them first require the `anise` library.

     require 'anise'

General annotations are provided by the `Anise::Annotations` module.

    class X
      extend Anise::Annotations

      ann :grape, :class=>String
    end

    X.ann(:grape, :class)  #=> String

Annotated attributes can be easily added to a class via the `Annotative::Attributes` module.

    class X
      extend Anise::Annotative::Attributes

      attr :baz, Integer, :max => 10
    end

    X.ann(:baz)  #=> {:class=>Integer, :max=>10}

Mewthod annotations can be had via the `AnnotatedMethods` module.

    class X
      extend Anise::Annotative::Methods

      def self.doc(string)
        method_annotation(:doc=>string)
      end

      doc "This is an entry."

      def bar
        # ...
      end
    end

    X.ann(:bar)  #=> {:doc=>"This is an entry."}

Any of these modules can be used in conjunction. Since both `AnnotatedMethods` and `AnnotatedAttributes` preclude `Annotations` all three can be used by simply using the later two.

     class X
       extend Anise::Annotative::Attributes
       extend Anise::Annotative::Methods

       ...
     end

Note also that the `Anise` module is clean and contains only modules and classes with detailed names starting the "Annotat-", so it is prefectly convenient for inclusion in the toplevel namespace or your own applications namespace.

    module MyApp
      include Anise

      class Foo
        extend Annotative::Attributes

        ...
      end
    end

## Development

### Test Instructions

Ainse has two test suites, one using [QED](rubyworks.github.com/qed) and the other using [Citron](rubyworks.github.com/citron) which is built on [RubyTest](rubyworks.github.com/rubytest).

To run the QED demonstrations simple run:

    $ qed

To run the Citron-based unit tests use:

    $ rubytest

## Copyrights

Copyright (c) 2008 Rubyworks. All rights reserved.

This program is distributed under the terms of the **BSD-2-Clause** license.

See LICNESE.txt file for details.

[Validate]