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 CHANGED
@@ -46,7 +46,7 @@ Additions include:
46
46
 
47
47
  === Rails & Ruby Versions
48
48
 
49
- Tagtical was developed on Rails 3.05 and Ruby 1.9.2
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
- @user.sport_list = {"chess"}
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 => ) # => [<Tag::Sport value:"boxing">] - look at only the STI subclasses
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.0
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 method_name[-1]=="?" && (types = Type.cache[method_name[0..-2]])
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
@@ -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.0
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-23 00:00:00.000000000Z
12
+ date: 2011-07-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2152023000 !ruby/object:Gem::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: *2152023000
24
+ version_requirements: *2161694760
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2152022520 !ruby/object:Gem::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: *2152022520
35
+ version_requirements: *2161694280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3-ruby
38
- requirement: &2152022040 !ruby/object:Gem::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: *2152022040
46
+ version_requirements: *2161693800
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mysql
49
- requirement: &2152021560 !ruby/object:Gem::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: *2152021560
57
+ version_requirements: *2161693320
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &2152021080 !ruby/object:Gem::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: *2152021080
68
+ version_requirements: *2161692840
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &2152020600 !ruby/object:Gem::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: *2152020600
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.