tagtical 1.4.9 → 1.4.10
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/VERSION +1 -1
- data/lib/tagtical/tag.rb +2 -0
- data/lib/tagtical/taggable/core.rb +4 -5
- data/lib/tagtical/tagging.rb +28 -14
- data/spec/tagtical/taggable_spec.rb +5 -5
- data/spec/tagtical/tagging_spec.rb +15 -2
- metadata +14 -14
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.10
|
data/lib/tagtical/tag.rb
CHANGED
@@ -64,10 +64,9 @@ module Tagtical::Taggable
|
|
64
64
|
|
65
65
|
scope "has_no_#{tag_type.has_many_name}", lambda { |*args|
|
66
66
|
args << args.extract_options!.update(:sql => :append)
|
67
|
-
|
68
|
-
|
69
|
-
joins(
|
70
|
-
joins(%{LEFT JOIN #{tag_table} ON #{tag_table}.`id` = #{tagging_table}.`tag_id` #{tag_type.finder_type_condition(*args)}}).
|
67
|
+
select("#{table_name}.*").
|
68
|
+
joins("LEFT OUTER JOIN #{tagging_table} ON ( #{tagging_table}.taggable_id = #{table_name}.id )").
|
69
|
+
joins(%{LEFT OUTER JOIN #{tag_table} ON ( #{tag_table}.id = #{tagging_table}.tag_id #{tag_type.finder_type_condition(*args)} )}).
|
71
70
|
where("#{tag_table}.id IS NULL").
|
72
71
|
group("#{table_name}.id")
|
73
72
|
}
|
@@ -320,7 +319,7 @@ module Tagtical::Taggable
|
|
320
319
|
end
|
321
320
|
|
322
321
|
new_tags.each do |tag|
|
323
|
-
taggings.create!(:
|
322
|
+
taggings.create!(:tag => tag, :taggable => self, :relevance => tag_value_lookup[tag].relevance) # Create new taggings:
|
324
323
|
end
|
325
324
|
end
|
326
325
|
|
data/lib/tagtical/tagging.rb
CHANGED
@@ -3,33 +3,38 @@ module Tagtical
|
|
3
3
|
include Tagtical::ActiveRecord::Backports if ::ActiveRecord::VERSION::MAJOR < 3
|
4
4
|
|
5
5
|
attr_accessible :tag,
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
:tag_id,
|
7
|
+
:taggable,
|
8
|
+
:taggable_type,
|
9
|
+
:taggable_id,
|
10
|
+
:tagger,
|
11
|
+
:tagger_id,
|
12
|
+
:relevance
|
13
13
|
|
14
14
|
belongs_to :tag, :class_name => 'Tagtical::Tag'
|
15
15
|
belongs_to :taggable, :polymorphic => true
|
16
16
|
|
17
|
-
|
17
|
+
before_validation { |record| record.relevance ||= default_relevance }
|
18
|
+
|
19
|
+
validates_presence_of :tag_id, :relevance
|
18
20
|
validates_uniqueness_of :tag_id, :scope => [:taggable_type, :taggable_id, :tagger_id]
|
19
21
|
|
22
|
+
validate :validate_relevance
|
23
|
+
|
20
24
|
if Tagtical.config.polymorphic_tagger?
|
21
25
|
attr_accessible :tagger_type
|
22
|
-
|
26
|
+
belongs_to :tagger, :polymorphic => true
|
23
27
|
else
|
24
28
|
belongs_to :tagger, case Tagtical.config.tagger
|
25
|
-
when Hash then
|
26
|
-
|
27
|
-
when
|
29
|
+
when Hash then
|
30
|
+
Tagtical.config.tagger
|
31
|
+
when true then
|
32
|
+
{:class_name => "User"} # default to using User class.
|
33
|
+
when String then
|
34
|
+
{:class_name => Tagtical.config.tagger}
|
28
35
|
end
|
29
36
|
end
|
30
37
|
|
31
|
-
before_create { |record| record.relevance ||= default_relevance }
|
32
|
-
|
33
38
|
class_attribute :default_relevance, :instance_writer => false
|
34
39
|
self.default_relevance = 1
|
35
40
|
|
@@ -45,7 +50,16 @@ module Tagtical
|
|
45
50
|
end
|
46
51
|
set_tag_target_without_relevance(tag)
|
47
52
|
end
|
53
|
+
|
48
54
|
alias_method_chain :set_tag_target, :relevance
|
49
55
|
|
56
|
+
private
|
57
|
+
|
58
|
+
def validate_relevance
|
59
|
+
if range = Tagtical::Tag.relevance_range
|
60
|
+
errors[:relevance] = "must be between #{range.begin} and #{range.end}" unless range.include?(relevance)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
50
64
|
end
|
51
65
|
end
|
@@ -88,11 +88,11 @@ describe Tagtical::Taggable do
|
|
88
88
|
@taggables[1].update_attributes!(:language_list => "Spanish, French", :craft_list => "Pottery", :need_list => "Food")
|
89
89
|
end
|
90
90
|
|
91
|
-
# These *should* be working, but we are having trouble in sqlite3,
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
91
|
+
# These *should* be working, but we are having trouble in sqlite3, but we've confirmed it works in mysql
|
92
|
+
# it "should omit the classes we don't want" do
|
93
|
+
# TaggableModel.has_no_needs.all.should==[@taggables[0]]
|
94
|
+
# TaggableModel.has_no_tags(:needs, :<).all.should==[]
|
95
|
+
# end
|
96
96
|
|
97
97
|
end
|
98
98
|
|
@@ -12,12 +12,12 @@ describe Tagtical::Tagging do
|
|
12
12
|
context "when no relevance set" do
|
13
13
|
before do
|
14
14
|
@tagging.relevance = nil
|
15
|
-
@tagging.run_callbacks(:
|
15
|
+
@tagging.run_callbacks(:validation)
|
16
16
|
end
|
17
17
|
its(:relevance) { should == @klass.default_relevance }
|
18
18
|
end
|
19
19
|
context "when relevance set" do
|
20
|
-
before { @tagging.run_callbacks(:
|
20
|
+
before { @tagging.run_callbacks(:validation) }
|
21
21
|
its(:relevance) { should == @tagging.relevance }
|
22
22
|
end
|
23
23
|
end
|
@@ -60,4 +60,17 @@ describe Tagtical::Tagging do
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
+
describe "relevance_range" do
|
64
|
+
before do
|
65
|
+
@taggable = TaggableModel.create(:name => "Bob Jones")
|
66
|
+
Tagtical::Tag.relevance_range = (0..10)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should throw an error if the relevance is out of range" do
|
70
|
+
@taggable.set_tag_list "car:11"
|
71
|
+
|
72
|
+
expect { @taggable.save }.to raise_error
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
63
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tagtical
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.10
|
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-07-
|
12
|
+
date: 2011-07-30 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2164277000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - <=
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2164277000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2164276520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - <=
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.6.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2164276520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3-ruby
|
38
|
-
requirement: &
|
38
|
+
requirement: &2164276040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2164276040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mysql
|
49
|
-
requirement: &
|
49
|
+
requirement: &2164275560 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2164275560
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &2164275080 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2164275080
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &2164303500 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2164303500
|
80
80
|
description: Tagtical allows you do create subclasses for Tag and add additional functionality
|
81
81
|
in an STI fashion. For example. You could do Tag::Color.find_by_name('blue').to_rgb.
|
82
82
|
It also supports storing weights or relevance on the taggings.
|