one_touch 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,7 +8,7 @@ module OneTouch
8
8
  class_attribute :cons_context, :cons_context_match, :context_relation, :instance_writer => false
9
9
  self.cons_context = self::CONTEXT
10
10
  self.cons_context_match = self::CONTEXT_MATCH
11
- self.context_relation = self::CONTEXT_RELATION if defined? CONTEXT_RELATION
11
+ self.context_relation = self::CONTEXT_RELATION if defined? self::CONTEXT_RELATION
12
12
 
13
13
  # Seems there are many hook work to do, oppose hook, belongs hook ....
14
14
  # All needed hook should be just about relations between contexts
@@ -1,3 +1,3 @@
1
1
  module OneTouch
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/one_touch.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["raykin"]
9
9
  s.email = ["raykincoldxiao@gmail.com"]
10
10
  s.homepage = ""
11
- s.summary = %q{ One Touch is used for recording relation between resources }
12
- s.description = %q{ One Touch makes one click operation simple }
11
+ s.summary = %q{ It is used for recording relation between resources }
12
+ s.description = %q{ Make one click operation simple }
13
13
 
14
14
  s.rubyforge_project = "one_touch"
15
15
 
data/readme.md CHANGED
@@ -13,63 +13,58 @@ version ~> 2 will support Rails3.1 and need squeel
13
13
  Suppose we have User, Post and Tag model.We also has a Favor model which record the relations between users or between user and post.Favor model could be anyother model.
14
14
 
15
15
  Then we define:
16
- ```ruby
17
- class User; as_favor_host; as_favorable; end;
18
16
 
17
+ class User; as_favor_host; as_favorable; end;
19
18
  class Post; as_favorable; end;
20
-
21
19
  class Tag; as_favorable; end;
22
-
23
- # Make sure Favor has defined constants CONTEXT and CONTEXT_MATCH before acts_as_favor
24
- # The Favor column depend on the relations you defined
25
- # In this case, it would be id, user_id, favorable_id, favorable_type, context
26
- # Don't forget context column
20
+ Make sure Favor has defined constants CONTEXT and CONTEXT_MATCH before acts_as_favor
21
+ The Favor columns depend on the relations you defined
22
+ In this case, it would be id, user_id, favorable_id, favorable_type, context.
23
+ Don't forget context column.
27
24
  class Favor
28
25
  CONTEXT = Set.new(%w[focus favorite follow agree oppose buy subscribe])
29
26
  CONTEXT_MATCH = { :focus => [:Tag, :Post], :follow => [:User] }
30
27
 
31
28
  acts_as_favor
32
29
  end
33
- # The real relations between them are:
34
- # User has_many :favors, :class_name => "Favor", :as => :host
35
- # Post has_many :be_favors, :class_name => "Favor", :as => :favorable
36
- # Favor belongs_to :host, :class_name => "User"; belongs_to :favorable, :polymorphic => true
37
- # This is default setting
38
- ```ruby
30
+ The generated relations between them are:
31
+ User has_many :favors, :class_name => "Favor", :as => :host
32
+ Post has_many :be_favors, :class_name => "Favor", :as => :favorable
33
+ Favor belongs_to :host, :class_name => "User"; belongs_to :favorable, :polymorphic => true
34
+ This is default setting.
35
+
39
36
  You can define the relation by yourself.
40
- ```ruby
37
+
41
38
  class Favor
42
39
  belongs_to :host, :polymorphic => true
43
40
  belongs_to :favorable, :polymorphic => true
44
41
  acts_as_favor :no_default_relations => true
45
42
  end
46
- # make sure the relation name are host and favorable, they can not be changed
47
- ```ruby
43
+ Make sure the relation name are host and favorable, they can not be changed
44
+
48
45
  Or you want Favor model to be another name, Bridge.
49
- ```ruby
46
+
50
47
  class User
51
48
  as_favor_host :klass => "Bridge"
52
49
  end
53
- ```ruby
50
+
54
51
  In short, there are four relation names can not be configured, favors, be_favors, host and favorable.
55
52
  And if you change the Favor model name, make sure it consists in all applications.
56
53
 
57
54
  ## Features
58
55
  Favor.add_context and Favor.del_context can add or del favors. Ex:
59
- ```ruby
60
- # @host focus on @favorable
56
+
57
+ # add a record that @host focus on @favorable
61
58
  Favor.add_focus(@host, @favorable)
62
59
  #=> success return true, fail return error @favor object
63
60
  #=> could also
64
61
 
65
- # @host remove focus on @favorable
62
+ # remove a record. @host remove focus on @favorable
66
63
  Favor.del_focus(@host, @favorable)
67
64
 
68
- ```ruby
69
-
70
65
  ### Query Methods
71
66
  The most useful methods would be: favor_to, favored_by, allstars. They are all class methods.
72
- ```ruby
67
+
73
68
  User.favor_to(@user1, :follow) #=> return guys(an ActiveRelation object) who follows @user1, so you can define fans
74
69
  def fans
75
70
  User.favor_to(self, :follow)
@@ -84,27 +79,26 @@ The most useful methods would be: favor_to, favored_by, allstars. They are all c
84
79
  @user1.focus_tags
85
80
  # => return the tags which was focused by @user1
86
81
  @user1.favor?(@tag1, :focus) #=> return true if @user1 focus on @tag1
87
- ```ruby
82
+
88
83
  Actually the favor_to and favored_by are fundmental methods which many other methods based on
89
84
 
90
85
  #### Analyze Relation Data
91
86
 
92
87
  Use Favor.host_relations to get the relations of Users.
93
88
  But first you should define the relation mark rule.
94
- ```ruby
89
+
95
90
  class Favor
96
91
  def self.relation_rules
97
92
  { [:agree, :Answer] => 3, [:follow, :User] => 2, [:focus, :Tag] => 1 }
98
93
  end
99
94
  end
100
- ```ruby
101
95
 
102
96
  The results like:
103
- ```ruby
97
+
104
98
  Favor.host_relations
105
99
  # It a Hash, the first element is
106
100
  # => @user1 => { @user2 => 100, @user3 => 50, .... }
107
- ```ruby
101
+
108
102
  This means @user1 is more close to @user2 than @user3.Maybe the answers that @user1 and @user2 both agree are more than the answers that @user1 and @user2 both agree.Actually it depends on your mark rule, but it really shows there must be more common betweens @user1 and @user2.
109
103
  ##### Becare running host_relations is really time consumer, so run it in backend job and keep the results.
110
104
 
@@ -120,3 +114,6 @@ This means @user1 is more close to @user2 than @user3.Maybe the answers that @us
120
114
  ### Abstract Requirement
121
115
  Connect any two resource in one model.
122
116
  I really want to implement this gem as more abstract requirement.That means four relation names can be configured, But's not easy.
117
+
118
+ ### License
119
+ MIT
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: one_touch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-11 00:00:00.000000000Z
12
+ date: 2011-11-14 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &25065280 !ruby/object:Gem::Requirement
16
+ requirement: &25054060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,8 +21,8 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *25065280
25
- description: ! ' One Touch makes one click operation simple '
24
+ version_requirements: *25054060
25
+ description: ! ' Make one click operation simple '
26
26
  email:
27
27
  - raykincoldxiao@gmail.com
28
28
  executables: []
@@ -76,6 +76,6 @@ rubyforge_project: one_touch
76
76
  rubygems_version: 1.8.11
77
77
  signing_key:
78
78
  specification_version: 3
79
- summary: One Touch is used for recording relation between resources
79
+ summary: It is used for recording relation between resources
80
80
  test_files: []
81
81
  has_rdoc: