my_tags 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 826c46163180baa502768530f2577a7b707df855
4
- data.tar.gz: a3439e8d3e217b79bf5fe6362b06dd7c12d53602
3
+ metadata.gz: 8828daac237dd282923fad51f5feb29d3b06024e
4
+ data.tar.gz: 578fee71583a8930078c0d7fb16d0fd04e8aa241
5
5
  SHA512:
6
- metadata.gz: 39e5ecc03e06811ac8e419c88c175f1dacb1c15f4e317e0cde60b976e11ae7102ae0ded3da17acc7f852236c2f5c5fb9bb0632a497c582c09454b54674f62719
7
- data.tar.gz: c371b5ae5a91024a68d45b539c07d398d840036991bddd446753e2565517c883ec8b6e926ac98d63cbcbf0eadd3f15d78af5f9bcfb97dc4cae186fda804e2e92
6
+ metadata.gz: a3bcac51fac545bf42e6280677621db87abe20bdccdebabc65932cdab76a95d718df62ffd066ee095b4a8ce9b78e355e70f22b69c238996e933009113b15978b
7
+ data.tar.gz: cfb58f1366db40f9e6efba81dde1fb3c6b97b8d971b289806c3dd995f72ec07a9054159a70e1a44fea4eaad7690599448afb8e37bea25d9295b183fb89a10bb9
@@ -3,6 +3,18 @@ module MyTags::ActiveRecord
3
3
  base.extend MyTags::ActiveRecord::ClassMethods
4
4
  end
5
5
 
6
+ def tags
7
+ @tags ||= MyTags::Tags.new self
8
+ end
9
+
10
+ def tags=(names)
11
+ if names.is_a?(MyTags::Tags)
12
+ @tag_names = names
13
+ else
14
+ @tag_names = MyTags::Tags.new_with_names self, names
15
+ end
16
+ end
17
+
6
18
  module ClassMethods
7
19
  def has_many_tags
8
20
  has_many :taggings, :class_name => 'MyTags::Tagging', :as => :taggable, :dependent => :destroy
@@ -0,0 +1,50 @@
1
+ class MyTags::Tags
2
+
3
+ include Enumerable
4
+
5
+ def initialize(taggable)
6
+ @taggable = taggable
7
+ end
8
+
9
+ def to_a
10
+ taggable.tags.collect &:name
11
+ end
12
+
13
+ def <<(name)
14
+ tag = MyTags::Tag.where(:name => name).first_or_create
15
+ taggable.tags << tag
16
+ end
17
+
18
+ def delete(name)
19
+ taggable.tags.delete MyTags::Tag.where(:name => name).first
20
+ end
21
+
22
+ def +(array)
23
+ array.each { |name| self.<< name }
24
+ self
25
+ end
26
+
27
+ def -(array)
28
+ array.each { |name| self.delete name }
29
+ self
30
+ end
31
+
32
+ def self.new_with_names(taggable, names)
33
+ tag_names = new(taggable)
34
+ tag_names.clear
35
+ names.each { |name| tag_names << name }
36
+ tag_names
37
+ end
38
+
39
+ def clear
40
+ taggable.tags.clear
41
+ end
42
+
43
+ def each(&block)
44
+ to_a.each &block
45
+ end
46
+
47
+ private
48
+
49
+ attr_reader :taggable
50
+ end
data/lib/my_tags.rb CHANGED
@@ -1,6 +1,7 @@
1
- module TagEchidna
1
+ module MyTags
2
2
 
3
3
  end
4
4
 
5
5
  require 'my_tags/active_record'
6
6
  require 'my_tags/engine'
7
+ require 'my_tags/tags'
data/my_tags.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'my_tags'
3
- s.version = '0.0.2'
3
+ s.version = '0.0.3'
4
4
  s.authors = ['Vitaly Omelchenko']
5
5
  s.email = ['prosto.vint@gmail.com']
6
6
  s.homepage = 'https://github.com/vintyara/my_tags'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitaly Omelchenko
@@ -23,6 +23,7 @@ files:
23
23
  - lib/my_tags.rb
24
24
  - lib/my_tags/active_record.rb
25
25
  - lib/my_tags/engine.rb
26
+ - lib/my_tags/tags.rb
26
27
  - my_tags.gemspec
27
28
  homepage: https://github.com/vintyara/my_tags
28
29
  licenses: []