activerecord-sharding 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6161f4f763503556924e2678e30f8b8dd35877dd
4
- data.tar.gz: 345928fff20f5bf81e6a85740822b125770ec2a8
3
+ metadata.gz: 74c9354eb637b74252c1ee7631037140ad0326ea
4
+ data.tar.gz: c6adaf64d167afd9dbf16a0e3982158181255a9e
5
5
  SHA512:
6
- metadata.gz: 6044b78dcf067016e87bc738c927efd62a8f5406ed8952b3df9d8f032bda50e795af0d71eedbdce12bfd4d2cd177e46d60665f0907ff9e93742f195a23559556
7
- data.tar.gz: 329ee41bf7df37ce0302fa8a9338ede775782871197f6f87f99ae589d28c326bae538ff39980f7a087ba31fec4484ab5622dce93c6fe0c1c7897d0e30cc3d6ef
6
+ metadata.gz: 5c74278a9bae13cf05ccbf4fda5abf98cebec86c90ad3489cb2f18ea3eb0c4e150a0725b8151003d95712a9f989b7812f6b8da007fe01ea78e9738f94c77c0b5
7
+ data.tar.gz: b0ed70dc49f1d1cb389ed6313991b1ac21013f7720211d62ff57e1e253a82c3fcdbaa6ebd0d938227c0d80d324ca6044532160abdac7f9ac2c1f569168c8accb
@@ -27,6 +27,12 @@ Style/ModuleFunction:
27
27
  Style/StringLiterals:
28
28
  EnforcedStyle: double_quotes
29
29
 
30
+ Style/IndentationConsistency:
31
+ EnforcedStyle: rails
32
+
33
+ Style/SignalException:
34
+ EnforcedStyle: only_raise
35
+
30
36
  Style/HashSyntax:
31
37
  EnforcedStyle: ruby19_no_mixed_keys
32
38
  Exclude:
@@ -41,6 +47,9 @@ Metrics/LineLength:
41
47
  Lint/AssignmentInCondition:
42
48
  Enabled: false
43
49
 
50
+ Lint/BlockAlignment:
51
+ Enabled: false
52
+
44
53
  Metrics/MethodLength:
45
54
  Max: 12
46
55
 
@@ -1,9 +1,13 @@
1
1
  language: ruby
2
+ install: bundle install --jobs=3 --retry=3
2
3
  rvm:
3
- - 2.2.3
4
- - 2.1.7
5
- - 2.0.0-p647
6
- before_install: gem install bundler -v 1.10.6
4
+ - 2.2.4
5
+ - 2.1.8
6
+ - 2.0.0-p648
7
+ gemfile:
8
+ - Gemfile
9
+ - ar41.gemfile
10
+ - ar416.gemfile
7
11
  services:
8
12
  - mysql
9
13
  script:
@@ -0,0 +1,16 @@
1
+ # Change Log
2
+
3
+ ## [v0.1.0](https://github.com/hirocaster/activerecord-sharding/tree/v0.1.0) (2015-08-27)
4
+ **Merged pull requests:**
5
+
6
+ - Refactor etc ... [\#7](https://github.com/hirocaster/activerecord-sharding/pull/7) ([hirocaster](https://github.com/hirocaster))
7
+ - Refactor class repository [\#6](https://github.com/hirocaster/activerecord-sharding/pull/6) ([hirocaster](https://github.com/hirocaster))
8
+ - Add codeclimate-test-reporter [\#5](https://github.com/hirocaster/activerecord-sharding/pull/5) ([hirocaster](https://github.com/hirocaster))
9
+ - Change coding style [\#4](https://github.com/hirocaster/activerecord-sharding/pull/4) ([hirocaster](https://github.com/hirocaster))
10
+ - Setup coveralls [\#3](https://github.com/hirocaster/activerecord-sharding/pull/3) ([hirocaster](https://github.com/hirocaster))
11
+ - Setup travis ci [\#2](https://github.com/hirocaster/activerecord-sharding/pull/2) ([hirocaster](https://github.com/hirocaster))
12
+ - Change namespace ActiveRecordSharding to ActiveRecord::Sharding [\#1](https://github.com/hirocaster/activerecord-sharding/pull/1) ([hirocaster](https://github.com/hirocaster))
13
+
14
+
15
+
16
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ gem "activerecord", ">= 4.2.0"
4
+
3
5
  # Specify your gem's dependencies in active_record_sharding.gemspec
4
6
  gemspec
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ActiveRecord::Sharding
2
2
 
3
- [![Build Status](https://travis-ci.org/hirocaster/activerecord-sharding.svg)](https://travis-ci.org/hirocaster/activerecord-sharding) [![Coverage Status](https://coveralls.io/repos/hirocaster/activerecord-sharding/badge.svg?branch=coveralls&service=github)](https://coveralls.io/github/hirocaster/activerecord-sharding?branch=coveralls) [![Code Climate](https://codeclimate.com/github/hirocaster/activerecord-sharding/badges/gpa.svg)](https://codeclimate.com/github/hirocaster/activerecord-sharding) [![Dependency Status](https://gemnasium.com/hirocaster/activerecord-sharding.svg)](https://gemnasium.com/hirocaster/activerecord-sharding)
3
+ [![Build Status](https://travis-ci.org/hirocaster/activerecord-sharding.svg)](https://travis-ci.org/hirocaster/activerecord-sharding) [![Coverage Status](https://coveralls.io/repos/hirocaster/activerecord-sharding/badge.svg?branch=master&service=github)](https://coveralls.io/github/hirocaster/activerecord-sharding?branch=master) [![Code Climate](https://codeclimate.com/github/hirocaster/activerecord-sharding/badges/gpa.svg)](https://codeclimate.com/github/hirocaster/activerecord-sharding) [![Dependency Status](https://gemnasium.com/hirocaster/activerecord-sharding.svg)](https://gemnasium.com/hirocaster/activerecord-sharding)
4
4
 
5
5
  Simple Database Sharding in ActiveRecord.
6
6
 
@@ -54,7 +54,7 @@ user_002:
54
54
  host: localhost
55
55
 
56
56
  user_003:
57
- <<: *default
57
+ <<: *default
58
58
  database: user_003
59
59
  host: localhost
60
60
  ```
@@ -123,6 +123,16 @@ using `#put!` method.
123
123
  user = User.put! name: 'foobar'
124
124
  ```
125
125
 
126
+ if transaction to shard database and nest other database transactions.
127
+
128
+ ```ruby
129
+ User.put!(name: 'foobar') do |new_user| # transaction for user shard database
130
+ OTHER_MODEL.transaction do
131
+ OTHER_MODEL.create!(user_id: new_user.id)
132
+ end
133
+ end
134
+ ```
135
+
126
136
  returns User new object.
127
137
 
128
138
  #### Select Query
@@ -136,6 +146,12 @@ User.shard_for(sharding_key).where(name: 'foorbar')
136
146
 
137
147
  `#sahrd_for` is returns User class.
138
148
 
149
+ for all shards query
150
+
151
+ ```ruby
152
+ User.all_shards.flat_map { |model| model.find_by(name: 'foorbar') }.compact
153
+ ```
154
+
139
155
  #### Association/Relation
140
156
 
141
157
  if use database association/relation in sharding databases.
@@ -20,12 +20,10 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = ">= 2.0"
22
22
 
23
- spec.add_dependency "activerecord", ">= 4.1.0"
24
-
25
23
  spec.add_development_dependency "bundler", "~> 1.5"
26
24
  spec.add_development_dependency "rake"
27
25
  spec.add_development_dependency "rspec"
28
- spec.add_development_dependency "mysql2"
26
+ spec.add_development_dependency "mysql2", "~> 0.3.18"
29
27
  spec.add_development_dependency "pry"
30
28
  spec.add_development_dependency "pry-byebug"
31
29
  spec.add_development_dependency "awesome_print"
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "activerecord", ">= 4.1.0", "< 4.2.0"
4
+
5
+ # Specify your gem's dependencies in active_record_sharding.gemspec
6
+ gemspec
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "activerecord", ">= 4.1.0", "< 4.1.7"
4
+
5
+ # Specify your gem's dependencies in active_record_sharding.gemspec
6
+ gemspec
@@ -22,7 +22,7 @@ module ActiveRecord
22
22
  end
23
23
 
24
24
  def generate_class_name(connection_name) # rubocop:disable Lint/UnusedMethodArgument
25
- fail NotImplementedError, "#{self.class.name}.#{__method__} is an abstract method."
25
+ raise NotImplementedError, "#{self.class.name}.#{__method__} is an abstract method."
26
26
  end
27
27
  end
28
28
  end
@@ -21,7 +21,7 @@ module ActiveRecord
21
21
  end
22
22
 
23
23
  def validate_config!
24
- fail "Nothing registerd connections." if registerd_connection_count == 0
24
+ raise "Nothing registerd connections." if registerd_connection_count == 0
25
25
  end
26
26
 
27
27
  def connections
@@ -118,30 +118,30 @@ module ActiveRecord
118
118
 
119
119
  private
120
120
 
121
- def exec_task_for_all_databases(task_name, args)
122
- cluster_name = cluster_name_or_error task_name, args
123
- cluster = cluster_or_error cluster_name
124
- cluster.connections.each do |connection_name|
125
- __send__ task_name, connection_name.to_s
121
+ def exec_task_for_all_databases(task_name, args)
122
+ cluster_name = cluster_name_or_error task_name, args
123
+ cluster = cluster_or_error cluster_name
124
+ cluster.connections.each do |connection_name|
125
+ __send__ task_name, connection_name.to_s
126
+ end
126
127
  end
127
- end
128
128
 
129
- def cluster_name_or_error(name, args)
130
- unless cluster_name = args[:cluster_name]
131
- $stderr.puts <<-MSG
129
+ def cluster_name_or_error(name, args)
130
+ unless cluster_name = args[:cluster_name]
131
+ $stderr.puts <<-MSG
132
132
  Missing cluster_name. Find cluster_name via `rake active_record:sharding:info` then call `rake "active_record:sharding:#{name}[$cluster_name]"`.
133
133
  MSG
134
- exit
134
+ exit
135
+ end
136
+ cluster_name
135
137
  end
136
- cluster_name
137
- end
138
138
 
139
- def cluster_or_error(cluster_name)
140
- fetch_cluster_config cluster_name.to_sym
141
- rescue KeyError
142
- $stderr.puts %(cluster name "#{cluster_name}" not found.)
143
- exit
144
- end
139
+ def cluster_or_error(cluster_name)
140
+ fetch_cluster_config cluster_name.to_sym
141
+ rescue KeyError
142
+ $stderr.puts %(cluster name "#{cluster_name}" not found.)
143
+ exit
144
+ end
145
145
  end
146
146
  extend TaskOrganizerForSingleClusterTask
147
147
 
@@ -174,7 +174,7 @@ Missing cluster_name. Find cluster_name via `rake active_record:sharding:info` t
174
174
  ActiveRecord::Base.establish_connection configuration
175
175
  ActiveRecord::Tasks::DatabaseTasks.load_schema :ruby
176
176
  else
177
- fail "This version of ActiveRecord is not supported: v#{ActiveRecord::VERSION::STRING}"
177
+ raise "This version of ActiveRecord is not supported: v#{ActiveRecord::VERSION::STRING}"
178
178
  end
179
179
  end
180
180
  end
@@ -197,36 +197,53 @@ Missing cluster_name. Find cluster_name via `rake active_record:sharding:info` t
197
197
 
198
198
  def insert_initial_record_sequencer_database(args)
199
199
  sequencer = sequencer_or_error "insert_initial_record", args
200
- insert_initial_record_sql = "INSERT INTO #{sequencer.table_name} VALUES (0)"
201
- execute sequencer.connection_name.to_s, insert_initial_record_sql
200
+ records_count = sequencer_records_count sequencer
201
+
202
+ if records_count == 0
203
+ insert_initial_record_sql = "INSERT INTO #{sequencer.table_name} VALUES (0)"
204
+ execute sequencer.connection_name.to_s, insert_initial_record_sql
205
+ else
206
+ puts "Exist sequencer record in #{sequencer.table_name} table."
207
+ end
202
208
  end
203
209
 
204
210
  private
205
211
 
206
- def exec_task_for_sequencer_database(task_name, args)
207
- sequencer = sequencer_or_error task_name, args
208
- __send__ task_name, sequencer.connection_name.to_s
209
- end
212
+ def sequencer_records_count(sequencer)
213
+ count_sql = "SELECT COUNT(*) FROM #{sequencer.table_name}"
214
+ count_result = execute sequencer.connection_name.to_s, count_sql
210
215
 
211
- def sequencer_or_error(task_name, args)
212
- sequencer_name = sequencer_name_or_error task_name, args
213
- fetch_sequencer_config sequencer_name.to_sym
214
- rescue KeyError
215
- $stderr.puts %(sequencer name "#{sequencer_name}" not found.)
216
- exit
217
- end
216
+ if count_result
217
+ count_result.first.first.to_i
218
+ else
219
+ 0
220
+ end
221
+ end
218
222
 
219
- def sequencer_name_or_error(task_name, args)
220
- unless sequencer_name = args[:sequencer_name]
221
- # rubocop:disable Metrics/LineLength
222
- $stderr.puts <<-MSG
223
+ def exec_task_for_sequencer_database(task_name, args)
224
+ sequencer = sequencer_or_error task_name, args
225
+ __send__ task_name, sequencer.connection_name.to_s
226
+ end
227
+
228
+ def sequencer_or_error(task_name, args)
229
+ sequencer_name = sequencer_name_or_error task_name, args
230
+ fetch_sequencer_config sequencer_name.to_sym
231
+ rescue KeyError
232
+ $stderr.puts %(sequencer name "#{sequencer_name}" not found.)
233
+ exit
234
+ end
235
+
236
+ def sequencer_name_or_error(task_name, args)
237
+ unless sequencer_name = args[:sequencer_name]
238
+ # rubocop:disable Metrics/LineLength
239
+ $stderr.puts <<-MSG
223
240
  Missing sequencer_name. Find sequencer_name via `rake active_record:sharding:info` then call `rake "active_record:sharding:sequencer#{task_name}[$sequencer_name]"`.
224
241
  MSG
225
- exit
226
- # rubocop:enable Metrics/LineLength
242
+ exit
243
+ # rubocop:enable Metrics/LineLength
244
+ end
245
+ sequencer_name
227
246
  end
228
- sequencer_name
229
- end
230
247
  end
231
248
  extend TasksForSingleSequencerTask
232
249
  end # module DatabaseTasks
@@ -5,5 +5,8 @@ module ActiveRecord
5
5
 
6
6
  class MissingShardingKeyAttribute < Error
7
7
  end
8
+
9
+ class MissingPrimaryKey < Error
10
+ end
8
11
  end
9
12
  end
@@ -5,7 +5,9 @@ module ActiveRecord
5
5
  module Model
6
6
  extend ActiveSupport::Concern
7
7
 
8
- included do
8
+ included do |base|
9
+ base.before_create :validate_id!
10
+
9
11
  class_attribute :cluster_router, instance_writer: false
10
12
  class_attribute :shard_repository, instance_writer: false
11
13
  class_attribute :sharding_key, instance_writer: false
@@ -30,14 +32,21 @@ module ActiveRecord
30
32
  end
31
33
 
32
34
  def put!(attributes)
33
- fail "`sharding_key` is not defined. Use `define_sharding_key`." unless sharding_key
35
+ raise "`sharding_key` is not defined. Use `define_sharding_key`." unless sharding_key
34
36
 
35
37
  @before_put_callback.call(attributes) if @before_put_callback
36
38
 
37
39
  if key = attributes[sharding_key] || attributes[sharding_key.to_s]
38
- shard_for(key).create!(attributes)
40
+ if block_given?
41
+ shard_for(key).transaction do
42
+ object = shard_for(key).create!(attributes)
43
+ yield(object)
44
+ end
45
+ else
46
+ shard_for(key).create!(attributes)
47
+ end
39
48
  else
40
- fail ActiveRecord::Sharding::MissingShardingKeyAttribute
49
+ raise ActiveRecord::Sharding::MissingShardingKeyAttribute
41
50
  end
42
51
  end
43
52
 
@@ -54,6 +63,12 @@ module ActiveRecord
54
63
  instance_eval(&block)
55
64
  end
56
65
  end
66
+
67
+ private
68
+
69
+ def validate_id!
70
+ raise ActiveRecord::Sharding::MissingPrimaryKey if attributes[self.class.primary_key].nil?
71
+ end
57
72
  end
58
73
  end
59
74
  end
@@ -3,6 +3,13 @@ require "active_support/concern"
3
3
  module ActiveRecord
4
4
  module Sharding
5
5
  module Sequencer
6
+
7
+ class Error < ActiveRecord::Sharding::Error
8
+ end
9
+
10
+ class NegativeNumberOffsetError < Error
11
+ end
12
+
6
13
  extend ActiveSupport::Concern
7
14
 
8
15
  included do
@@ -23,14 +30,16 @@ module ActiveRecord
23
30
  execute_sql "id"
24
31
  end
25
32
 
26
- def next_sequence_id
27
- execute_sql "id +1"
33
+ def next_sequence_id(offset = 1)
34
+ raise NegativeNumberOffsetError if offset < 1
35
+ execute_sql "id +#{offset}"
28
36
  end
29
37
 
30
38
  def execute_sql(last_insert_id_args)
31
- connection = sequencer_repository.fetch(sequencer_name).connection
32
- connection.execute "UPDATE `#{sequencer_config.table_name}` SET id = LAST_INSERT_ID(#{last_insert_id_args})"
33
- res = connection.execute "SELECT LAST_INSERT_ID()"
39
+ sequencer_klass = sequencer_repository.fetch(sequencer_name)
40
+ connection = sequencer_klass.connection
41
+ connection.execute "UPDATE `#{sequencer_config.table_name}` SET id = LAST_INSERT_ID(#{last_insert_id_args})", sequencer_klass.name
42
+ res = connection.execute "SELECT LAST_INSERT_ID()", sequencer_klass.name
34
43
  new_id = res.first.first.to_i
35
44
  new_id
36
45
  end
@@ -18,8 +18,8 @@ module ActiveRecord
18
18
  end
19
19
 
20
20
  def validate_config!
21
- fail "Nothing connection. Please call register_connection" if @connection_name.blank?
22
- fail "Nothing table_name. Please call register_table_name" if @table_name.blank?
21
+ raise "Nothing connection. Please call register_connection" if @connection_name.blank?
22
+ raise "Nothing table_name. Please call register_table_name" if @table_name.blank?
23
23
  end
24
24
  end
25
25
  end
@@ -14,9 +14,9 @@ module ActiveRecord
14
14
 
15
15
  private
16
16
 
17
- def generate_class_name(connection_name)
18
- "SequencerFor#{connection_name.to_s.tr('-', '_').classify}"
19
- end
17
+ def generate_class_name(connection_name)
18
+ "SequencerFor#{connection_name.to_s.tr('-', '_').classify}"
19
+ end
20
20
  end
21
21
  end
22
22
  end
@@ -23,9 +23,9 @@ module ActiveRecord
23
23
 
24
24
  private
25
25
 
26
- def generate_class_name(connection_name)
27
- "ShardFor#{connection_name.to_s.tr('-', '_').classify}"
28
- end
26
+ def generate_class_name(connection_name)
27
+ "ShardFor#{connection_name.to_s.tr('-', '_').classify}"
28
+ end
29
29
  end
30
30
  end
31
31
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Sharding
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -42,6 +42,21 @@ describe ActiveRecord::Sharding::Model do
42
42
  expect(alice.class.name).to match(/User::ShardFor/)
43
43
  end
44
44
 
45
+ context "in transaction" do
46
+ it "when rollback" do
47
+ before_record_count = model.all_shards.map(&:count).reduce(:+)
48
+
49
+ model.put!(name: "Bob") do |bob|
50
+ expect(bob.persisted?).to be true
51
+ raise ActiveRecord::Rollback
52
+ end
53
+
54
+ after_record_count = model.all_shards.map(&:count).reduce(:+)
55
+
56
+ expect(after_record_count).to eq before_record_count
57
+ end
58
+ end
59
+
45
60
  context 'next call #put!' do
46
61
  let(:bob) { model.put! name: "Bob" }
47
62
  let(:alice_connect_db) { alice.class.connection.pool.spec.config[:database] }
@@ -87,4 +102,42 @@ describe ActiveRecord::Sharding::Model do
87
102
  expect(record.name).to eq("foo")
88
103
  end
89
104
  end
105
+
106
+ describe "Irregular use case" do
107
+ context "Not write before_put block" do
108
+ let!(:model) do
109
+ Class.new(ActiveRecord::Base) do
110
+ def self.name
111
+ "User"
112
+ end
113
+
114
+ def self.sequence_id
115
+ @sequence_id ||= 0
116
+ end
117
+
118
+ class << self
119
+ attr_writer :sequence_id
120
+ end
121
+
122
+ def self.next_sequence_id
123
+ self.sequence_id += 1
124
+ end
125
+
126
+ include ActiveRecord::Sharding::Model
127
+ use_sharding :user, :modulo
128
+ define_sharding_key :id
129
+
130
+ define_parent_methods do
131
+ def find_from_all_by_name(name)
132
+ all_shards.map { |m| m.find_by(name: name) }.compact.first
133
+ end
134
+ end
135
+ end
136
+ end
137
+
138
+ it "Raise MissingPrimaryKey at #save" do
139
+ expect { model.shard_for(1).new.save }.to raise_error ActiveRecord::Sharding::MissingPrimaryKey
140
+ end
141
+ end
142
+ end
90
143
  end
@@ -12,20 +12,45 @@ describe ActiveRecord::Sharding::Model do
12
12
 
13
13
  describe '#current_sequence_id' do
14
14
  it "returns current sequence id" do
15
- expect(model.current_sequence_id).to be_a_kind_of Fixnum
15
+ current_id = model.current_sequence_id
16
+ expect(current_id).to be_a_kind_of Fixnum
17
+ expect(model.current_sequence_id).to eq current_id
18
+ end
19
+
20
+ it "output class name to log" do
21
+ sequencer_klass = model.sequencer_repository.fetch(:user)
22
+ expect(sequencer_klass.connection).to receive(:execute).with(anything, "User::SequencerForTestUserSequencer").and_return([[0]]).twice
23
+ model.current_sequence_id
16
24
  end
17
25
  end
18
- describe '#next_sequence_id' do
19
- let(:current_id) { model.current_sequence_id }
20
- let(:next_id) { model.next_sequence_id }
21
26
 
27
+ describe '#next_sequence_id' do
22
28
  it "returns next sequence id" do
23
- expect(current_id + 1).to eq next_id
24
- expect(next_id).to be_a_kind_of Fixnum
29
+ next_id = model.current_sequence_id + 1
30
+ expect(next_id).to eq model.next_sequence_id
31
+ expect(next_id).to eq model.current_sequence_id
25
32
  end
26
33
 
27
34
  it "next sequence id > current sequence id" do
28
- expect(current_id).to be < next_id
35
+ expect(model.current_sequence_id).to be < model.next_sequence_id
36
+ end
37
+
38
+ context "when offset is selected" do
39
+ let(:offset) { 10 }
40
+
41
+ it "returns current_sequence_id with offset" do
42
+ next_id = model.current_sequence_id + offset
43
+ expect(next_id).to eq model.next_sequence_id(offset)
44
+ expect(next_id).to eq model.current_sequence_id
45
+ end
46
+
47
+ context "when negative number in offset args" do
48
+ let(:offset) { -5 }
49
+
50
+ it "raise error" do
51
+ expect { model.next_sequence_id offset }.to raise_error ActiveRecord::Sharding::Sequencer::NegativeNumberOffsetError
52
+ end
53
+ end
29
54
  end
30
55
  end
31
56
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-sharding
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hirocaster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-28 00:00:00.000000000 Z
11
+ date: 2016-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activerecord
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 4.1.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 4.1.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +56,16 @@ dependencies:
70
56
  name: mysql2
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ">="
59
+ - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '0'
61
+ version: 0.3.18
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ">="
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: 0.3.18
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: pry
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -180,10 +166,13 @@ files:
180
166
  - ".rubocop.yml"
181
167
  - ".ruby-version"
182
168
  - ".travis.yml"
169
+ - CHANGELOG.md
183
170
  - Gemfile
184
171
  - README.md
185
172
  - Rakefile
186
173
  - activerecord-sharding.gemspec
174
+ - ar41.gemfile
175
+ - ar416.gemfile
187
176
  - bin/benchmark_sequencer.rb
188
177
  - bin/console
189
178
  - bin/setup