algoliasearch-rails 1.5.2 → 1.6.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: be6d06df4e6fd61f5f9daaf332cac49de42870a6
4
- data.tar.gz: de4d74b403c0e516906c246675bd3fa0f0b9addc
3
+ metadata.gz: 8feeca38d2aa84b13c89e975e579b7456808a757
4
+ data.tar.gz: 049c7c330a2983dc20bfdbc4f37ade5bb99b990c
5
5
  SHA512:
6
- metadata.gz: 4d945380296434a3f38af3ec53742b0939f08dd599e2392f75e3615f1a3fc801c48b57a2715170df8139b48d0b36ad1f975d34f3686b779804ddcdc4538d2405
7
- data.tar.gz: 6909f7711b56635e99c8ebe3c260a957c36c4c68126acd9a317c0edb07cae0c3c3ff779b733e8a9dc4cad469bcdc17d20eac8e98b78c3f6107257e7df41f28e5
6
+ metadata.gz: fb011991d9d67bd2f928f6f87b95b8c4e0a187659c5a235fe2aee09e1ba17606720c609dcfaef7911de6cf9d4cebb0bb4d24417df7cd42b81b595519345bb859
7
+ data.tar.gz: 5f1580a4c50586325fabeb28d8099344d643d2bcf46fdcb5a2dd9a27852b169bb3f628fe60d54959400832d6448814baa15bcdacb326f26a31e20de67dbe4d39
data/ChangeLog CHANGED
@@ -1,5 +1,10 @@
1
1
  CHANGELOG
2
2
 
3
+ 2013-12-05 1.6.1
4
+
5
+ * ```add_attribute``` can now be used to add extra attributes in addition to the existing ones
6
+ * Use the ```geoloc``` and ```tags``` methods to generate the associated ```_tags``` and ```_geoloc``` attributes
7
+
3
8
  2013-12-05 1.5.2
4
9
 
5
10
  * object's attributes must be fetched unscoped to ensure associations will not be impacted by the conditions
data/README.md CHANGED
@@ -17,6 +17,8 @@ Table of Content
17
17
  1. [Quick Start](#quick-start)
18
18
  1. [Options](#options)
19
19
  1. [Indexing](#indexing)
20
+ 1. [Tags](#tags)
21
+ 1. [Geo-search](#geo-search)
20
22
  1. [Search settings](#search-settings)
21
23
  1. [Typeahead UI](#typeahead-ui)
22
24
  1. [Note on testing](#note-on-testing)
@@ -70,7 +72,7 @@ class Contact < ActiveRecord::Base
70
72
  end
71
73
  ```
72
74
 
73
- You can either specify the attributes to send (here we restrict to <code>:first_name, :last_name, :email</code>) or not (in that case, all attributes are sent).
75
+ You can either specify the attributes to send (here we restricted to <code>:first_name, :last_name, :email</code>) or not (in that case, all attributes are sent).
74
76
 
75
77
  ```ruby
76
78
  class Product < ActiveRecord::Base
@@ -82,6 +84,23 @@ class Product < ActiveRecord::Base
82
84
  end
83
85
  ```
84
86
 
87
+ You can also use the <code>add_attribute</code> method, to send all model attributes + extra ones:
88
+
89
+ ```ruby
90
+ class Product < ActiveRecord::Base
91
+ include AlgoliaSearch
92
+
93
+ algoliasearch do
94
+ # all attributes + extra_attr will be sent
95
+ add_attribute :extra_attr
96
+ end
97
+
98
+ def extra_attr
99
+ "extra_val"
100
+ end
101
+ end
102
+ ```
103
+
85
104
  ```ruby
86
105
  p Contact.search("jon doe")
87
106
  ```
@@ -204,6 +223,53 @@ To clear an index, use the <code>clear_index!</code> class method:
204
223
  Contact.clear_index!
205
224
  ```
206
225
 
226
+ Tags
227
+ -----
228
+
229
+ Use the <code>tags</code> method to add tags to your record:
230
+
231
+ ```ruby
232
+ class Contact < ActiveRecord::Base
233
+ include AlgoliaSearch
234
+
235
+ algoliasearch do
236
+ tags ['trusted']
237
+ end
238
+ end
239
+ ```
240
+
241
+ or using dynamical values:
242
+
243
+ ```ruby
244
+ class Contact < ActiveRecord::Base
245
+ include AlgoliaSearch
246
+
247
+ algoliasearch do
248
+ tags do
249
+ [first_name.blank? || last_name.blank? ? 'partial' : 'full', has_valid_email? ? 'valid_email' : 'invalid_email']
250
+ end
251
+ end
252
+ end
253
+ ```
254
+
255
+ At query time, specify <code>{ tagFilters: 'tagvalue' }</code> or <code>{ tagFilters: ['tagvalue1', 'tagvalue2'] }</code> as search parameters to restrict the result set to specific tags.
256
+
257
+ Geo-Search
258
+ -----------
259
+
260
+ Use the <code>geoloc</code> method to localize your record:
261
+
262
+ ```ruby
263
+ class Contact < ActiveRecord::Base
264
+ include AlgoliaSearch
265
+
266
+ algoliasearch do
267
+ tags ['trusted']
268
+ end
269
+ end
270
+ ```
271
+
272
+ At query time, specify <code>{ aroundLatLng: "37.33, -121.89", aroundRadius: 50000 }</code> as search parameters to restrict the result set to 50KM around San Jose.
207
273
 
208
274
  Search settings
209
275
  ----------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.2
1
+ 1.6.1
@@ -2,14 +2,15 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: algoliasearch-rails 1.6.1 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "algoliasearch-rails"
8
- s.version = "1.5.2"
9
+ s.version = "1.6.1"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
12
  s.authors = ["Algolia"]
12
- s.date = "2013-12-05"
13
+ s.date = "2013-12-12"
13
14
  s.description = "AlgoliaSearch integration to your favorite ORM"
14
15
  s.email = "contact@algolia.com"
15
16
  s.extra_rdoc_files = [
@@ -47,7 +48,7 @@ Gem::Specification.new do |s|
47
48
  s.homepage = "http://github.com/algolia/algoliasearch-rails"
48
49
  s.licenses = ["MIT"]
49
50
  s.require_paths = ["lib"]
50
- s.rubygems_version = "2.0.12"
51
+ s.rubygems_version = "2.1.11"
51
52
  s.summary = "AlgoliaSearch integration to your favorite ORM"
52
53
 
53
54
  if s.respond_to? :specification_version then
@@ -64,14 +64,39 @@ module AlgoliaSearch
64
64
  raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
65
65
  @attributes ||= {}
66
66
  names.each do |name|
67
- @attributes[name] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
67
+ @attributes[name.to_s] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
68
68
  end
69
69
  end
70
+ alias :attributes :attribute
71
+
72
+ def add_attribute(*names, &block)
73
+ raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
74
+ @additional_attributes ||= {}
75
+ names.each do |name|
76
+ @additional_attributes[name.to_s] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
77
+ end
78
+ end
79
+ alias :add_attributes :add_attribute
70
80
 
71
81
  def get_attributes(object)
72
82
  object.class.unscoped do
73
- return object.attributes if @attributes.nil? or @attributes.length == 0
74
- Hash[@attributes.map { |name, value| [name.to_s, value.call(object) ] }]
83
+ res = @attributes.nil? || @attributes.length == 0 ? object.attributes :
84
+ Hash[@attributes.map { |name, value| [name.to_s, value.call(object) ] }]
85
+ @additional_attributes.each { |name, value| res[name.to_s] = value.call(object) } if @additional_attributes
86
+ res
87
+ end
88
+ end
89
+
90
+ def geoloc(lat_attr, lng_attr)
91
+ add_attribute :_geoloc do |o|
92
+ { lat: o.send(lat_attr).to_f, lng: o.send(lng_attr).to_f }
93
+ end
94
+ end
95
+
96
+ def tags(*args, &block)
97
+ add_attribute :_tags do |o|
98
+ v = block_given? ? o.instance_eval(&block) : args
99
+ v.is_a?(Array) ? v : [v]
75
100
  end
76
101
  end
77
102
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Algolia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-05 00:00:00.000000000 Z
11
+ date: 2013-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -148,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  version: '0'
149
149
  requirements: []
150
150
  rubyforge_project:
151
- rubygems_version: 2.0.12
151
+ rubygems_version: 2.1.11
152
152
  signing_key:
153
153
  specification_version: 4
154
154
  summary: AlgoliaSearch integration to your favorite ORM