one_touch 2.0.0 → 2.1.0

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: 0a98a57687f0a2ec6b1dcaac63bafdc44c16134c
4
- data.tar.gz: 30dab1a2ccc18f7f79456a16fb7592602bcb49ca
3
+ metadata.gz: 34cb00212443af916d927fa834c4cd6e6b67fd46
4
+ data.tar.gz: 98a3670dd6b8fb6e2a617f4e4c9efdf254d6407a
5
5
  SHA512:
6
- metadata.gz: 29f2f5752cb2a54d169552fdbf29e624f8b8f0dc58fbb88957a206b2b493fdc4de23c4fce90694f909e80a67a67dc7270fbff5f45a88926a18b3315c6b407403
7
- data.tar.gz: 009567cdfd4e1b1ea37ddee259e90c4a164ba41cac5b8e5113679b8a1f9728ce56a9e1d346aa8d451962f5c758c08cdad4775fec401c4aab928f359c41ebf3ab
6
+ metadata.gz: e1f6abd1563021cdb01749dbef9cbcc19c0670e3c2113510d61755e8a2ff93d94ef72569f98d654ffe6f1a30eb8a2970ad13177708fbac3931e9a4e44349d5d8
7
+ data.tar.gz: da50c4fc6e74136788fca80ff866aac68c5fc7034f2d23b86f4313686252ed9419787f155a1b54386145d3fe2d325346f58be5da3c836562b4ed5e5542fe1f60
data/CHANGELOG ADDED
@@ -0,0 +1,4 @@
1
+ Version 2.1.0
2
+ Add loading sequence test and fix the bug of it.
3
+ Version 2.0.0
4
+ Refactor. But has a bug about loading sequence.
data/Rakefile CHANGED
@@ -2,7 +2,8 @@ require 'bundler/gem_tasks'
2
2
 
3
3
  desc "Running Test"
4
4
  task :test do
5
- # forgot how to include all spec files
6
- system "bundle exec rspec spec/models/*spec.rb --debugger --backtrace --fail-fast"
7
5
  system "bundle exec rspec spec/core/*spec.rb --debugger --backtrace --fail-fast"
6
+ (0..5).each do |num|
7
+ system "OneTouchSeq=#{num} bundle exec rspec spec/models/*spec.rb --debugger --backtrace --fail-fast"
8
+ end
8
9
  end
@@ -32,10 +32,12 @@ module OneTouch
32
32
  # add only one port, make sure pg is {portname: klassname}
33
33
  def add_new_port(pg)
34
34
  portname = pg.keys.first
35
- if port_group.has_key? portname
36
- self.port_group[portname].concat pg[portname]
37
- else
38
- self.port_group[portname] = pg[portname]
35
+ if portname # pg maybe equal {} and portname is nil
36
+ if port_group.has_key? portname
37
+ self.port_group[portname].concat pg[portname]
38
+ else
39
+ self.port_group[portname] = pg[portname]
40
+ end
39
41
  end
40
42
  end
41
43
 
@@ -75,9 +77,8 @@ module OneTouch
75
77
  module Bridge
76
78
 
77
79
  def self.included(base)
78
- RelationRecorder.update_or_new(bridge_klass: base.name, bridge_class: base)
80
+ RelationRecorder.update_or_new(bridge_klass: base.name, bridge_class: base, port_group: {})
79
81
  end
80
82
 
81
-
82
83
  end # END Bridge
83
84
  end
@@ -0,0 +1,16 @@
1
+ # Bridge with Context style
2
+ # The bridge class contains context attribute which defines the relation context between two ports
3
+ module OneTouch
4
+ module BridgeContext
5
+
6
+ class DependencyError
7
+
8
+ end
9
+
10
+ def self.included(base)
11
+ raise DependencyError unless new.respond_to? :context
12
+ end
13
+
14
+
15
+ end # END BridgeContext
16
+ end
@@ -9,10 +9,7 @@ module OneTouch
9
9
  module ActiveRecordExtension
10
10
  extend ActiveSupport::Concern
11
11
 
12
- included do
13
-
14
- end
15
-
12
+ # methods added here are added to ActiveRecord::Base, so make it as thin as possible
16
13
  module ClassMethods
17
14
 
18
15
  # Default is define two relations:
@@ -28,9 +25,8 @@ module OneTouch
28
25
  def acts_as_favor(opt={})
29
26
  include ::OneTouch::Bridge
30
27
  opt.reverse_merge!({:include_host_relation_module => true, :host_class_name => "User", :no_default_relations => false})
31
- class_attribute :host_relation_type, :favorable_relation_type, :instance_writer => false
32
-
33
- # method_name_of_host_klasses = "host_klasses_for_#{name.underscore}"
28
+ class_attribute :host_relation_type, :favorable_relation_type, :include_host_relation_module, :instance_writer => false
29
+ self.include_host_relation_module = opt[:include_host_relation_module]
34
30
 
35
31
  include ActsAsFavor
36
32
 
@@ -51,25 +47,10 @@ module OneTouch
51
47
  end
52
48
  end
53
49
 
50
+ # include Relation model and make favorable classes also include HostRelation if needed
51
+ # make sure the former loaded host class run method after_load_acts_as_favor
54
52
  include AfterAsFavor
55
53
 
56
- # TODO:
57
- # I should add more files to make here more clear
58
- # Some methods should be include first
59
- # And others should be include later
60
- # The following code should be in another file
61
-
62
- if opt[:include_host_relation_module]
63
- class_attribute :include_host_relation_module, :instance_writer => false
64
- self.include_host_relation_module = true
65
- add_host_relation_map(relation_recorder.port_group[:favorable], :be_favors, :host)
66
- end
67
-
68
- relation_recorder.port_group[:host].each do |klassname|
69
- klass = klassname.to_s.constantize
70
- klass.after_load_acts_as_favor if klass.respond_to? :after_load_acts_as_favor
71
- end
72
-
73
54
  end
74
55
 
75
56
  # Used in host class
@@ -80,7 +61,6 @@ module OneTouch
80
61
  include ::OneTouch::PortBuild
81
62
  opt.reverse_merge!(bridge_klass: "Favor", no_default_relations: false, portname: :host)
82
63
  append_relation(opt)
83
- # assign_cattr_in_favor_class(:host_klasses,opt)
84
64
  # Programmer Doc
85
65
  # The Name of has_many is stick to favors, to make it changable would cause some query problem
86
66
  # :as => :host can not be configured too, cause in act_as_favor the relation name was sticked
@@ -95,25 +75,11 @@ module OneTouch
95
75
  include ::OneTouch::PortBuild
96
76
  opt.reverse_merge!(bridge_klass: "Favor", no_default_relations: false, portname: :favorable)
97
77
  append_relation(opt)
98
- # assign_cattr_in_favor_class(:favorable_klasses,opt)
99
78
  unless opt[:no_default_relations]
100
79
  has_many :be_favors, :class_name => opt[:bridge_klass], :as => :favorable
101
80
  end
102
81
  include AsFavorable
103
- include HostRelation if favor_class.respond_to? :include_host_relation_module and favor_class.include_host_relation_module = true
104
- end
105
-
106
- private
107
-
108
- def add_host_relation_map(favorable_klasses, *two_connection_name)
109
- include Relations
110
- self.target_to_media = :be_favors
111
- self.media_to_host = :host
112
-
113
- favorable_klasses.each do |k|
114
- klass = k.to_s.constantize
115
- klass.send :include, HostRelation # host_relation model was added to favorable klass
116
- end
82
+ include HostRelation if favor_class.respond_to? :include_host_relation_module and favor_class.include_host_relation_module
117
83
  end
118
84
 
119
85
  end # End ClassMethods
@@ -17,7 +17,23 @@ module OneTouch
17
17
  scope :join_favorable, lambda { |type| joins("JOIN #{type.table_name} ON #{type.table_name}.id = #{table_name}.favorable_id AND #{table_name}.favorable_type = '#{type.to_s}'") }
18
18
  end
19
19
 
20
- end
20
+ if include_host_relation_module
21
+ include Relations
22
+ self.target_to_media = :be_favors
23
+ self.media_to_host = :host
24
+ (relation_recorder.port_group[:favorable] || []).each do |k|
25
+ klass = k.to_s.constantize
26
+ klass.send :include, HostRelation # host_relation model was added to favorable klass
27
+ end
28
+
29
+ end
30
+
31
+ (relation_recorder.port_group[:host] || []).each do |klassname|
32
+ klass = klassname.to_s.constantize
33
+ klass.after_load_acts_as_favor if klass.respond_to? :after_load_acts_as_favor
34
+ end
35
+
36
+ end # END class_eval
21
37
 
22
38
  module ClassMethods
23
39
 
@@ -1,4 +1,5 @@
1
1
  module OneTouch
2
+ # Following are all queries # we should list dependency about these queries
2
3
  module AsFavorable
3
4
  extend ActiveSupport::Concern
4
5
 
@@ -1,3 +1,3 @@
1
1
  module OneTouch
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
data/readme.md CHANGED
@@ -1,3 +1,5 @@
1
+ ### Upgrade warnning
2
+ There is a bug in 2.0.0 which happened on special loading sequence.I am fixing on it. So dont upgrade it to 2.0 right now.
1
3
  ### Intro
2
4
  In webapp, many data is generated by just one click like focus someone, dislike some post.This gem make it easy.
3
5
 
@@ -1,22 +1,12 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  require 'one_touch'
3
3
 
4
- class Bridge; end
5
-
6
4
  class Favor; end
7
5
 
8
- class User
9
- include OneTouch::PortBuild
10
- end
6
+ class User; include OneTouch::PortBuild; end
11
7
 
12
8
  class Admin; include OneTouch::PortBuild; end
13
9
 
14
- class Post; end
15
-
16
- class Comment; end
17
-
18
- class Port; end
19
-
20
10
  User.append_relation(bridge_klass: 'Favor', portname: :host)
21
11
  Admin.append_relation(bridge_klass: 'Favor', portname: :host)
22
12
 
@@ -38,7 +38,8 @@ describe OneTouch::AsFavorable do
38
38
  context Favor do
39
39
  it "build relations should return a hash of relation between favorable and host" do
40
40
  Favor.build_relations.instance_of?(Hash).should be_true
41
- Favor.build_relations.first.first.should eq(["favorite", Tag.first]) # means first key
41
+ # Favor.build_relations.first.first.should eq(["favorite", Tag.first]) # means first key
42
+ Favor.build_relations.keys.should include(["favorite", Tag.first]) # means first key
42
43
  end
43
44
 
44
45
  end
data/spec/spec_helper.rb CHANGED
@@ -7,24 +7,71 @@ require File.join(File.dirname(__FILE__), 'fake_app')
7
7
  require 'rspec/rails'
8
8
  require 'models/load_test_data'
9
9
 
10
+ def puts_marks
11
+ puts ""
12
+ puts "#####################"
13
+ end
14
+
15
+ # The three different model type loading sequence
16
+ def loading_sequence
17
+
18
+ case ENV['OneTouchSeq'].to_i
19
+ when 0
20
+ puts_marks
21
+ puts "Loading Sequence 0: favorable -> host -> favor"
22
+ Tag.as_favorable
23
+ User.as_favor_host
24
+ User.as_favorable
25
+ Favor.acts_as_favor :host_class_name => nil
26
+ when 1
27
+ puts_marks
28
+ puts "Loading Sequence 1: favorable -> favor -> host"
29
+ Tag.as_favorable
30
+ Favor.acts_as_favor :host_class_name => nil
31
+ User.as_favor_host
32
+ User.as_favorable
33
+ when 2
34
+ puts_marks
35
+ puts "Loading Sequence 2: host -> favorable -> favor"
36
+ User.as_favor_host
37
+ Tag.as_favorable
38
+ Favor.acts_as_favor :host_class_name => nil
39
+ User.as_favorable
40
+ when 3
41
+ puts_marks
42
+ puts "Loading Sequence 3: host -> favor -> favorable"
43
+ User.as_favor_host
44
+ Favor.acts_as_favor :host_class_name => nil
45
+ Tag.as_favorable
46
+ User.as_favorable
47
+ when 4
48
+ puts_marks
49
+ puts "Loading Sequence 4: favor -> host -> favorable"
50
+ Favor.acts_as_favor :host_class_name => nil
51
+ User.as_favor_host
52
+ User.as_favorable
53
+ Tag.as_favorable
54
+ when 5
55
+ puts_marks
56
+ puts "Loading Sequence 5: favor -> favorable -> host"
57
+ Favor.acts_as_favor :host_class_name => nil
58
+ User.as_favorable
59
+ User.as_favor_host
60
+ Tag.as_favorable
61
+ end
62
+ end
63
+
10
64
 
11
65
  RSpec.configure do |config|
12
66
  config.use_transactional_fixtures = true
13
67
 
14
68
  config.before :all do
15
69
  #CreateAllTables.down if ActiveRecord::Base.connection.table_exists? 'favors'
16
- CreateAllTables.up unless ActiveRecord::Base.connection.table_exists? 'favors'
17
-
18
- Tag.as_favorable
70
+ unless ActiveRecord::Base.connection.table_exists? 'favors'
71
+ CreateAllTables.up
72
+ loading_sequence
73
+ end
74
+ # we has at least three type of loading sequence
19
75
 
20
- User.as_favor_host
21
-
22
- User.as_favorable
23
- Favor.acts_as_favor :host_class_name => nil
24
- # TestingFoo.acts_as_favor
25
- # Tag.as_favorable :be_tagging_favors, :klass => "Tagging"
26
- # Ask.as_favor_host :tagging_favors, :klass => "Tagging"
27
- # Tagging.acts_as_favor :host_class_name => nil, :favorable_klass_name => :Tag, :include_favor_relations_module => true
28
- # relation should be in another module
29
76
  end
30
77
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: one_touch
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - raykin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-24 00:00:00.000000000 Z
11
+ date: 2013-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -46,10 +46,12 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - .gitignore
49
+ - CHANGELOG
49
50
  - Gemfile
50
51
  - Rakefile
51
52
  - lib/one_touch.rb
52
53
  - lib/one_touch/core/bridge.rb
54
+ - lib/one_touch/core/bridge_context.rb
53
55
  - lib/one_touch/engine.rb
54
56
  - lib/one_touch/models/active_record_extension.rb
55
57
  - lib/one_touch/models/acts_as_favor.rb