README.md in rasti-db-1.5.0 vs README.md in rasti-db-2.0.0
- old
+ new
@@ -26,63 +26,77 @@
## Usage
### Database connection
```ruby
-DB = Sequel.connect ...
+DB_1 = Sequel.connect ...
+DB_2 = Sequel.connect ...
```
### Database schema
```ruby
-DB.create_table :users do
+DB_1.create_table :users do
primary_key :id
String :name, null: false, unique: true
end
-DB.create_table :posts do
+DB_1.create_table :posts do
primary_key :id
String :title, null: false, unique: true
String :body, null: false
+ Integer :language_id, null: false, index: true
foreign_key :user_id, :users, null: false, index: true
end
-DB.create_table :comments do
+DB_1.create_table :comments do
primary_key :id
String :text, null: false
foreign_key :user_id, :users, null: false, index: true
foreign_key :post_id, :posts, null: false, index: true
end
-DB.create_table :categories do
+DB_1.create_table :categories do
primary_key :id
String :name, null: false, unique: true
end
-DB.create_table :categories_posts do
+DB_1.create_table :categories_posts do
foreign_key :category_id, :categories, null: false, index: true
foreign_key :post_id, :posts, null: false, index: true
primary_key [:category_id, :post_id]
end
-DB.create_table :people do
+DB_1.create_table :people do
String :document_number, null: false, primary_key: true
String :first_name, null: false
String :last_name, null: false
Date :birth_date, null: false
foreign_key :user_id, :users, null: false, unique: true
end
+
+DB_1.create_table :languages_people do
+ Integer :language_id, null: false, index: true
+ foreign_key :document_number, :people, type: String, null: false, index: true
+ primary_key [:language_id, :document_number]
+end
+
+DB_2.create_table :languages do
+ primary_key :id
+ String :name, null: false, unique: true
+end
```
### Models
```ruby
User = Rasti::DB::Model[:id, :name, :posts, :comments, :person]
Post = Rasti::DB::Model[:id, :title, :body, :user_id, :user, :comments, :categories]
Comment = Rasti::DB::Model[:id, :text, :user_id, :user, :post_id, :post]
Category = Rasti::DB::Model[:id, :name, :posts]
Person = Rasti::DB::Model[:document_number, :first_name, :last_name, :birth_date, :user_id, :user]
+Language = Rasti::DB::Model[:id, :name, :people]
```
### Collections
```ruby
@@ -103,12 +117,12 @@
query :entitled, -> (title) { where title: title }
query :commented_by do |user_id|
chainable do
- dataset.join(with_schema(:comments), post_id: :id)
- .where(with_schema(:comments, :user_id) => user_id)
+ dataset.join(qualify(:comments), post_id: :id)
+ .where(Sequel[:comments][:user_id] => user_id)
.select_all(:posts)
.distinct
end
end
end
@@ -127,23 +141,34 @@
set_primary_key :document_number
set_foreign_key :document_number
set_model Person
many_to_one :user
+ many_to_many :languages
end
-users = Users.new DB
-posts = Posts.new DB
-comments = Comments.new DB
-categories = Categories.new DB
-people = People.new DB
+class Languages < Rasti::DB::Collection
+ set_data_source_name :other
+
+ one_to_many :posts
+ many_to_many :people, collection: People, relation_data_source_name: :default
+end
+
+environment = Rasti::DB::Environment.new default: Rasti::DB::DataSource.new(DB_1),
+ other: Rasti::DB::DataSource.new(DB_2, 'custom_schema')
+
+users = Users.new environment
+posts = Posts.new environment
+comments = Comments.new environment
+categories = Categories.new environment
+people = People.new environment
```
### Persistence
```ruby
-DB.transaction do
+DB_1.transaction do
id = users.insert name: 'User 1'
users.update id, name: 'User updated'
users.delete id
users.bulk_insert [{name: 'User 1'}, {name: 'User 2'}]
@@ -172,10 +197,10 @@
posts.created_by(1) # => [Post, ...]
posts.created_by(1).entitled('...').commented_by(2) # => [Post, ...]
posts.with_categories([1,2]) # => [Post, ...]
-posts.graph(:user, :categories, 'comments.user') # => [Post(User, [Categories, ...], [Comments(User)]), ...]
+posts.graph(:user, :language, :categories, 'comments.user') # => [Post(User, Language, [Categories, ...], [Comments(User)]), ...]
posts.join(:user).where(name: 'User 4') # => [Post, ...]
posts.select_attributes(:id, :title) # => [Post, ...]
posts.exclude_attributes(:id, :title) # => [Post, ...]