README.md in tako-0.3.0 vs README.md in tako-0.3.1
- old
+ new
@@ -1,12 +1,16 @@
# Tako
[![CircleCI](https://circleci.com/gh/the40san/tako/tree/master.svg?style=svg)](https://circleci.com/gh/the40san/tako/tree/master)
-Provides features for Database Sharding in ActiveRecord.
-The main goal of tako is implementing sharding features with less ActiveRecord-dependent, catching up Rails version up.
-Rails 5 Ready.
+Tako provides Database-Sharding features for ActiveRecord.
+Respecting [Octopus](https://github.com/thiagopradi/octopus)
+# Motivation
+The main goal of Tako is implementing sharding features with less ActiveRecord-dependent; catching up Rails version up.
+And also, Tako supports migration from Octopus because it is no longer maintained.
+
+
## Installation
Add this line to your application's Gemfile:
```ruby
@@ -27,61 +31,101 @@
$ bundle exec rake db:tako:create
$ bundle exec rake db:tako:migrate
## Usage
## How to use Tako?
-First, you need to create a config file, shards.yml, inside your config/ directory.
+First, you need to create a config file, `shards.yml`, inside your config/ directory.
Also you can override config file path with environment variable.
### Syntax
Tako adds a method to each AR Class and object: the shard method is used to select the shard like this:
```ruby
User.shard(:slave_one).where(:name => "Thiago").limit(3)
+ # => Query will run in :slave_one
```
Tako also supports queries within a block. When you pass a block to the shard method, all queries inside the block will be sent to the specified shard.
```ruby
+User.create(name: "Bob")
+# => Query will run in default connection in database.yml
+
Tako.shard(:slave_two) do
- User.create(:name => "Mike")
+ User.create(name: "Mike")
+ # => Query will run in :slave_two
end
# or
-ModelA.shard(:slave_two) do
- User.create(:name => "Mike")
+User.shard(:slave_two) do
+ User.create(name: "Mike")
+ # => Query will run in :slave_two
end
```
+## Associations
+
+```
+class User < ActiveRecord::Base
+ has_many :logs
+ has_one :life
+end
+
+user = User.shard(:shard01).create(name: "Jerry")
+
+user.logs.create
+# => Query will run in :shard01 (same as user)
+
+user.logs << Log.shard(:shard02).new
+# => Query will run in :shard02 (careful)
+
+life = user.build_life
+life.save!
+# => Query will run in :shard01 (same as user)
+```
+
## Vertical Sharding
Add `force_shard` definition to your Vertical-Sharding model
```ruby
class YourModel < ActiveRecord::Base
force_shard :shard01
end
+
+YourModel.create
+# => Query will run in :shard01
+
+Tako.shard(:shard02) do
+ YourModel.create
+ # => Query will run in :shard01
+end
```
+## TODO
+
+ * Make more independent of ActiveRecord implementation.
+
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
### Run test
Run `bundle exec rake` to run rspec
-Run `bundle exec rake` in `spec/dummy5` will run rspec with rails 5
+Run `bundle exec rake` in `spec/dummy5` will run rspec with rails 5.0.0.1
-Run `bundle exec rake` in `spec/dummy42` will run rspec with rails 4.2
+Run `bundle exec rake` in `spec/dummy42` will run rspec with rails 4.2.7.1
## Contributing
-Bug reports and pull requests are welcome on GitHub at https://github.com/the40san/tako. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
+Contributors are welcome on GitHub at https://github.com/the40san/tako. Documentation contributors also welcome!
+This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).