semantically-taggable 0.1.14 → 0.2.0

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/spec/schema.rb CHANGED
@@ -28,6 +28,7 @@ ActiveRecord::Schema.define :version => 0 do
28
28
  t.string :description
29
29
  t.string :delimiter, :limit => 10, :default => ','
30
30
  t.boolean :polyhierarchical, :default => false
31
+ t.boolean :restrict_to_known_tags, :default => false
31
32
  end
32
33
 
33
34
  # Transitive closure table for multiple parent tags
@@ -1,8 +1,8 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe SemanticallyTaggable::Tag do
4
- let(:scheme) { SemanticallyTaggable::Scheme.by_name(:dg_topics) }
5
- let(:other_scheme) { SemanticallyTaggable::Scheme.by_name(:keywords) }
4
+ let(:dg_topics) { SemanticallyTaggable::Scheme.by_name(:dg_topics) }
5
+ let(:keywords) { SemanticallyTaggable::Scheme.by_name(:keywords) }
6
6
 
7
7
  before do
8
8
  reset_database!
@@ -21,21 +21,46 @@ describe SemanticallyTaggable::Tag do
21
21
  }.should raise_error(ActiveRecord::RecordNotFound)
22
22
  end
23
23
 
24
- it "should save schemes with the tag" do
25
- scheme = SemanticallyTaggable::Scheme.by_name(:dg_topics)
26
- keyword = SemanticallyTaggable::Tag.create(:name => '1', :scheme => scheme)
27
- keyword.scheme = scheme
28
- keyword.save!
29
- keyword = SemanticallyTaggable::Tag.find_by_name('1')
30
- keyword.scheme.should == scheme
31
- end
24
+ describe "creating tags within schemes" do
25
+ it "should save schemes with the tag" do
26
+ SemanticallyTaggable::Tag.create!(:name => '1') do |tag|
27
+ tag.scheme = dg_topics
28
+ end
32
29
 
33
- it "should treat tags in different schemes as different tags" do
34
- keyword = SemanticallyTaggable::Tag.create(:name => '1', :scheme => SemanticallyTaggable::Scheme.by_name(:dg_topics))
35
- keyword.save!
36
- lambda {
37
- SemanticallyTaggable::Tag.find_or_create_all_with_like_by_name('1', '2', :keywords)
38
- }.should change(SemanticallyTaggable::Tag, :count).by(2)
30
+ tag = SemanticallyTaggable::Tag.find_by_name('1')
31
+ tag.scheme.should == dg_topics
32
+ end
33
+
34
+ it "should treat tags in different schemes as different tags" do
35
+ SemanticallyTaggable::Tag.create(:name => '1') do |tag|
36
+ tag.scheme = dg_topics
37
+ end
38
+
39
+ lambda {
40
+ SemanticallyTaggable::Tag.find_or_create_all_with_like_by_name('1', '2', :keywords)
41
+ }.should change(SemanticallyTaggable::Tag, :count).by(2)
42
+ end
43
+
44
+ it "should not find tags in different schemes equal" do
45
+ topic = SemanticallyTaggable::Tag.create(:name => '1') do |tag|
46
+ tag.scheme = dg_topics
47
+ end
48
+ tag = SemanticallyTaggable::Tag.create(:name => '1') do |tag|
49
+ tag.scheme = keywords
50
+ end
51
+
52
+ topic.should_not == tag
53
+ end
54
+
55
+ it "should silently drop tags when the scheme is set to restrict_to_known_tags" do
56
+ tag = SemanticallyTaggable::Tag.create(:name => '1') do |tag|
57
+ tag.scheme = dg_topics
58
+ end
59
+
60
+ lambda {
61
+ SemanticallyTaggable::Tag.find_or_create_all_with_like_by_name('1', '2', :dg_topics).should == [tag]
62
+ }.should change(SemanticallyTaggable::Tag, :count).by(0)
63
+ end
39
64
  end
40
65
  end
41
66
 
@@ -43,9 +68,9 @@ describe SemanticallyTaggable::Tag do
43
68
  describe "Tag relationships" do
44
69
  describe "Bidirectional associations" do
45
70
  before do
46
- @parent = scheme.create_tag(:name => 'Tax')
47
- @child = scheme.create_tag(:name => 'Income Tax')
48
- @unrelated = scheme.create_tag(:name => 'unrelated')
71
+ @parent = dg_topics.create_tag(:name => 'Tax')
72
+ @child = dg_topics.create_tag(:name => 'Income Tax')
73
+ @unrelated = dg_topics.create_tag(:name => 'unrelated')
49
74
  end
50
75
 
51
76
  describe "when assigning with narrower" do
@@ -68,27 +93,14 @@ describe SemanticallyTaggable::Tag do
68
93
  specify { @child.broader_tags.should include(@parent) }
69
94
  specify { @parent.narrower_tags.should include(@child) }
70
95
  end
71
-
72
- # describe "when assigning from both ends, such as might happen in the import" do
73
- # before do
74
- # @parent.narrower_tags << @child
75
- # @child.broader_tags << @parent
76
- #
77
- # @child.save
78
- # @parent.save
79
- # end
80
- #
81
- # specify { @parent.should have(1).narrower_tag }
82
- # specify { @child.should have(1).broader_tag }
83
- # end
84
96
  end
85
97
 
86
98
  describe "Related tags" do
87
99
  before do
88
- @tax_tag = scheme.create_tag(:name => 'Tax')
89
- @income_tax_tag = scheme.create_tag(:name => 'Income Tax')
90
- @inheritance_tax_tag = scheme.create_tag(:name => 'Inheritance Tax')
91
- @giraffes = scheme.create_tag(:name => 'giraffes')
100
+ @tax_tag = dg_topics.create_tag(:name => 'Tax')
101
+ @income_tax_tag = dg_topics.create_tag(:name => 'Income Tax')
102
+ @inheritance_tax_tag = dg_topics.create_tag(:name => 'Inheritance Tax')
103
+ @giraffes = dg_topics.create_tag(:name => 'giraffes')
92
104
 
93
105
  @tax_tag.related_tags << [@income_tax_tag, @inheritance_tax_tag]
94
106
  @tax_tag.save
@@ -129,8 +141,8 @@ describe SemanticallyTaggable::Tag do
129
141
  end
130
142
 
131
143
  describe "Tag synonyms" do
132
- let(:benefits_tag) { scheme.create_tag(:name => 'Benefits') }
133
- let(:benefits_keyword) { other_scheme.create_tag(:name => 'Benefits') }
144
+ let(:benefits_tag) { dg_topics.create_tag(:name => 'Benefits') }
145
+ let(:benefits_keyword) { keywords.create_tag(:name => 'Benefits') }
134
146
 
135
147
  it "should allow a tag to have synonyms" do
136
148
  benefits_tag.synonyms << SemanticallyTaggable::Synonym.new(:name => 'State Benefits')
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semantically-taggable
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 23
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 1
8
- - 14
9
- version: 0.1.14
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Russell Garner
@@ -14,120 +15,128 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-03-28 00:00:00 +01:00
18
+ date: 2011-06-01 00:00:00 +01:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: rails
22
+ prerelease: false
23
+ type: :runtime
22
24
  requirement: &id001 !ruby/object:Gem::Requirement
23
25
  none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 7
27
30
  segments:
28
31
  - 3
29
32
  - 0
30
33
  version: "3.0"
31
- type: :runtime
32
- prerelease: false
34
+ name: rails
33
35
  version_requirements: *id001
34
36
  - !ruby/object:Gem::Dependency
35
- name: activerecord
37
+ prerelease: false
38
+ type: :runtime
36
39
  requirement: &id002 !ruby/object:Gem::Requirement
37
40
  none: false
38
41
  requirements:
39
42
  - - ">="
40
43
  - !ruby/object:Gem::Version
44
+ hash: 7
41
45
  segments:
42
46
  - 3
43
47
  - 0
44
48
  version: "3.0"
45
- type: :runtime
46
- prerelease: false
49
+ name: activerecord
47
50
  version_requirements: *id002
48
51
  - !ruby/object:Gem::Dependency
49
- name: mysql
52
+ prerelease: false
53
+ type: :runtime
50
54
  requirement: &id003 !ruby/object:Gem::Requirement
51
55
  none: false
52
56
  requirements:
53
57
  - - ">="
54
58
  - !ruby/object:Gem::Version
59
+ hash: 3
55
60
  segments:
56
61
  - 0
57
62
  version: "0"
58
- type: :runtime
59
- prerelease: false
63
+ name: mysql
60
64
  version_requirements: *id003
61
65
  - !ruby/object:Gem::Dependency
62
- name: nokogiri
66
+ prerelease: false
67
+ type: :runtime
63
68
  requirement: &id004 !ruby/object:Gem::Requirement
64
69
  none: false
65
70
  requirements:
66
71
  - - ">="
67
72
  - !ruby/object:Gem::Version
73
+ hash: 3
68
74
  segments:
69
75
  - 0
70
76
  version: "0"
71
- type: :runtime
72
- prerelease: false
77
+ name: nokogiri
73
78
  version_requirements: *id004
74
79
  - !ruby/object:Gem::Dependency
75
- name: rspec
80
+ prerelease: false
81
+ type: :development
76
82
  requirement: &id005 !ruby/object:Gem::Requirement
77
83
  none: false
78
84
  requirements:
79
85
  - - ~>
80
86
  - !ruby/object:Gem::Version
87
+ hash: 31
81
88
  segments:
82
89
  - 2
83
90
  - 4
84
91
  - 0
85
92
  version: 2.4.0
86
- type: :development
87
- prerelease: false
93
+ name: rspec
88
94
  version_requirements: *id005
89
95
  - !ruby/object:Gem::Dependency
90
- name: bundler
96
+ prerelease: false
97
+ type: :development
91
98
  requirement: &id006 !ruby/object:Gem::Requirement
92
99
  none: false
93
100
  requirements:
94
101
  - - ~>
95
102
  - !ruby/object:Gem::Version
103
+ hash: 23
96
104
  segments:
97
105
  - 1
98
106
  - 0
99
107
  - 0
100
108
  version: 1.0.0
101
- type: :development
102
- prerelease: false
109
+ name: bundler
103
110
  version_requirements: *id006
104
111
  - !ruby/object:Gem::Dependency
105
- name: jeweler
112
+ prerelease: false
113
+ type: :development
106
114
  requirement: &id007 !ruby/object:Gem::Requirement
107
115
  none: false
108
116
  requirements:
109
117
  - - ~>
110
118
  - !ruby/object:Gem::Version
119
+ hash: 7
111
120
  segments:
112
121
  - 1
113
122
  - 5
114
123
  - 2
115
124
  version: 1.5.2
116
- type: :development
117
- prerelease: false
125
+ name: jeweler
118
126
  version_requirements: *id007
119
127
  - !ruby/object:Gem::Dependency
120
- name: rcov
128
+ prerelease: false
129
+ type: :development
121
130
  requirement: &id008 !ruby/object:Gem::Requirement
122
131
  none: false
123
132
  requirements:
124
133
  - - ">="
125
134
  - !ruby/object:Gem::Version
135
+ hash: 3
126
136
  segments:
127
137
  - 0
128
138
  version: "0"
129
- type: :development
130
- prerelease: false
139
+ name: rcov
131
140
  version_requirements: *id008
132
141
  description: |-
133
142
  Based really very heavily on acts_as_taggable_on, but introduces tagging schemes and moves
@@ -192,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
201
  requirements:
193
202
  - - ">="
194
203
  - !ruby/object:Gem::Version
195
- hash: 2677708864870805089
204
+ hash: 3
196
205
  segments:
197
206
  - 0
198
207
  version: "0"
@@ -201,13 +210,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
201
210
  requirements:
202
211
  - - ">="
203
212
  - !ruby/object:Gem::Version
213
+ hash: 3
204
214
  segments:
205
215
  - 0
206
216
  version: "0"
207
217
  requirements: []
208
218
 
209
219
  rubyforge_project:
210
- rubygems_version: 1.3.7
220
+ rubygems_version: 1.5.2
211
221
  signing_key:
212
222
  specification_version: 3
213
223
  summary: A semantic tagging system for Rails 3