brendan-entrails 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
data/entrails.gemspec
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{entrails}
|
3
|
-
s.version = "1.0.
|
3
|
+
s.version = "1.0.5"
|
4
4
|
|
5
5
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Brendan Baldwin"]
|
9
|
-
s.date = "
|
9
|
+
s.date = "2009-01-29"
|
10
10
|
s.default_executable = %q{entrails}
|
11
11
|
s.description = "This is a collection of extensions to Rails internals that I've found to be absolutely indispensible since I implimented them. The real action is happening in the following two files at the moment: http://github.com/brendan/entrails/tree/master/lib/entrails/active_record/better_conditions.rb http://github.com/brendan/entrails/tree/master/lib/entrails/active_record/find_by_association.rb"
|
12
12
|
s.email = ["brendan@usergenic.com"]
|
@@ -1,3 +1,14 @@
|
|
1
|
+
# NamedRouteParameter is currently in the "hack" phase because its implementation
|
2
|
+
# essentially creates a duplicate route in memory for every named_route defined.
|
3
|
+
# The purpose of this hack is really to be able to determine which named_route is
|
4
|
+
# being recognized by simply tacking on a new parameter called :named_route.
|
5
|
+
#
|
6
|
+
# This can be helpful in shared partials where you may only want to display
|
7
|
+
# something for certain views and it would be nice to determine it from the
|
8
|
+
# named route. It is also very helpful if you need a concise standard name
|
9
|
+
# when analyzing the path from a local referer (indeed, this was the initial
|
10
|
+
# use case for its construction.)
|
11
|
+
#
|
1
12
|
module Entrails::ActionController::NamedRouteParameter
|
2
13
|
|
3
14
|
def add_named_route_with_named_route_parameter(name, path, options = {})
|
@@ -1,14 +1,46 @@
|
|
1
|
+
# TemplateForReferer, when included in ActionController::Base patches the built-in
|
2
|
+
# default_template_name method, which is used to determine what template to use in
|
3
|
+
# the app/views folder. It does this so that we can create special templates to
|
4
|
+
# respond to requests coming from specific named routes.
|
5
|
+
#
|
6
|
+
# Why? This can be useful when managing responses for requests coming to the same
|
7
|
+
# controller action from multiple contexts. This was created primarily to deal with
|
8
|
+
# context in an AJAX setting, where the javascript returned by an RJS file will
|
9
|
+
# depend on the current page in the browser, since you may be changing DOM structures
|
10
|
+
# specific to that page.
|
11
|
+
#
|
12
|
+
# Consider a social network site where you want to support giving users the ability
|
13
|
+
# to friend each other. You'll probably have a friendships resource which will respond
|
14
|
+
# to a post method, and you may want to support doing so via AJAX. Well in one case
|
15
|
+
# there may be an "add as friend" button on the user profile, which reacts by flipping
|
16
|
+
# the button to "remove friend". In another case you may have many buttons in a list
|
17
|
+
# which respond by redrawing the list and adding the new friend in another list.
|
18
|
+
#
|
19
|
+
# The solution provided by this module is to allow you to define templates based on
|
20
|
+
# the named_route from which the request is being issued/refered. So in the case of
|
21
|
+
# the button on the user profile, which would probably by the 'user' named route,
|
22
|
+
# you would define a create_for_user.js.rjs template to handle it in app/views/friendships.
|
23
|
+
# In the case of the list, say the users named route (i.e. the index of users),
|
24
|
+
# app/views/friendships/create_for_users.js.rjs
|
25
|
+
#
|
26
|
+
# If there is no specific template for the referer's named route or if the referer
|
27
|
+
# is not the local application, (determined by request.host) then we just revert to
|
28
|
+
# the default_template_name originally provided by Rails.
|
29
|
+
#
|
30
|
+
# Note that this behavior is not enabled just for rjs templates-- You can use it for
|
31
|
+
# any formats.
|
32
|
+
#
|
33
|
+
# Rails uses the controller and action names to determine the
|
34
|
+
# name of the template to load.
|
1
35
|
module Entrails::ActionController::TemplateForReferer
|
2
36
|
|
3
37
|
private
|
4
38
|
|
5
39
|
def default_template_name_with_template_for_referer
|
6
40
|
template_name = default_template_name_without_template_for_referer
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
template_name
|
11
|
-
end
|
41
|
+
template_name_for_referer = "#{template_name}_for_#{referer_named_route}"
|
42
|
+
return template_name_for_referer if template_exists?(template_name_for_referer)
|
43
|
+
template_name
|
12
44
|
end
|
13
45
|
|
14
46
|
def referer_host
|
@@ -39,4 +71,4 @@ module Entrails::ActionController::TemplateForReferer
|
|
39
71
|
host.alias_method_chain :default_template_name, :template_for_referer
|
40
72
|
end
|
41
73
|
|
42
|
-
end
|
74
|
+
end
|
@@ -163,7 +163,7 @@ module Entrails::ActiveRecord::FindByAssociation
|
|
163
163
|
match = /^find_or_(initialize|create)_by_([_a-zA-Z]\w*)$/.match(method_id.to_s) unless match
|
164
164
|
if match
|
165
165
|
action_type = ($1 =~ /by/) ? :finder : :instantiator
|
166
|
-
attribute_names =
|
166
|
+
attribute_names = $2.split(/_and_/)
|
167
167
|
options_argument = (arguments.size > attribute_names.size) ? arguments.last : {}
|
168
168
|
associations = {}
|
169
169
|
index = 0
|
@@ -241,7 +241,7 @@ module Entrails::ActiveRecord::FindByAssociation
|
|
241
241
|
# database engines. This hack has been shown to significantly benefit query times
|
242
242
|
# for mysql and sqlite3. (has not yet been tested with other engines.)
|
243
243
|
def use_derived_table_hack_for_subquery_optimization?
|
244
|
-
|
244
|
+
false
|
245
245
|
end
|
246
246
|
|
247
247
|
def self.extended(host)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brendan-entrails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brendan Baldwin
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-29 00:00:00 -08:00
|
13
13
|
default_executable: entrails
|
14
14
|
dependencies: []
|
15
15
|
|