Created
March 12, 2013 15:40
-
-
Save Odaeus/5143962 to your computer and use it in GitHub Desktop.
Discourse craziness
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
44) User previous_visit_at first time another call right after still has no value | |
Failure/Error: let(:user) { Fabricate(:user) } | |
NoMethodError: | |
undefined method `first' for nil:NilClass | |
# ./lib/pretty_text.rb:122:in `block in markdown' | |
# <internal:prelude>:10:in `synchronize' | |
# ./lib/pretty_text.rb:119:in `markdown' | |
# ./lib/pretty_text.rb:175:in `cook' | |
# ./app/models/user.rb:424:in `cook' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:429:in `_run__4302418198468556500__save__3765986560144774874__callbacks' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:385:in `_run_save_callbacks' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `run_callbacks' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/callbacks.rb:264:in `create_or_update' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/persistence.rb:104:in `save!' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/validations.rb:56:in `save!' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/attribute_methods/dirty.rb:33:in `save!' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:264:in `block in save!' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:208:in `transaction' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:311:in `with_transaction_returning_status' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:264:in `save!' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication/generator/base.rb:83:in `persist' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication/generator/base.rb:27:in `create' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication/schematic/definition.rb:62:in `block in fabricate' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication/schematic/definition.rb:61:in `instance_eval' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication/schematic/definition.rb:61:in `fabricate' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication/fabricator.rb:10:in `fabricate' | |
# /home/andrew/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/fabrication-2.5.4/lib/fabrication.rb:51:in `Fabricate' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def self.v8 | |
return @ctx unless @ctx.nil? | |
@ctx = V8::Context.new | |
@ctx["helpers"] = Helpers.new | |
@ctx.load(app_root + "app/assets/javascripts/external/Markdown.Converter.js") | |
@ctx.load(app_root + "app/assets/javascripts/external/twitter-text-1.5.0.js") | |
@ctx.load(app_root + "lib/headless-ember.js") | |
@ctx.load(app_root + "app/assets/javascripts/external/rsvp.js") | |
@ctx.load(Rails.configuration.ember.handlebars_location) | |
#@ctx.load(Rails.configuration.ember.ember_location) | |
@ctx.load(app_root + "app/assets/javascripts/external/sugar-1.3.5.js") | |
@ctx.eval("var Discourse = {}; Discourse.SiteSettings = #{SiteSetting.client_settings_json};") | |
@ctx.eval("var window = {}; window.devicePixelRatio = 2;") # hack to make code think stuff is retina | |
@ctx.load(app_root + "app/assets/javascripts/discourse/components/bbcode.js") | |
@ctx.load(app_root + "app/assets/javascripts/discourse/components/utilities.js") | |
@ctx.load(app_root + "app/assets/javascripts/discourse/components/markdown.js") | |
# Load server side javascripts | |
if DiscoursePluginRegistry.server_side_javascripts.present? | |
DiscoursePluginRegistry.server_side_javascripts.each do |ssjs| | |
@ctx.load(ssjs) | |
end | |
end | |
@ctx['quoteTemplate'] = File.open(app_root + 'app/assets/javascripts/discourse/templates/quote.js.shbrs') {|f| f.read} | |
@ctx['quoteEmailTemplate'] = File.open(app_root + 'lib/assets/quote_email.js.shbrs') {|f| f.read} | |
@ctx.eval("HANDLEBARS_TEMPLATES = { | |
'quote': Handlebars.compile(quoteTemplate), | |
'quote_email': Handlebars.compile(quoteEmailTemplate), | |
};") | |
@ctx | |
end | |
def self.markdown(text, opts=nil) | |
# we use the exact same markdown converter as the client | |
# TODO: use the same extensions on both client and server (in particular the template for mentions) | |
baked = nil | |
@mutex.synchronize do | |
# we need to do this to work in a multi site environment, many sites, many settings | |
v8.eval("Discourse.SiteSettings = #{SiteSetting.client_settings_json};") | |
v8.eval("Discourse.BaseUrl = 'http://#{RailsMultisite::ConnectionManagement.current_hostname}';") | |
v8['opts'] = opts || {} | |
v8['raw'] = text | |
v8.eval('opts["mentionLookup"] = function(u){return helpers.is_username_valid(u);}') | |
v8.eval('opts["lookupAvatar"] = function(p){return Discourse.Utilities.avatarImg({username: p, size: "tiny", avatarTemplate: helpers.avatar_template(p)});}') | |
baked = v8.eval('Discourse.Markdown.markdownConverter(opts).makeHtml(raw)') | |
end | |
# we need some minimal server side stuff, apply CDN and TODO filter disallowed markup | |
baked = apply_cdn(baked, Rails.configuration.action_controller.asset_host) | |
baked | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment