tag_dangelo 0.0.1 → 0.0.2

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