Module: Markable::ActsAsMarkable::MarkableInstanceMethods
- Defined in:
- lib/markable/acts_as_markable.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_sym, *args) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/markable/acts_as_markable.rb', line 83
def method_missing(method_sym, *args)
Markable.models.each do |model_name|
if method_sym.to_s =~ Regexp.new("^#{model_name.downcase.pluralize}_have_marked_as(_[\\w_]+)?$")
model_name.constantize
if self.methods.include?(method_sym) return self.method(method_sym).call(*args) end
end
end
super
rescue
super
end
|
Instance Method Details
#have_marked_as_by(mark, target) ⇒ Object
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
# File 'lib/markable/acts_as_markable.rb', line 149
def have_marked_as_by(mark, target)
result = target.joins(:marker_marks).where({
:marks => {
:mark => mark.to_s,
:markable_id => self.id,
:markable_type => self.class.name
}
})
markable = self
result.class_eval do
define_method :<< do |markers|
Array.wrap(markers).each do |marker|
marker.set_mark(mark, markable)
end
self
end
define_method :delete do |markers|
Markable.can_mark_or_raise?(markers, markable, mark)
Array.wrap(markers).each do |marker|
marker.remove_mark(mark, markable)
end
self
end
end
result
end
|
#mark_as(mark, markers) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/markable/acts_as_markable.rb', line 98
def mark_as(mark, markers)
Array.wrap(markers).each do |marker|
Markable.can_mark_or_raise?(marker, self, mark)
params = {
:markable_id => self.id,
:markable_type => self.class.name,
:marker_id => marker.id,
:marker_type => marker.class.name,
:mark => mark.to_s
}
Markable::Mark.create(params) unless Markable::Mark.exists?(params)
end
end
|
#marked_as?(mark, options = {}) ⇒ Boolean
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/markable/acts_as_markable.rb', line 112
def marked_as?(mark, options = {})
by = options[:by]
params = {
:markable_id => self.id,
:markable_type => self.class.name,
:mark => mark.to_s
}
if by.present?
Markable.can_mark_or_raise?(by, self, mark)
params[:marker_id] = by.id
params[:marker_type] = by.class.name
end
Markable::Mark.exists?(params)
end
|
#unmark(mark, options = {}) ⇒ Object
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# File 'lib/markable/acts_as_markable.rb', line 127
def unmark(mark, options = {})
by = options[:by]
if by.present?
Markable.can_mark_or_raise?(by, self, mark)
Array.wrap(by).each do |marker|
Markable::Mark.delete_all({
:markable_id => self.id,
:markable_type => self.class.name,
:marker_id => marker.id,
:marker_type => marker.class.name,
:mark => mark.to_s
})
end
else
Markable::Mark.delete_all({
:markable_id => self.id,
:markable_type => self.class.name,
:mark => mark.to_s
})
end
end
|