# CoreData Motion This project aims to provide a ruby-like way of creating CoreData models using a DSL, avoiding the need to create them using the XCode GUI builder. ##Installation ###Using bundler: If you are using bundler for managing dependencies, you will need to add the gem to your project's Gemfile: # Gemfile source "https://rubygems.org" gem "rake" gem "core_data_motion" # Some other gems for your poject and setup your Rakefile to properly require bundler's dependencies: # -*- coding: utf-8 -*- # Rakefile $:.unshift("/Library/RubyMotion/lib") require 'motion/project/template/ios' require 'rubygems' require 'bundler' Bundler.setup Bundler.require Motion::Project::App.setup do |app| # Use `rake config' to see complete project settings. app.name = 'your_app_name' app.frameworks += %w(CoreData) app.files.unshift(*Dir.glob(File.join(app.project_dir, 'app/lib/**/*.rb'))) end ###Without bundler If you are not managing dependencies with bundler, you will need to install the gem with: gem install core_data_motion And then require it in your Rakefile: # -*- coding: utf-8 -*- # Rakefile $:.unshift("/Library/RubyMotion/lib") require 'motion/project/template/ios' require 'rubygems' require 'core_data_motion' Motion::Project::App.setup do |app| # Use `rake config' to see complete project settings. app.name = 'your_app_name' app.frameworks += %w(CoreData) app.files.unshift(*Dir.glob(File.join(app.project_dir, 'app/lib/**/*.rb'))) end ##Usage example: Create a file under your `settings/` directory and define the ModelDefinition class as follows: class ModelDefinition < CDM::EntityDefinition def define_model create_entity :project do |e| e.string :name e.string :description_text e.date :start_date e.double :budget end create_entity :task do |e| e.int16 :project_id, optional: false e.string :name e.string :details end create_entity :comment do |e| e.int16 :owner_id, optional: false e.string :owner_type e.string :content end end end Run the following rake task to create the files needed to create the data model: rake coredata:setup If you are using MagicalRecord, you can initialize your database in your application delegate by running: MagicalRecord.setupCoreDataStackWithStoreNamed('database.sqlite') You can use any CoreData wrapper you want (or none at all) to query for records and save them to the device's local database. ## Available data-types The available data types in a CoreData model are: - Binary `e.binary :binary_field` - Boolean `e.boolean :boolean_field` - Date `e.date :date_field` - Decimal `e.decimal :decimal_field` - Double `e.double :double_field` - Float `e.float :float_field` - Integer 16 `e.int16 :int_field` - Integer 32 `e.int32 :int_field` - Integer 64 `e.int64 :int_field` - String `e.string :string_field` - Transformable `e.transformable :transformable_field` ## Contributing This is a work in progress and help is greatly appreciated! If you want to add a feature, fix a bug or help with documentation, you are very welcome to do so. Just follow the usual way of contributing: - Fork the repo. - Create a feature branch. - Make tests for the feature you want to add. - Make the tests pass. - Send a pull request.