acts-as-taggable-hstore 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ *.log
2
+ *.sqlite3
3
+ /pkg/*
4
+ .bundle
5
+ .rvmrc
6
+ Gemfile.lock
7
+ spec/database.yml
8
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --backtrace
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+ gem 'activerecord-postgres-hstore-core', "~> 0.0.4"
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Jt Gleason
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,61 @@
1
+ = ActsAsTaggableHstore
2
+
3
+ This plugin uses the semantics from ActsAsTaggableOn but uses Hstore to implement the tags. This limits this gem to Postgres databases.
4
+
5
+ It has a generator for adding the tag column to an existing table. Then you can include the acts_as_taggable_hstore method on the class and
6
+ everything is added as you would expect.
7
+
8
+ == Installation
9
+
10
+ === Rails 3.x
11
+
12
+ To use it, add it to your Gemfile:
13
+ gem 'acts-as-taggable-hstore' , '~> 0.1.1'
14
+
15
+ ==== Post Installation
16
+
17
+ Each table needs to be modified in order for this to work. Run
18
+
19
+ 1. rails generate acts_as_taggable_hstore:migration TABLENAME
20
+ 2. rake db:migrate
21
+
22
+ == Testing
23
+
24
+ Acts as Taggable Hstore uses Rspec tests. You can run the usual rake task to test it.
25
+
26
+ rake spec
27
+
28
+ == Usage
29
+
30
+ First, run the migration for the particular table you want to be taggable. Then
31
+
32
+ class Video < ActiveRecord::Base
33
+ acts_as_taggable
34
+ end
35
+
36
+ @video = Video.new()
37
+ @video.tag_list = "starcraft 2,gameplay,mlg"
38
+ @video.save
39
+
40
+ @video.tags # => [<Tag name:"starcraft 2">,<Tag name:"gameplay">,<Tag name:"mlg">]
41
+
42
+ === Finding Tagged Objects
43
+
44
+ Acts as Taggable On uses scopes to create associations for tags. It should work with will_paginate as well:
45
+
46
+ Video.tagged_vith("starcraft 2")
47
+
48
+ #Find a video with all matching tags
49
+
50
+ Video.tagged_with(["starcraft 2","mlg"], :match_all => true)
51
+
52
+ #Find a video with any matching tags
53
+ Video.tagged_with(["starcraft 2","mlg"], :any => true)
54
+
55
+ #Find videos with no matching tags
56
+ Video.tagged_with(["starcraft 2","mlg"], :exclude => true)
57
+
58
+ == Help
59
+
60
+ == License
61
+ Copyright @ 2012 Jt Gleason MIT License
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.setup :default, :development
4
+
5
+ desc 'Default: run specs'
6
+ task :default => :spec
7
+
8
+ require 'rspec/core/rake_task'
9
+ RSpec::Core::RakeTask.new do |t|
10
+ t.pattern = "spec/**/*_spec.rb"
11
+ end
12
+
13
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,28 @@
1
+ $:.push File.dirname(__FILE__) + '/lib'
2
+ require 'acts-as-taggable-hstore/version'
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = %q{acts-as-taggable-hstore}
6
+ gem.authors = ["Jt Gleason"]
7
+ gem.date = %q{2012-02-29}
8
+ gem.description = %q{With ActsAsTaggableHstore, you can tag a single model that uses postgres hstore type}
9
+ gem.summary = "Basic postgres hstore tagging for Rails."
10
+ gem.email = %q{jt@twitch.tv}
11
+ gem.homepage = ''
12
+
13
+ gem.add_runtime_dependency 'rails', '~> 3.0'
14
+ gem.add_runtime_dependency 'activerecord-postgres-hstore-core', "~> 0.0.4"
15
+ gem.add_development_dependency 'rspec', '~> 2.6'
16
+ gem.add_development_dependency 'ammeter', '~> 0.1.3'
17
+ gem.add_development_dependency 'pg'
18
+ gem.add_development_dependency 'guard'
19
+ gem.add_development_dependency 'guard-rspec'
20
+
21
+
22
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ gem.files = `git ls-files`.split("\n")
24
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
+ gem.name = "acts-as-taggable-hstore"
26
+ gem.require_paths = ['lib']
27
+ gem.version = ActsAsTaggableHstore::VERSION
28
+ end
@@ -0,0 +1,3 @@
1
+ module ActsAsTaggableHstore
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,36 @@
1
+ require "active_record"
2
+ require "active_record/version"
3
+ require "activerecord-postgres-hstore-core"
4
+
5
+ require "action_view"
6
+ require "digest/sha1"
7
+
8
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
9
+
10
+ module ActsAsTaggableHstore
11
+ mattr_accessor :delimiter
12
+ @@delimiter = ','
13
+
14
+ mattr_accessor :force_lowercase
15
+ @@force_lowercase = false
16
+
17
+ mattr_accessor :default_column
18
+ @@default_column = :tag_hstore
19
+
20
+ def self.glue
21
+ @@delimiter.ends_with?(" ") ? @@delimiter : "#{@@delimiter} "
22
+ end
23
+
24
+ def self.setup
25
+ yield self
26
+ end
27
+ end
28
+
29
+ require "acts_as_taggable_hstore/taggable"
30
+ require "acts_as_taggable_hstore/acts_as_taggable_hstore/core"
31
+
32
+ $LOAD_PATH.shift
33
+
34
+ if defined?(ActiveRecord::Base)
35
+ ActiveRecord::Base.extend ActsAsTaggableHstore::Taggable
36
+ end
@@ -0,0 +1,65 @@
1
+ module ActsAsTaggableHstore::Taggable
2
+ module Core
3
+ def self.included(base)
4
+ base.send :include, ActsAsTaggableHstore::Taggable::Core::InstanceMethods
5
+ base.extend ActsAsTaggableHstore::Taggable::Core::ClassMethods
6
+
7
+ # base.class_eval do
8
+ # class_attribute :hstore_column
9
+ # end
10
+ end
11
+
12
+ module ClassMethods
13
+ #allow inheritence
14
+ def acts_as_taggable_hstore_by(*args)
15
+ super(*args)
16
+ end
17
+
18
+ def tagged_with(tag_list, options= {})
19
+ empty_result = scoped(:conditions => "1 = 0")
20
+ return empty_result if tag_list.blank?
21
+
22
+ if tag_list.is_a? String
23
+ tag_list = [tag_list]
24
+ end
25
+
26
+ connect_with = " AND "
27
+ if options.delete(:any)
28
+ connect_with = " OR "
29
+ end
30
+
31
+ conditions = []
32
+ tag_list.each do |tag_name|
33
+ conditions << self.tag_hstore_column.to_s + " ? '#{tag_name}' "
34
+ end
35
+
36
+ return where(conditions.join(connect_with))
37
+
38
+ end
39
+
40
+ end
41
+
42
+ module InstanceMethods
43
+
44
+ def tag_list
45
+ hstore_result = self.send(self.class.tag_hstore_column)
46
+
47
+ if hstore_result.nil?
48
+ return []
49
+ end
50
+
51
+ return hstore_result.keys.join(ActsAsTaggableHstore.glue)
52
+ end
53
+
54
+ def tag_list=(tags)
55
+ prep_hstore = tags.split(ActsAsTaggableHstore.delimiter).map(&:strip).inject({}) { |h,k| h[k] = nil; h }
56
+ self.send(self.class.tag_hstore_column.to_s + "=", prep_hstore)
57
+ end
58
+
59
+ def tags
60
+ tag_hstore.keys
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,23 @@
1
+ module ActsAsTaggableHstore
2
+ module Taggable
3
+ def taggable?
4
+ false
5
+ end
6
+ def acts_as_taggable_hstore
7
+ acts_as_taggable_hstore_by ActsAsTaggableHstore.default_column
8
+ end
9
+
10
+ def acts_as_taggable_hstore_by(*column_name)
11
+
12
+ class_attribute :tag_hstore_column
13
+ self.tag_hstore_column = column_name.first
14
+
15
+ class_eval do
16
+ def self.taggable?
17
+ true
18
+ end
19
+ include ActsAsTaggableHstore::Taggable::Core
20
+ end
21
+ end
22
+ end
23
+ end
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'acts-as-taggable-hstore'
@@ -0,0 +1,48 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Acts As Taggable Hstore" do
4
+ before(:each) do
5
+ clean_database!
6
+ end
7
+
8
+ it "should provide a class method 'taggable?' that is false for untaggable models" do
9
+ UntaggableModel.should_not be_taggable
10
+ end
11
+
12
+ describe "Taggable Method Generation" do
13
+ before(:each) do
14
+ clean_database!
15
+ @taggable = TaggableModel.new(:name => "Bob Jones")
16
+ end
17
+
18
+ it "should respond 'true' to taggable?" do
19
+ @taggable.class.should be_taggable
20
+ end
21
+
22
+ it "should generate a tag_list accessor/setter for each tag type" do
23
+ @taggable.should respond_to(:tag_list)
24
+ @taggable.should respond_to(:tag_list=)
25
+ end
26
+
27
+ it "should have a hstore sql type" do
28
+ @taggable.class.columns_hash[@taggable.class.tag_hstore_column.to_s].sql_type.should == "hstore"
29
+ end
30
+
31
+ it "should make strings have valid_hstore" do
32
+ "bob".valid_hstore?.should == false
33
+ end
34
+
35
+ it "should have a hstore column type" do
36
+ @taggable.class.columns_hash[@taggable.class.tag_hstore_column.to_s].type.should == :hstore
37
+ end
38
+
39
+ end
40
+
41
+ describe "Reloading" do
42
+ it "should save a model instantiated by Model.find" do
43
+ taggable = TaggableModel.create!(:name => "Taggable")
44
+ found_taggable = TaggableModel.find(taggable.id)
45
+ found_taggable.save
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,66 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Taggable" do
4
+ before(:each) do
5
+ clean_database!
6
+ @taggable = TaggableModel.new(:name => "Bob Jones")
7
+ @taggables = [@taggable, TaggableModel.new(:name => "John Doe")]
8
+ end
9
+
10
+ it "should return [] right after new" do
11
+ blank_taggable = TaggableModel.new(:name => "Bob Jones")
12
+ blank_taggable.tag_list.should == []
13
+ end
14
+
15
+ it "should return [] right after create" do
16
+ blank_taggable = TaggableModel.create(:name => "Bob Jones")
17
+ blank_taggable.tag_list.should == []
18
+ end
19
+
20
+ it "should be able to remove tags through list alone" do
21
+ @taggable.tag_list = "ruby, rails, css"
22
+ @taggable.save
23
+
24
+ @taggable.reload
25
+ @taggable.should have(3).tags
26
+ @taggable.tag_list = "ruby, rails"
27
+ @taggable.save
28
+ @taggable.reload
29
+ @taggable.should have(2).tags
30
+ end
31
+
32
+ it "should be able to find by tag" do
33
+ @taggable.tag_list = "ruby, rails, css"
34
+ @taggable.save
35
+
36
+ TaggableModel.tagged_with("ruby").first.should == @taggable
37
+ end
38
+
39
+ it "should not return read-only records" do
40
+ TaggableModel.create(:name => "Bob", :tag_list => "ruby, rails, css")
41
+ TaggableModel.tagged_with("ruby").first.should_not be_readonly
42
+ end
43
+
44
+ it "should be able to find tagged with only the matching tags" do
45
+ bob = TaggableModel.create(:name => "Bob", :tag_list => "lazy, happier")
46
+ frank = TaggableModel.create(:name => "Frank", :tag_list => "fitter, happier, inefficient")
47
+ steve = TaggableModel.create(:name => 'Steve', :tag_list => "fitter, happier")
48
+
49
+ TaggableModel.tagged_with(["fitter", "happier"]).to_a.sort.should == [steve,frank].sort
50
+ end
51
+
52
+ # it "should be able to find tagged with some excluded tags" do
53
+ # bob = TaggableModel.create(:name => "Bob", :tag_list => "happier, lazy")
54
+ # frank = TaggableModel.create(:name => "Frank", :tag_list => "happier")
55
+ # steve = TaggableModel.create(:name => 'Steve', :tag_list => "happier")
56
+
57
+ # TaggableModel.tagged_with("lazy", :exclude => true).to_a.should == [frank, steve]
58
+ # end
59
+
60
+ it "should return an empty scope for empty tags" do
61
+ TaggableModel.tagged_with('').should == []
62
+ TaggableModel.tagged_with(' ').should == []
63
+ TaggableModel.tagged_with(nil).should == []
64
+ TaggableModel.tagged_with([]).should == []
65
+ end
66
+ end
@@ -0,0 +1,7 @@
1
+ postgresql:
2
+ adapter: postgresql
3
+ hostname: localhost
4
+ username: postgres
5
+ password:
6
+ database: acts_as_taggable_hstore
7
+ encoding: utf8
data/spec/models.rb ADDED
@@ -0,0 +1,6 @@
1
+ class TaggableModel < ActiveRecord::Base
2
+ acts_as_taggable_hstore
3
+ end
4
+
5
+ class UntaggableModel < ActiveRecord::Base
6
+ end
data/spec/schema.rb ADDED
@@ -0,0 +1,16 @@
1
+ ActiveRecord::Schema.define :version => 0 do
2
+
3
+ create_table :taggable_models, :force => true do |t|
4
+ t.column :name, :string
5
+ t.column :type, :string
6
+ end
7
+
8
+ add_column :taggable_models, :tag_hstore, :hstore
9
+
10
+ execute "create index concurrently idx_tag_model_tag_hstore on taggable_models using gist (tag_hstore)"
11
+
12
+ create_table :untaggable_models, :force => true do |t|
13
+ t.column :name, :string
14
+ end
15
+
16
+ end
@@ -0,0 +1,60 @@
1
+ $LOAD_PATH << "." unless $LOAD_PATH.include?(".")
2
+ require 'logger'
3
+
4
+ begin
5
+ require "rubygems"
6
+ require "bundler"
7
+ if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.5")
8
+ raise RuntimeError, "Your bundler version is too old." +
9
+ "Run `gem install bundler` to upgrade."
10
+ end
11
+
12
+ # Set up load paths for all bundled gems
13
+ Bundler.setup
14
+ rescue Bundler::GemNotFound
15
+ raise RuntimeError, "Bundler couldn't find some gems." +
16
+ "Did you run \`bundlee install\`?"
17
+ end
18
+
19
+ Bundler.require
20
+ require File.expand_path('../../lib/acts-as-taggable-hstore', __FILE__)
21
+ #require "activerecord-postgres-hstore-core"
22
+ db_name = 'postgresql'
23
+ database_yml = File.expand_path('../database.yml', __FILE__)
24
+
25
+ if File.exists?(database_yml)
26
+ active_record_configuration = YAML.load_file(database_yml)
27
+
28
+ ActiveRecord::Base.configurations = active_record_configuration
29
+ config = ActiveRecord::Base.configurations[db_name]
30
+
31
+ begin
32
+ ActiveRecord::Base.establish_connection(db_name)
33
+ ActiveRecord::Base.connection
34
+ rescue
35
+ ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
36
+ ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => 'utf8'))
37
+ end
38
+
39
+ ActiveRecord::Base.establish_connection(config)
40
+ ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), "debug.log"))
41
+ ActiveRecord::Base.default_timezone = :utc
42
+
43
+ ActiveRecord::Base.silence do
44
+ ActiveRecord::Migration.verbose = false
45
+
46
+ load(File.dirname(__FILE__) + '/schema.rb')
47
+ load(File.dirname(__FILE__) + '/models.rb')
48
+ end
49
+ else
50
+ raise "Please create #{database_yml} first to configure your database. Take a look at: #{database_yml}.sample"
51
+ end
52
+
53
+ def clean_database!
54
+ models = [TaggableModel, UntaggableModel]
55
+ models.each do |model|
56
+ ActiveRecord::Base.connection.execute "DELETE FROM #{model.table_name}"
57
+ end
58
+ end
59
+
60
+ clean_database!
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts-as-taggable-hstore
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Jt Gleason
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-02-29 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rails
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 3
31
+ - 0
32
+ version: "3.0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: activerecord-postgres-hstore-core
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 23
44
+ segments:
45
+ - 0
46
+ - 0
47
+ - 4
48
+ version: 0.0.4
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rspec
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 15
60
+ segments:
61
+ - 2
62
+ - 6
63
+ version: "2.6"
64
+ type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: ammeter
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 29
75
+ segments:
76
+ - 0
77
+ - 1
78
+ - 3
79
+ version: 0.1.3
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: pg
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ type: :development
95
+ version_requirements: *id005
96
+ - !ruby/object:Gem::Dependency
97
+ name: guard
98
+ prerelease: false
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ type: :development
109
+ version_requirements: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ name: guard-rspec
112
+ prerelease: false
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 3
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ type: :development
123
+ version_requirements: *id007
124
+ description: With ActsAsTaggableHstore, you can tag a single model that uses postgres hstore type
125
+ email: jt@twitch.tv
126
+ executables: []
127
+
128
+ extensions: []
129
+
130
+ extra_rdoc_files: []
131
+
132
+ files:
133
+ - .gitignore
134
+ - .rspec
135
+ - Gemfile
136
+ - LICENSE
137
+ - README.rdoc
138
+ - Rakefile
139
+ - acts-as-taggable-hstore.gemspec
140
+ - lib/acts-as-taggable-hstore.rb
141
+ - lib/acts-as-taggable-hstore/version.rb
142
+ - lib/acts_as_taggable_hstore/acts_as_taggable_hstore/core.rb
143
+ - lib/acts_as_taggable_hstore/taggable.rb
144
+ - rails/init.rb
145
+ - spec/acts_as_taggable_hstore/acts_as_taggable_hstore_spec.rb
146
+ - spec/acts_as_taggable_hstore/taggable_spec.rb
147
+ - spec/database.yml.sample
148
+ - spec/models.rb
149
+ - spec/schema.rb
150
+ - spec/spec_helper.rb
151
+ homepage: ""
152
+ licenses: []
153
+
154
+ post_install_message:
155
+ rdoc_options: []
156
+
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ hash: 3
165
+ segments:
166
+ - 0
167
+ version: "0"
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ hash: 3
174
+ segments:
175
+ - 0
176
+ version: "0"
177
+ requirements: []
178
+
179
+ rubyforge_project:
180
+ rubygems_version: 1.8.6
181
+ signing_key:
182
+ specification_version: 3
183
+ summary: Basic postgres hstore tagging for Rails.
184
+ test_files:
185
+ - spec/acts_as_taggable_hstore/acts_as_taggable_hstore_spec.rb
186
+ - spec/acts_as_taggable_hstore/taggable_spec.rb
187
+ - spec/database.yml.sample
188
+ - spec/models.rb
189
+ - spec/schema.rb
190
+ - spec/spec_helper.rb