groundswell_schema_plus_columns 0.3.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 +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +24 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +122 -0
- data/Rakefile +9 -0
- data/gemfiles/Gemfile.base +4 -0
- data/gemfiles/activerecord-4.2/Gemfile.base +3 -0
- data/gemfiles/activerecord-4.2/Gemfile.mysql2 +10 -0
- data/gemfiles/activerecord-4.2/Gemfile.postgresql +10 -0
- data/gemfiles/activerecord-4.2/Gemfile.sqlite3 +10 -0
- data/gemfiles/activerecord-5.0/Gemfile.base +3 -0
- data/gemfiles/activerecord-5.0/Gemfile.mysql2 +10 -0
- data/gemfiles/activerecord-5.0/Gemfile.postgresql +10 -0
- data/gemfiles/activerecord-5.0/Gemfile.sqlite3 +10 -0
- data/gemfiles/activerecord-5.1/Gemfile.base +3 -0
- data/gemfiles/activerecord-5.1/Gemfile.mysql2 +10 -0
- data/gemfiles/activerecord-5.1/Gemfile.postgresql +10 -0
- data/gemfiles/activerecord-5.1/Gemfile.sqlite3 +10 -0
- data/groundswell_schema_plus_columns.gemspec +31 -0
- data/lib/groundswell_schema_plus_columns.rb +1 -0
- data/lib/schema_plus/columns.rb +8 -0
- data/lib/schema_plus/columns/active_record/connection_adapters/column.rb +65 -0
- data/lib/schema_plus/columns/middleware/model.rb +16 -0
- data/lib/schema_plus/columns/version.rb +5 -0
- data/schema_dev.yml +10 -0
- data/spec/column_spec.rb +163 -0
- data/spec/sanity_spec.rb +13 -0
- data/spec/spec_helper.rb +22 -0
- metadata +223 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ad453a456a7412e8397e5e2ec55e9e37f7351fdc
|
4
|
+
data.tar.gz: c3f4804ce0135a9a7db011dc46fb47834fb442a4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 29a0f7d2d203709c101c6221c92b0174f4f64a8b2dae983483c0c898f52a8387c2f33a5faeec56759605c6ec256b0c3ae689d0ba3adfa7f43a480e0addb462a0
|
7
|
+
data.tar.gz: 2ac1e431cc656ca7c15203c78648471eb77d8d167f22833ca4fa4c73ab95fb695721518766bfc814be5aeb16d51beaf668572d048259e0fe510757244928e71e
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# This file was auto-generated by the schema_dev tool, based on the data in
|
2
|
+
# ./schema_dev.yml
|
3
|
+
# Please do not edit this file; any changes will be overwritten next time
|
4
|
+
# schema_dev gets run.
|
5
|
+
---
|
6
|
+
sudo: false
|
7
|
+
rvm:
|
8
|
+
- 2.3.1
|
9
|
+
gemfile:
|
10
|
+
- gemfiles/activerecord-4.2/Gemfile.mysql2
|
11
|
+
- gemfiles/activerecord-4.2/Gemfile.postgresql
|
12
|
+
- gemfiles/activerecord-4.2/Gemfile.sqlite3
|
13
|
+
- gemfiles/activerecord-5.0/Gemfile.mysql2
|
14
|
+
- gemfiles/activerecord-5.0/Gemfile.postgresql
|
15
|
+
- gemfiles/activerecord-5.0/Gemfile.sqlite3
|
16
|
+
- gemfiles/activerecord-5.1/Gemfile.mysql2
|
17
|
+
- gemfiles/activerecord-5.1/Gemfile.postgresql
|
18
|
+
- gemfiles/activerecord-5.1/Gemfile.sqlite3
|
19
|
+
env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis
|
20
|
+
addons:
|
21
|
+
postgresql: '9.4'
|
22
|
+
before_script: bundle exec rake create_databases
|
23
|
+
after_script: bundle exec rake drop_databases
|
24
|
+
script: bundle exec rake travis
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 ronen barzel
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
[](http://badge.fury.io/rb/schema_plus_columns)
|
2
|
+
[](http://travis-ci.org/SchemaPlus/schema_plus_columns)
|
3
|
+
[](https://coveralls.io/r/SchemaPlus/schema_plus_columns)
|
4
|
+
[](https://gemnasium.com/SchemaPlus/schema_plus_columns)
|
5
|
+
|
6
|
+
# SchemaPlus::Columns
|
7
|
+
|
8
|
+
SchemaPlus::Columns adds some useful accessors the objects returned by ActiveRecord's [`Model.columns`](http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/PostgreSQL/SchemaStatements.html#method-i-columns) database introspection query.
|
9
|
+
|
10
|
+
SchemaPlus::Columns is part of the [SchemaPlus](https://github.com/SchemaPlus/) family of Ruby on Rails extension gems.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
<!-- SCHEMA_DEV: TEMPLATE INSTALLATION - begin -->
|
15
|
+
<!-- These lines are auto-inserted from a schema_dev template -->
|
16
|
+
As usual:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem "schema_plus_columns" # in a Gemfile
|
20
|
+
gem.add_dependency "schema_plus_columns" # in a .gemspec
|
21
|
+
```
|
22
|
+
|
23
|
+
<!-- SCHEMA_DEV: TEMPLATE INSTALLATION - end -->
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
SchemaPlus::Columns makes these accessors available:
|
28
|
+
|
29
|
+
#### `column.indexes`
|
30
|
+
|
31
|
+
Returns a list of index definitions for each index that refers to this column. Returns an empty list if there are no such indexes.
|
32
|
+
|
33
|
+
#### `column.unique?`
|
34
|
+
|
35
|
+
Returns true if the column is in a unique index.
|
36
|
+
|
37
|
+
#### `column.unique_scope`
|
38
|
+
|
39
|
+
If the column is in a unique index, returns a list of names of other columns in the index. Returns an empty list if it's a single-column index. Returns nil if the column is not in a unique index.
|
40
|
+
|
41
|
+
#### `column.case_sensitive?`
|
42
|
+
|
43
|
+
Returns true if the column is in one or more indexes that are case sensitive. *Requires the index definitions to respond to `:case_sensitive?`* -- i.e. Only works with `schema_plus_pg_indexes` having been loaded.
|
44
|
+
|
45
|
+
#### `column.required_on`
|
46
|
+
|
47
|
+
Returns an indicator of the circumstance in which the column must have a value:
|
48
|
+
|
49
|
+
* `nil` If the column may be null
|
50
|
+
* `:save` If the column has no default value
|
51
|
+
* `:update` Otherwise
|
52
|
+
|
53
|
+
|
54
|
+
## Compatibility
|
55
|
+
|
56
|
+
SchemaPlus::Columns is tested on:
|
57
|
+
|
58
|
+
<!-- SCHEMA_DEV: MATRIX - begin -->
|
59
|
+
<!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
|
60
|
+
* ruby **2.3.1** with activerecord **4.2**, using **mysql2**, **sqlite3** or **postgresql**
|
61
|
+
* ruby **2.3.1** with activerecord **5.0**, using **mysql2**, **sqlite3** or **postgresql**
|
62
|
+
* ruby **2.3.1** with activerecord **5.1**, using **mysql2**, **sqlite3** or **postgresql**
|
63
|
+
|
64
|
+
<!-- SCHEMA_DEV: MATRIX - end -->
|
65
|
+
|
66
|
+
|
67
|
+
## Release Notes
|
68
|
+
|
69
|
+
* 0.2.0 - AR 5.1 Support
|
70
|
+
* 0.1.3 - AR 5.0 Support
|
71
|
+
* 0.1.2 - Missing require
|
72
|
+
* 0.1.1 - Explicit gem dependencies
|
73
|
+
* 0.1.0 - Initial release, extracted from SchemaPlus 1.x
|
74
|
+
|
75
|
+
## Development & Testing
|
76
|
+
|
77
|
+
Are you interested in contributing to SchemaPlus::Columns? Thanks! Please follow
|
78
|
+
the standard protocol: fork, feature branch, develop, push, and issue pull
|
79
|
+
request.
|
80
|
+
|
81
|
+
Some things to know about to help you develop and test:
|
82
|
+
|
83
|
+
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_DEV - begin -->
|
84
|
+
<!-- These lines are auto-inserted from a schema_dev template -->
|
85
|
+
* **schema_dev**: SchemaPlus::Columns uses [schema_dev](https://github.com/SchemaPlus/schema_dev) to
|
86
|
+
facilitate running rspec tests on the matrix of ruby, activerecord, and database
|
87
|
+
versions that the gem supports, both locally and on
|
88
|
+
[travis-ci](http://travis-ci.org/SchemaPlus/schema_plus_columns)
|
89
|
+
|
90
|
+
To to run rspec locally on the full matrix, do:
|
91
|
+
|
92
|
+
$ schema_dev bundle install
|
93
|
+
$ schema_dev rspec
|
94
|
+
|
95
|
+
You can also run on just one configuration at a time; For info, see `schema_dev --help` or the [schema_dev](https://github.com/SchemaPlus/schema_dev) README.
|
96
|
+
|
97
|
+
The matrix of configurations is specified in `schema_dev.yml` in
|
98
|
+
the project root.
|
99
|
+
|
100
|
+
|
101
|
+
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_DEV - end -->
|
102
|
+
|
103
|
+
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_PLUS_CORE - begin -->
|
104
|
+
<!-- These lines are auto-inserted from a schema_dev template -->
|
105
|
+
* **schema_plus_core**: SchemaPlus::Columns uses the SchemaPlus::Core API that
|
106
|
+
provides middleware callback stacks to make it easy to extend
|
107
|
+
ActiveRecord's behavior. If that API is missing something you need for
|
108
|
+
your contribution, please head over to
|
109
|
+
[schema_plus_core](https://github.com/SchemaPlus/schema_plus_core) and open
|
110
|
+
an issue or pull request.
|
111
|
+
|
112
|
+
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_PLUS_CORE - end -->
|
113
|
+
|
114
|
+
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_MONKEY - begin -->
|
115
|
+
<!-- These lines are auto-inserted from a schema_dev template -->
|
116
|
+
* **schema_monkey**: SchemaPlus::Columns is implemented as a
|
117
|
+
[schema_monkey](https://github.com/SchemaPlus/schema_monkey) client,
|
118
|
+
using [schema_monkey](https://github.com/SchemaPlus/schema_monkey)'s
|
119
|
+
convention-based protocols for extending ActiveRecord and using middleware stacks.
|
120
|
+
|
121
|
+
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_MONKEY - end -->
|
122
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'schema_plus/columns/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "groundswell_schema_plus_columns"
|
8
|
+
gem.version = SchemaPlus::Columns::VERSION
|
9
|
+
gem.authors = ["ronen barzel", "Ryan Murphy"]
|
10
|
+
gem.email = ["ryan@groundswell.legal"]
|
11
|
+
gem.summary = %q{Adds useful accessors to ActiveRecord's Column object.}
|
12
|
+
gem.homepage = "https://github.com/groundswell-productivity/schema_plus_columns.git"
|
13
|
+
gem.license = "MIT"
|
14
|
+
|
15
|
+
gem.files = `git ls-files -z`.split("\x0")
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency "activerecord", ">= 4.2", "< 5.2"
|
21
|
+
gem.add_dependency "schema_plus_core"
|
22
|
+
gem.add_dependency "schema_plus_indexes", "~> 0.2"
|
23
|
+
gem.add_dependency "its-it", "~> 1.2"
|
24
|
+
|
25
|
+
gem.add_development_dependency "bundler", "~> 1.7"
|
26
|
+
gem.add_development_dependency "rake", "~> 10.0"
|
27
|
+
gem.add_development_dependency "rspec", "~> 3.0"
|
28
|
+
gem.add_development_dependency "schema_dev", "~> 3.6"
|
29
|
+
gem.add_development_dependency "simplecov"
|
30
|
+
gem.add_development_dependency "simplecov-gem-profile"
|
31
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'schema_plus/columns'
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module SchemaPlus::Columns
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
|
5
|
+
#
|
6
|
+
# SchemaPlus::Index adds several methods to Column
|
7
|
+
#
|
8
|
+
module Column
|
9
|
+
|
10
|
+
attr_writer :model # model assigned set by Middleware::Model::Columns
|
11
|
+
|
12
|
+
# Returns the list of IndexDefinition instances for each index that
|
13
|
+
# refers to this column. Returns an empty list if there are no
|
14
|
+
# such indexes.
|
15
|
+
def indexes
|
16
|
+
@indexes ||= @model.indexes.select{|index| index.columns.include? self.name}
|
17
|
+
end
|
18
|
+
|
19
|
+
# If the column is in a unique index, returns a list of names of other columns in
|
20
|
+
# the index. Returns an empty list if it's a single-column index.
|
21
|
+
# Returns nil if the column is not in a unique index.
|
22
|
+
def unique_scope
|
23
|
+
if index = indexes.select{|i| i.unique}.sort_by{|i| i.columns.size}.first
|
24
|
+
index.columns.reject{|name| name == self.name}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns true if the column is in a unique index. See also
|
29
|
+
# unique_scope
|
30
|
+
def unique?
|
31
|
+
indexes.any?{|i| i.unique}
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns true if the column is in one or more indexes that are
|
35
|
+
# case sensitive. Will raise exception if
|
36
|
+
# IndexDefinition#case_sensitive? isn't defined, i.e. if
|
37
|
+
# schema_plus_pg_indexes hasn't been loaded.
|
38
|
+
def case_sensitive?
|
39
|
+
indexes.any?{|i| i.case_sensitive?}
|
40
|
+
end
|
41
|
+
|
42
|
+
# The default as_jon includes all instance variables. but
|
43
|
+
# @model can't be dumped (it contains circular references)
|
44
|
+
def as_json(options=nil)
|
45
|
+
instance_values.except "model", "adapter"
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns the circumstance in which the column must have a value:
|
49
|
+
# nil if the column may be null
|
50
|
+
# :save if the column has no default value
|
51
|
+
# :update otherwise
|
52
|
+
def required_on
|
53
|
+
if null
|
54
|
+
nil
|
55
|
+
elsif default.nil?
|
56
|
+
:save
|
57
|
+
else
|
58
|
+
:update
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
data/schema_dev.yml
ADDED
data/spec/column_spec.rb
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Column" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
class User < ::ActiveRecord::Base ; end
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:migration) { ::ActiveRecord::Migration }
|
10
|
+
|
11
|
+
context "JSON serialization" do
|
12
|
+
before(:each) do
|
13
|
+
create_table(User, :login => { :index => true})
|
14
|
+
@login = User.columns.find{|column| column.name == "login"}
|
15
|
+
end
|
16
|
+
it "works properly" do
|
17
|
+
type = case
|
18
|
+
when SchemaDev::Rspec::Helpers.mysql?
|
19
|
+
{ "sql_type" => "varchar(255)" }
|
20
|
+
when SchemaDev::Rspec::Helpers.postgresql?
|
21
|
+
{ "sql_type" => "character varying" }
|
22
|
+
when SchemaDev::Rspec::Helpers.sqlite3?
|
23
|
+
{ "sql_type" => "varchar" }
|
24
|
+
end
|
25
|
+
if Gem::Requirement.new('< 5.0.0.alpha.1').satisfied_by?(::ActiveRecord.version)
|
26
|
+
expect(JSON.parse(@login.to_json)).to include(type.merge("name" => "login"))
|
27
|
+
else
|
28
|
+
expect(JSON.parse(@login.to_json)).to include(
|
29
|
+
"name" => "login",
|
30
|
+
"sql_type_metadata" => a_hash_including(type)
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "regarding indexes" do
|
37
|
+
|
38
|
+
context "if not unique" do
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
create_table(User, :login => { :index => true})
|
42
|
+
@login = User.columns.find{|column| column.name == "login"}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should report not unique" do
|
46
|
+
expect(@login).not_to be_unique
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should report nil unique scope" do
|
50
|
+
create_table(User, :login => { :index => true})
|
51
|
+
expect(@login.unique_scope).to be_nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "if unique single column" do
|
56
|
+
before(:each) do
|
57
|
+
create_table(User, :login => { :index => :unique})
|
58
|
+
@login = User.columns.find{|column| column.name == "login"}
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should report unique" do
|
62
|
+
expect(@login).to be_unique
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should report an empty unique scope" do
|
66
|
+
expect(@login.unique_scope).to eq([])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "if unique multicolumn" do
|
71
|
+
|
72
|
+
before(:each) do
|
73
|
+
create_table(User, :first => {}, :middle => {}, :last => { :index => {:with => [:first, :middle], :unique => true}})
|
74
|
+
@first = User.columns.find{|column| column.name == "first"}
|
75
|
+
@middle = User.columns.find{|column| column.name == "middle"}
|
76
|
+
@last = User.columns.find{|column| column.name == "last"}
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should report unique for each" do
|
80
|
+
expect(@first).to be_unique
|
81
|
+
expect(@middle).to be_unique
|
82
|
+
expect(@last).to be_unique
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should report unique scope for each" do
|
86
|
+
expect(@first.unique_scope).to match_array(%W[middle last])
|
87
|
+
expect(@middle.unique_scope).to match_array(%W[first last])
|
88
|
+
expect(@last.unique_scope).to match_array(%W[first middle])
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "with case insensitive" do
|
93
|
+
before(:each) do
|
94
|
+
create_table(User, :login => { :index => {}})
|
95
|
+
User.reset_column_information
|
96
|
+
@column = User.columns.find(&its.name == "login")
|
97
|
+
end
|
98
|
+
|
99
|
+
context "index", :mysql => :skip do
|
100
|
+
|
101
|
+
it "reports column as case insensitive" do
|
102
|
+
allow(User.indexes.first).to receive(:case_sensitive?).and_return(false);
|
103
|
+
expect(@column).not_to be_case_sensitive
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context "database", :mysql => :only do
|
108
|
+
|
109
|
+
# make sure we haven't broken mysql's method
|
110
|
+
it "reports column as case insensitive" do
|
111
|
+
allow(migration).to receive(:collation).and_return("utf8_unicode_ci") # mysql determines case insensitivity its own way
|
112
|
+
expect(@column).not_to be_case_sensitive
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
context "regarding when it requires a value" do
|
120
|
+
|
121
|
+
it "not required if the column can be null" do
|
122
|
+
create_table(User, :login => { :null => true})
|
123
|
+
expect(User.columns.find{|column| column.name == "login"}.required_on).to be_nil
|
124
|
+
end
|
125
|
+
|
126
|
+
it "must have a value on :save if there's no default" do
|
127
|
+
create_table(User, :login => { :null => false })
|
128
|
+
expect(User.columns.find{|column| column.name == "login"}.required_on).to eq(:save)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "must have a value on :update if there's default" do
|
132
|
+
create_table(User, :login => { :null => false, :default => "foo" })
|
133
|
+
expect(User.columns.find{|column| column.name == "login"}.required_on).to eq(:update)
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
context "Postgresql array", :postgresql => :only do
|
139
|
+
|
140
|
+
before(:each) do
|
141
|
+
create_table(User, :alpha => { :default => [], :array => true })
|
142
|
+
end
|
143
|
+
|
144
|
+
it "respects array: true" do
|
145
|
+
column = User.columns.find(&its.name == "alpha")
|
146
|
+
expect(column.array).to be_truthy
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
protected
|
151
|
+
|
152
|
+
def create_table(model, columns_with_options)
|
153
|
+
migration.suppress_messages do
|
154
|
+
migration.create_table model.table_name, :force => :cascade do |t|
|
155
|
+
columns_with_options.each_pair do |column, options|
|
156
|
+
t.send :string, column, options
|
157
|
+
end
|
158
|
+
end
|
159
|
+
model.reset_column_information
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
data/spec/sanity_spec.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
# A basic sanity check to have as a spec when first starting. Feel free to delete this
|
5
|
+
# once you've got real content.
|
6
|
+
|
7
|
+
describe "Sanity Check" do
|
8
|
+
|
9
|
+
it "database is connected" do
|
10
|
+
expect(ActiveRecord::Base).to be_connected
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'simplecov-gem-profile'
|
3
|
+
SimpleCov.start "gem"
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
|
+
|
8
|
+
require 'rspec'
|
9
|
+
require 'active_record'
|
10
|
+
require 'groundswell_schema_plus_columns'
|
11
|
+
require 'schema_dev/rspec'
|
12
|
+
|
13
|
+
SchemaDev::Rspec.setup
|
14
|
+
|
15
|
+
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
config.warnings = true
|
19
|
+
end
|
20
|
+
|
21
|
+
SimpleCov.command_name "[ruby #{RUBY_VERSION} - ActiveRecord #{::ActiveRecord::VERSION::STRING} - #{ActiveRecord::Base.connection.adapter_name}]"
|
22
|
+
|
metadata
ADDED
@@ -0,0 +1,223 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: groundswell_schema_plus_columns
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ronen barzel
|
8
|
+
- Ryan Murphy
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2018-06-13 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activerecord
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '4.2'
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '5.2'
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '4.2'
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.2'
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: schema_plus_core
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
type: :runtime
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: schema_plus_indexes
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.2'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.2'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: its-it
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.2'
|
69
|
+
type: :runtime
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.2'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: bundler
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.7'
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.7'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: rake
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '10.0'
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rspec
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: schema_dev
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.6'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.6'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: simplecov
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: simplecov-gem-profile
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
type: :development
|
154
|
+
prerelease: false
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
description:
|
161
|
+
email:
|
162
|
+
- ryan@groundswell.legal
|
163
|
+
executables: []
|
164
|
+
extensions: []
|
165
|
+
extra_rdoc_files: []
|
166
|
+
files:
|
167
|
+
- ".gitignore"
|
168
|
+
- ".travis.yml"
|
169
|
+
- Gemfile
|
170
|
+
- LICENSE.txt
|
171
|
+
- README.md
|
172
|
+
- Rakefile
|
173
|
+
- gemfiles/Gemfile.base
|
174
|
+
- gemfiles/activerecord-4.2/Gemfile.base
|
175
|
+
- gemfiles/activerecord-4.2/Gemfile.mysql2
|
176
|
+
- gemfiles/activerecord-4.2/Gemfile.postgresql
|
177
|
+
- gemfiles/activerecord-4.2/Gemfile.sqlite3
|
178
|
+
- gemfiles/activerecord-5.0/Gemfile.base
|
179
|
+
- gemfiles/activerecord-5.0/Gemfile.mysql2
|
180
|
+
- gemfiles/activerecord-5.0/Gemfile.postgresql
|
181
|
+
- gemfiles/activerecord-5.0/Gemfile.sqlite3
|
182
|
+
- gemfiles/activerecord-5.1/Gemfile.base
|
183
|
+
- gemfiles/activerecord-5.1/Gemfile.mysql2
|
184
|
+
- gemfiles/activerecord-5.1/Gemfile.postgresql
|
185
|
+
- gemfiles/activerecord-5.1/Gemfile.sqlite3
|
186
|
+
- groundswell_schema_plus_columns.gemspec
|
187
|
+
- lib/groundswell_schema_plus_columns.rb
|
188
|
+
- lib/schema_plus/columns.rb
|
189
|
+
- lib/schema_plus/columns/active_record/connection_adapters/column.rb
|
190
|
+
- lib/schema_plus/columns/middleware/model.rb
|
191
|
+
- lib/schema_plus/columns/version.rb
|
192
|
+
- schema_dev.yml
|
193
|
+
- spec/column_spec.rb
|
194
|
+
- spec/sanity_spec.rb
|
195
|
+
- spec/spec_helper.rb
|
196
|
+
homepage: https://github.com/groundswell-productivity/schema_plus_columns.git
|
197
|
+
licenses:
|
198
|
+
- MIT
|
199
|
+
metadata: {}
|
200
|
+
post_install_message:
|
201
|
+
rdoc_options: []
|
202
|
+
require_paths:
|
203
|
+
- lib
|
204
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - ">="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
requirements: []
|
215
|
+
rubyforge_project:
|
216
|
+
rubygems_version: 2.5.2
|
217
|
+
signing_key:
|
218
|
+
specification_version: 4
|
219
|
+
summary: Adds useful accessors to ActiveRecord's Column object.
|
220
|
+
test_files:
|
221
|
+
- spec/column_spec.rb
|
222
|
+
- spec/sanity_spec.rb
|
223
|
+
- spec/spec_helper.rb
|