tagtical 1.4.8 → 1.4.9
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/taggable/core.rb +17 -0
- data/spec/tagtical/taggable_spec.rb +14 -0
- metadata +13 -13
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.9
|
@@ -27,6 +27,8 @@ module Tagtical::Taggable
|
|
27
27
|
Tagtical::Tag.define_scope_for_type(tag_type)
|
28
28
|
|
29
29
|
define_tag_scope(tag_type)
|
30
|
+
|
31
|
+
define_has_tag_scope(tag_type)
|
30
32
|
|
31
33
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
32
34
|
def self.with_#{tag_type.pluralize}(*tags)
|
@@ -56,6 +58,21 @@ module Tagtical::Taggable
|
|
56
58
|
initialize_tagtical_core
|
57
59
|
end
|
58
60
|
|
61
|
+
# Defines has and has_no scopes at the class level.
|
62
|
+
def define_has_tag_scope(tag_type)
|
63
|
+
tag_table, tagging_table = Tagtical::Tag.table_name, Tagtical::Tagging.table_name
|
64
|
+
|
65
|
+
scope "has_no_#{tag_type.has_many_name}", lambda { |*args|
|
66
|
+
args << args.extract_options!.update(:sql => :append)
|
67
|
+
|
68
|
+
select("*").
|
69
|
+
joins("LEFT JOIN #{tagging_table} ON #{table_name}.`id` = #{tagging_table}.`taggable_id` AND #{tagging_table}.`taggable_type` = '#{sti_name}'").
|
70
|
+
joins(%{LEFT JOIN #{tag_table} ON #{tag_table}.`id` = #{tagging_table}.`tag_id` #{tag_type.finder_type_condition(*args)}}).
|
71
|
+
where("#{tag_table}.id IS NULL").
|
72
|
+
group("#{table_name}.id")
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
59
76
|
# If the tag_type is base? (type=="tag"), then we add additional functionality to the AR
|
60
77
|
# has_many :tags.
|
61
78
|
#
|
@@ -82,6 +82,20 @@ describe Tagtical::Taggable do
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
describe "Has and Has Not Scopes" do
|
86
|
+
before do
|
87
|
+
@taggables[0].update_attributes!(:language_list => "Spanish, French", :craft_list => "Pottery", :skill_list => "Fighting")
|
88
|
+
@taggables[1].update_attributes!(:language_list => "Spanish, French", :craft_list => "Pottery", :need_list => "Food")
|
89
|
+
end
|
90
|
+
|
91
|
+
# These *should* be working, but we are having trouble in sqlite3, perhaps in mysql it will preform better.
|
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
|
+
|
97
|
+
end
|
98
|
+
|
85
99
|
when_possible_values_specified(:values => %w{Knitting Ruby Pottery}) do
|
86
100
|
|
87
101
|
before do
|
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.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-07-28 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2155971940 !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: *2155971940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2155971460 !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: *2155971460
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3-ruby
|
38
|
-
requirement: &
|
38
|
+
requirement: &2155970980 !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: *2155970980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mysql
|
49
|
-
requirement: &
|
49
|
+
requirement: &2155970500 !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: *2155970500
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &2155970020 !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: *2155970020
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &2155969540 !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: *2155969540
|
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.
|