pose 0.0.3 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,7 @@ class PoseGenerator < Rails::Generators::Base
6
6
  source_root File.expand_path('../templates', __FILE__)
7
7
 
8
8
  def create_migration_file
9
- migration_template 'migration.rb', 'db/migrate/pose.rb'
9
+ migration_template 'migration.rb', 'db/migrate/add_pose_tables.rb'
10
10
  end
11
11
 
12
12
  def self.next_migration_number(path)
@@ -1,4 +1,5 @@
1
- class PoseMigrations < ActiveRecord::Migration
1
+ class AddPoseTables < ActiveRecord::Migration
2
+
2
3
  def self.up
3
4
  create_table "pose_assignments" do |t|
4
5
  t.integer "pose_word_id", :null => false
@@ -6,14 +7,14 @@ class PoseMigrations < ActiveRecord::Migration
6
7
  t.string "posable_type", :limit => 40, :null => false
7
8
  end
8
9
 
9
- add_index "pose_assignments", :word_id
10
- add_index "pose_assignments", :wordable_id
10
+ add_index "pose_assignments", :pose_word_id
11
+ add_index "pose_assignments", :posable_id
11
12
 
12
13
  create_table "pose_words" do |t|
13
14
  t.string "text", :limit => 80, :null => false
14
15
  end
15
16
 
16
- add_index "words", :text
17
+ add_index "pose_words", :text
17
18
  end
18
19
 
19
20
  def self.down
@@ -0,0 +1,11 @@
1
+ require "rails/railtie"
2
+
3
+ module Pose
4
+
5
+ class Railtie < Rails::Railtie
6
+ rake_tasks do
7
+ load "tasks/pose_tasks.rake"
8
+ end
9
+ end
10
+
11
+ end
data/lib/pose/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pose
2
- VERSION = "0.0.3"
2
+ VERSION = "0.2"
3
3
  end
data/lib/pose.rb CHANGED
@@ -1,3 +1,8 @@
1
+ # Note (KG): Need to include the rake DSL here to prevent deprecation warnings in the Rakefile.
2
+ require 'rake'
3
+ include Rake::DSL
4
+
5
+
1
6
  # Polymorphic search for ActiveRecord objects.
2
7
  module Pose
3
8
  extend ActiveSupport::Concern
@@ -7,7 +12,7 @@ module Pose
7
12
  CONFIGURATION = { :search_in_tests => false }
8
13
 
9
14
  included do
10
- has_many :pose_assignments, :as => :posable
15
+ has_many :pose_assignments, :as => :posable, :dependent => :delete_all
11
16
  has_many :pose_words, :through => :pose_assignments
12
17
 
13
18
  after_save :update_pose_index
@@ -32,7 +37,7 @@ module Pose
32
37
 
33
38
  # Removes this objects from the search index.
34
39
  def delete_pose_index
35
- self.words.clear if perform_search?
40
+ self.pose_words.clear if perform_search?
36
41
  end
37
42
 
38
43
  # Helper method.
@@ -100,7 +105,8 @@ module Pose
100
105
  def root_word raw_word
101
106
  result = []
102
107
  raw_word_copy = raw_word[0..-1]
103
- raw_word_copy.gsub! /[()*<>'",;]/, ' '
108
+ raw_word_copy.gsub! '%20', ' '
109
+ raw_word_copy.gsub! /[()*<>'",;\?\-\=&%#]/, ' '
104
110
  raw_word_copy.gsub! /\s+/, ' '
105
111
  raw_word_copy.split(' ').each do |word|
106
112
  if Pose.is_url?(word)
@@ -120,11 +126,12 @@ module Pose
120
126
  # Returns all objects matching the given query.
121
127
  #
122
128
  # @param [String] query
123
- # @param [Array<Class>] classes
129
+ # @param (Class|[Array<Class>]) classes
130
+ # @param [Number?] limit Optional limit.
124
131
  #
125
132
  # @return [Hash<Class, ActiveRecord::Relation>]
126
- def search query, classes
127
-
133
+ def search query, classes, limit = nil
134
+
128
135
  # Turn 'classes' into an array.
129
136
  classes = [classes].flatten
130
137
  classes_names = classes.map &:name
@@ -134,13 +141,14 @@ module Pose
134
141
  query.split(' ').each do |query_word|
135
142
  current_word_classes_and_ids = {}
136
143
  classes.each { |clazz| current_word_classes_and_ids[clazz.name] = [] }
137
- PoseAssignment.joins(:pose_word) \
138
- .where(:pose_words => {:text.matches => "#{query_word}%"},
139
- :posable_type => classes_names) \
140
- .each do |pose_assignment|
144
+ query = PoseAssignment.joins(:pose_word) \
145
+ .where(:pose_words => {:text.matches => "#{query_word}%"},
146
+ :posable_type => classes_names)
147
+ query = query.limit(limit) if limit
148
+ query.each do |pose_assignment|
141
149
  current_word_classes_and_ids[pose_assignment.posable_type] << pose_assignment.posable_id
142
150
  end
143
-
151
+
144
152
  current_word_classes_and_ids.each do |class_name, ids|
145
153
  if result_classes_and_ids.has_key? class_name
146
154
  result_classes_and_ids[class_name] = result_classes_and_ids[class_name] & ids
@@ -162,6 +170,12 @@ module Pose
162
170
  end
163
171
  end
164
172
  end
165
- end
173
+ end
166
174
  end
167
175
  end
176
+
177
+
178
+ require 'pose/posifier'
179
+ require "pose/railtie" if defined? Rails
180
+ require 'pose_assignment'
181
+ require 'pose_word'
@@ -2,4 +2,28 @@
2
2
  class PoseAssignment < ActiveRecord::Base
3
3
  belongs_to :pose_word
4
4
  belongs_to :posable, :polymorphic => true
5
- end
5
+
6
+ # Removes all PoseAssignments for the given class.
7
+ def self.cleanup_class_index clazz
8
+ PoseAssignment.delete_all(['posable_type=?', clazz.name])
9
+ end
10
+
11
+ # Removes all PoseAssignments that aren't used anymore.
12
+ def self.cleanup_orphaned_pose_assignments
13
+ PoseAssignment.find_each(:include => [:posable, :pose_word], :batch_size => 5000) do |assignment|
14
+
15
+ # Delete the assignment if the posable object no longer exists.
16
+ if assignment.posable.nil?
17
+ puts "deleting assignment '#{assignment.id}' because the posable object no longer exists."
18
+ assignment.delete
19
+ next
20
+ end
21
+
22
+ # Delete the assignment if the PoseWord for it no longer exists.
23
+ if assignment.pose_word.nil?
24
+ puts "deleting assignment '#{assignment.id}' because its word no longer exists."
25
+ assignment.delete
26
+ end
27
+ end
28
+ end
29
+ end
data/lib/pose_word.rb CHANGED
@@ -1,4 +1,13 @@
1
1
  # A single word in the search index.
2
2
  class PoseWord < ActiveRecord::Base
3
3
  has_many :pose_assignments
4
- end
4
+
5
+ def self.remove_unused_words
6
+ PoseWord.find_each(:include => [:pose_assignments], :batch_size => 5000) do |pose_word|
7
+ if pose_word.pose_assignments.size == 0
8
+ pose_word.delete
9
+ next
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,18 +1,21 @@
1
+ include Rake::DSL
1
2
  namespace :pose do
2
3
 
3
4
  desc "Deletes and recreates the search index for all instances of the given class."
4
- task :reindex_all, [:class_name] => :environment do
5
- clazz = Kernel.const_get class_name
5
+ task :reindex_all, [:class_name] => [:environment] do |t, args|
6
+ clazz = Kernel.const_get args.class_name
7
+ progress_bar = ProgressBar.new " reindexing", clazz.count
6
8
  clazz.find_each do |instance|
7
9
  instance.update_pose_words
10
+ progress_bar.inc
8
11
  end
12
+ progress_bar.finish
9
13
  end
10
14
 
11
- desc "Removes the search index for all instances of the given classes"
12
- task :remove_from_index, [:class_name] => :environment do
13
- clazz = Kernel.const_get class_name
14
- clazz.find_each do |instance|
15
- instance.delete_pose_words
16
- end
15
+ desc "Removes the search index for all instances of the given classes."
16
+ task :remove_from_index, [:class_name] => :environment do |t, args|
17
+ clazz = Kernel.const_get args.class_name
18
+ PoseAssignment.cleanup_class_index clazz
19
+ puts "Search index for class #{clazz.name} deleted.\n\n"
17
20
  end
18
- end
21
+ end
data/spec/factories.rb ADDED
@@ -0,0 +1,12 @@
1
+ Factory.define :pose_word do |word|
2
+ word.text { Faker::Lorem.words(1).first }
3
+ end
4
+
5
+ Factory.define :pose_assignment do |assignment|
6
+ assignment.association :pose_word
7
+ assignment.association :posable, :factory => :posable_one
8
+ end
9
+
10
+ Factory.define :posable_one do |posable|
11
+ posable.text { Faker::Lorem.words(3).join ' ' }
12
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe PoseAssignment do
4
+
5
+ before :each do
6
+ PoseAssignment.delete_all
7
+ end
8
+
9
+ describe "cleanup_class_index" do
10
+
11
+ before :each do
12
+ Factory :pose_assignment, :posable_id => 1, :posable_type => 'PosableOne'
13
+ Factory :pose_assignment, :posable_id => 2, :posable_type => 'PosableTwo'
14
+ PoseAssignment.cleanup_class_index PosableOne
15
+ end
16
+
17
+ it "deletes all PoseAssignments for the given class" do
18
+ PoseAssignment.where(:posable_type => 'PosableOne').should have(0).items
19
+ end
20
+
21
+ it "doesn't delete PoseAssignments for other classes" do
22
+ PoseAssignment.where(:posable_type => 'PosableTwo').should have(1).items
23
+ end
24
+ end
25
+
26
+ describe "cleanup_orphaned_pose_assignments" do
27
+
28
+ it "deletes the assignment if the posable object doesn't exist" do
29
+ Factory :pose_assignment, :posable_id => 2, :posable_type => 'PosableOne'
30
+ PoseAssignment.count.should > 0
31
+ PoseAssignment.cleanup_orphaned_pose_assignments
32
+ PoseAssignment.should have(0).items
33
+ end
34
+
35
+ it "deletes the assignment if the pose_word doesn't exist" do
36
+ assignment = Factory :pose_assignment, :pose_word => nil, :pose_word_id => 27
37
+ PoseAssignment.cleanup_orphaned_pose_assignments
38
+ PoseAssignment.find_by_id(assignment.id).should be_nil
39
+ end
40
+
41
+ it "doesn't delete the assignment if it is still used" do
42
+ assignment = Factory :pose_assignment
43
+ PoseAssignment.cleanup_orphaned_pose_assignments
44
+ PoseAssignment.find_by_id(assignment.id).should_not be_nil
45
+ end
46
+ end
47
+
48
+ end
data/spec/pose_spec.rb CHANGED
@@ -1,57 +1,11 @@
1
+ # encoding: utf-8
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
4
6
 
5
- class PosableOne < ActiveRecord::Base
6
- posify { [text] }
7
- end
8
-
9
- class PosableTwo < ActiveRecord::Base
10
- posify { [text] }
11
- end
12
-
13
- def setup_db
14
- ActiveRecord::Schema.define(:version => 1) do
15
-
16
- create_table 'posable_ones' do |t|
17
- t.string 'text'
18
- end
19
-
20
- create_table 'posable_twos' do |t|
21
- t.string 'text'
22
- end
23
-
24
- create_table "pose_assignments" do |t|
25
- t.integer "pose_word_id", :null => false
26
- t.integer "posable_id", :null => false
27
- t.string "posable_type", :limit => 20, :null => false
28
- end
29
-
30
- create_table "pose_words" do |t|
31
- t.string "text", :limit => 80, :null => false
32
- end
33
- end
34
- end
35
-
36
- def teardown_db
37
- ActiveRecord::Base.connection.tables.each do |table|
38
- ActiveRecord::Base.connection.drop_table(table)
39
- end
40
- end
41
-
42
-
43
7
  describe Pose do
44
8
  subject { PosableOne.new }
45
-
46
- before :all do
47
- setup_db
48
- Pose::CONFIGURATION[:search_in_tests] = true
49
- end
50
-
51
- after :all do
52
- teardown_db
53
- Pose::CONFIGURATION[:search_in_tests] = false
54
- end
55
9
 
56
10
  before :each do
57
11
  PosableOne.delete_all
@@ -181,6 +135,69 @@ describe Pose do
181
135
  end
182
136
  end
183
137
 
138
+
139
+ describe 'root_word' do
140
+
141
+ it 'converts words into singular' do
142
+ Pose.root_word('bars').should eql(['bar'])
143
+ end
144
+
145
+ it 'removes special characters' do
146
+ Pose.root_word('(bar').should eql(['bar'])
147
+ Pose.root_word('bar)').should eql(['bar'])
148
+ Pose.root_word('(bar)').should eql(['bar'])
149
+ Pose.root_word('>foo').should eql(['foo'])
150
+ Pose.root_word('<foo').should eql(['foo'])
151
+ Pose.root_word('"foo"').should eql(['foo'])
152
+ Pose.root_word('"foo').should eql(['foo'])
153
+ Pose.root_word("'foo'").should eql(['foo'])
154
+ Pose.root_word("'foo's").should eql(['foo'])
155
+ Pose.root_word("foo?").should eql(['foo'])
156
+ Pose.root_word("foo!").should eql(['foo'])
157
+ Pose.root_word("foo/bar").should eql(['foo', 'bar'])
158
+ Pose.root_word("foo-bar").should eql(['foo', 'bar'])
159
+ Pose.root_word("foo--bar").should eql(['foo', 'bar'])
160
+ Pose.root_word("foo.bar").should eql(['foo', 'bar'])
161
+ end
162
+
163
+ it 'removes umlauts' do
164
+ Pose.root_word('fünf').should eql(['funf'])
165
+ end
166
+
167
+ it 'splits up numbers' do
168
+ Pose.root_word('11.2.2011').should eql(['11', '2', '2011'])
169
+ Pose.root_word('11-2-2011').should eql(['11', '2', '2011'])
170
+ Pose.root_word('30:4-5').should eql(['30', '4', '5'])
171
+ end
172
+
173
+ it 'converts into lowercase' do
174
+ Pose.root_word('London').should eql(['london'])
175
+ end
176
+
177
+ it "stores single-letter words" do
178
+ Pose.root_word('a b').should eql(['a', 'b'])
179
+ end
180
+
181
+ it "does't encode external URLs" do
182
+ Pose.root_word('http://web.com').should eql(['http', 'web', 'com'])
183
+ end
184
+
185
+ it "doesn't store empty words" do
186
+ Pose.root_word(' one two ').should eql(['one', 'two'])
187
+ end
188
+
189
+ it "removes duplicates" do
190
+ Pose.root_word('one_one').should eql(['one'])
191
+ Pose.root_word('one one').should eql(['one'])
192
+ end
193
+
194
+ it "splits up complex URLs" do
195
+ Pose.root_word('books?id=p7uyWPcVGZsC&dq=closure%20definitive%20guide&pg=PP1#v=onepage&q&f=false').should eql([
196
+ "book", "id", "p7uywpcvgzsc", "dq", "closure", "definitive", "guide", "pg", "pp1", "v", "onepage", "q", "f", "false"])
197
+ end
198
+ end
199
+
200
+
184
201
  describe 'search' do
185
202
 
186
203
  it 'works' do
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe PoseWord do
4
+
5
+ before :all do
6
+ PoseWord.delete_all
7
+ end
8
+
9
+ describe 'remove_unused_words' do
10
+
11
+ it 'removes unused words' do
12
+ Factory :pose_word
13
+ PoseWord.remove_unused_words
14
+ PoseWord.count.should == 0
15
+ end
16
+
17
+ it "doesn't remove used words" do
18
+ snippet = Factory :posable_one
19
+ PoseWord.remove_unused_words
20
+ PoseWord.count.should > 0
21
+ end
22
+ end
23
+ end
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,9 @@ require 'pose_assignment.rb'
11
11
  require "pose/posifier.rb"
12
12
  require 'active_support/core_ext/string'
13
13
  require 'meta_where'
14
+ require 'faker'
15
+ require 'factory_girl'
16
+ FactoryGirl.find_definitions
14
17
 
15
18
  # Configure Rails Environment
16
19
  ENV["RAILS_ENV"] = "test"
@@ -21,7 +24,6 @@ Rails = Hashie::Mash.new({:env => 'test'})
21
24
 
22
25
 
23
26
  # Load support files
24
- #Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
25
27
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
26
28
  #Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
27
29
 
@@ -40,6 +42,15 @@ RSpec.configure do |config|
40
42
  # examples within a transaction, remove the following line or assign false
41
43
  # instead of true.
42
44
  # config.use_transactional_fixtures = true
45
+
46
+ config.before :suite do
47
+ setup_db
48
+ Pose::CONFIGURATION[:search_in_tests] = true
49
+ end
50
+
51
+ config.after :suite do
52
+ teardown_db
53
+ end
43
54
  end
44
55
 
45
56
  # Verifies that a taggable object has the given tags.
@@ -58,3 +69,41 @@ RSpec::Matchers.define :have_pose_words do |expected|
58
69
  "expected that subject would have pose words [#{expected.join ', '}], but it has [#{texts.join ', '}]"
59
70
  end
60
71
  end
72
+
73
+
74
+ class PosableOne < ActiveRecord::Base
75
+ posify { text }
76
+ end
77
+
78
+ class PosableTwo < ActiveRecord::Base
79
+ posify { text }
80
+ end
81
+
82
+ def setup_db
83
+ ActiveRecord::Schema.define(:version => 1) do
84
+
85
+ create_table 'posable_ones' do |t|
86
+ t.string 'text'
87
+ end
88
+
89
+ create_table 'posable_twos' do |t|
90
+ t.string 'text'
91
+ end
92
+
93
+ create_table "pose_assignments" do |t|
94
+ t.integer "pose_word_id", :null => false
95
+ t.integer "posable_id", :null => false
96
+ t.string "posable_type", :limit => 20, :null => false
97
+ end
98
+
99
+ create_table "pose_words" do |t|
100
+ t.string "text", :limit => 80, :null => false
101
+ end
102
+ end
103
+ end
104
+
105
+ def teardown_db
106
+ ActiveRecord::Base.connection.tables.each do |table|
107
+ ActiveRecord::Base.connection.drop_table(table)
108
+ end
109
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-21 00:00:00.000000000Z
12
+ date: 2012-01-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70188120999860 !ruby/object:Gem::Requirement
16
+ requirement: &70285165402800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70188120999860
24
+ version_requirements: *70285165402800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: meta_where
27
- requirement: &70188120999440 !ruby/object:Gem::Requirement
27
+ requirement: &70285165402380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70188120999440
35
+ version_requirements: *70285165402380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70188120998960 !ruby/object:Gem::Requirement
38
+ requirement: &70285165401920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,43 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70188120998960
46
+ version_requirements: *70285165401920
47
+ - !ruby/object:Gem::Dependency
48
+ name: ruby-progressbar
49
+ requirement: &70285165401500 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70285165401500
58
+ - !ruby/object:Gem::Dependency
59
+ name: factory_girl
60
+ requirement: &70285165401080 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70285165401080
69
+ - !ruby/object:Gem::Dependency
70
+ name: faker
71
+ requirement: &70285165400660 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70285165400660
47
80
  - !ruby/object:Gem::Dependency
48
81
  name: hashie
49
- requirement: &70188120998500 !ruby/object:Gem::Requirement
82
+ requirement: &70285165400240 !ruby/object:Gem::Requirement
50
83
  none: false
51
84
  requirements:
52
85
  - - ! '>='
@@ -54,10 +87,10 @@ dependencies:
54
87
  version: '0'
55
88
  type: :development
56
89
  prerelease: false
57
- version_requirements: *70188120998500
90
+ version_requirements: *70285165400240
58
91
  - !ruby/object:Gem::Dependency
59
92
  name: rspec
60
- requirement: &70188120997960 !ruby/object:Gem::Requirement
93
+ requirement: &70285165399820 !ruby/object:Gem::Requirement
61
94
  none: false
62
95
  requirements:
63
96
  - - ! '>='
@@ -65,10 +98,10 @@ dependencies:
65
98
  version: '0'
66
99
  type: :development
67
100
  prerelease: false
68
- version_requirements: *70188120997960
101
+ version_requirements: *70285165399820
69
102
  - !ruby/object:Gem::Dependency
70
103
  name: sqlite3
71
- requirement: &70188120953600 !ruby/object:Gem::Requirement
104
+ requirement: &70285165399400 !ruby/object:Gem::Requirement
72
105
  none: false
73
106
  requirements:
74
107
  - - ! '>='
@@ -76,7 +109,7 @@ dependencies:
76
109
  version: '0'
77
110
  type: :development
78
111
  prerelease: false
79
- version_requirements: *70188120953600
112
+ version_requirements: *70285165399400
80
113
  description: Pose ('Polymorphic Search') allows fulltext search for ActiveRecord objects.
81
114
  email:
82
115
  - kevin.goslar@gmail.com
@@ -106,6 +139,7 @@ files:
106
139
  - lib/generators/pose_generator.rb
107
140
  - lib/generators/templates/migration.rb
108
141
  - lib/pose/posifier.rb
142
+ - lib/pose/railtie.rb
109
143
  - lib/pose/version.rb
110
144
  - lib/pose.rb
111
145
  - lib/pose_assignment.rb
@@ -114,7 +148,10 @@ files:
114
148
  - MIT-LICENSE
115
149
  - Rakefile
116
150
  - README.markdown
151
+ - spec/factories.rb
152
+ - spec/pose_assignment_spec.rb
117
153
  - spec/pose_spec.rb
154
+ - spec/pose_word_spec.rb
118
155
  - spec/spec_helper.rb
119
156
  homepage: http://github.com/kevgo/pose
120
157
  licenses: []
@@ -141,6 +178,9 @@ signing_key:
141
178
  specification_version: 3
142
179
  summary: A polymorphic, storage-system independent search engine for Ruby on Rails.
143
180
  test_files:
181
+ - spec/factories.rb
182
+ - spec/pose_assignment_spec.rb
144
183
  - spec/pose_spec.rb
184
+ - spec/pose_word_spec.rb
145
185
  - spec/spec_helper.rb
146
186
  has_rdoc: