tag_dangelo 0.0.1 → 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ Gemfile.lock
2
+ spec/internal/db/*.sqlite
3
+ .ruby*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,6 @@
1
+ class TagDangelo::Tag < ActiveRecord::Base
2
+ has_many :taggings, class_name: 'TagDangelo::Tagging',
3
+ dependent: :destroy
4
+
5
+ validates :name, presence: true, uniqueness: true
6
+ end
@@ -0,0 +1,7 @@
1
+ class TagDangelo::Tagging < ActiveRecord::Base
2
+ belongs_to :taggable, polymorphic: true
3
+ belongs_to :tag, class_name: 'TagDangelo::Tag'
4
+
5
+ validates_presence_of :taggable
6
+ validates_presence_of :tag
7
+ end
@@ -0,0 +1,27 @@
1
+ class TagTables < ActiveRecord::Migration
2
+ def up
3
+ create_table :tags do |t|
4
+ t.string :name, null: false
5
+ t.timestamps
6
+ end
7
+
8
+ add_index :tags, :name, unique: true
9
+
10
+ create_table :taggings do |t|
11
+ t.integer :tag_id, null: false
12
+ t.integer :taggable_id, null: false
13
+ t.string :taggable_type, null: false
14
+ t.timestamps
15
+ end
16
+
17
+ add_index :taggings, :tag_id
18
+ add_index :taggings, [:taggable_type, :taggable_id]
19
+ add_index :taggings, [:taggable_type, :taggable_id, :tag_id],
20
+ unique: true, name: 'unique_taggings'
21
+ end
22
+
23
+ def down
24
+ drop_table :tags
25
+ drop_table :taggings
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ module TagDangelo::ActiveRecord
2
+ def self.included(base)
3
+ # include our class methods
4
+ base.extend TagDangelo::ActiveRecord::ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ # set up the underlying tag associations in the model
9
+ def has_many_tags
10
+ has_many :taggings, class_name: 'TagDangelo::Tagging',
11
+ as: :taggable, dependent: :destroy
12
+ has_many :tags, class_name: 'TagDangelo::Tag',
13
+ through: :taggings
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ require 'rails/engine'
2
+
3
+ class TagDangelo::Engine < Rails::Engine
4
+ # set our engine name
5
+ engine_name :tag_dangelo
6
+
7
+ ActiveSupport.on_load :active_record do
8
+ # this is run when Rails loads ActiveRecord,
9
+ # and is within the context of ActiveRecord::Base
10
+ include TagDangelo::ActiveRecord
11
+ end
12
+ end
data/lib/tag_dangelo.rb CHANGED
@@ -0,0 +1,8 @@
1
+ # declare our top level module
2
+ module TagDangelo
3
+
4
+ end
5
+
6
+ # require the rest of the gem's files
7
+ require 'tag_dangelo/active_record'
8
+ require 'tag_dangelo/engine'
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Adding and removing tags' do
4
+ let(:article) { Article.create }
5
+ let(:piano) { TagDangelo::Tag.create name: 'piano' }
6
+
7
+ it 'stores new tags' do
8
+ article.tags << piano
9
+ article.tags.reload.should == [piano]
10
+ end
11
+
12
+ it 'removes existing tags' do
13
+ article.tags << piano
14
+ article.tags.delete piano
15
+ article.tags.reload.should == []
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ class Article < ActiveRecord::Base
2
+ has_many_tags
3
+ end
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: db/combustion_test.sqlite
@@ -0,0 +1,6 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table :articles, force: true do |t|
3
+ t.string :title
4
+ t.timestamps
5
+ end
6
+ end
@@ -0,0 +1 @@
1
+ *.log
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+
3
+ Bundler.require :default, :development
4
+
5
+ Combustion.initialize! :active_record
6
+
7
+ require 'rspec/rails'
8
+
9
+ RSpec.configure do |config|
10
+ config.color_enabled = true
11
+ config.use_transactional_fixtures = true
12
+ end
data/tag_dangelo.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'tag_dangelo'
3
- s.version = '0.0.1'
3
+ s.version = '0.0.2'
4
4
  s.authors = ['Jim Harvey']
5
5
  s.email = ['jimrharvey@gmail.com']
6
6
  s.homepage = 'https://github.com/harvj/tag_dangelo'
@@ -10,4 +10,9 @@ Gem::Specification.new do |s|
10
10
  s.files = `git ls-files`.split("\n")
11
11
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
12
12
  s.require_paths = ['lib']
13
+
14
+ s.add_runtime_dependency 'activerecord', '>= 3.2.0'
15
+ s.add_development_dependency 'combustion', '~> 0.4.0'
16
+ s.add_development_dependency 'rspec-rails', '~> 2.13'
17
+ s.add_development_dependency 'sqlite3', '~> 1.3.7'
13
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tag_dangelo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,72 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-01 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-05-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: combustion
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.4.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.4.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.13'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.13'
62
+ - !ruby/object:Gem::Dependency
63
+ name: sqlite3
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.3.7
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.7
14
78
  description: Add tags to your Rails classes
15
79
  email:
16
80
  - jimrharvey@gmail.com
@@ -18,7 +82,20 @@ executables: []
18
82
  extensions: []
19
83
  extra_rdoc_files: []
20
84
  files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - app/models/tag_dangelo/tag.rb
88
+ - app/models/tag_dangelo/tagging.rb
89
+ - db/migrate/1_tag_tables.rb
21
90
  - lib/tag_dangelo.rb
91
+ - lib/tag_dangelo/active_record.rb
92
+ - lib/tag_dangelo/engine.rb
93
+ - spec/acceptance/tags_spec.rb
94
+ - spec/internal/app/models/article.rb
95
+ - spec/internal/config/database.yml
96
+ - spec/internal/db/schema.rb
97
+ - spec/internal/log/.gitignore
98
+ - spec/spec_helper.rb
22
99
  - tag_dangelo.gemspec
23
100
  homepage: https://github.com/harvj/tag_dangelo
24
101
  licenses: []
@@ -40,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
117
  version: '0'
41
118
  requirements: []
42
119
  rubyforge_project:
43
- rubygems_version: 1.8.24
120
+ rubygems_version: 1.8.25
44
121
  signing_key:
45
122
  specification_version: 3
46
123
  summary: Tags with some soul