tagtools 0.0.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/rakefile ADDED
@@ -0,0 +1,112 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/contrib/rubyforgepublisher'
8
+
9
+ PKG_NAME = 'tagtools'
10
+ PKG_VERSION = '0.0.1'
11
+ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
+
13
+ RELEASE_NAME = "REL #{PKG_VERSION}"
14
+
15
+ RUBY_FORGE_PROJECT = "tagtools"
16
+ RUBY_FORGE_USER = "vacindak"
17
+
18
+ PKG_FILES = FileList[
19
+ "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "rakefile"
20
+ ].exclude(/\bCVS\b|~$/).exclude(/database\.yml/)
21
+
22
+ desc "Default Task"
23
+ task :default => [ :test_all ]
24
+
25
+ # Run the unit tests
26
+
27
+ Rake::TestTask.new("test_all") { |t|
28
+ t.libs << "test"
29
+ t.pattern = 'test/*_test.rb'
30
+ t.verbose = true
31
+ }
32
+
33
+ # Generate the RDoc documentation
34
+
35
+ Rake::RDocTask.new { |rdoc|
36
+ rdoc.rdoc_dir = 'doc'
37
+ rdoc.title = "Tag Tools -- folksonomy system for Rails"
38
+ rdoc.options << '--line-numbers --inline-source --accessor cattr_accessor=object'
39
+ rdoc.template = "#{ENV['template']}.rb" if ENV['template']
40
+ rdoc.rdoc_files.include('README', 'CHANGELOG')
41
+ rdoc.rdoc_files.include('lib/**/*.rb')
42
+ }
43
+
44
+ # Create compressed packages
45
+
46
+ dist_dirs = [ "lib", "test" ]
47
+
48
+ spec = Gem::Specification.new do |s|
49
+ s.name = PKG_NAME
50
+ s.version = PKG_VERSION
51
+ s.summary = "Folksonomy system for Rails."
52
+ s.description = "Implements a simple system for handling tagging of items in a database."
53
+
54
+ s.files = [ "rakefile", "install.rb", "README", "CHANGELOG" ]
55
+ dist_dirs.each do |dir|
56
+ s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if do |item|
57
+ item.include?( "\.svn" ) || item.include?( "database\.yml" )
58
+ end
59
+ end
60
+
61
+ s.add_dependency('activerecord', '>= 1.11.1')
62
+
63
+ s.require_path = 'lib'
64
+ s.autorequire = 'tagtools'
65
+
66
+ s.has_rdoc = true
67
+ s.extra_rdoc_files = %w( README )
68
+ s.rdoc_options.concat ['--main', 'README']
69
+
70
+ s.author = "Bob Aman"
71
+ s.email = "bob@sporkmonger.com"
72
+ s.homepage = "http://sporkmonger.com/projects/tagtools"
73
+ s.rubyforge_project = RUBY_FORGE_PROJECT
74
+ end
75
+
76
+ Rake::GemPackageTask.new(spec) do |p|
77
+ p.gem_spec = spec
78
+ p.need_tar = true
79
+ p.need_zip = true
80
+ end
81
+
82
+ task :lines do
83
+ lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
84
+
85
+ for file_name in FileList["lib/**/*.rb"]
86
+ f = File.open(file_name)
87
+
88
+ while line = f.gets
89
+ lines += 1
90
+ next if line =~ /^\s*$/
91
+ next if line =~ /^\s*#/
92
+ codelines += 1
93
+ end
94
+ puts "L: #{sprintf("%4d", lines)}, LOC #{sprintf("%4d", codelines)} | #{file_name}"
95
+
96
+ total_lines += lines
97
+ total_codelines += codelines
98
+
99
+ lines, codelines = 0, 0
100
+ end
101
+
102
+ puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
103
+ end
104
+
105
+
106
+ # Publishing ------------------------------------------------------
107
+
108
+ desc "Publish the API documentation"
109
+ task :pdoc => [:rdoc] do
110
+ Rake::SshDirPublisher.new("vacindak@sporkmonger.com",
111
+ "public_html/projects/tagtools/api", "doc").upload
112
+ end
@@ -0,0 +1,103 @@
1
+ require 'test/unit'
2
+ require 'tagtools'
3
+ require 'yaml'
4
+
5
+ begin
6
+ ActiveRecord::Base.connection
7
+ rescue
8
+ possible_config_files = [
9
+ "./database.yml",
10
+ "./config/database.yml",
11
+ "../database.yml",
12
+ "../config/database.yml"
13
+ ]
14
+ database_config_file = nil
15
+ for file in possible_config_files
16
+ if File.exists? file
17
+ database_config_file = file
18
+ break
19
+ end
20
+ end
21
+ database_config_hash = File.open(database_config_file) do |file|
22
+ config_hash = YAML::load(file)
23
+ unless config_hash['test'].nil?
24
+ config_hash = config_hash['test']
25
+ end
26
+ config_hash
27
+ end
28
+ ActiveRecord::Base.configurations = database_config_hash
29
+ ActiveRecord::Base.establish_connection(database_config_hash)
30
+ ActiveRecord::Base.connection
31
+ end
32
+
33
+ class Tag < ActiveRecord::Base
34
+ end
35
+
36
+ class Image < ActiveRecord::Base
37
+ acts_as_taggable(:scope => :global, :tag_class_name => "Tag")
38
+ end
39
+
40
+ class GlobalTagsTest < Test::Unit::TestCase
41
+ def setup
42
+ ActiveRecord::Base.connection.execute("DELETE FROM images_tags")
43
+ ActiveRecord::Base.connection.execute("DELETE FROM images")
44
+ ActiveRecord::Base.connection.execute("DELETE FROM tags")
45
+ end
46
+
47
+ def test_add_tags_existing_record
48
+ ruby_on_rails = Image.new
49
+ ruby_on_rails.url = "http://www.rubyonrails.com/logo.gif"
50
+ ruby_on_rails.save
51
+ ruby_on_rails.tags.concat(["ruby", "rails", "framework"])
52
+ assert_equal(Tag.find_by_name("framework"),
53
+ ruby_on_rails.tags(true)[0])
54
+ assert_equal(Tag.find_by_name("rails"),
55
+ ruby_on_rails.tags(true)[1])
56
+ assert_equal(Tag.find_by_name("ruby"),
57
+ ruby_on_rails.tags(true)[2])
58
+ end
59
+
60
+ def test_add_tags_new_record
61
+ some_guy = User.new
62
+ some_guy.name = "Joe Normal"
63
+ some_guy.save
64
+ ruby_on_rails = Image.new
65
+ ruby_on_rails.url = "http://www.rubyonrails.com/logo.gif"
66
+ assert_equal(true, ruby_on_rails.new_record?)
67
+ ruby_on_rails.tags.concat(["ruby", "rails", "framework"])
68
+ assert_equal(true, ruby_on_rails.new_record?)
69
+ ruby_on_rails.save
70
+ assert_equal(false, ruby_on_rails.new_record?)
71
+ assert_equal(Tag.find_by_name("framework"),
72
+ ruby_on_rails.tags(true)[0])
73
+ assert_equal(Tag.find_by_name("rails"),
74
+ ruby_on_rails.tags(true)[1])
75
+ assert_equal(Tag.find_by_name("ruby"),
76
+ ruby_on_rails.tags(true)[2])
77
+ end
78
+
79
+ def test_tag_query
80
+ ruby_on_rails = Image.new
81
+ ruby_on_rails.url = "http://www.rubyonrails.com/logo.gif"
82
+ ruby_on_rails.save
83
+ ruby_on_rails.tags << "ruby"
84
+ ruby_on_rails.tags << "rails"
85
+ ruby_on_rails.tags << "framework"
86
+ red_handed = Image.new
87
+ red_handed.url = "http://redhanded.hobix.com/logo.gif"
88
+ red_handed.save
89
+ red_handed.tags << "ruby"
90
+ red_handed.tags << "cult"
91
+ results = Image.tag_query(:with_all_tags => ["ruby", "cult"])
92
+ assert_equal(red_handed, results.first)
93
+ results = Image.tag_query(:with_all_tags => ["ruby", "framework"])
94
+ assert_equal(ruby_on_rails, results.first)
95
+ results = Image.tag_query(:with_any_tags => ["cult", "framework"])
96
+ assert(results.include?(ruby_on_rails))
97
+ assert(results.include?(red_handed))
98
+ results = Image.tag_query(:with_all_tags => ["ruby", "framework"],
99
+ :without_tags => ["cult"])
100
+ assert_equal(ruby_on_rails, results.first)
101
+ assert(!results.include?(red_handed))
102
+ end
103
+ end
@@ -0,0 +1,116 @@
1
+ require 'test/unit'
2
+ require 'tagtools'
3
+ require 'yaml'
4
+
5
+ begin
6
+ ActiveRecord::Base.connection
7
+ rescue
8
+ possible_config_files = [
9
+ "./database.yml",
10
+ "./config/database.yml",
11
+ "../database.yml",
12
+ "../config/database.yml"
13
+ ]
14
+ database_config_file = nil
15
+ for file in possible_config_files
16
+ if File.exists? file
17
+ database_config_file = file
18
+ break
19
+ end
20
+ end
21
+ database_config_hash = File.open(database_config_file) do |file|
22
+ config_hash = YAML::load(file)
23
+ unless config_hash['test'].nil?
24
+ config_hash = config_hash['test']
25
+ end
26
+ config_hash
27
+ end
28
+ ActiveRecord::Base.configurations = database_config_hash
29
+ ActiveRecord::Base.establish_connection(database_config_hash)
30
+ ActiveRecord::Base.connection
31
+ end
32
+
33
+ class User < ActiveRecord::Base
34
+ end
35
+
36
+ class Tag < ActiveRecord::Base
37
+ end
38
+
39
+ class Bookmark < ActiveRecord::Base
40
+ acts_as_taggable(:scope => :user,
41
+ :user_class_name => "User", :tag_class_name => "Tag")
42
+ end
43
+
44
+ class UserTagsTest < Test::Unit::TestCase
45
+ def setup
46
+ ActiveRecord::Base.connection.execute("DELETE FROM bookmarks_tags_users")
47
+ ActiveRecord::Base.connection.execute("DELETE FROM bookmarks")
48
+ ActiveRecord::Base.connection.execute("DELETE FROM users")
49
+ ActiveRecord::Base.connection.execute("DELETE FROM tags")
50
+ end
51
+
52
+ def test_add_tags_existing_record
53
+ some_guy = User.new
54
+ some_guy.name = "Joe Normal"
55
+ some_guy.save
56
+ ruby_on_rails = Bookmark.new
57
+ ruby_on_rails.url = "http://www.rubyonrails.com"
58
+ ruby_on_rails.save
59
+ ruby_on_rails.user_tags(some_guy.id).concat(
60
+ ["ruby", "rails", "framework"])
61
+ assert_equal(Tag.find_by_name("framework"),
62
+ ruby_on_rails.user_tags(some_guy.id, true)[0])
63
+ assert_equal(Tag.find_by_name("rails"),
64
+ ruby_on_rails.user_tags(some_guy.id, true)[1])
65
+ assert_equal(Tag.find_by_name("ruby"),
66
+ ruby_on_rails.user_tags(some_guy.id, true)[2])
67
+ end
68
+
69
+ def test_add_tags_new_record
70
+ some_guy = User.new
71
+ some_guy.name = "Joe Normal"
72
+ some_guy.save
73
+ ruby_on_rails = Bookmark.new
74
+ ruby_on_rails.url = "http://www.rubyonrails.com"
75
+ assert_equal(true, ruby_on_rails.new_record?)
76
+ ruby_on_rails.user_tags(some_guy.id).concat(
77
+ ["ruby", "rails", "framework"])
78
+ assert_equal(true, ruby_on_rails.new_record?)
79
+ ruby_on_rails.save
80
+ assert_equal(false, ruby_on_rails.new_record?)
81
+ assert_equal(Tag.find_by_name("framework"),
82
+ ruby_on_rails.user_tags(some_guy.id, true)[0])
83
+ assert_equal(Tag.find_by_name("rails"),
84
+ ruby_on_rails.user_tags(some_guy.id, true)[1])
85
+ assert_equal(Tag.find_by_name("ruby"),
86
+ ruby_on_rails.user_tags(some_guy.id, true)[2])
87
+ end
88
+
89
+ def test_tag_query
90
+ some_guy = User.new
91
+ some_guy.name = "Joe Normal"
92
+ some_guy.save
93
+ ruby_on_rails = Bookmark.new
94
+ ruby_on_rails.url = "http://www.rubyonrails.com"
95
+ ruby_on_rails.save
96
+ ruby_on_rails.user_tags(some_guy.id) << "ruby"
97
+ ruby_on_rails.user_tags(some_guy.id) << "rails"
98
+ ruby_on_rails.user_tags(some_guy.id) << "framework"
99
+ red_handed = Bookmark.new
100
+ red_handed.url = "http://redhanded.hobix.com"
101
+ red_handed.save
102
+ red_handed.user_tags(some_guy.id) << "ruby"
103
+ red_handed.user_tags(some_guy.id) << "cult"
104
+ results = Bookmark.tag_query(:with_all_tags => ["ruby", "cult"])
105
+ assert_equal(red_handed, results.first)
106
+ results = Bookmark.tag_query(:with_all_tags => ["ruby", "framework"])
107
+ assert_equal(ruby_on_rails, results.first)
108
+ results = Bookmark.tag_query(:with_any_tags => ["cult", "framework"])
109
+ assert(results.include?(ruby_on_rails))
110
+ assert(results.include?(red_handed))
111
+ results = Bookmark.tag_query(:with_all_tags => ["ruby", "framework"],
112
+ :without_tags => ["cult"])
113
+ assert_equal(ruby_on_rails, results.first)
114
+ assert(!results.include?(red_handed))
115
+ end
116
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: tagtools
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2005-08-28 00:00:00 -04:00
8
+ summary: Folksonomy system for Rails.
9
+ require_paths:
10
+ - lib
11
+ email: bob@sporkmonger.com
12
+ homepage: http://sporkmonger.com/projects/tagtools
13
+ rubyforge_project: tagtools
14
+ description: Implements a simple system for handling tagging of items in a database.
15
+ autorequire: tagtools
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ signing_key:
28
+ cert_chain:
29
+ authors:
30
+ - Bob Aman
31
+ files:
32
+ - rakefile
33
+ - install.rb
34
+ - README
35
+ - CHANGELOG
36
+ - lib/tagtools.rb
37
+ - test/global_tags_test.rb
38
+ - test/user_tags_test.rb
39
+ test_files: []
40
+ rdoc_options:
41
+ - "--main"
42
+ - README
43
+ extra_rdoc_files:
44
+ - README
45
+ executables: []
46
+ extensions: []
47
+ requirements: []
48
+ dependencies:
49
+ - !ruby/object:Gem::Dependency
50
+ name: activerecord
51
+ version_requirement:
52
+ version_requirements: !ruby/object:Gem::Version::Requirement
53
+ requirements:
54
+ -
55
+ - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 1.11.1
58
+ version: