rlayout 0.4.1 → 0.5.1

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ Changes in version 0.5.1 (2009-3-9)
2
+ support rails 2.3
3
+
4
+ Changes in version 0.5.0 (2009-2-18)
5
+ support rails 2.2.2
6
+ use !request.get? to replace request.post?
7
+ hide persist method
8
+ fix arguments number error of destroy call back
9
+ use constant for layout parameter name in request
10
+ add process for protected attributes
11
+ abstract fetch_model for inheritance
12
+
13
+
1
14
  Changes in version 0.4.1 (2008-11-28)
2
15
  -------------------------------------
3
16
  fix bugs about inheritable hash attributes related to model
data/README CHANGED
@@ -1,4 +1,4 @@
1
- Rails Layout Extension, release 0.4.1 (Nov. 2008)
1
+ Rails Layout Extension, release 0.5.1 (Mar. 2009)
2
2
 
3
3
  Feature
4
4
  =======
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rake/gempackagetask'
3
3
  PKG_NAME = "rlayout"
4
- PKG_VERSION = "0.4.1"
4
+ PKG_VERSION = "0.5.1"
5
5
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
6
6
  PKG_FILES = FileList[
7
7
  '[A-Z]*',
@@ -1,26 +1,39 @@
1
1
  =begin Rlayout
2
2
  author: Leon Li(scorpio_leon@hotmail.com)
3
3
  =end
4
+
4
5
  module Rlayout
5
6
  module Layout
7
+ LAYOUT_PARAMETER = :layout if !defined?(LAYOUT_PARAMETER)
6
8
  def self.included(base)
7
- if base.method_defined?(:render_with_no_layout)
9
+ base.class_eval do
10
+ #for rails 2.1
11
+ if method_defined?(:render_with_no_layout)
12
+ base.class_eval do
13
+ alias_method :render, :render_with_a_layout_ext
14
+ end
15
+ end
16
+
17
+ #for rails 2.2
8
18
  base.class_eval do
9
- alias_method :render, :render_with_a_layout_ext
19
+ alias_method :_render_with_layout, :_render_with_layout_with_rlayout
10
20
  end
11
21
  end
22
+
12
23
  end
24
+
25
+ #for rails 2.1
13
26
  def render_with_a_layout_ext(options = nil, extra_options = {}, &block) #:nodoc:
14
27
  template_with_options = options.is_a?(Hash)
15
-
28
+
16
29
  #get layout from view
17
30
  options_new = options.dup.merge :layout => false if template_with_options
18
31
  content_for_layout = render_with_no_layout(options_new, extra_options, &block)
19
32
  new_layout = nil
20
33
  page_config = @template.instance_variable_get("@content_for_config")
21
- unless page_config.nil?
34
+ unless page_config.nil?
22
35
  page_config = page_config.strip
23
- page_config.split("\n").each do |pair|
36
+ page_config.split("\n").each do |pair|
24
37
  key, value = pair.split(": ")
25
38
  value = '' if value.nil?
26
39
  if key == 'layout'
@@ -30,16 +43,16 @@ module Rlayout
30
43
  end
31
44
  end
32
45
  end
33
- new_layout = params[:layout] if new_layout.nil? || new_layout.empty?
46
+ new_layout = params[LAYOUT_PARAMETER] if new_layout.nil? || new_layout.empty?
34
47
  unless new_layout.nil? || new_layout.empty?
35
- options ||= {}
36
- options[:layout] = new_layout == 'none' || new_layout == 'false' ? false : new_layout
48
+ options ||= {}
49
+ options[:layout] = new_layout == 'false' ? false : new_layout
37
50
  template_with_options = true
38
51
  end
39
-
52
+
40
53
  if (layout = pick_layout(template_with_options, options)) && apply_layout?(template_with_options, options)
41
54
  #assert_existence_of_template_file(layout)
42
-
55
+
43
56
  options = options.merge :layout => false if template_with_options
44
57
  logger.info("Rendering template within #{layout}") if logger
45
58
  #content_for_layout = render_with_no_layout(options, &block)
@@ -54,5 +67,60 @@ module Rlayout
54
67
  content_for_layout
55
68
  end
56
69
  end
70
+
71
+ #for rails 2.2
72
+ def _render_with_layout_with_rlayout(options, local_assigns, &block) #:nodoc:
73
+ partial_layout = options.delete(:layout)
74
+
75
+ if block_given?
76
+ begin
77
+ @_proc_for_layout = block
78
+ concat(render(options.merge(:partial => partial_layout)))
79
+ ensure
80
+ @_proc_for_layout = nil
81
+ end
82
+ else
83
+ begin
84
+
85
+ original_content_for_layout = @content_for_layout if defined?(@content_for_layout)
86
+ @content_for_layout = render(options)
87
+
88
+ #part 1 start to add for extract layout from page
89
+ pagel_layout = params[LAYOUT_PARAMETER] unless params[LAYOUT_PARAMETER].nil?
90
+ unless @content_for_config.nil?
91
+ @content_for_config.strip!
92
+ @content_for_config.split("\n").each do |pair|
93
+ key, value = pair.split(": ")
94
+ value = '' if value.nil?
95
+ if key == 'layout'
96
+ pagel_layout = value if pagel_layout.nil? || pagel_layout.empty?
97
+ else
98
+ instance_variable_set("@content_for_#{key}", value)
99
+ end
100
+ end
101
+ end
102
+
103
+ unless pagel_layout == 'false'
104
+ partial_layout = active_layout(pagel_layout) if pagel_layout.present?
105
+ #part 1 end to add for extract layout from page
106
+ if (options[:inline] || options[:file] || options[:text])
107
+ @cached_content_for_layout = @content_for_layout
108
+ render(:file => partial_layout, :locals => local_assigns)
109
+ else
110
+ render(options.merge(:partial => partial_layout))
111
+ end
112
+ #part 2 start to add for extract layout from page
113
+ else
114
+ @content_for_layout
115
+ end
116
+ #part 2 end to add for extract layout from page
117
+ ensure
118
+ @content_for_layout = original_content_for_layout
119
+ end
120
+ end
121
+ end
57
122
  end
58
- end
123
+ end
124
+ =begin Rlayout
125
+ author: Leon Li(scorpio_leon@hotmail.com)
126
+ =end
data/lib/rlayout/model.rb CHANGED
@@ -7,9 +7,72 @@ module Rlayout
7
7
  module Model
8
8
  def self.included(base)
9
9
  base.extend(ClassMethods)
10
- base.write_inheritable_attribute(:hidden_actions, base.hidden_actions - ['create', 'update', 'destroy'])
11
10
  end
12
-
11
+
12
+ def create
13
+ before_create if respond_to?(:before_create)
14
+ result = self.class.get_action_result(:create)
15
+ begin
16
+ execute_create
17
+ create_success_callback if respond_to?(:create_success_callback)
18
+ result = result[:success].dup
19
+ result_type = result.delete(:type)
20
+ rescue => e
21
+ create_error_callback(e) if respond_to?(:create_error_callback)
22
+ result = result[:error].dup
23
+ end
24
+ before_create_result if respond_to?(:before_create_result)
25
+ case result_type.to_s
26
+ when 'redirect'
27
+ redirect_to(self.class.parse_result(result, binding))
28
+ when 'render'
29
+ render(self.class.parse_result(result, binding))
30
+ end
31
+ end
32
+
33
+ def update
34
+ result = self.class.get_action_result(:update)
35
+ before_update if respond_to?(:before_update)
36
+ begin
37
+ execute_update
38
+ update_success_callback if respond_to?(:update_success_callback)
39
+ result = result[:success].dup
40
+ result_type = result.delete(:type)
41
+ rescue => e
42
+ update_error_callback(e) if respond_to?(:update_error_callback)
43
+ result = result[:error].dup
44
+ end
45
+ before_update_result if respond_to?(:before_update_result)
46
+ case result_type.to_s
47
+ when 'redirect'
48
+ redirect_to(self.class.parse_result(result, binding))
49
+ when 'render'
50
+ render(self.class.parse_result(result, binding))
51
+ end
52
+ end
53
+
54
+ def destroy
55
+ result = self.class.get_action_result(:destroy)
56
+ before_destroy if respond_to?(:before_destroy)
57
+ begin
58
+ execute_destroy
59
+ destroy_success_callback if respond_to?(:destroy_success_callback)
60
+ result = result[:success].dup
61
+ result_type = result.delete(:type)
62
+ rescue => e
63
+ destroy_error_callback(e) if respond_to?(:destroy_error_callback)
64
+ result = result[:error].dup
65
+ end
66
+ before_destroy_result if respond_to?(:before_destroy_result)
67
+ case result_type.to_s
68
+ when 'redirect'
69
+ redirect_to(self.class.parse_result(result, binding))
70
+ when 'render'
71
+ render(self.class.parse_result(result, binding))
72
+ end
73
+ end
74
+
75
+ protected
13
76
  def find_model_by_id
14
77
  self.class.get_model_class.find(params[:id])
15
78
  end
@@ -35,24 +98,22 @@ module Rlayout
35
98
  end
36
99
  end
37
100
  end
101
+
102
+ def fetch_model
103
+ if params[:id].present?
104
+ @model = find_model_by_id
105
+ else
106
+ @model = self.class.get_model_class.new
107
+ end
108
+ end
38
109
 
39
110
  def set_model
40
111
  if need_model?
41
112
  @model = nil
42
- unless params[:id].nil?
43
- @model = find_model_by_id
44
- if @model && request.post?
45
- params_key = self.class.get_full_model_name.gsub(/\//, "_").to_sym
46
- @model.attributes=params[params_key] unless @model.nil? || params[params_key].nil?
47
- end
48
- else
49
- if request.post?
50
- params_key = self.class.get_full_model_name.gsub(/\//, "_").to_sym
51
- #notice, don't use @model.attributes= after new due to mock require
52
- @model = self.class.get_model_class.new(params[params_key])
53
- else
54
- @model = self.class.get_model_class.new
55
- end
113
+ fetch_model
114
+ if @model && !request.get?
115
+ params_key = self.class.get_full_model_name.gsub(/\//, "_").to_sym
116
+ @model.attributes=params[params_key] unless @model.nil? || params[params_key].nil?
56
117
  end
57
118
  #bind @model to @#{self.class.get_model_name}
58
119
  instance_variable_set("@#{self.class.get_model_name}", @model)
@@ -90,68 +151,7 @@ module Rlayout
90
151
  end
91
152
  end
92
153
 
93
- def create
94
- before_create if respond_to?(:before_create)
95
- result = self.class.get_action_result(:create)
96
- begin
97
- execute_create
98
- create_success_callback if respond_to?(:create_success_callback)
99
- result = result[:success].dup
100
- result_type = result.delete(:type)
101
- rescue => e
102
- create_error_callback(e) if respond_to?(:create_error_callback)
103
- result = result[:error].dup
104
- end
105
- before_create_result if respond_to?(:before_create_result)
106
- case result_type.to_s
107
- when 'redirect'
108
- redirect_to(self.class.parse_result(result, binding))
109
- when 'render'
110
- render(self.class.parse_result(result, binding))
111
- end
112
- end
113
154
 
114
- def update
115
- result = self.class.get_action_result(:update)
116
- before_update if respond_to?(:before_update)
117
- begin
118
- execute_update
119
- update_success_callback if respond_to?(:update_success_callback)
120
- result = result[:success].dup
121
- result_type = result.delete(:type)
122
- rescue => e
123
- update_error_callback(e) if respond_to?(:update_error_callback)
124
- result = result[:error].dup
125
- end
126
- before_update_result if respond_to?(:before_update_result)
127
- case result_type.to_s
128
- when 'redirect'
129
- redirect_to(self.class.parse_result(result, binding))
130
- when 'render'
131
- render(self.class.parse_result(result, binding))
132
- end
133
- end
134
-
135
- def destroy
136
- result = self.class.get_action_result(:destroy)
137
- before_destroy if respond_to?(:before_destroy)
138
- begin
139
- execute_destroy
140
- destroy_success_callback(e) if respond_to?(:destroy_success_callback)
141
- result = result[:success].dup
142
- result_type = result.delete(:type)
143
- rescue => e
144
- destroy_error_callback if respond_to?(:destroy_error_callback)
145
- result = result[:error].dup
146
- end
147
- before_destroy_result if respond_to?(:before_destroy_result)
148
- case result_type.to_s
149
- when 'redirect'
150
- redirect_to(self.class.parse_result(result, binding))
151
- when 'render'
152
- render(self.class.parse_result(result, binding))
153
- end
154
- end
155
155
 
156
156
  module ClassMethods
157
157
 
@@ -3,7 +3,14 @@ author: Leon Li(scorpio_leon@hotmail.com)
3
3
  =end
4
4
  require 'rlayout/layout'
5
5
 
6
- ActionController::Base.class_eval do
7
- #for page layout
8
- include Rlayout::Layout
9
- end
6
+ if RAILS_GEM_VERSION >= '2.2'
7
+ ActionView::Base.class_eval do
8
+ #for rails 2.2
9
+ include Rlayout::Layout
10
+ end
11
+ else
12
+ ActionController::Base.class_eval do
13
+ #for rails 2.1
14
+ include Rlayout::Layout
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rlayout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leon Li
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-28 00:00:00 +08:00
12
+ date: 2009-03-09 00:00:00 +08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  requirements: []
70
70
 
71
71
  rubyforge_project: Rails Layout Extension
72
- rubygems_version: 1.2.0
72
+ rubygems_version: 1.3.1
73
73
  signing_key:
74
74
  specification_version: 2
75
75
  summary: improve rails layout such as simplifying content_for usage and let erb file can determine layout