resonance 0.3.3 → 0.4.0

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: 2d7c4bdd752ddca3396d4f24024f08a59984ac57
4
- data.tar.gz: 805b258f973929a7bb6c9140e43b82bfca6c8efd
3
+ metadata.gz: b9d54325b0019a5cea69f4f76ceb55217e55e86f
4
+ data.tar.gz: 866b1fd32593d8e279cc1f6a3b2e7bc6ff21d35c
5
5
  SHA512:
6
- metadata.gz: 42f61b120a9f5d34c488589f05fcf12201e61662dc55fc200c754c9c42b69ec1addd9b1d46361002ce41e47982d0985f31bcb60d7f101a03ba2d0a30701cb784
7
- data.tar.gz: ea456df88231423c5890c70d096a6f7b3c020ba47b65f2034f200d3235be0d231708e16cb867392f0835d98ed7b3fb530acdca27015a3c129d1ea77b5eacaa4e
6
+ metadata.gz: c2fdb2ffd19c860f8ad5e16c96b244d6868d6e7173268ac2bc6e82305d870d9da3196792501069b489d94c4d1ea17b71e91cb6dc7bb137c0e40a37868617695b
7
+ data.tar.gz: 8d696bccc8430b5d9e2ffc29c77c964e42f42890a8e7ac132aaa750505874e5fa12badff7f289f562aba5c0f5f04b0664cd559647b9c4b37716a0df4a26a3171
data/README.md CHANGED
@@ -51,7 +51,7 @@ Then, define `Resonatable` module to `app/models/concerns/resonatable.rb`:
51
51
  module Resonatable
52
52
  include Resonance
53
53
 
54
- resonate :user, with: :user, by: :follow
54
+ resonate :user, target: :user, action: :follow
55
55
  end
56
56
  ```
57
57
 
@@ -106,7 +106,7 @@ This case adds like feature to User and Post model.
106
106
  module Resonatable
107
107
  include Resonance
108
108
 
109
- resonate :user, with: :post, by: :like
109
+ resonate :user, target: :post, action: :like
110
110
  end
111
111
 
112
112
  class User < ActiveRecord::Base
@@ -137,8 +137,8 @@ At the same time, some `resonate` methods are able to be defined:
137
137
  module Resonatable
138
138
  include Resonance
139
139
 
140
- resonate :user, with: :user, by: :follow
141
- resonate :user, with: :post, by: :like
140
+ resonate :user, target: :user, action: :follow
141
+ resonate :user, target: :post, action: :like
142
142
  end
143
143
  ```
144
144
 
@@ -147,7 +147,10 @@ end
147
147
  If you want to use other foreign key name, you can define it by `:foreign_key` option.
148
148
 
149
149
  ```ruby
150
- resonate :user, with: :post, by: :like, foreign_key: :post_id # Default is `:target_post_id`
150
+ resonate :user,
151
+ target: :post,
152
+ action: :like,
153
+ foreign_key: { target: :post_id } # Default key is `:target_post_id`
151
154
  ```
152
155
 
153
156
  ## Contributing
@@ -11,12 +11,20 @@ module Resonance
11
11
  module ClassMethods
12
12
  include Resonance::Supports::Converter
13
13
 
14
- def resonate(subject, with: nil, by: nil, **options)
15
- @roles = { source: subject, target: with, action: by }
16
- @options = options
14
+ def resonate(source, target: nil, action: nil, foreign_key: {})
15
+ [source, target, action].each do |role|
16
+ if role.nil?
17
+ raise Resonance::Errors::ArgumentError, 'Passed argument is not a valid'
18
+ end
19
+ end
20
+
21
+ source = source.to_s
22
+ target = target.to_s
23
+ action = action.to_s
17
24
 
18
- if @roles.values.any?(&:nil?)
19
- raise Resonance::Errors::ArgumentError, 'Passed argument is not a valid'
25
+ foreign_key.tap do |key|
26
+ key[:source] = :"#{source}_id" if key[:source].nil?
27
+ key[:target] = :"target_#{target}_id" if key[:target].nil?
20
28
  end
21
29
 
22
30
  classify(source).class_eval <<-EOS
@@ -33,7 +41,7 @@ module Resonance
33
41
  return
34
42
  end
35
43
 
36
- #{pluralize(action)}.create(#{foreign_key}: target.id)
44
+ #{pluralize(action)}.create(#{foreign_key[:target]}: target.id)
37
45
  end
38
46
 
39
47
  def un#{action}(target)
@@ -41,17 +49,17 @@ module Resonance
41
49
  return
42
50
  end
43
51
 
44
- #{pluralize(action)}.find_by(#{foreign_key}: target.id).destroy
52
+ #{pluralize(action)}.find_by(#{foreign_key[:target]}: target.id).destroy
45
53
  end
46
54
 
47
55
  def #{progressize(action)}?(target)
48
- #{pluralize(action)}.exists?(#{foreign_key}: target.id)
56
+ #{pluralize(action)}.exists?(#{foreign_key[:target]}: target.id)
49
57
  end
50
58
  EOS
51
59
 
52
60
  classify(target).class_eval <<-EOS
53
61
  has_many :#{pluralize(action)}_as_target,
54
- foreign_key: :#{foreign_key},
62
+ foreign_key: :#{foreign_key[:target]},
55
63
  class_name: '#{classify(action)}',
56
64
  dependent: :destroy
57
65
 
@@ -60,7 +68,7 @@ module Resonance
60
68
  source: :#{source}
61
69
 
62
70
  def #{pastize(action)}_by?(source)
63
- source.#{pluralize(action)}.exists?(#{foreign_key}: id)
71
+ source.#{pluralize(action)}.exists?(#{foreign_key[:target]}: id)
64
72
  end
65
73
  EOS
66
74
 
@@ -69,26 +77,8 @@ module Resonance
69
77
 
70
78
  belongs_to :target_#{target},
71
79
  class_name: '#{classify(target)}',
72
- foreign_key: :#{foreign_key}
80
+ foreign_key: :#{foreign_key[:target]}
73
81
  EOS
74
82
  end
75
-
76
- private
77
-
78
- def source
79
- @roles[:source].to_s
80
- end
81
-
82
- def target
83
- @roles[:target].to_s
84
- end
85
-
86
- def action
87
- @roles[:action].to_s
88
- end
89
-
90
- def foreign_key
91
- @options[:foreign_key] || "target_#{target}_id"
92
- end
93
83
  end
94
84
  end
@@ -1,3 +1,3 @@
1
1
  module Resonance
2
- VERSION = '0.3.3'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -29,8 +29,8 @@ class Like < ActiveRecord::Base; end
29
29
  module Resonatable
30
30
  include Resonance
31
31
 
32
- resonate :user, with: :user, by: :follow
33
- resonate :user, with: :post, by: :like, foreign_key: :post_id
32
+ resonate :user, target: :user, action: :follow
33
+ resonate :user, target: :post, action: :like, foreign_key: { target: :post_id }
34
34
  end
35
35
 
36
36
  class User
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resonance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kami
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-29 00:00:00.000000000 Z
11
+ date: 2016-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport