tagtical 1.3.0 → 1.3.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/README.rdoc +11 -3
- data/VERSION +1 -1
- data/lib/tagtical/tag.rb +9 -1
- data/spec/tagtical/tag_spec.rb +30 -0
- metadata +14 -14
data/README.rdoc
CHANGED
@@ -46,7 +46,7 @@ Additions include:
|
|
46
46
|
|
47
47
|
=== Rails & Ruby Versions
|
48
48
|
|
49
|
-
Tagtical was developed on Rails 3.
|
49
|
+
Tagtical was developed on Rails 3.0.5 and Ruby 1.9.2
|
50
50
|
|
51
51
|
It can probably work with older versions, but would take a few tweaks.
|
52
52
|
|
@@ -110,6 +110,7 @@ rake spec:plugins
|
|
110
110
|
end
|
111
111
|
|
112
112
|
# Basic TagList Functionality
|
113
|
+
|
113
114
|
@user = User.new(:name => "Bobby")
|
114
115
|
@user.tag_list = "awesome, slick, hefty" # this should be familiar
|
115
116
|
@user.activity_list = "joking, clowning, boxing"
|
@@ -119,6 +120,7 @@ rake spec:plugins
|
|
119
120
|
|
120
121
|
# Cascade tag_list setters =)
|
121
122
|
# It will look at the "possible_values" if provided, and stuff the tags down at that level.
|
123
|
+
|
122
124
|
@user.set_activity_list(["clowning", "boxing"], :cascade => true)
|
123
125
|
@user.save!
|
124
126
|
@user.sport_list # => ["boxing"]
|
@@ -135,10 +137,14 @@ rake spec:plugins
|
|
135
137
|
@user.save
|
136
138
|
|
137
139
|
# Possible Values Checking
|
138
|
-
|
140
|
+
|
141
|
+
@user.sport_list = ["chess"]
|
139
142
|
@user.save! # <=== will throw an error, chess is not in possible_values from Tag::Sport
|
140
143
|
|
141
144
|
# Tagging Scopes
|
145
|
+
|
146
|
+
# Tagtical allows for tagging scopes built with the paradigm of "parents", "current", and "children".
|
147
|
+
# This way you can get any level of the inheritance chain and in any direction!
|
142
148
|
@user.activities # => [<Tag::Activity value:"joking">,<Tag::Activity value:"clowning">,<Tag::Sport value:"boxing">]
|
143
149
|
@user.activities(:scope => :children) # => [<Tag::Sport value:"boxing">] - look at only the STI subclasses
|
144
150
|
@user.activities(:children) # => shorthand for above
|
@@ -147,15 +153,17 @@ rake spec:plugins
|
|
147
153
|
@user.tags(:scope => :children, :only => :sports) # => [<Tag::Sport value:"boxing">]
|
148
154
|
# - filter list by including
|
149
155
|
|
150
|
-
@user.activities(:scope => )
|
156
|
+
@user.activities(:scope => :parents) # Gets tags above activities (current just top-level tags)
|
151
157
|
@user.activities(:scope => :current) # => [<Tag::Activity value:"joking">,<Tag::Activity value:"clowning">] - look at only the current STI class
|
152
158
|
@user.activities(:scope => :==) # => [<Tag::Activity value:"joking">,<Tag::Activity value:"clowning">] - look at only the current STI class
|
153
159
|
|
154
160
|
# Questioner Methods
|
161
|
+
|
155
162
|
@user.activities.first.athletic? # => false
|
156
163
|
@user.sports.all(&:ball?) # => true
|
157
164
|
|
158
165
|
# Database Access Optimizations
|
166
|
+
|
159
167
|
** Sequence 1
|
160
168
|
@user.tags.to_a # load in the tags
|
161
169
|
@user.sports.to_a # will not trigger a database hit, instead will get the sports tags off tags
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.1
|
data/lib/tagtical/tag.rb
CHANGED
@@ -137,10 +137,18 @@ module Tagtical
|
|
137
137
|
self[:count].to_i
|
138
138
|
end
|
139
139
|
|
140
|
+
def respond_to?(method_id, include_private = false)
|
141
|
+
!!tag_types_for_questioner_method(method_id) || super
|
142
|
+
end
|
143
|
+
|
140
144
|
private
|
141
145
|
|
146
|
+
def tag_types_for_questioner_method(method_name)
|
147
|
+
method_name[-1]=="?" && Type.cache[method_name[0..-2]]
|
148
|
+
end
|
149
|
+
|
142
150
|
def method_missing(method_name, *args, &block)
|
143
|
-
if
|
151
|
+
if types = tag_types_for_questioner_method(method_name)
|
144
152
|
self.class.send(:define_method, method_name) do
|
145
153
|
types.any? { |type| is_a?(type.klass) }
|
146
154
|
end
|
data/spec/tagtical/tag_spec.rb
CHANGED
@@ -53,6 +53,36 @@ describe Tagtical::Tag do
|
|
53
53
|
|
54
54
|
end
|
55
55
|
|
56
|
+
describe "Questioner Methods" do
|
57
|
+
|
58
|
+
before do
|
59
|
+
@tag = Tag::FooCraft.new(:value => "foo")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should have methods to question the tag type" do
|
63
|
+
should be_skill
|
64
|
+
should be_craft
|
65
|
+
should be_tag
|
66
|
+
should_not be_offering
|
67
|
+
end
|
68
|
+
|
69
|
+
context "before methods are defined" do
|
70
|
+
before do
|
71
|
+
@types = [:craft?, :skill?, :tag?]
|
72
|
+
@types.each { |x| @tag.class.send(:undef_method, x) if @tag.class.instance_methods.include?(x) }
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should respond_to?" do
|
76
|
+
@types.each { |m| @tag.respond_to?(m).should be_true }
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should respond_to correctly for incorrect methods" do
|
80
|
+
@tag.respond_to?(:foo).should be_false
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
56
86
|
when_possible_values_specified do
|
57
87
|
|
58
88
|
it "should use values from possible_values" 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.3.
|
4
|
+
version: 1.3.1
|
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-24 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2161694760 !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: *2161694760
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2161694280 !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: *2161694280
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3-ruby
|
38
|
-
requirement: &
|
38
|
+
requirement: &2161693800 !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: *2161693800
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mysql
|
49
|
-
requirement: &
|
49
|
+
requirement: &2161693320 !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: *2161693320
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &2161692840 !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: *2161692840
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &2161692360 !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: *2161692360
|
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.
|