tagtical 1.4.3 → 1.4.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.3
1
+ 1.4.5
@@ -72,14 +72,13 @@ module Tagtical::Taggable
72
72
  alias_method_chain :tags, :finder_type_options
73
73
  else # handle the Tagtical::Tag subclasses
74
74
  define_method(tag_type.scope_name) do |*args|
75
- if args.empty?
76
- instance_variable_get(tag_type.scope_ivar) || instance_variable_set(tag_type.scope_ivar,
77
- tags.scoped.merge(tag_type.scoping).tap do |scope|
78
- if (loaded_parent_scope = tag_type.expand_tag_types(:parents).map { |t| tag_scope(t) }.detect(&:loaded?))
79
- scope.instance_variable_set(:@loaded, true)
80
- scope.instance_variable_set(:@records, loaded_parent_scope.select { |t| t.class <= tag_type.klass })
81
- end
82
- end)
75
+ if tags.loaded?
76
+ cache = instance_variable_get(tag_type.scope_ivar) || instance_variable_set(tag_type.scope_ivar, {})
77
+ tag_type_classes = expand_tag_types(tag_type, *args).map(&:klass)
78
+ cache[tag_type_classes] ||= tags_with_type_scoping(tag_type, *args).tap do |scope|
79
+ scope.instance_variable_set(:@loaded, true)
80
+ scope.instance_variable_set(:@records, tags.select { |t| tag_type_classes.include?(t.class) })
81
+ end
83
82
  else
84
83
  tags_with_type_scoping(tag_type, *args)
85
84
  end
data/spec/spec_helper.rb CHANGED
@@ -25,7 +25,7 @@ end
25
25
 
26
26
  RSpec::Matchers.define :have_only_tag_values do |expected|
27
27
  match do |actual|
28
- actual = actual.tags if actual.respond_to?(:tags)
28
+ actual = actual.tags if actual.class.respond_to?(:taggable?) && actual.class.taggable?
29
29
  actual.map(&:value).should have_same_elements(expected)
30
30
  end
31
31
  end
@@ -385,11 +385,10 @@ describe Tagtical::Tag do
385
385
 
386
386
  describe "#derive_class_candidates" do
387
387
  specify do
388
- subject.send(:derive_class_candidates).should == [
389
- "Tagtical::Tag::TaggableModel::Skill", "Tagtical::Tag::TaggableModel::SkillTag",
390
- "Tagtical::Tag::Skill", "Tagtical::Tag::SkillTag", "Tag::TaggableModel::SkillTag", "Tag::TaggableModel::Skill", "TaggableModel::SkillTag",
391
- "Tag::SkillTag", "TaggableModel::Skill", "Tag::Skill",
392
- "SkillTag", "Skill"]
388
+ subject.send(:derive_class_candidates).should == ["Tagtical::Tag::TaggableModel::SkillTag", "Tagtical::Tag::TaggableModel::Skill", "Tagtical::Tag::TaggableModelSkillTag",
389
+ "Tagtical::Tag::TaggableModelSkill", "Tag::TaggableModel::SkillTag", "Tag::TaggableModel::Skill", "Tagtical::Tag::SkillTag",
390
+ "Tagtical::Tag::Skill", "Tag::TaggableModelSkillTag", "Tag::TaggableModelSkill", "TaggableModel::SkillTag",
391
+ "TaggableModel::Skill", "Tag::SkillTag", "Tag::Skill", "TaggableModelSkillTag", "TaggableModelSkill", "SkillTag", "Skill"]
393
392
  end
394
393
  end
395
394
 
@@ -67,7 +67,11 @@ describe Tagtical::Taggable do
67
67
  it "should not access the database when top level tags are already loaded" do
68
68
  ActiveRecord::Base.connection.expects(:execute).never
69
69
  @taggable.skills.to_a
70
- @taggable.crafts.to_a
70
+ @taggable.skills.should have_only_tag_values %w{basketball pottery}
71
+ @taggable.crafts(:current).should have_only_tag_values %w{pottery}
72
+ @taggable.skills(:current).should have_only_tag_values %w{basketball}
73
+ @taggable.skills(:children).should have_only_tag_values %w{pottery}
74
+ @taggable.tags.should have_only_tag_values %w{train tree basketball pottery}
71
75
  end
72
76
 
73
77
  it "should select the correct tags" do
@@ -75,11 +79,6 @@ describe Tagtical::Taggable do
75
79
  @taggable.crafts.each { |tag| tag.should be_craft }
76
80
  end
77
81
 
78
- it "should access the database when args are passed in" do
79
- ActiveRecord::Base.connection.expects(:execute).once.returns([])
80
- @taggable.skills(:conditions => "value='Foo'").to_a
81
- end
82
-
83
82
  end
84
83
  end
85
84
 
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.3
4
+ version: 1.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-07-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2152194660 !ruby/object:Gem::Requirement
16
+ requirement: &2154072140 !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: *2152194660
24
+ version_requirements: *2154072140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2152194180 !ruby/object:Gem::Requirement
27
+ requirement: &2154071660 !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: *2152194180
35
+ version_requirements: *2154071660
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3-ruby
38
- requirement: &2152193700 !ruby/object:Gem::Requirement
38
+ requirement: &2154071180 !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: *2152193700
46
+ version_requirements: *2154071180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mysql
49
- requirement: &2152193220 !ruby/object:Gem::Requirement
49
+ requirement: &2154070700 !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: *2152193220
57
+ version_requirements: *2154070700
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &2152192740 !ruby/object:Gem::Requirement
60
+ requirement: &2154070220 !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: *2152192740
68
+ version_requirements: *2154070220
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &2152192260 !ruby/object:Gem::Requirement
71
+ requirement: &2154069740 !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: *2152192260
79
+ version_requirements: *2154069740
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.