make_model_searchable 0.2.0 → 0.2.1

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: 991de978ccef72bc0863c5397700e2c296641b02
4
- data.tar.gz: 94300071ad25d62ba74a4dbc895ee04d88b44f05
3
+ metadata.gz: 648050f19bf2182a6c7fd2831efb9abe048ed2d5
4
+ data.tar.gz: 5051a9071d1da32de090dc14679f4851b537df8a
5
5
  SHA512:
6
- metadata.gz: 431aa130285c9c5a9506e495d9650d26976486cb506faca2dccaff74aa6988396f744565bdab584eb5ae98b55a1a4852a9e8f7d894f22cc9f20cbec54bfc7ecd
7
- data.tar.gz: 3556cc7169598aadfae0ff9874ac01d31f852118439de5ddd41aa0df62c45b5bfc0ace18f56ed5a6135c8bdd42ea37e2607bd488a2a64ac1f0623b51d4b865c2
6
+ metadata.gz: 27a94d9a4c6269ce01dde0496f730dd3a960f525c7c69ec159a77faeee6606964ac6302da1a868265f6ac2f97215c68460cdacd4889bd7655890b796c91c56b3
7
+ data.tar.gz: 2ddb9171f8e56db3e78a9cb301ce1bfd560ddf83d169fa400d76de5e5130ad98b82277dff7233c9ee4d0f981ef5fffae8c3ad6f3db6e321f9884479b6c05a649
@@ -1,5 +1,6 @@
1
1
  require "make_model_searchable/version"
2
2
  require 'active_record'
3
+ require 'models/searchable_field'
3
4
 
4
5
  module MakeModelSearchable
5
6
 
@@ -17,17 +18,17 @@ module MakeModelSearchable
17
18
  def setup_joined_fields(options_array)
18
19
  joined_fields = []
19
20
  association_names = self.reflect_on_all_associations.map(&:name)
20
- valid_opts = options_array.first.select {|k,v| association_names.include?(k)}
21
- if valid_opts
22
- valid_opts.each do |key, val|
23
- joined_fields << get_valid_joined_fields(key, val)
24
- end
25
- if joined_fields.present?
26
- self.instance_variable_set(:@joined_fields, joined_fields.flatten)
21
+ valid_opts = options_array.first.select {|k,v| association_names.include?(k) }
22
+ searchable_fields = []
23
+
24
+ valid_opts.each do |key, val|
25
+ assoc = self.reflect_on_association(key)
26
+ joined_fields << get_valid_joined_fields(key, val)
27
+ joined_fields.flatten.each do |f|
28
+ searchable_fields << SearchableField.new(f.name, f.type, assoc.name, assoc.klass)
27
29
  end
28
- else
29
- raise Exception.new, "Please pass valid attributes for class: #{self.name}"
30
30
  end
31
+ self.instance_variable_set(:@joined_fields, searchable_fields.flatten) if searchable_fields.present?
31
32
  end
32
33
 
33
34
  def setup_fields(options)
@@ -84,19 +85,19 @@ module MakeModelSearchable
84
85
  end
85
86
  end
86
87
  join_table_names = []
88
+
87
89
  if joined_fields.present?
88
90
  joined_fields.each do |field|
89
- if field.respond_to? "table_name"
90
- join_table_names << field.table_name.to_sym
91
- associated_relation = self.reflect_on_association(field.table_name).klass.arel_table
92
- if arel_node.present?
93
- arel_node = arel_node.or(associated_relation[field.name].lower.matches(search_term))
94
- else
95
- arel_node = associated_relation[field.name].lower.matches(search_term)
96
- end
91
+ associated_relation = field.associated_klass.arel_table
92
+ join_table_names << field.association_name
93
+ if arel_node.present?
94
+ arel_node = arel_node.or(associated_relation[field.name].lower.matches(search_term))
95
+ else
96
+ arel_node = associated_relation[field.name].lower.matches(search_term)
97
97
  end
98
98
  end
99
99
  end
100
+
100
101
  joins(join_table_names).where(arel_node)
101
102
  else
102
103
  all
@@ -1,3 +1,3 @@
1
1
  module MakeModelSearchable
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,10 @@
1
+ class SearchableField
2
+ attr_accessor :name, :field_type, :association_name, :associated_klass
3
+
4
+ def initialize(name, field_type, association_name, associated_klass)
5
+ @name = name
6
+ @field_type = field_type
7
+ @association_name = association_name
8
+ @associated_klass = associated_klass
9
+ end
10
+ end
@@ -29,10 +29,10 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_development_dependency 'activerecord', '~> 4.0', '>= 4.0.0'
31
31
  spec.add_development_dependency 'activesupport', '~> 4.0', '>= 4.0.0'
32
- spec.add_development_dependency 'sqlite3', '~> 0'
32
+ spec.add_development_dependency 'sqlite3'
33
33
  spec.add_development_dependency "bundler", "~> 1.12"
34
34
  spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency 'rspec', '~> 0'
36
- spec.add_development_dependency 'factory_girl', '~> 0'
37
- spec.add_development_dependency 'pry', '~> 0'
35
+ spec.add_development_dependency 'rspec'
36
+ spec.add_development_dependency 'factory_girl'
37
+ spec.add_development_dependency 'pry'
38
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: make_model_searchable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - 8parth
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-20 00:00:00.000000000 Z
11
+ date: 2016-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -54,14 +54,14 @@ dependencies:
54
54
  name: sqlite3
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - "~>"
57
+ - - ">="
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  type: :development
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - "~>"
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
67
  - !ruby/object:Gem::Dependency
@@ -96,42 +96,42 @@ dependencies:
96
96
  name: rspec
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - "~>"
99
+ - - ">="
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - "~>"
106
+ - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: factory_girl
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - "~>"
113
+ - - ">="
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  type: :development
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
- - - "~>"
120
+ - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: pry
125
125
  requirement: !ruby/object:Gem::Requirement
126
126
  requirements:
127
- - - "~>"
127
+ - - ">="
128
128
  - !ruby/object:Gem::Version
129
129
  version: '0'
130
130
  type: :development
131
131
  prerelease: false
132
132
  version_requirements: !ruby/object:Gem::Requirement
133
133
  requirements:
134
- - - "~>"
134
+ - - ">="
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
137
  description: Moduler solution to add search functionality for selected fields.
@@ -154,6 +154,7 @@ files:
154
154
  - bin/setup
155
155
  - lib/make_model_searchable.rb
156
156
  - lib/make_model_searchable/version.rb
157
+ - lib/models/searchable_field.rb
157
158
  - make_model_searchable.gemspec
158
159
  homepage: https://github.com/8parth/make_model_searchable
159
160
  licenses: