wagn 1.13.0.pre1 → 1.13.0.pre2

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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/controllers/card_controller.rb +3 -3
  4. data/db/migrate_cards/20140307231621_user_data_to_cards.rb +5 -1
  5. data/lib/card.rb +5 -7
  6. data/lib/card/chunk.rb +1 -0
  7. data/lib/card/codename.rb +48 -31
  8. data/lib/card/env.rb +0 -1
  9. data/lib/card/exceptions.rb +3 -3
  10. data/lib/card/format.rb +89 -166
  11. data/lib/card/generators/set/USAGE +1 -1
  12. data/lib/card/loader.rb +1 -1
  13. data/lib/card/set.rb +196 -112
  14. data/lib/card/set_pattern.rb +37 -71
  15. data/lib/wagn/cache.rb +8 -7
  16. data/lib/wagn/commands.rb +1 -1
  17. data/lib/wagn/config/environments/development.rb +1 -1
  18. data/lib/wagn/config/initializers/paperclip.rb +1 -0
  19. data/lib/wagn/generators/wagn/templates/Gemfile +59 -55
  20. data/lib/wagn/location.rb +2 -2
  21. data/mods/core/formats/html_format.rb +2 -6
  22. data/mods/core/formats/text_format.rb +1 -1
  23. data/mods/core/set_patterns/01_all.rb +0 -5
  24. data/mods/core/set_patterns/02_all_plus.rb +1 -3
  25. data/mods/core/set_patterns/07_type_plus_right.rb +0 -1
  26. data/mods/core/sets/all/active_card.rb +1 -1
  27. data/mods/core/sets/all/name.rb +3 -2
  28. data/mods/core/sets/all/pattern.rb +9 -23
  29. data/mods/core/sets/all/phases.rb +27 -13
  30. data/mods/core/sets/all/rules.rb +3 -3
  31. data/mods/core/sets/all/templating.rb +5 -2
  32. data/mods/core/sets/all/tracked_attributes.rb +2 -1
  33. data/mods/core/sets/right/structure.rb +13 -0
  34. data/mods/{standard → core}/sets/type/plain_text.rb +0 -0
  35. data/mods/standard/formats/email_html_format.rb +1 -1
  36. data/mods/standard/lib/card/machine.rb +16 -12
  37. data/mods/standard/lib/card/machine_input.rb +1 -1
  38. data/mods/standard/sets/all/attach.rb +1 -1
  39. data/mods/standard/sets/all/base.rb +92 -94
  40. data/mods/standard/sets/all/follow.rb +1 -1
  41. data/mods/standard/sets/all/rich_html.rb +5 -3
  42. data/mods/standard/sets/all/rss.rb +12 -5
  43. data/mods/standard/sets/right/account.rb +1 -1
  44. data/mods/standard/sets/right/add_help.rb +3 -1
  45. data/mods/standard/sets/right/comment.rb +92 -3
  46. data/mods/standard/sets/right/create.rb +2 -87
  47. data/mods/standard/sets/right/default.rb +3 -2
  48. data/mods/standard/sets/right/delete.rb +2 -5
  49. data/mods/standard/sets/right/help.rb +3 -1
  50. data/mods/standard/sets/right/machine_output.rb +9 -7
  51. data/mods/standard/sets/right/read.rb +2 -5
  52. data/mods/standard/sets/right/style.rb +3 -2
  53. data/mods/standard/sets/right/update.rb +2 -5
  54. data/mods/standard/sets/rstar/rules.rb +0 -2
  55. data/mods/standard/sets/self/head.rb +2 -3
  56. data/mods/standard/sets/self/navbox.rb +0 -7
  57. data/mods/standard/sets/self/recent.rb +2 -2
  58. data/mods/standard/sets/self/search.rb +10 -3
  59. data/mods/standard/sets/self/signin.rb +3 -3
  60. data/mods/standard/sets/type/cardtype.rb +2 -2
  61. data/mods/standard/sets/type/coffee_script.rb +4 -4
  62. data/mods/standard/sets/type/css.rb +12 -4
  63. data/mods/standard/sets/type/image.rb +19 -19
  64. data/mods/standard/sets/type/java_script.rb +1 -1
  65. data/mods/standard/sets/type/layout_type.rb +3 -2
  66. data/mods/standard/sets/type/pointer.rb +3 -2
  67. data/mods/standard/sets/type/scss.rb +6 -34
  68. data/mods/standard/sets/type/search_type.rb +22 -16
  69. data/mods/standard/sets/type/set.rb +2 -2
  70. data/mods/standard/sets/type/setting.rb +2 -2
  71. data/mods/standard/sets/type/skin.rb +4 -18
  72. data/spec/controllers/card_controller_spec.rb +2 -2
  73. data/spec/lib/card/flexmail_spec.rb +1 -0
  74. data/spec/lib/card/format_spec.rb +9 -9
  75. data/spec/lib/card/loader_spec.rb +1 -2
  76. data/spec/lib/card/name_spec.rb +7 -1
  77. data/spec/lib/card/set_pattern_spec.rb +5 -5
  78. data/spec/mods/core/sets/all/pattern_spec.rb +0 -9
  79. data/spec/mods/core/sets/all/phases_spec.rb +2 -1
  80. data/spec/mods/standard/lib/machine_input_spec.rb +20 -4
  81. data/spec/mods/standard/lib/machine_spec.rb +64 -14
  82. data/spec/mods/standard/sets/right/machine_output_spec.rb +2 -17
  83. data/spec/mods/standard/sets/right/script_spec.rb +9 -5
  84. data/spec/mods/standard/sets/right/style_spec.rb +11 -5
  85. data/spec/mods/standard/sets/type/coffeescript_spec.rb +5 -7
  86. data/spec/mods/standard/sets/type/css_spec.rb +3 -4
  87. data/spec/mods/standard/sets/type/javascript_spec.rb +3 -5
  88. data/spec/mods/standard/sets/type/scss_spec.rb +4 -7
  89. data/spec/mods/standard/sets/type/skin_spec.rb +29 -8
  90. metadata +5 -4
  91. data/mods/standard/sets/right/structure.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89e0f648f23fed4223cd97e9b6c26867861a4643
4
- data.tar.gz: 1b1a3f53e55ee36f81169a33c739a31d060eb27a
3
+ metadata.gz: b8faf3945e01dfc7e56a2b1edb8b1f3e2ef1b033
4
+ data.tar.gz: 3cdc4a0268f4352f583822daae068459f07ae855
5
5
  SHA512:
6
- metadata.gz: be2ed2d9ac1f1c7257063e76cf8aaded8c44062c19a337605b927d648f8a0e68b29361c7118268d84e029f189d9778468cb43f00b160d192d35d76f77635d8b1
7
- data.tar.gz: da2fbeb91f17eff7a020a64c29902a8d4d512965f0e1c62ddbca35d1dc6c1f04939b5fe8c3eda10a296aa924b350204172d23f1b924f6f7d389cf5b892522a44
6
+ metadata.gz: 00098a43f7e3956d1f653660b67f9df87a7ec0120e80edd9ee83047bbd263bc1cc5d96f5c33b7bcbcdb09be6a6d83533583d9a69bc278bcbd2de3387b5dc1fb9
7
+ data.tar.gz: 61f0a6c1bbad7a336f7cfae12e059a34d67dd55f6e22609a38117d8eeea8b446d0e37b8b1f62d8ab597faff45f702132879488634010bf14795ec2b2545a50a6
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.13.0.pre1
1
+ 1.13.0.pre2
@@ -138,7 +138,7 @@ class CardController < ActionController::Base
138
138
  end
139
139
  end
140
140
  @card.selected_revision_id = params[:rev].to_i if params[:rev]
141
-
141
+
142
142
  Card::Env[:main_name] = params[:main] || (card && card.name) || ''
143
143
  render_errors if card.errors.any?
144
144
  true
@@ -252,7 +252,7 @@ class CardController < ActionController::Base
252
252
  end
253
253
 
254
254
 
255
- rescue_from Exception do |exception|
255
+ rescue_from StandardError do |exception|
256
256
  Rails.logger.info "exception = #{exception.class}: #{exception.message}"
257
257
 
258
258
  @card ||= Card.new
@@ -262,7 +262,7 @@ class CardController < ActionController::Base
262
262
  ## some are redundantly defined in view
263
263
  when Card::Oops, Card::Query
264
264
  card.errors.add :exception, exception.message
265
- # Card::Oops error messages are visible to end users and are generally not treated as bugs.
265
+ # these error messages are visible to end users and are generally not treated as bugs.
266
266
  # Probably want to rename accordingly.
267
267
  :errors
268
268
  when Card::PermissionDenied, Wagn::PermissionDenied
@@ -59,7 +59,11 @@ class UserDataToCards < ActiveRecord::Migration
59
59
  cardname = "#{base.name}+#{Card[:account].name}+#{Card[field].name}"
60
60
  user_field = ( field==:password ? :crypted_password : field )
61
61
  if content = user.send( user_field )
62
- Card.create! date_args.merge( :name=>cardname, :content=>content)
62
+ begin
63
+ Card.create! date_args.merge( :name=>cardname, :content=>content)
64
+ rescue => e
65
+ puts "error importing #{cardname}: #{e.message}"
66
+ end
63
67
  end
64
68
  end
65
69
  end
data/lib/card.rb CHANGED
@@ -1,34 +1,31 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  class Card < ActiveRecord::Base
4
+
4
5
  require_dependency 'card/active_record_ext'
5
-
6
6
  require_dependency 'card/codename'
7
7
  require_dependency 'card/query'
8
- require_dependency 'card/set_pattern'
8
+ require_dependency 'card/set_pattern'
9
9
  require_dependency 'card/set'
10
10
  require_dependency 'card/format'
11
11
  require_dependency 'card/exceptions'
12
12
  require_dependency 'card/auth'
13
13
  require_dependency 'card/loader'
14
14
 
15
- extend Set
16
-
17
15
  has_many :revisions, :order => :id
18
16
  has_many :references_from, :class_name => :Reference, :foreign_key => :referee_id
19
17
  has_many :references_to, :class_name => :Reference, :foreign_key => :referer_id
20
18
 
21
- cache_attributes 'name', 'type_id' #Review - still worth it in Rails 3?
19
+ cache_attributes 'name', 'type_id' # review - still worth it in Rails 3?
22
20
 
23
21
  cattr_accessor :set_patterns, :error_codes
24
22
  @@set_patterns, @@error_codes = [], {}
25
23
 
26
24
  attr_writer :selected_revision_id #writer because read method is in mod (and does not override upon load)
27
- attr_accessor :action, :supercard,
25
+ attr_accessor :action, :supercard,
28
26
  :comment, :comment_author, # obviated soon
29
27
  :update_referencers # wrong mechanism for this
30
28
 
31
-
32
29
  define_callbacks :approve, :store, :extend
33
30
 
34
31
  before_validation :approve
@@ -40,3 +37,4 @@ class Card < ActiveRecord::Base
40
37
  tracks :content # we can phase this out and just use "dirty" handling once current content is stored in the cards table
41
38
 
42
39
  end
40
+
data/lib/card/chunk.rb CHANGED
@@ -47,6 +47,7 @@ class Card
47
47
  register_list :default, [ :URI, :HostURI, :EmailURI, :EscapedLiteral, :Include, :Link ]
48
48
  register_list :references, [ :EscapedLiteral, :Include, :Link ]
49
49
  register_list :inclusion_only, [ :Include ]
50
+ register_list :inclusion_and_link, [ :Include, :Link ]
50
51
 
51
52
  class Abstract
52
53
  class_attribute :config
data/lib/card/codename.rb CHANGED
@@ -1,47 +1,64 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
- class Card::Codename
3
+ class Card
4
+ class Codename
4
5
 
5
- @@codehash=nil
6
+ @@codehash=nil
6
7
 
7
- class << self
8
- # returns codename for id and vice versa. not in love with this api --efm
9
- def [] key
10
- if !key.nil?
11
- key = key.to_sym unless Integer===key
12
- codehash[key]
8
+ class << self
9
+ # returns codename for id and vice versa. not in love with this api --efm
10
+ def [] key
11
+ if !key.nil?
12
+ key = key.to_sym unless Integer===key
13
+ codehash[key]
14
+ end
13
15
  end
14
- end
15
16
 
16
- def codehash
17
- @@codehash || load_hash
18
- end
17
+ def codehash
18
+ @@codehash || load_hash
19
+ end
19
20
 
20
- def reset_cache
21
- @@codehash = nil
22
- end
21
+ def reset_cache
22
+ @@codehash = nil
23
+ end
23
24
 
24
- #only used in migration
25
- def bootdata hash
26
- @@codehash = hash
27
- end
25
+ #only used in migration
26
+ def bootdata hash
27
+ @@codehash = hash
28
+ end
28
29
 
29
30
 
30
- private
31
+ private
31
32
 
32
- def load_hash
33
- @@codehash = {}
34
- sql = 'select id, codename from cards where codename is not NULL'
35
- ActiveRecord::Base.connection.select_all(sql).each do |row|
36
- #FIXME: remove duplicate checks, put them in other tools
37
- code, cid = row['codename'].to_sym, row['id'].to_i
38
- if @@codehash.has_key?(code) or @@codehash.has_key?(cid)
39
- warn "dup code ID:#{cid} (#{@@codehash[code]}), CD:#{code} (#{@@codehash[cid]})"
33
+ def load_hash
34
+ @@codehash = {}
35
+ sql = 'select id, codename from cards where codename is not NULL'
36
+ ActiveRecord::Base.connection.select_all(sql).each do |row|
37
+ #FIXME: remove duplicate checks, put them in other tools
38
+ code, cid = row['codename'].to_sym, row['id'].to_i
39
+ if @@codehash.has_key?(code) or @@codehash.has_key?(cid)
40
+ warn "dup code ID:#{cid} (#{@@codehash[code]}), CD:#{code} (#{@@codehash[cid]})"
41
+ end
42
+ @@codehash[code] = cid; @@codehash[cid] = code
40
43
  end
41
- @@codehash[code] = cid; @@codehash[cid] = code
42
- end
43
44
 
44
- @@codehash
45
+ @@codehash
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+
52
+ def self.const_missing const
53
+ if const.to_s =~ /^([A-Z]\S*)ID$/ and code=$1.underscore.to_sym
54
+ if card_id = Codename[code]
55
+ const_set const, card_id
56
+ else
57
+ raise "Missing codename #{code} (#{const})"
58
+ end
59
+ else
60
+ super
45
61
  end
46
62
  end
63
+
47
64
  end
data/lib/card/env.rb CHANGED
@@ -63,4 +63,3 @@ class Card
63
63
  end
64
64
  Env.reset
65
65
  end
66
-
@@ -4,7 +4,7 @@ class Card
4
4
  class Error < StandardError #code problem
5
5
  end
6
6
 
7
- class Oops < Error # wagneer problem
7
+ class Oops < Error # wagneer problem (rename!)
8
8
  end
9
9
 
10
10
  class BadQuery < Error
@@ -27,10 +27,10 @@ class Card
27
27
  end
28
28
  end
29
29
 
30
- class Abort < Exception
30
+ class Abort < StandardError
31
31
  attr_reader :status
32
32
 
33
- def initialize status=:failure, msg=''
33
+ def initialize status, msg=''
34
34
  @status = status
35
35
  super msg
36
36
  end
data/lib/card/format.rb CHANGED
@@ -9,14 +9,14 @@ class Card
9
9
  :layout=>:layout, :new=>:edit, :setup=>:edit, :normal=>:normal, :template=>:template } #should be set in views
10
10
 
11
11
  cattr_accessor :ajax_call, :registered, :max_depth
12
- [ :perms, :denial_views, :subset_views, :error_codes, :view_tags, :aliases ].each do |acc|
12
+ [ :perms, :denial_views, :error_codes, :view_tags, :aliases ].each do |acc|
13
13
  cattr_accessor acc
14
14
  self.send "#{acc}=", {}
15
15
  end
16
16
  @@max_char_count = 200 #should come from Wagn.config
17
17
  @@max_depth = 20 # ditto
18
18
 
19
- attr_reader :card, :root, :parent, :vars
19
+ attr_reader :card, :root, :parent, :main_opts
20
20
  attr_accessor :form, :error_status, :inclusion_opts
21
21
 
22
22
  class << self
@@ -25,77 +25,16 @@ class Card
25
25
  def register format
26
26
  @@registered << format.to_s
27
27
  end
28
-
29
- def get_format format
30
- fkey = @@aliases[ format ] || format
31
- Card.const_get( "#{fkey.to_s.camelize}Format" )
32
- end
33
-
34
- def view view, *args, &final
35
- view = view.to_name.key.to_sym
36
- if block_given?
37
- define_view view, args[0], &final
38
- else
39
- opts = Hash===args[0] ? args.shift : nil
40
- alias_view view, opts, args.shift
41
- end
42
- end
43
-
44
- def define_view view, opts, &final
45
- opts ||= {}
46
- opts.merge! Card::Set.current[:opts]
47
-
48
- extract_class_vars view, opts
49
- view_key = get_set_key view, opts
50
-
51
- define_method "_final_#{view_key}", &final
52
- define_render_methods view
53
- end
54
-
55
- def alias_view alias_view, opts, referent_view=nil
56
- subset_views[alias_view] = true if opts && !opts.empty?
57
-
58
- referent_view ||= alias_view
59
- alias_opts = Card::Set.current[:opts]
60
- referent_view_key = get_set_key referent_view, (opts || alias_opts)
61
- alias_view_key = get_set_key alias_view, alias_opts
62
-
63
- define_method "_final_#{alias_view_key}" do |*a|
64
- send "_final_#{referent_view_key}", *a
65
- end
66
- define_render_methods alias_view
67
- end
68
-
69
- def define_render_methods view
70
- # note: this could also be done with method_missing. is this any faster?
71
- if !method_defined? "render_#{view}"
72
- define_method "_render_#{view}" do |*a|
73
- send_final_render_method view, *a
74
- end
75
-
76
- define_method "render_#{view}" do |*a|
77
- send "_render_#{ ok_view view, *a }", *a
78
- end
79
- end
28
+
29
+ def format_class_name format
30
+ f = format.to_s
31
+ f = @@aliases[ f ] || f
32
+ "#{ f.camelize }Format"
80
33
  end
81
-
82
34
 
83
-
84
35
 
85
- def new card, opts={}
86
- klass = self != Format ? self : get_format( (opts[:format] || :html).to_sym )
87
- new_format = klass.allocate
88
- new_format.send :initialize, card, opts
89
- new_format
90
- end
91
-
92
- def tagged view, tag
93
- view and tag and view_tags = @@view_tags[view.to_sym] and view_tags[tag.to_sym]
94
- end
95
-
96
- private
97
-
98
36
  def extract_class_vars view, opts
37
+ return unless opts.present?
99
38
  perms[view] = opts.delete(:perms) if opts[:perms]
100
39
  error_codes[view] = opts.delete(:error_code) if opts[:error_code]
101
40
  denial_views[view]= opts.delete(:denial) if opts[:denial]
@@ -106,43 +45,62 @@ class Card
106
45
  view_tags[view][tag] = true
107
46
  end
108
47
  end
109
-
110
- if !opts.empty?
111
- subset_views[view] = true
48
+
49
+ end
50
+
51
+ def new card, opts={}
52
+ if self != Format
53
+ super
54
+ else
55
+ klass = Card.const_get format_class_name( opts[:format] || :html )
56
+ self == klass ? super : klass.new( card, opts )
112
57
  end
113
58
  end
59
+
60
+ def tagged view, tag
61
+ view and tag and view_tags = @@view_tags[view.to_sym] and view_tags[tag.to_sym]
62
+ end
63
+
114
64
 
115
- def get_set_key selection_key, opts
116
- unless pkey = Card::Set.method_key(opts)
117
- raise "bad method_key opts: #{pkey.inspect} #{opts.inspect}"
65
+ def format_ancestry
66
+ ancestry = [ self ]
67
+ unless self == Card::Format
68
+ ancestry = ancestry + superclass.format_ancestry
118
69
  end
119
- key = pkey.blank? ? selection_key : "#{pkey}_#{selection_key}"
120
- #warn "gvkey #{selection_key}, #{opts.inspect} R:#{key}"
121
- key.to_sym
70
+ ancestry
122
71
  end
72
+
123
73
  end
124
74
 
125
75
 
126
76
  #~~~~~ INSTANCE METHODS
127
77
 
128
78
  def initialize card, opts={}
129
- @card = card
79
+ @card = card or raise Card::Error, "format initialized without card"
130
80
  opts.each do |key, value|
131
81
  instance_variable_set "@#{key}", value
132
82
  end
133
83
 
134
- @mode ||= :normal
135
- @char_count = @depth = 0
136
- @root = self
137
- @vars = {}
84
+ @mode ||= :normal
85
+ @depth ||= 0
86
+ @root ||= self
138
87
 
139
88
  @context_names ||= if params[:slot] && context_name_list = params[:slot][:name_context]
140
89
  context_name_list.split(',').map &:to_name
141
90
  else [] end
91
+
92
+ include_set_format_modules
93
+ self
142
94
  end
143
95
 
144
-
145
-
96
+ def include_set_format_modules
97
+ self.class.format_ancestry.reverse.each do |klass|
98
+ card.set_format_modules( klass ).each do |m|
99
+ singleton_class.send :include, m
100
+ end
101
+ end
102
+ end
103
+
146
104
  def inclusion_defaults
147
105
  @inclusion_defaults ||= begin
148
106
  defaults = get_inclusion_defaults.clone
@@ -196,11 +154,22 @@ class Card
196
154
  end
197
155
  end
198
156
 
199
- def method_missing method_id, *args, &proc
200
- proc = proc {|*a| raw yield *a } if proc
201
- #Rails.logger.warn "mmiss #{self.class}, #{@card.inspect}, #{caller[0]}, #{method_id}"
202
- response = template.send method_id, *args, &proc
203
- String===response ? template.raw( response ) : response
157
+ def method_missing method, *opts, &proc
158
+ case method
159
+ when /(_)?(optional_)?render(_(\w+))?/
160
+ view = $3 ? $4 : opts.shift
161
+ args = opts[0] ? opts.shift.clone : {}
162
+ args.merge!( :optional=>true, :default_visibility=>opts.shift) if $2
163
+ args[ :skip_permissions ] = true if $1
164
+ render view, args
165
+ when /^_view_(\w+)/
166
+ view = @current_view || $1
167
+ unsupported_view view
168
+ else
169
+ proc = proc { |*a| raw yield *a } if proc
170
+ response = root.template.send method, *opts, &proc
171
+ String===response ? root.template.raw( response ) : response
172
+ end
204
173
  end
205
174
 
206
175
  #
@@ -210,33 +179,20 @@ class Card
210
179
 
211
180
 
212
181
  def render view, args={}
213
- prefix = args.delete(:allowed) ? '_' : ''
214
- method = "#{prefix}render_#{canonicalize_view view}"
215
- if respond_to? method
216
- send method, args
217
- else
218
- unknown_view view
219
- end
220
- end
221
-
222
- def _render view, args={}
223
- args[:allowed] = true
224
- render view, args
225
- end
226
-
227
- def optional_render view, args, default=:show
228
- if show_view? view, args, default
229
- view = args["optional_#{ canonicalize_view view }_view".to_sym] || view
230
- render view, args
182
+ unless args.delete(:optional) && !show_view?( view, args )
183
+ @current_view = view = ok_view canonicalize_view( view ), args
184
+ args = default_render_args view, args
185
+ with_inclusion_mode view do
186
+ send "_view_#{ view }", args
187
+ end
231
188
  end
189
+ rescue => e
190
+ rescue_view e, view
232
191
  end
233
192
 
234
- def _optional_render view, args, default=:show
235
- args[:allowed] = true
236
- optional_render view, args, default
237
- end
238
193
 
239
- def show_view? view, args, default=:show
194
+ def show_view? view, args
195
+ default = args.delete(:default_visibility) || :show #FIXME - ugly
240
196
  view_key = canonicalize_view view
241
197
  api_option = args["optional_#{ view_key }".to_sym]
242
198
  case
@@ -267,24 +223,6 @@ class Card
267
223
  end
268
224
 
269
225
 
270
- def send_final_render_method view, *a
271
- @current_view = view
272
- args = default_render_args view, *a
273
- if final_method = view_method(view)
274
- with_inclusion_mode view do
275
- send final_method, args
276
- end
277
- else
278
- unsupported_view view
279
- end
280
- rescue Exception=>e
281
- if Rails.env =~ /^cucumber|test$/
282
- raise e
283
- else
284
- rescue_view e, view
285
- end
286
- end
287
-
288
226
  def default_render_args view, a=nil
289
227
  args = case a
290
228
  when nil ; {}
@@ -303,20 +241,20 @@ class Card
303
241
 
304
242
 
305
243
  def rescue_view e, view
306
- controller.send :notify_airbrake, e if Airbrake.configuration.api_key
307
- Rails.logger.info "\nError rendering #{error_cardname} / #{view}: #{e.class} : #{e.message}"
308
- Rails.logger.debug "BT: #{e.backtrace*"\n "}"
309
- rendering_error e, view
244
+ if Rails.env =~ /^cucumber|test$/
245
+ raise e
246
+ else
247
+ controller.send :notify_airbrake, e if Airbrake.configuration.api_key
248
+ Rails.logger.info "\nError rendering #{error_cardname} / #{view}: #{e.class} : #{e.message}"
249
+ Rails.logger.debug "BT: #{e.backtrace*"\n "}"
250
+ rendering_error e, view
251
+ end
310
252
  end
311
253
 
312
254
  def error_cardname
313
255
  card && card.name.present? ? card.name : 'unknown card'
314
256
  end
315
257
 
316
- def unknown_view view
317
- "unknown view: #{view}"
318
- end
319
-
320
258
  def unsupported_view view
321
259
  "view (#{view}) not supported for #{error_cardname}"
322
260
  end
@@ -330,21 +268,13 @@ class Card
330
268
  #
331
269
 
332
270
  def subformat subcard
333
- #should consider calling "child"
334
271
  subcard = Card.fetch( subcard, :new=>{} ) if String===subcard
335
- sub = self.clone
336
- sub.initialize_subformat subcard, self
272
+ sub = self.class.new subcard, :parent=>self, :depth=>@depth+1, :root=>@root,
273
+ # FIXME - the following four should not be hard-coded here. need a generalized mechanism
274
+ # for attribute inheritance
275
+ :context_names=>@context_names, :mode=>@mode, :mainline=>@mainline, :form=>@form
337
276
  end
338
277
 
339
- def initialize_subformat subcard, parent
340
- @parent = parent
341
- @card = subcard
342
- @vars = {}
343
- @char_count = 0
344
- @depth += 1
345
- @inclusion_defaults = @inclusion_opts = @showname = @ok = nil
346
- self
347
- end
348
278
 
349
279
  def process_content content=nil, opts={}
350
280
  process_content_object(content, opts).to_s
@@ -352,18 +282,19 @@ class Card
352
282
 
353
283
  def process_content_object content=nil, opts={}
354
284
  return content unless card
355
- content = card.content if content.nil?
285
+ content = card.raw_content || '' if content.nil?
356
286
 
357
287
  obj_content = Card::Content===content ? content : Card::Content.new( content, format=self )
358
288
 
359
- card.update_references( obj_content, true ) if card.references_expired # I thik we need this generalized
289
+ card.update_references( obj_content, refresh=true ) if card.references_expired # I thik we need this generalized
360
290
 
361
291
  obj_content.process_content_object do |chunk_opts|
362
292
  prepare_nest chunk_opts.merge(opts) { yield }
363
293
  end
364
294
  end
365
295
 
366
- def ok_view view, args={}
296
+ def ok_view view, args={}
297
+ return view if args.delete :skip_permissions
367
298
  approved_view = case
368
299
  when @depth >= @@max_depth ; :too_deep # prevent recursion. @depth tracks subformats
369
300
  when @@perms[view] == :none ; view # view requires no permissions
@@ -417,17 +348,7 @@ class Card
417
348
  DEPRECATED_VIEWS[view_key] || view_key
418
349
  end
419
350
  end
420
-
421
- def view_method view
422
- return "_final_#{view}" unless card && @@subset_views[view]
423
- card.method_keys.each do |method_key|
424
- meth = "_final_"+(method_key.blank? ? "#{view}" : "#{method_key}_#{view}")
425
- #warn "looking up #{method_key}, M:#{meth} for #{card.name}"
426
- return meth if respond_to?(meth.to_sym)
427
- end
428
- nil
429
- end
430
-
351
+
431
352
  def with_inclusion_mode mode
432
353
  if switch_mode = INCLUSION_MODES[ mode ] and @mode != switch_mode
433
354
  old_mode, @mode = @mode, switch_mode
@@ -442,6 +363,8 @@ class Card
442
363
  end
443
364
 
444
365
  def prepare_nest opts
366
+ @char_count ||= 0
367
+
445
368
  opts ||= {}
446
369
  case
447
370
  when opts.has_key?( :comment ) ; opts[:comment] # as in commented code
@@ -456,7 +379,7 @@ class Card
456
379
  end
457
380
 
458
381
  def expand_main opts
459
- opts.merge! @main_opts if @main_opts
382
+ opts.merge! root.main_opts if root.main_opts
460
383
  legacy_main_opts_tweaks! opts
461
384
 
462
385
  opts[:view] ||= :open