Democritus is library for building classes from reusable components.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
lib
spec
.gitignore
.hound.yml
.rspec
.travis.yml
Gemfile
LICENSE
README.md
Rakefile
democritus.gemspec

README.md

Democritus

Build Status APACHE 2 License Code Climate Test Coverage Documentation Status

Democritus is library for building classes from reusable components.

Democritus is inspired as followup of a common pattern that I saw in the development of Sipity's form objects. It also aims to address the needs of Sipity's yet to be developed sibling application; The dissemination of processed data.

I'm looking to apply the ideas put forward in Avdi Grimm's Naught gem.

Goal

I would like to be able to declare in Ruby the following:

ApprovalForm = Democritus.build(command_namespaces: ['Sipity::DemocritusCommands', 'Democritus::ClassBuilder::Commands']) do |builder|
  builder.form do
    attributes do
      attribute(name: 'agree_to_terms_of_service', type: 'Boolean', validates: 'acceptance')
    end
    action_name(name: 'approval')
  end
end

With an ApprovalForm, I could #submit if #valid? (i.e. the agree_to_terms_of_service has been accepted).

From that point forward, I would like to be able to create the class based on a JSON description:

{
  "#command_namespaces": ["Sipity::DemocritusCommands", "Democritus::ClassBuilder::Commands"],
  "#form": {
    "#attributes": {
      "#attribute": [
        { "name": "agree_to_terms_of_service", "type": "Boolean", "validates": "acceptance" }
      ]
    },
    "#action_name": { "name": "approval" }
  }
}
ApprovalForm = Demcritus.build_from_json(json)

Roadmap

  • Rudimentary plugin command behavior
  • Create the commands that build a Sipity processing form
  • Build class from JSON configuration
    • Basic case for nested commands
    • Allow for "constantization" of command_namespaces option.