Primitive
This library contains the most root objects I found myself re-implementing over and over. It is meant to serve as an abstract base for object modeling a domain.
Installation
To install through Rubygems:
gem install primitiveYou can also add this to your Gemfile using:
bundle add primitivePrimitive::Entity
Base class for objects identified by a string value (ID). Extension examples:
class Team < Primitive::Entity
attr_reader :name
def initialize(id:, name:)
super(id)
@name = name
end
end
# Not allowing direct manipulation of ID in the case it is controlled by the repository.
class Player < Primitive::Entity
attr_reader :name
def initialize(name:)
super()
@name = name
end
endSeveral features are now provided by its base-class via the ID attribute:
- Case-insensitive equality:
#eql?and#== - Object hashing:
#hash - Sorting:
#<=> - Outputting:
#to_s
Primitive::Repository
An interface that describes how a repository should function for loading/saving entities. A concrete example (albeit simple) is the Primitive::CompactFile class which leverages YAML for serialization. Note that ID, in this case, is representative of the file path.
Contributing
Development Environment Configuration
Basic steps to take to get this repository compiling:
- Install Ruby (check primitive.gemspec for versions supported)
- Install bundler (gem install bundler)
- Clone the repository (git clone git@github.com:mattruggio/primitive.git)
- Navigate to the root folder (cd primitive)
- Install dependencies (bundle)
Running Tests
To execute the test suite run:
bin/rspec spec --format documentationAlternatively, you can have Guard watch for changes:
bin/guardAlso, do not forget to run Rubocop:
bin/rubocopAnd auditing the dependencies:
bin/bundler-audit check --updateAnd Sorbet:
bin/srbPublishing
Note: ensure you have proper authorization before trying to publish new versions.
After code changes have successfully gone through the Pull Request review process then the following steps should be followed for publishing new versions:
- Merge Pull Request into main
- Update
version.rbusing semantic versioning - Install dependencies:
bundle - Update
CHANGELOG.mdwith release notes - Commit & push main to remote and ensure CI builds main successfully
- Run
bin/rake release, which will create a git tag for the version, push git commits and tags, and push the.gemfile to rubygems.org.
Code of Conduct
Everyone interacting in this codebase, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
License
This project is MIT Licensed.