tagtical 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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.