autocomplete_for 1.0.0 → 1.1
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 +5 -5
- data/README.markdown +11 -3
- data/lib/autocomplete_for.rb +7 -1
- data/lib/autocomplete_for/autocomplete_for.rb +23 -16
- data/lib/autocomplete_for/version.rb +5 -0
- metadata +98 -33
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -41
- data/Rakefile +0 -25
- data/autocomplete_for.gemspec +0 -57
- data/rails/init.rb +0 -1
- data/test/autocomplete_for_test.rb +0 -149
- data/test/database.yml +0 -6
- data/test/schema.rb +0 -16
- data/test/test_helper.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0f2d8bc6a37381635eeb26a7b8a154136b9ff07e44c056e6ad191287f8971278
|
4
|
+
data.tar.gz: e9973f4862e0b067f4319437de7fb554dbb3465be0ad040865d09b7a155226cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c25f187dac5529ab52f8b7fb7901230c47a43597dc779b887b12eec274becd44d466c2a8b21362a80943a41a9f805a89eedc395bace1af49c05a18e5f3919e74
|
7
|
+
data.tar.gz: 7c06ef0adc93b3e34ecb98d18d3dc2eea4976a3d64669476239ebd9198cfd6f3204c1ffbb6c41f601053a6c78abec927ebd3c6b0af70976ec32a1b38f9a307a7
|
data/README.markdown
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
## Current Version
|
2
|
+
|
3
|
+
[](https://travis-ci.org/nulogy/autocomplete_for)
|
4
|
+
|
2
5
|
This version was introduced to support Rails 5. It depends on activerecord ~> 5.0 and contains several large gem upgrades.
|
3
6
|
This is not a backwards compatible upgrade, and introduces many breaking changes if there is no gem compatibility.
|
4
7
|
|
@@ -13,6 +16,7 @@ It works out-of-the-box with existing front-end autocompletion solutions because
|
|
13
16
|
|
14
17
|
### Example
|
15
18
|
|
19
|
+
```ruby
|
16
20
|
class Author < ActiveRecord::Base
|
17
21
|
# has a login and open_id column
|
18
22
|
end
|
@@ -30,21 +34,25 @@ It works out-of-the-box with existing front-end autocompletion solutions because
|
|
30
34
|
self.author = Author.find(:first, :conditions => {:open_id => @author_open_id})
|
31
35
|
end
|
32
36
|
end
|
37
|
+
```
|
33
38
|
|
34
39
|
Using autocomplete_for in your models to set belongs_to associations:
|
35
40
|
|
41
|
+
```ruby
|
36
42
|
author = Author.create! :login => 'baz'
|
37
43
|
post = Post.create! :author_login => 'baz' # automatically finds the author with the login 'baz'
|
38
44
|
puts post.author.login # will output 'baz'
|
45
|
+
```
|
39
46
|
|
40
47
|
Errors are generated automatically if the given information does not correspond to a valid model:
|
41
48
|
|
49
|
+
```ruby
|
42
50
|
author = Author.create! :login => 'baz'
|
43
51
|
post = Post.create :author_login => 'quux'
|
44
52
|
puts post.errors[:author_login] # will print an error message
|
53
|
+
```
|
45
54
|
|
46
55
|
### Running the tests
|
47
|
-
You can run the unit tests using `
|
48
|
-
configured as per `test/database.yml` (e.g. credentials are valid, database exists).
|
56
|
+
You can run the unit tests using `rake`
|
49
57
|
|
50
|
-
Copyright (c)
|
58
|
+
Copyright (c) 2019 Nulogy Corporation, released under the MIT license
|
data/lib/autocomplete_for.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module AutocompleteFor
|
2
4
|
def self.included(base)
|
3
|
-
base.send
|
5
|
+
base.send(:extend, ClassMethods)
|
4
6
|
end
|
5
7
|
|
6
8
|
module ClassMethods
|
7
|
-
def autocomplete_for
|
9
|
+
def autocomplete_for(association, field, options = {}, &block)
|
8
10
|
allow_nil = options[:allow_nil] || false
|
9
11
|
validate :"validate_#{association}_by_#{field}"
|
10
12
|
before_validation :"associate_#{association}_by_#{field}"
|
@@ -22,7 +24,7 @@ module AutocompleteFor
|
|
22
24
|
# def customer_name
|
23
25
|
# self.customer_to.name : @customer_name
|
24
26
|
# end
|
25
|
-
define_method(:"#{association}_#{field}") do
|
27
|
+
define_method(:"#{association}_#{field}") do
|
26
28
|
send(association.to_sym) ? send(association.to_sym).send(field.to_sym) : instance_variable_get(:"@#{association}_#{field}")
|
27
29
|
end
|
28
30
|
|
@@ -30,15 +32,16 @@ module AutocompleteFor
|
|
30
32
|
# def validate_customer_by_name
|
31
33
|
# return unless @customer_name
|
32
34
|
# return if self.customer
|
33
|
-
# return if @@customer_name_allow_nil && @customer_name == ""
|
35
|
+
# return if @@customer_name_allow_nil && @customer_name == ""
|
34
36
|
#
|
35
|
-
# self.errors.add :customer_name, "#{@customer_name} does not exist"
|
37
|
+
# self.errors.add :customer_name, "#{@customer_name} does not exist"
|
36
38
|
# end
|
37
|
-
define_method(:"validate_#{association}_by_#{field}") do
|
38
|
-
return unless instance_variable_get(:"@#{association}_#{field}")
|
39
|
+
define_method(:"validate_#{association}_by_#{field}") do
|
40
|
+
return unless instance_variable_get(:"@#{association}_#{field}")
|
39
41
|
return if send(association.to_sym)
|
40
42
|
return if self.class.instance_variable_get(:"@#{association}_#{field}_allow_nil") && instance_variable_get(:"@#{association}_#{field}") == ""
|
41
|
-
|
43
|
+
|
44
|
+
errors.add(:"#{association}_#{field}", :does_not_exist)
|
42
45
|
end
|
43
46
|
|
44
47
|
# Resolve the autocompleted name to an actual entity
|
@@ -61,12 +64,13 @@ module AutocompleteFor
|
|
61
64
|
# end
|
62
65
|
define_method(:"associate_#{association}_by_#{field}") do
|
63
66
|
return unless instance_variable_get(:"@#{association}_#{field}")
|
64
|
-
|
65
|
-
|
67
|
+
|
68
|
+
if instance_variable_get(:"@#{association}_#{field}") == ""
|
69
|
+
send(:"#{association}=", nil)
|
66
70
|
return
|
67
71
|
end
|
68
72
|
|
69
|
-
|
73
|
+
send(:"autocomplete_find_#{association}_by_#{field}")
|
70
74
|
end
|
71
75
|
|
72
76
|
# set up validation on association in case the customer_name isn't set
|
@@ -76,20 +80,23 @@ module AutocompleteFor
|
|
76
80
|
|
77
81
|
instance_variable_set(error_fields_name, error_fields)
|
78
82
|
|
79
|
-
unless allow_nil
|
83
|
+
unless allow_nil
|
80
84
|
# we must make sure that the validate_by_customer validation runs
|
81
85
|
# after ALL validations on autocomplete fields
|
82
|
-
#skip_callback :validate, :by, :"#{association}"
|
86
|
+
# skip_callback :validate, :by, :"#{association}"
|
83
87
|
|
84
88
|
validate :"validate_by_#{association}"
|
85
89
|
|
86
90
|
unless instance_methods.include?("validate_by_#{association}")
|
87
91
|
|
88
92
|
# def validate_by_customer
|
89
|
-
# self.errors.add_on_blank(:customer) unless @@
|
93
|
+
# self.errors.add_on_blank(:customer) unless @@customer_autocomplete_error_fields.any? {|ef| self.errors[ef]}
|
90
94
|
# end
|
91
95
|
define_method(:"validate_by_#{association}") do
|
92
|
-
|
96
|
+
return if self.class.instance_variable_get(error_fields_name).any? { |ef| errors[ef].any? }
|
97
|
+
return unless send(:read_attribute_for_validation, association.to_sym).blank?
|
98
|
+
|
99
|
+
errors.add(association.to_sym, :blank, options)
|
93
100
|
end
|
94
101
|
end
|
95
102
|
end
|
@@ -97,4 +104,4 @@ module AutocompleteFor
|
|
97
104
|
end
|
98
105
|
end
|
99
106
|
|
100
|
-
ActiveRecord::Base.send
|
107
|
+
ActiveRecord::Base.send(:include, AutocompleteFor)
|
metadata
CHANGED
@@ -1,80 +1,146 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autocomplete_for
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Kirby
|
8
|
+
- Alistair McKinnell
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-11-05 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
+
name: activerecord
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
|
20
|
+
version: '5.1'
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '6.1'
|
24
|
+
type: :runtime
|
21
25
|
prerelease: false
|
22
26
|
version_requirements: !ruby/object:Gem::Requirement
|
23
27
|
requirements:
|
24
28
|
- - ">="
|
25
29
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
30
|
+
version: '5.1'
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '6.1'
|
27
34
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
35
|
+
name: appraisal
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.3'
|
41
|
+
type: :development
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.3'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rails
|
29
50
|
requirement: !ruby/object:Gem::Requirement
|
30
51
|
requirements:
|
31
52
|
- - ">="
|
32
53
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
54
|
+
version: '5.1'
|
55
|
+
- - "<"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '6.0'
|
34
58
|
type: :development
|
35
59
|
prerelease: false
|
36
60
|
version_requirements: !ruby/object:Gem::Requirement
|
37
61
|
requirements:
|
38
62
|
- - ">="
|
39
63
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
64
|
+
version: '5.1'
|
65
|
+
- - "<"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '6.0'
|
41
68
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
69
|
+
name: rake
|
43
70
|
requirement: !ruby/object:Gem::Requirement
|
44
71
|
requirements:
|
45
72
|
- - "~>"
|
46
73
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
74
|
+
version: '13.0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '13.0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec-rails
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '4.0'
|
89
|
+
type: :development
|
49
90
|
prerelease: false
|
50
91
|
version_requirements: !ruby/object:Gem::Requirement
|
51
92
|
requirements:
|
52
93
|
- - "~>"
|
53
94
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
95
|
+
version: '4.0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: rubocop
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.2'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.2'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: sqlite3
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '1.3'
|
117
|
+
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '1.3'
|
55
124
|
description: Model-side logic for autocompleting belongs_to associations
|
56
|
-
email:
|
125
|
+
email: skirby@gmail.com
|
57
126
|
executables: []
|
58
127
|
extensions: []
|
59
|
-
extra_rdoc_files:
|
60
|
-
- README.markdown
|
128
|
+
extra_rdoc_files: []
|
61
129
|
files:
|
62
|
-
- Gemfile
|
63
|
-
- Gemfile.lock
|
64
130
|
- MIT-LICENSE
|
65
131
|
- README.markdown
|
66
|
-
- Rakefile
|
67
|
-
- autocomplete_for.gemspec
|
68
132
|
- lib/autocomplete_for.rb
|
69
133
|
- lib/autocomplete_for/autocomplete_for.rb
|
70
|
-
-
|
71
|
-
|
72
|
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
|
76
|
-
|
77
|
-
|
134
|
+
- lib/autocomplete_for/version.rb
|
135
|
+
homepage: https://github.com/nulogy/autocomplete_for
|
136
|
+
licenses:
|
137
|
+
- MIT
|
138
|
+
- GPL-3.0
|
139
|
+
metadata:
|
140
|
+
homepage_uri: https://github.com/nulogy/autocomplete_for
|
141
|
+
changelog_uri: https://github.com/nulogy/autocomplete_for/blob/master/CHANGELOG.md
|
142
|
+
source_code_uri: https://github.com/nulogy/autocomplete_for
|
143
|
+
bug_tracker_uri: https://github.com/nulogy/autocomplete_for/issues
|
78
144
|
post_install_message:
|
79
145
|
rdoc_options: []
|
80
146
|
require_paths:
|
@@ -83,16 +149,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
149
|
requirements:
|
84
150
|
- - ">="
|
85
151
|
- !ruby/object:Gem::Version
|
86
|
-
version: '
|
152
|
+
version: '2.6'
|
87
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
154
|
requirements:
|
89
155
|
- - ">="
|
90
156
|
- !ruby/object:Gem::Version
|
91
157
|
version: '0'
|
92
158
|
requirements: []
|
93
|
-
|
94
|
-
rubygems_version: 2.6.14
|
159
|
+
rubygems_version: 3.1.4
|
95
160
|
signing_key:
|
96
|
-
specification_version:
|
97
|
-
summary:
|
161
|
+
specification_version: 4
|
162
|
+
summary: Autocomplete for models
|
98
163
|
test_files: []
|
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
autocomplete_for (1.0.0)
|
5
|
-
activerecord (~> 5.0)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: http://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (5.2.0)
|
11
|
-
activesupport (= 5.2.0)
|
12
|
-
activerecord (5.2.0)
|
13
|
-
activemodel (= 5.2.0)
|
14
|
-
activesupport (= 5.2.0)
|
15
|
-
arel (>= 9.0)
|
16
|
-
activesupport (5.2.0)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
|
-
arel (9.0.0)
|
22
|
-
concurrent-ruby (1.0.5)
|
23
|
-
i18n (1.0.1)
|
24
|
-
concurrent-ruby (~> 1.0)
|
25
|
-
minitest (5.11.3)
|
26
|
-
pg (1.0.0)
|
27
|
-
rake (12.3.1)
|
28
|
-
thread_safe (0.3.6)
|
29
|
-
tzinfo (1.2.5)
|
30
|
-
thread_safe (~> 0.1)
|
31
|
-
|
32
|
-
PLATFORMS
|
33
|
-
ruby
|
34
|
-
|
35
|
-
DEPENDENCIES
|
36
|
-
autocomplete_for!
|
37
|
-
pg
|
38
|
-
rake
|
39
|
-
|
40
|
-
BUNDLED WITH
|
41
|
-
1.16.2
|
data/Rakefile
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
require 'rake/testtask'
|
3
|
-
require 'rdoc/task'
|
4
|
-
require 'bundler'
|
5
|
-
Bundler::GemHelper.install_tasks
|
6
|
-
|
7
|
-
desc 'Default: run unit tests.'
|
8
|
-
task :default => :test
|
9
|
-
|
10
|
-
desc 'Test the autocomplete_for plugin.'
|
11
|
-
Rake::TestTask.new(:test) do |t|
|
12
|
-
t.libs << 'lib'
|
13
|
-
t.libs << 'test'
|
14
|
-
t.pattern = 'test/**/*_test.rb'
|
15
|
-
t.verbose = true
|
16
|
-
end
|
17
|
-
|
18
|
-
desc 'Generate documentation for the autocomplete_for plugin.'
|
19
|
-
Rake::RDocTask.new(:rdoc) do |rdoc|
|
20
|
-
rdoc.rdoc_dir = 'rdoc'
|
21
|
-
rdoc.title = 'AutocompleteFor'
|
22
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
23
|
-
rdoc.rdoc_files.include('README.markdown')
|
24
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
25
|
-
end
|
data/autocomplete_for.gemspec
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = "autocomplete_for"
|
8
|
-
s.version = "1.0.0"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Sean Kirby"]
|
12
|
-
s.date = "2011-10-26"
|
13
|
-
s.description = "Model-side logic for autocompleting belongs_to associations"
|
14
|
-
s.email = "sskirby@gmail.com"
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.markdown"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
"Gemfile",
|
20
|
-
"Gemfile.lock",
|
21
|
-
"MIT-LICENSE",
|
22
|
-
"README.markdown",
|
23
|
-
"Rakefile",
|
24
|
-
"autocomplete_for.gemspec",
|
25
|
-
"lib/autocomplete_for.rb",
|
26
|
-
"lib/autocomplete_for/autocomplete_for.rb",
|
27
|
-
"rails/init.rb",
|
28
|
-
"test/autocomplete_for_test.rb",
|
29
|
-
"test/database.yml",
|
30
|
-
"test/schema.rb",
|
31
|
-
"test/test_helper.rb"
|
32
|
-
]
|
33
|
-
s.homepage = "http://github.com/nulogy/autocomplete_for"
|
34
|
-
s.require_paths = ["lib"]
|
35
|
-
s.rubyforge_project = "autocomplete_for"
|
36
|
-
s.rubygems_version = "1.8.10"
|
37
|
-
s.summary = "Model-side logic for autocompleting belongs_to associations"
|
38
|
-
|
39
|
-
if s.respond_to? :specification_version then
|
40
|
-
s.specification_version = 3
|
41
|
-
|
42
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
-
s.add_development_dependency(%q<pg>, [">= 0"])
|
44
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
45
|
-
s.add_runtime_dependency(%q<activerecord>, ["~> 5.0"])
|
46
|
-
else
|
47
|
-
s.add_dependency(%q<pg>, [">= 0"])
|
48
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
49
|
-
s.add_dependency(%q<activerecord>, ["~> 5.0"])
|
50
|
-
end
|
51
|
-
else
|
52
|
-
s.add_dependency(%q<pg>, [">= 0"])
|
53
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
54
|
-
s.add_dependency(%q<activerecord>, ["~> 5.0"])
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'autocomplete_for'
|
@@ -1,149 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class AutocompleteForTest < ActiveSupport::TestCase
|
4
|
-
load_schema
|
5
|
-
|
6
|
-
class Vendor < ActiveRecord::Base; end
|
7
|
-
class Customer < ActiveRecord::Base; end
|
8
|
-
|
9
|
-
class AutoCompleteForCustomerTestModel < ActiveRecord::Base
|
10
|
-
belongs_to :customer
|
11
|
-
|
12
|
-
autocomplete_for :customer, :name, :allow_nil => true do
|
13
|
-
self.customer = Customer.find(:first, :conditions => {:name => @customer_name})
|
14
|
-
end
|
15
|
-
autocomplete_for :customer, :code, :allow_nil => true do
|
16
|
-
self.customer = Customer.find(:first, :conditions => {:code => @customer_code})
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class AutoCompleteForVendorTestModel < ActiveRecord::Base
|
21
|
-
belongs_to :vendor
|
22
|
-
|
23
|
-
autocomplete_for :vendor, :name do
|
24
|
-
self.vendor = Vendor.find(:first, :conditions => {:name => @vendor_name})
|
25
|
-
end
|
26
|
-
autocomplete_for :vendor, :code do
|
27
|
-
self.vendor = Vendor.find(:first, :conditions => {:code => @vendor_code})
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def setup
|
32
|
-
Vendor.destroy_all
|
33
|
-
Customer.destroy_all
|
34
|
-
@vendor_nil_code = Vendor.create! :name => "Nil Code"
|
35
|
-
@vendor = Vendor.create! :name => "Vendor Name", :code => "Vendor Code"
|
36
|
-
@autocomplete_for_vendor = AutoCompleteForVendorTestModel.new
|
37
|
-
|
38
|
-
@customer = Customer.create! :name => "Customer Name", :code => "Customer Code"
|
39
|
-
@autocomplete_for_customer = AutoCompleteForCustomerTestModel.new
|
40
|
-
end
|
41
|
-
|
42
|
-
test "with valid name" do
|
43
|
-
@autocomplete_for_vendor.update_attributes! :vendor_name => @vendor.name
|
44
|
-
|
45
|
-
assert_equal @vendor, @autocomplete_for_vendor.vendor
|
46
|
-
end
|
47
|
-
|
48
|
-
test "with invalid name" do
|
49
|
-
@autocomplete_for_vendor.update_attributes :vendor_name => "Not a Vendor Name"
|
50
|
-
|
51
|
-
assert_nil @autocomplete_for_vendor.vendor
|
52
|
-
assert @autocomplete_for_vendor.errors[:vendor_name].any?
|
53
|
-
assert @autocomplete_for_vendor.errors[:vendor_code].empty?
|
54
|
-
assert @autocomplete_for_vendor.errors[:vendor].empty?
|
55
|
-
end
|
56
|
-
|
57
|
-
test "with blank name" do
|
58
|
-
@autocomplete_for_vendor.update_attributes :vendor_name => ""
|
59
|
-
|
60
|
-
assert_nil @autocomplete_for_vendor.vendor
|
61
|
-
assert @autocomplete_for_vendor.errors[:vendor_name].any?
|
62
|
-
assert @autocomplete_for_vendor.errors[:vendor_code].empty?
|
63
|
-
assert @autocomplete_for_vendor.errors[:vendor].empty?
|
64
|
-
end
|
65
|
-
|
66
|
-
test "with nil name" do
|
67
|
-
@autocomplete_for_vendor.update_attributes :vendor_name => nil
|
68
|
-
|
69
|
-
assert_nil @autocomplete_for_vendor.vendor
|
70
|
-
assert_equal 1, @autocomplete_for_vendor.errors[:vendor].size, @autocomplete_for_vendor.errors[:vendor]
|
71
|
-
assert @autocomplete_for_vendor.errors[:vendor_code].empty?
|
72
|
-
assert @autocomplete_for_vendor.errors[:vendor_name].empty?
|
73
|
-
end
|
74
|
-
|
75
|
-
test "should clear existing association" do
|
76
|
-
@autocomplete_for_vendor.update_attributes! :vendor => @vendor
|
77
|
-
assert_equal @vendor, @autocomplete_for_vendor.vendor
|
78
|
-
|
79
|
-
@autocomplete_for_vendor.update_attributes :vendor_name => ""
|
80
|
-
assert_nil @autocomplete_for_vendor.vendor
|
81
|
-
assert @autocomplete_for_vendor.errors[:vendor_name].any?
|
82
|
-
|
83
|
-
assert @autocomplete_for_vendor.errors[:vendor_code].empty?
|
84
|
-
assert @autocomplete_for_vendor.errors[:vendor].empty?
|
85
|
-
end
|
86
|
-
|
87
|
-
test "should not clear existing association" do
|
88
|
-
@autocomplete_for_vendor.update_attributes! :vendor => @vendor
|
89
|
-
assert_equal @vendor, @autocomplete_for_vendor.vendor
|
90
|
-
|
91
|
-
@autocomplete_for_vendor.update_attributes! :vendor_name => nil
|
92
|
-
assert_equal @vendor, @autocomplete_for_vendor.vendor
|
93
|
-
end
|
94
|
-
|
95
|
-
test "should clear existing association using field that can be nil" do
|
96
|
-
@autocomplete_for_vendor.update_attributes! :vendor => @vendor
|
97
|
-
assert_equal @vendor, @autocomplete_for_vendor.vendor
|
98
|
-
|
99
|
-
@autocomplete_for_vendor.update_attributes :vendor_code => ""
|
100
|
-
assert_nil @autocomplete_for_vendor.vendor
|
101
|
-
assert @autocomplete_for_vendor.errors[:vendor_code].any?
|
102
|
-
|
103
|
-
assert @autocomplete_for_vendor.errors[:vendor_name].empty?
|
104
|
-
assert @autocomplete_for_vendor.errors[:vendor].empty?
|
105
|
-
end
|
106
|
-
|
107
|
-
test "allow_nil with valid name" do
|
108
|
-
@autocomplete_for_customer.update_attributes! :customer_name => @customer.name
|
109
|
-
|
110
|
-
assert_equal @customer, @autocomplete_for_customer.customer
|
111
|
-
end
|
112
|
-
|
113
|
-
test "allow_nil with invalid name" do
|
114
|
-
@autocomplete_for_customer.update_attributes :customer_name => "Not A Customer Name"
|
115
|
-
|
116
|
-
assert_nil @autocomplete_for_customer.customer
|
117
|
-
assert @autocomplete_for_customer.errors[:customer_name].any?
|
118
|
-
assert @autocomplete_for_customer.errors[:customer_code].empty?
|
119
|
-
assert @autocomplete_for_customer.errors[:customer].empty?
|
120
|
-
end
|
121
|
-
|
122
|
-
test "allow_nil with blank name" do
|
123
|
-
@autocomplete_for_customer.update_attributes! :customer_name => ""
|
124
|
-
|
125
|
-
assert_nil @autocomplete_for_customer.customer
|
126
|
-
end
|
127
|
-
|
128
|
-
test "allow_nil with nil name" do
|
129
|
-
@autocomplete_for_customer.update_attributes! :customer_name => nil
|
130
|
-
|
131
|
-
assert_nil @autocomplete_for_customer.customer
|
132
|
-
end
|
133
|
-
|
134
|
-
test "allow_nil should clear existing association" do
|
135
|
-
@autocomplete_for_customer.update_attributes! :customer => @customer
|
136
|
-
assert_equal @customer, @autocomplete_for_customer.customer
|
137
|
-
|
138
|
-
@autocomplete_for_customer.update_attributes! :customer_name => ""
|
139
|
-
assert_nil @autocomplete_for_customer.customer
|
140
|
-
end
|
141
|
-
|
142
|
-
test "allow_nil should not clear existing association" do
|
143
|
-
@autocomplete_for_customer.update_attributes! :customer => @customer
|
144
|
-
assert_equal @customer, @autocomplete_for_customer.customer
|
145
|
-
|
146
|
-
@autocomplete_for_customer.update_attributes! :customer_name => nil
|
147
|
-
assert_equal @customer, @autocomplete_for_customer.customer
|
148
|
-
end
|
149
|
-
end
|
data/test/database.yml
DELETED
data/test/schema.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
ActiveRecord::Schema.define(:version => 0) do
|
2
|
-
create_table :customers, :force => true do |t|
|
3
|
-
t.string :name, :unique => true
|
4
|
-
t.string :code, :unique => true
|
5
|
-
end
|
6
|
-
create_table :vendors, :force => true do |t|
|
7
|
-
t.string :name, :unique => true
|
8
|
-
t.string :code, :unique => true
|
9
|
-
end
|
10
|
-
create_table :auto_complete_for_customer_test_models, :force => true do |t|
|
11
|
-
t.integer :customer_id
|
12
|
-
end
|
13
|
-
create_table :auto_complete_for_vendor_test_models, :force => true do |t|
|
14
|
-
t.integer :vendor_id
|
15
|
-
end
|
16
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'active_support'
|
3
|
-
require 'active_support/core_ext'
|
4
|
-
require 'active_support/test_case'
|
5
|
-
require 'yaml'
|
6
|
-
require 'minitest'
|
7
|
-
require 'active_record'
|
8
|
-
|
9
|
-
def load_schema
|
10
|
-
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
11
|
-
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
12
|
-
db_adapter = ENV['DB'] || 'postgresql'
|
13
|
-
|
14
|
-
if config[db_adapter].nil?
|
15
|
-
raise "DB Adapter #{db_adapter} has no entries in database.yml."
|
16
|
-
end
|
17
|
-
|
18
|
-
ActiveRecord::Base.establish_connection(config[db_adapter])
|
19
|
-
load(File.dirname(__FILE__) + "/schema.rb")
|
20
|
-
require File.dirname(__FILE__) + '/../rails/init'
|
21
|
-
end
|