schemy 0.0.1 → 0.0.2

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.
data/README.md CHANGED
@@ -4,21 +4,43 @@ Schemy analyzes schema.rb to suggest new database indexes, providing a migration
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ Add this line to your rails app's Gemfile in the development group:
8
8
 
9
- gem 'schemy'
9
+ group :development do
10
+ gem 'schemy'
11
+ end
10
12
 
11
13
  And then execute:
12
14
 
13
15
  $ bundle
14
16
 
15
- Or install it yourself as:
17
+ ## Usage
16
18
 
17
- $ gem install schemy
19
+ Within your rails app, run
18
20
 
19
- ## Usage
21
+ bundle exec rake schemy:indexes
22
+
23
+ ## Customization
24
+
25
+ By default, schemy will index:
26
+
27
+ - foo**_id** (foreign keys)
28
+ - foo**_id** and foo**_type** (polymorphic associations)
29
+ - **type** (for STI)
30
+
31
+ To create custom indexing rules, create a file in your rails app called config/schemy.yml.
32
+
33
+ ###Example config/schemy.yml:
34
+
35
+ indexed_columns:
36
+ - identifier
37
+ - - association_id
38
+ - identifier
39
+
40
+ With the above configuration, schemy will create:
20
41
 
21
- TODO: Write usage instructions here
42
+ - an index for any column called identifier
43
+ - a compound index for any table that has **both** association_id and identifier
22
44
 
23
45
  ## Contributing
24
46
 
@@ -8,8 +8,7 @@ require_relative 'fake_column'
8
8
  module ActiveRecord
9
9
  class Schema
10
10
 
11
- DEFAULT_VALIDATORS = [AssociationIdIdentifierValidator, ForeignKeyValidator,
12
- IdentifierValidator, TypeValidator]
11
+ DEFAULT_VALIDATORS = [CustomValidator, ForeignKeyValidator, TypeValidator]
13
12
 
14
13
  def self.define(options= {}, &block)
15
14
  schema = new
@@ -0,0 +1,38 @@
1
+ require_relative 'base_validator'
2
+
3
+ class CustomValidator < BaseValidator
4
+
5
+ def validate_column column
6
+ self.class.configured_column_combinations.each do |config_columns|
7
+
8
+ config_columns = Array(config_columns)
9
+
10
+ # Only validate this column if it's first in the combination config.
11
+ # This way we don't create duplicate indices.
12
+ if column == config_columns.first
13
+ # Only require an index if this table has all of the columns in the column combination.
14
+ return unless config_columns[1..-1].all? { |col| @table.has_column? col }
15
+ require_index config_columns
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ def self.config_file_path
22
+ Rails.root.join 'config', 'schemy.yml'
23
+ end
24
+
25
+ def self.configured_column_combinations
26
+ @configured_column_combinations ||= load_configured_column_combinations
27
+ end
28
+
29
+ def self.load_configured_column_combinations
30
+ if File.exists? config_file_path
31
+ config = YAML.load_file config_file_path
32
+ config['indexed_columns']
33
+ else
34
+ []
35
+ end
36
+ end
37
+
38
+ end
@@ -1,3 +1,3 @@
1
1
  module Schemy
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-15 00:00:00.000000000 Z
12
+ date: 2012-08-16 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Analyzes schema.rb to suggest new database indexes, providing a migration
15
15
  file that can be used directly.
@@ -31,10 +31,9 @@ files:
31
31
  - lib/schemy/fake_table.rb
32
32
  - lib/schemy/railtie.rb
33
33
  - lib/schemy/schema_checker.rb
34
- - lib/schemy/validators/association_id_identifier_validator.rb
35
34
  - lib/schemy/validators/base_validator.rb
35
+ - lib/schemy/validators/custom_validator.rb
36
36
  - lib/schemy/validators/foreign_key_validator.rb
37
- - lib/schemy/validators/identifier_validator.rb
38
37
  - lib/schemy/validators/type_validator.rb
39
38
  - lib/schemy/version.rb
40
39
  - lib/tasks/schemy.rake
@@ -59,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
58
  version: '0'
60
59
  requirements: []
61
60
  rubyforge_project:
62
- rubygems_version: 1.8.24
61
+ rubygems_version: 1.8.10
63
62
  signing_key:
64
63
  specification_version: 3
65
64
  summary: Analyzes schema.rb to suggest new database indexes.
@@ -1,10 +0,0 @@
1
- require_relative 'base_validator'
2
-
3
- class AssociationIdIdentifierValidator < BaseValidator
4
-
5
- def validate_column column
6
- if column == 'association_id' && @table.has_column?('identifier')
7
- require_index ['association_id', 'identifier']
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require_relative 'base_validator'
2
-
3
- class IdentifierValidator < BaseValidator
4
-
5
- def validate_column column
6
- if column == 'identifier'
7
- require_index column
8
- end
9
- end
10
- end