active_search 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9c7dd30c9833519ed79bd213892cb61a9377ca5
4
- data.tar.gz: c29c291a9e4585979e41f7fbad3e849e9d41a9a3
3
+ metadata.gz: d62e32ef5213c4e135d0d4bb69d3b4ac0bdc504c
4
+ data.tar.gz: b9abf6b9ff1bc7bff9bf05faa1f85c513e49879c
5
5
  SHA512:
6
- metadata.gz: 8c1208749ac67681714764c99bc6924584ebcb8e43dca0d1ede4342b343519d8017b490e9cc2f7d7f94dd5704771f30b03a7e600f289aabc020ca40d577a6d71
7
- data.tar.gz: 29db12d2b2d1f2b0d5c903ab1f446d2869a3d45af6be58178e3ef0b81f804079454a8f8b6c0a9fc5fdfbd7b2ef95194c10ac0935b75d6ead11096799886f165a
6
+ metadata.gz: 2eec8c4ab05cddbc04f7c197e12551e14f2f67acab4bfd3f75b2f3b5737fc5baec62892f8284418615de24839d5ac81c605ed5ac4c35e524153d4adde26e6b19
7
+ data.tar.gz: da6c5d1b53f994ebdb67a97f05f9e9c5da411b8ecc740351dc1a1a81d0c73e7b4ff3ea6a44925a7cf9bad3f927ebb534bc22c38331076770d3ac09d7a4df486f
data/.rvmrc ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p374@searchable"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.18.3 (stable)" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
+ else
29
+ # If the environment file has not yet been created, use the RVM CLI to select.
30
+ rvm --create "$environment_id" || {
31
+ echo "Failed to create RVM environment '${environment_id}'."
32
+ return 1
33
+ }
34
+ fi
35
+
36
+ # If you use bundler, this might be useful to you:
37
+ # if [[ -s Gemfile ]] && {
38
+ # ! builtin command -v bundle >/dev/null ||
39
+ # builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
40
+ # }
41
+ # then
42
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
+ # gem install bundler
44
+ # fi
45
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
46
+ # then
47
+ # bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
48
+ # fi
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :rspec do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
- ## Searchable
1
+ ## ActiveSearch
2
2
  #### By zachmokahn
3
3
 
4
4
  This gem is in very early, very beta release. Please report any and all bugs, as well as any or all desired features. I'd love to make this better, or for you to make it better. Fork it, make pull requests, give me feedback. THANKS!
5
5
 
6
6
  #### What does it do?
7
7
 
8
- Searchable adds some methods to ActiveRecord::Base Objects
8
+ ActiveSearch adds some methods to ActiveRecord::Base Objects
9
9
 
10
10
 
11
11
  ```
@@ -39,7 +39,7 @@ This can also be called on an instance of a Class to search against a collection
39
39
 
40
40
  #### How the Heck do you use this?
41
41
  1. Install the Gem
42
-
42
+
43
43
  ```ruby
44
44
  gem install searchable
45
45
  ```
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = ActiveSearch::VERSION
9
9
  spec.authors = ["Zachary J. Davy"]
10
10
  spec.email = ["zachmokahn@gmail.com"]
11
- spec.description = "Searchable will allow any model to be 'searched for' in a text field given the 'search' class"
11
+ spec.description = "ActiveSearch will allow any model to be 'searched for' in a text field given the 'searchable_by' attribute"
12
12
  spec.summary = "Easily make items searchable inside of your app"
13
- spec.homepage = "http://github.com/zachmokahn/searchable"
13
+ spec.homepage = "http://github.com/zachmokahn/active_search"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
data/img/tests.png ADDED
Binary file
@@ -0,0 +1,21 @@
1
+ module ActiveSearch
2
+ module IsSearchable
3
+ extend ActiveSupport::Concern
4
+ module ClassMethods
5
+ attr_reader :searchable_values
6
+ def is_searchable?
7
+ true
8
+ end
9
+ alias searchable? is_searchable?
10
+
11
+ def find_by_value(value, association=self)
12
+ values = []
13
+ @searchable_values.each do |search|
14
+ values << association.where("#{search} LIKE ?", "%#{value}%")
15
+ end
16
+ values.flatten
17
+ end
18
+ alias search_for find_by_value
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ require 'active_support/concern'
2
+
3
+ module ActiveRecord
4
+ class Base
5
+ def find_by_value(value, association)
6
+ self.send(association.to_sym).find_by_value(value)
7
+ end
8
+ alias search_for find_by_value
9
+ end
10
+ end
11
+
12
+ module ActiveSearch
13
+ module SearchHelper
14
+ extend ActiveSupport::Concern
15
+ module ClassMethods
16
+ def is_searchable?
17
+ false
18
+ end
19
+ alias searchable? is_searchable?
20
+ def searchable_by(*values)
21
+ @searchable_values = values
22
+ include ActiveSearch::IsSearchable
23
+ end
24
+ alias findable_by searchable_by
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveSearch
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,118 @@
1
+ require 'spec_helper'
2
+ require 'active_search'
3
+
4
+ class Model < ActiveRecord::Base
5
+ end
6
+
7
+ class SearchableModel < ActiveRecord::Base
8
+ belongs_to :is_not_searchable_model
9
+ belongs_to :is_searchable_model
10
+ searchable_by :test, :banana
11
+ end
12
+
13
+ class IsNotSearchableModel < ActiveRecord::Base
14
+ has_many :searchable_models
15
+ end
16
+
17
+ class IsSearchableModel < ActiveRecord::Base
18
+ has_many :searchable_models
19
+ searchable_by :test
20
+ end
21
+
22
+ class FindableModel < ActiveRecord::Base
23
+ findable_by :test
24
+ end
25
+
26
+ describe ActiveSearch do
27
+ before(:each) do
28
+ @model = Model.create(test: "test")
29
+ @is_not_searchable_model = IsNotSearchableModel.create(test: "test")
30
+ @is_searchable_model = IsSearchableModel.create(test: "test")
31
+ @bob = SearchableModel.create(test: "Bob",
32
+ banana: "yellow",
33
+ is_not_searchable_model_id: @is_not_searchable_model.id,
34
+ is_searchable_model_id: @is_searchable_model.id)
35
+ @bob2 = SearchableModel.create(test: "Bob",
36
+ banana: "brown",
37
+ is_not_searchable_model_id: @is_not_searchable_model.id,
38
+ is_searchable_model_id: @is_searchable_model.id)
39
+ end
40
+ describe "Active Record Model" do
41
+ context "#is_searchable?" do
42
+ it "returns false by default" do
43
+ expect(Model.is_searchable?).to be_false
44
+ end
45
+
46
+ it "returns true if '#search_by' is included" do
47
+ expect(SearchableModel.is_searchable?).to be_true
48
+ end
49
+ end
50
+ context "#searchable_values" do
51
+ it "returns values passed to '#searchable_by'" do
52
+ expect(SearchableModel.searchable_values).to include(:test)
53
+ end
54
+ end
55
+ context "#find_by_values" do
56
+ it "returns an array of matching objects" do
57
+ expect(SearchableModel.find_by_value("Bob")).to include(@bob)
58
+ expect(SearchableModel.find_by_value("Bob")).to include(@bob2)
59
+ expect(SearchableModel.find_by_value("yellow")).to include(@bob)
60
+ expect(SearchableModel.find_by_value("yellow")).to_not include(@bob2)
61
+ end
62
+ end
63
+ end
64
+ describe "Active Record Associations" do
65
+ context "#find_by_values" do
66
+ it "returns an instance of a model's associations found by value when the model is searchable" do
67
+ expect(@is_searchable_model.class.is_searchable?).to be_true
68
+ expect(@is_searchable_model.find_by_value("yellow", "searchable_models")).to include(@bob)
69
+ expect(@is_searchable_model.find_by_value("yellow", "searchable_models")).to_not include(@bob2)
70
+ end
71
+ it "returns an instance of a model's associations found by value when the model is not searchable" do
72
+ expect(@is_not_searchable_model.class.is_searchable?).to be_false
73
+ expect(@is_not_searchable_model.find_by_value("yellow", "searchable_models")).to include(@bob)
74
+ expect(@is_not_searchable_model.find_by_value("yellow", "searchable_models")).to_not include(@bob2)
75
+ end
76
+ end
77
+ end
78
+ describe "Partial Matches" do
79
+ context "#find_by_value" do
80
+ it "returns the models as long as the value partially matches the '#seachable_values' strings" do
81
+ expect(SearchableModel.find_by_value("ow")).to include(@bob)
82
+ expect(SearchableModel.find_by_value("ow")).to include(@bob2)
83
+ end
84
+ it "does not return the value if the partial strings do not match" do
85
+ expect(SearchableModel.find_by_value("low")).to include(@bob)
86
+ expect(SearchableModel.find_by_value("low")).to_not include(@bob2)
87
+ expect(SearchableModel.find_by_value("row")).to include(@bob2)
88
+ expect(SearchableModel.find_by_value("row")).to_not include(@bob)
89
+ end
90
+ it "returns the models regardless of case" do
91
+ expect(SearchableModel.find_by_value("bob")).to include(@bob)
92
+ expect(SearchableModel.find_by_value("bob")).to include(@bob2)
93
+ expect(SearchableModel.find_by_value("Yellow")).to include(@bob)
94
+ expect(SearchableModel.find_by_value("Brown")).to include(@bob2)
95
+ end
96
+ end
97
+ end
98
+ describe "Method Aliases" do
99
+ context "#searchable?" do
100
+ it "is an alias for #is_searchable?" do
101
+ expect(SearchableModel.searchable?).to eq(SearchableModel.is_searchable?)
102
+ expect(Model.searchable?).to eq(Model.is_searchable?)
103
+ end
104
+ end
105
+ context "#search_for" do
106
+ it "is an alias for #find_by_value" do
107
+ expect(SearchableModel.search_for("Bob")).to eq(SearchableModel.find_by_value("Bob"))
108
+ expect(@is_searchable_model.search_for("yellow", "searchable_models")).to eq(@is_searchable_model.find_by_value("yellow", "searchable_models"))
109
+ expect(@is_not_searchable_model.search_for("yellow", "searchable_models")).to eq(@is_not_searchable_model.find_by_value("yellow", "searchable_models"))
110
+ end
111
+ end
112
+ context "#findable_by" do
113
+ it "is an alias for #searchable_by" do
114
+ expect(FindableModel.searchable?).to eq(true)
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,30 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
4
+ require 'active_search'
5
+ require 'active_record'
6
+
7
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
8
+ :database => ":memory:")
9
+
10
+ ActiveRecord::Schema.define do
11
+ self.verbose = false
12
+ create_table :models, :force => true do |t|
13
+ t.string :test
14
+ end
15
+ create_table :searchable_models, :force => true do |t|
16
+ t.string :test
17
+ t.string :banana
18
+ t.integer :is_not_searchable_model_id
19
+ t.integer :is_searchable_model_id
20
+ end
21
+ create_table :is_not_searchable_models, :force => true do |t|
22
+ t.string :test
23
+ end
24
+ create_table :is_searchable_models, :force => true do |t|
25
+ t.string :test
26
+ end
27
+ create_table :findable_models, :force => true do |t|
28
+ t.string :test
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zachary J. Davy
@@ -122,8 +122,8 @@ dependencies:
122
122
  - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- description: Searchable will allow any model to be 'searched for' in a text field
126
- given the 'search' class
125
+ description: ActiveSearch will allow any model to be 'searched for' in a text field
126
+ given the 'searchable_by' attribute
127
127
  email:
128
128
  - zachmokahn@gmail.com
129
129
  executables: []
@@ -131,14 +131,22 @@ extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
133
  - .gitignore
134
+ - .rvmrc
135
+ - .travis.yml
134
136
  - Gemfile
137
+ - Guardfile
135
138
  - LICENSE.txt
136
139
  - README.md
137
140
  - Rakefile
138
141
  - active_search.gemspec
142
+ - img/tests.png
139
143
  - lib/active_search.rb
144
+ - lib/active_search/is_searchable.rb
145
+ - lib/active_search/search_helper.rb
140
146
  - lib/active_search/version.rb
141
- homepage: http://github.com/zachmokahn/searchable
147
+ - spec/lib/active_search_spec.rb
148
+ - spec/spec_helper.rb
149
+ homepage: http://github.com/zachmokahn/active_search
142
150
  licenses:
143
151
  - MIT
144
152
  metadata: {}
@@ -162,4 +170,6 @@ rubygems_version: 2.1.10
162
170
  signing_key:
163
171
  specification_version: 4
164
172
  summary: Easily make items searchable inside of your app
165
- test_files: []
173
+ test_files:
174
+ - spec/lib/active_search_spec.rb
175
+ - spec/spec_helper.rb