DynFork
ORM-like API MongoDB for Crystal language.
      DynFork is built around Cryomongo and is more focused on web development.
      
For simulate relationship Many-to-One and Many-to-Many,
a simplified alternative (Types of selective fields with dynamic addition of elements) is used.
The project is focused on web development.
  
For simulate relationship Many-to-One and Many-to-Many,
a simplified alternative (Types of selective fields with dynamic addition of elements) is used.
The project is focused on web development.
Compatible with MongoDB 3.6+. Tested against: 4.4, 7.0
For more information see Cryomongo.
Documentation
Online browsable documentation is available at https://kebasyaty.github.io/dynfork/.
Requirements
View the list of requirements.
Installation
- 
Add the dependency to your shard.yml:dependencies: dynfork: github: kebasyaty/dynfork version: ~> 0.7.14
- 
Run shards install
Usage
It is recommended to look at examples here.
require "dynfork"
# Create your model.
@[DynFork::Meta(service_name: "Accounts")]
struct User < DynFork::Model
  getter username = DynFork::Fields::TextField.new
  getter email = DynFork::Fields::EmailField.new
  getter birthday = DynFork::Fields::DateField.new
end
# Initialize locale.
# https://github.com/crystal-i18n/i18n
I18n.config.loaders << I18n::Loader::YAML.new("config/locales")
I18n.config.default_locale = :en
I18n.init
# Run migration.
# https://elbywan.github.io/cryomongo/Mongo/Client.html
DynFork::Migration::Monitor.new(
  app_name: "AppName",
  unique_app_key: "Towr5kKQM5H3Lb0b",
  mongo_client: Mongo::Client.new("mongodb://localhost:27017")
).migrat
# Create a user.
user = User.new
# Add user data.
user.username.value = "username"
user.email.value = "[email protected]"
user.birthday.value = "1970-01-01"
# Save user.
# Hint: print_err - convenient for development.
user.print_err unless user.save
# Print user details.
puts "User details:"
if id = user.object_id
  pp User.find_one_to_hash({_id: id})
end
puts "Documwnt count: #{User.estimated_document_count}"
puts "Deleting a document."
user.delete
puts "Documwnt count: #{User.count_documents}"See more examples here.
Model Parameters
See the documentation here.
  
( only service_name is a required parameter )
| Parameter | Default | Description | 
|---|---|---|
| service_name | no | Examples: Accounts | Smartphones | Washing machines | etc ... | 
| fixture_name | no | The name of the fixture in the config/fixtures directory (without extension). Examples: SiteSettings | AppSettings | etc ... | 
| db_query_docs_limit | 1000 | limiting query results. | 
| migrat_model? | true | Set to false if you do not need to migrate the Model to the database. This can be use to validate a web forms - Search form, Contact form, etc. | 
| create_doc? | true | Can a Model create new documents in a collection? Set to false if you only need one document in the collection and the Model is using a fixture. | 
| update_doc? | true | Can a Model update documents in a collection? | 
| delete_doc? | true | Can a Model remove documents from a collection? | 
Example:
  @[DynFork::Meta(
    service_name: "ServiceName",
    fixture_name: "FixtureName",
    db_query_docs_limit: 1000,
    migrat_model?: true,
    create_doc?: true,
    update_doc?: true,
    delete_doc?: true,
  )]
  struct User < DynFork::Model
    getter username = DynFork::Fields::TextField.new
    getter birthday = DynFork::Fields::DateField.new
  endMethods for developers
Links to documentation.
- full_model_name
- meta
- subclasses
- object_id
- add_validation
- indexing
- pre_create
- post_create
- pre_update
- post_update
- pre_delete
- post_delete
- migrat
- valid?
- save
- print_err
- delete
- verify_password
- update_password
- aggregate
- collection_name
- count_documents
- distinct
- estimated_document_count
- stats
- find_many_to_hash_list
- find_many_to_json
- find_one_to_hash
- find_one_to_instance
- find_one_to_json
- find_one_and_delete
- unit_manager
- delete_many
- delete_one
- bulk
- bulk_write
- create_index
- create_indexes
- drop_index
- drop_indexes
- list_indexes
- finance_plus
- finance_minus
- finance_divide
- finance_multiply
For currencies, use the Money shard.
Contributing
- Fork it (https://github.com/kebasyaty/dynfork/fork)
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- kebasyaty Gennady Kostyunin - creator and maintainer
Changelog
License
This project is licensed under the MIT.