my_tags 0.0.2 → 0.0.3

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.
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: []