make_model_searchable 0.2.0 → 0.2.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 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: