bloodhound 0.2 → 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.
data/README.markdown CHANGED
@@ -1,104 +1,9 @@
1
1
  Bloodhound
2
2
  ==========
3
3
 
4
- Simple key:value string conversion to hashes, with type casting.
4
+ Simple scoping of ActiveRecord models based on "key:value" strings.
5
5
 
6
- require "bloodhound"
7
-
8
- hound = Bloodhound.new
9
- hound.add_search_field(:name, :string)
10
- hound.add_search_field(:age, :integer)
11
- hound.add_search_field(:active, :boolean)
12
-
13
- attributes = hound.attributes_from('name:"John Doe" age:22 active:yes')
14
- attributes #=> { "name" => "John Doe", "age" => 22, "active" => true }
15
-
16
- The available types are `:string` (the default), `:integer`, `:float`, `:date`,
17
- `:time`, and `:boolean`. Any other type is treated as a string.
18
-
19
- It matches several values as boolean values. 'yes', 'y', and 'true' are all
20
- mapped to `true`, while 'no', 'n', and 'false' are mapped to `false`.
21
-
22
- You can customize the hash key returned:
23
-
24
- hound.add_search_field(:user, :string, "users.name")
25
-
26
- attributes = hound.attributes_from('user:"John Doe"')
27
- attributes #=> { "users.name" => "John Doe" }
28
-
29
- It can match dates and times, using [Chronic](http://github.com/mojombo/chronic),
30
- so this is valid:
31
-
32
- hound.add_search_field(:added, :date, "added_on")
33
-
34
- attributes = hound.attributes_from("added:today")
35
- attributes #=> { "added_on" => Date.today }
36
-
37
- Finally, you can also provide processing rules for the parsed value, by passing
38
- a block:
39
-
40
- hound.add_search_field(:inactive, :boolean, "active") {|value| not value }
41
-
42
- attributes = hound.attributes_from("inactive:true")
43
- attributes #=> { "active" => false }
44
-
45
- ActiveRecord integration
46
- ------------------------
47
-
48
- require "bloodhound/active_record"
49
-
50
- class Video < ActiveRecord::Base
51
- extend Bloodhound::Searchable
52
- named_scope :search, lambda {|query| bloodhound.attributes_from(query) }
53
- end
54
-
55
- The ActiveRecord implementation will automatically define search fields for all
56
- non-id, non-timestamp columns (ie, all except for `id` and `foo_id`).
57
-
58
- You can, of course, add those in manually if you need them.
59
-
60
- The syntax for defining attributes is a bit more rails-esque:
61
-
62
- class Video < ActiveRecord::Base
63
- extend Bloodhound::Searchable
64
- search_field :user, :type => :string, :attribute => "users.login"
65
- end
66
-
67
- The return value of `ActiveRecord::Bloodhound#attributes_from` changes a bit,
68
- and returns a hash directly compatible with ActiveRecord:
69
-
70
- attributes = Video.bloodhound.attributes_from("user:foca")
71
- attributes #=> { :conditions => { "users.login" => "foca" } }
72
-
73
- Any extra options you pass to `search_field` are added into the finder options:
74
-
75
- class Video < ActiveRecord::Base
76
- extend Bloodhound::Searchable
77
- search_field :user, :attribute => "users.login", :joins => :user
78
-
79
- belongs_to :user
80
- end
81
-
82
- attributes = Video.bloodhound.attributes_from("user:foca")
83
- attributes #=> { :joins => :user,
84
- :conditions => { "users.login" => "foca" } }
85
-
86
- Install it
87
- ----------
88
-
89
- gem install bloodhound
90
-
91
- For the active record interface:
92
-
93
- config.gem "bloodhound", :lib => "bloodhound/active_record"
94
-
95
- Known problems
96
- --------------
97
-
98
- * Chronic is a bit… weird matching some stuff, specially regarding time zones.
99
- * The ActiveRecord 'extra options' won't merge. So if you define two search
100
- fields with ':joins => :an_association', only the latter will remain. This
101
- will be fixed in a future release.
6
+ More documentation later.
102
7
 
103
8
  License
104
9
  -------
data/bloodhound.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "bloodhound"
3
- s.version = "0.2"
4
- s.date = "2010-02-01"
3
+ s.version = "0.2.1"
4
+ s.date = "2010-02-04"
5
5
 
6
6
  s.description = "Convert strings like 'user:foca age:23' to { 'user' => 'foca' => 'age' => 23 }"
7
7
  s.summary = "Convert strings like 'user:foca age:23' to { 'user' => 'foca' => 'age' => 23 }"
data/lib/bloodhound.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "chronic"
2
2
 
3
3
  class Bloodhound
4
- VERSION = "0.2"
4
+ VERSION = "0.2.1"
5
5
  ATTRIBUTE_RE = /\s*(?:(?:(\S+):)?(?:"([^"]*)"|'([^']*)'|(\S+)))\s*/.freeze
6
6
 
7
7
  def initialize
@@ -74,7 +74,7 @@ class Bloodhound
74
74
  private :attribute_search_for
75
75
 
76
76
  def keyword_search_for(model, keyword, value)
77
- model.scoped(@keywords[keyword].call(value))
77
+ model.scoped(@keywords[keyword.to_sym].call(value))
78
78
  end
79
79
  private :keyword_search_for
80
80
 
@@ -124,7 +124,7 @@ class Bloodhound
124
124
  private :tokenize
125
125
 
126
126
  def has_keyword?(name)
127
- @keywords.has_key?(name)
127
+ @keywords.has_key?(name.to_sym)
128
128
  end
129
129
 
130
130
  module Searchable
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bloodhound
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Nicol\xC3\xA1s Sanguinetti"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-01 00:00:00 -02:00
12
+ date: 2010-02-04 00:00:00 -02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15