transit 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +19 -11
- data/app/assets/images/transit/icon24x24.png +0 -0
- data/app/assets/images/transit/icon24x24_files.png +0 -0
- data/app/assets/images/transit/jplayer.swf +0 -0
- data/app/assets/images/transit/uploadify.swf +0 -0
- data/app/assets/images/transit/video_player.swf +0 -0
- data/app/assets/javascripts/jqtools/expose.js +224 -0
- data/app/assets/javascripts/jqtools/flashembed.js +300 -0
- data/app/assets/javascripts/jqtools/overlay.js +294 -0
- data/app/assets/javascripts/jqtools/scrollable.js +3 -0
- data/app/assets/javascripts/jqtools/scrollable/autoscroll.js +81 -0
- data/app/assets/javascripts/jqtools/scrollable/base.js +335 -0
- data/app/assets/javascripts/jqtools/scrollable/navigator.js +139 -0
- data/app/assets/javascripts/jqtools/validator.js +590 -0
- data/app/assets/javascripts/jqueryui/accordion.js +611 -0
- data/app/assets/javascripts/jqueryui/autocomplete.js +612 -0
- data/app/assets/javascripts/jqueryui/button.js +388 -0
- data/app/assets/javascripts/jqueryui/core.js +312 -0
- data/app/assets/javascripts/jqueryui/datepicker.js +1791 -0
- data/app/assets/javascripts/jqueryui/dialog.js +878 -0
- data/app/assets/javascripts/jqueryui/draggable.js +815 -0
- data/app/assets/javascripts/jqueryui/droppable.js +285 -0
- data/app/assets/javascripts/jqueryui/effects/blind.js +49 -0
- data/app/assets/javascripts/jqueryui/effects/bounce.js +78 -0
- data/app/assets/javascripts/jqueryui/effects/clip.js +54 -0
- data/app/assets/javascripts/jqueryui/effects/core.js +746 -0
- data/app/assets/javascripts/jqueryui/effects/drop.js +50 -0
- data/app/assets/javascripts/jqueryui/effects/explode.js +79 -0
- data/app/assets/javascripts/jqueryui/effects/fade.js +32 -0
- data/app/assets/javascripts/jqueryui/effects/fold.js +56 -0
- data/app/assets/javascripts/jqueryui/effects/highlight.js +50 -0
- data/app/assets/javascripts/jqueryui/effects/pulsate.js +51 -0
- data/app/assets/javascripts/jqueryui/effects/scale.js +178 -0
- data/app/assets/javascripts/jqueryui/effects/shake.js +57 -0
- data/app/assets/javascripts/jqueryui/effects/slide.js +50 -0
- data/app/assets/javascripts/jqueryui/effects/transfer.js +45 -0
- data/app/assets/javascripts/jqueryui/mouse.js +160 -0
- data/app/assets/javascripts/jqueryui/position.js +252 -0
- data/app/assets/javascripts/jqueryui/progressbar.js +109 -0
- data/app/assets/javascripts/jqueryui/resizable.js +814 -0
- data/app/assets/javascripts/jqueryui/selectable.js +266 -0
- data/app/assets/javascripts/jqueryui/slider.js +666 -0
- data/app/assets/javascripts/jqueryui/sortable.js +1077 -0
- data/app/assets/javascripts/jqueryui/tabs.js +758 -0
- data/app/assets/javascripts/jqueryui/widget.js +262 -0
- data/app/assets/javascripts/libs/backbone.js +1152 -0
- data/app/assets/javascripts/libs/cookie.js +89 -0
- data/app/assets/javascripts/libs/fileinput.js +130 -0
- data/app/assets/javascripts/libs/jplayer.js +1768 -0
- data/app/assets/javascripts/libs/proper.js +541 -0
- data/app/assets/javascripts/libs/sanitize.js +282 -0
- data/app/assets/javascripts/libs/selecttolist.js +75 -0
- data/app/assets/javascripts/libs/underscore.js +807 -0
- data/app/assets/javascripts/libs/uploadify.js +677 -0
- data/app/assets/javascripts/libs/wymeditor.js +9538 -0
- data/app/assets/javascripts/transit.js +4 -0
- data/app/assets/javascripts/transit/admin.js +22 -0
- data/app/assets/javascripts/transit/admin/contexts.js +52 -0
- data/app/assets/javascripts/transit/admin/fields.js +36 -0
- data/app/assets/javascripts/transit/admin/upload.js +109 -0
- data/app/assets/javascripts/transit/config.js.erb +101 -0
- data/app/assets/javascripts/transit/contexts/audio.js +39 -0
- data/app/assets/javascripts/transit/contexts/video.js +79 -0
- data/app/assets/javascripts/transit/core.js +171 -0
- data/app/assets/javascripts/transit/frontend.js +3 -0
- data/app/assets/javascripts/transit/lib/base64.js +120 -0
- data/app/assets/javascripts/transit/lib/editor.js +177 -0
- data/app/assets/javascripts/transit/views/audio_player.jst +22 -0
- data/app/assets/javascripts/transit/views/editor_toolbar.jst +12 -0
- data/app/assets/javascripts/transit/views/file_upload.jst +5 -0
- data/app/assets/javascripts/transit/views/video_player.jst +20 -0
- data/app/assets/javascripts/transit/views/wym_box.jst +4 -0
- data/app/assets/javascripts/transit/views/wym_iframe.jst +3 -0
- data/app/assets/stylesheets/transit.css.scss.erb +42 -0
- data/app/assets/stylesheets/transit/forms.css.scss +66 -0
- data/app/assets/stylesheets/transit/media/audio.css.scss +65 -0
- data/app/assets/stylesheets/transit/media/video.css.scss +30 -0
- data/app/assets/stylesheets/transit/panel.css.scss +100 -0
- data/app/assets/stylesheets/transit/ui.css.scss +507 -0
- data/app/controllers/pages_controller.rb +3 -0
- data/app/controllers/posts_controller.rb +3 -0
- data/app/controllers/transit/assets_controller.rb +38 -0
- data/app/controllers/transit/contexts_controller.rb +12 -9
- data/app/controllers/transit/pages_controller.rb +26 -0
- data/app/controllers/transit/posts_controller.rb +31 -0
- data/app/controllers/transit/topics_controller.rb +5 -0
- data/app/controllers/transit_controller.rb +16 -0
- data/app/helpers/transit/admin_helper.rb +43 -0
- data/app/helpers/transit/form_helper.rb +17 -0
- data/app/helpers/transit/package_helper.rb +41 -0
- data/app/helpers/transit/pagination_helper.rb +58 -0
- data/app/helpers/transit_helper.rb +42 -0
- data/app/models/comment.rb +37 -0
- data/app/models/contexts/audio.rb +12 -0
- data/app/models/{text.rb → contexts/text.rb} +0 -0
- data/app/models/contexts/video.rb +24 -0
- data/app/models/topic.rb +19 -0
- data/app/models/transit/asset.rb +68 -0
- data/{lib → app/models}/transit/context.rb +29 -0
- data/app/views/contexts/_text.html.erb +1 -1
- data/app/views/posts/index.rss.builder +18 -0
- data/app/views/transit/assets/_file.html.erb +4 -0
- data/app/views/transit/assets/_image.html.erb +13 -0
- data/app/views/transit/assets/create.js.erb +8 -0
- data/app/views/transit/assets/destroy.js.erb +3 -0
- data/app/views/transit/assets/manage.html.erb +20 -0
- data/app/views/transit/contexts/_audio.html.erb +18 -0
- data/app/views/transit/contexts/_text.html.erb +6 -0
- data/app/views/transit/contexts/_video.html.erb +13 -0
- data/app/views/transit/contexts/destroy.js.erb +1 -0
- data/app/views/transit/contexts/index.html.erb +5 -0
- data/app/views/transit/contexts/new.js.erb +7 -0
- data/app/views/transit/contexts/show.html.erb +8 -0
- data/app/views/transit/index.html.erb +26 -0
- data/app/views/transit/index.js.erb +1 -0
- data/app/views/transit/interface/post_panel.html.erb +96 -0
- data/app/views/transit/pages/_table.html.erb +7 -0
- data/app/views/transit/pages/edit.html.erb +17 -0
- data/app/views/transit/pages/index.html.erb +17 -0
- data/app/views/transit/pages/update.js.erb +1 -0
- data/app/views/transit/posts/_form.html.erb +49 -0
- data/app/views/transit/posts/edit.html.erb +14 -0
- data/app/views/transit/posts/new.html.erb +21 -0
- data/app/views/transit/table.html.erb +13 -0
- data/app/views/transit/table.js.erb +8 -0
- data/app/views/transit/topics/manage.html.erb +28 -0
- data/config/locales/en.yml +22 -0
- data/config/routes.rb +3 -3
- data/lib/transit.rb +51 -17
- data/lib/transit/admin.rb +85 -0
- data/lib/transit/builders/form_builder.rb +319 -0
- data/lib/transit/builders/jst_builder.rb +38 -0
- data/lib/transit/builders/package_builder.rb +45 -0
- data/lib/transit/config.rb +20 -0
- data/lib/transit/controller/generator.rb +42 -0
- data/lib/transit/controller/responder.rb +34 -0
- data/lib/transit/core_ext.rb +18 -0
- data/lib/transit/errors/resource_not_found.rb +6 -0
- data/lib/transit/model/assets.rb +14 -0
- data/lib/transit/model/attachments.rb +55 -0
- data/lib/transit/model/auto_increment.rb +22 -0
- data/lib/transit/model/base.rb +56 -0
- data/lib/transit/model/comments.rb +19 -0
- data/lib/transit/model/hooks.rb +38 -0
- data/lib/transit/model/owners.rb +14 -0
- data/lib/transit/model/paginator.rb +92 -0
- data/lib/transit/model/topics.rb +14 -0
- data/lib/transit/package/page.rb +20 -12
- data/lib/transit/package/post.rb +87 -33
- data/lib/transit/package/post/validations.rb +14 -0
- data/lib/transit/rails/engine.rb +29 -13
- data/lib/transit/rails/railtie.rb +31 -0
- data/lib/transit/rails/routing.rb +11 -6
- data/lib/transit/services.rb +13 -0
- data/lib/transit/services/base.rb +14 -0
- data/lib/transit/services/facebook.rb +13 -0
- data/lib/transit/services/ted.rb +10 -0
- data/lib/transit/services/twitter.rb +13 -0
- data/lib/transit/services/vimeo.rb +10 -0
- data/lib/transit/services/you_tube.rb +12 -0
- data/lib/transit/version.rb +1 -1
- metadata +178 -31
- data/app/assets/stylesheets/includes/_compat.scss +0 -24
- data/app/assets/stylesheets/includes/_defaults.scss +0 -99
- data/app/assets/stylesheets/includes/_global.scss +0 -16
- data/app/assets/stylesheets/includes/_imports.scss +0 -27
- data/app/assets/stylesheets/includes/_mixins.scss +0 -38
- data/app/assets/stylesheets/includes/_setup.scss +0 -85
- data/app/assets/stylesheets/layout.css.scss +0 -29
- data/app/assets/stylesheets/transit.css +0 -3
- data/app/controllers/application_controller.rb +0 -5
- data/app/controllers/transit/index_controller.rb +0 -7
- data/app/controllers/transit/packages_controller.rb +0 -64
- data/app/controllers/transit/transit_controller.rb +0 -4
- data/app/helpers/routing_helpers.rb +0 -7
- data/app/models/audio.rb +0 -4
- data/app/models/package_asset.rb +0 -11
- data/app/models/video.rb +0 -8
- data/app/views/contexts/_audio.html.erb +0 -1
- data/app/views/contexts/_video.html.erb +0 -1
- data/app/views/layouts/transit.html.erb +0 -31
- data/app/views/transit/index/index.html.erb +0 -0
- data/lib/transit/helpers/controller_helpers.rb +0 -40
- data/lib/transit/helpers/model_helpers.rb +0 -26
- data/lib/transit/package.rb +0 -25
- data/lib/transit/package/base.rb +0 -49
@@ -0,0 +1,38 @@
|
|
1
|
+
module Transit
|
2
|
+
module Builders
|
3
|
+
class JstBuilder < Tilt::Template
|
4
|
+
|
5
|
+
self.default_mime_type = 'application/javascript'
|
6
|
+
|
7
|
+
def prepare
|
8
|
+
end
|
9
|
+
|
10
|
+
def evaluate(scope, locals, &block)
|
11
|
+
<<-JST
|
12
|
+
(function() {
|
13
|
+
try{
|
14
|
+
transit.template.add(#{scope.logical_path.inspect}, "#{sanitize_js(data)}");
|
15
|
+
}catch(e){};
|
16
|
+
}).call();
|
17
|
+
JST
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def sanitize_js(string)
|
23
|
+
js_map = {
|
24
|
+
'\\' => '\\\\',
|
25
|
+
'</' => '<\/',
|
26
|
+
"\r\n" => '\n',
|
27
|
+
"\n" => '\n',
|
28
|
+
"\r" => '\n',
|
29
|
+
'"' => '\\"',
|
30
|
+
"'" => "\\'"
|
31
|
+
}
|
32
|
+
string.gsub(/$(.)/m, "\\1 ").strip.gsub(/(\\|<\/|\r\n|[\n\r"'])/) { |match| js_map[match] }
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Transit
|
2
|
+
module Builders
|
3
|
+
class PackageBuilder
|
4
|
+
|
5
|
+
attr_accessor :form, :resource, :template
|
6
|
+
|
7
|
+
def initialize(model, form_builder)
|
8
|
+
@form = form_builder
|
9
|
+
@resource = model
|
10
|
+
@template = @form.template
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def _create_field_for(method)
|
20
|
+
form_method = _lookup_proper_field(method)
|
21
|
+
args =[method]
|
22
|
+
if form_method.is_a?(Hash)
|
23
|
+
args << form_method[form_method.keys.first]
|
24
|
+
form_method = form_method.keys.first
|
25
|
+
end
|
26
|
+
form.send(form_method, *args)
|
27
|
+
end
|
28
|
+
|
29
|
+
def _lookup_proper_field(method)
|
30
|
+
resource.admin_options.fields[method]
|
31
|
+
end
|
32
|
+
|
33
|
+
def method_missing(*args)
|
34
|
+
instance_eval <<-METHOD, __FILE__, __LINE__ + 1
|
35
|
+
def #{args.first}
|
36
|
+
_create_field_for(:#{args.first})
|
37
|
+
end
|
38
|
+
METHOD
|
39
|
+
_create_field_for(args.first.to_sym)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Transit
|
2
|
+
module Config
|
3
|
+
|
4
|
+
mattr_accessor :assets
|
5
|
+
@@assets ||= {
|
6
|
+
styles: {
|
7
|
+
full: "475x>",
|
8
|
+
thumb: "50x50#",
|
9
|
+
small: "100x100#",
|
10
|
+
medium: "300x>",
|
11
|
+
original: "1500x1500>"
|
12
|
+
},
|
13
|
+
|
14
|
+
default_style: :full,
|
15
|
+
path: ":rails_root/public/system/assets/:uid/:style.:extension",
|
16
|
+
url: "/system/assets/:uid/:style.:extension"
|
17
|
+
}
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Transit
|
4
|
+
module Controller
|
5
|
+
|
6
|
+
class Generator
|
7
|
+
|
8
|
+
attr_accessor :types
|
9
|
+
|
10
|
+
def initialize(*klasses)
|
11
|
+
@types = klasses.map(&:to_s)
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate!
|
15
|
+
@types.map(&:to_sym).each do |type|
|
16
|
+
typed_classes = Transit.lookup(type).dup.map!(&:constantize)
|
17
|
+
|
18
|
+
typed_classes.each do |sup|
|
19
|
+
sup.subclasses.each do |klass|
|
20
|
+
controller_name = to_controller(klass)
|
21
|
+
next if Transit.const_defined?( controller_name, false )
|
22
|
+
eval "class Transit::#{controller_name} < Transit::#{parent_controller(sup)}; end"
|
23
|
+
ActiveSupport::Dependencies::Reference.store(Transit.const_get("#{controller_name}"))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def parent_controller(str)
|
31
|
+
p = ActiveSupport::Inflector.pluralize(str.to_s.classify)
|
32
|
+
"#{p}Controller"
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_controller(str)
|
36
|
+
(ActiveSupport::Inflector.pluralize(str.to_s.classify) << "Controller")
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'responders'
|
2
|
+
require 'responders/flash_responder'
|
3
|
+
|
4
|
+
module Transit
|
5
|
+
module Controller
|
6
|
+
class Responder < ActionController::Responder
|
7
|
+
mattr_accessor :flash_keys
|
8
|
+
|
9
|
+
include Responders::FlashResponder
|
10
|
+
Responders::FlashResponder.flash_keys = [:success, :error]
|
11
|
+
|
12
|
+
@@flash_keys = [ :success, :error ]
|
13
|
+
|
14
|
+
def initialize(controller, resources, options={})
|
15
|
+
super
|
16
|
+
@flash = options.delete(:flash)
|
17
|
+
@notice = options.delete(:success)
|
18
|
+
@alert = options.delete(:error)
|
19
|
+
@flash_now = options.delete(:flash_now)
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_js
|
23
|
+
if set_flash_message?
|
24
|
+
set_flash_message!
|
25
|
+
header_hash = {}
|
26
|
+
controller.flash.each{ |key, value| header_hash.merge!(key => value) }
|
27
|
+
controller.response['X-Flash-Messages'] = header_hash.to_json
|
28
|
+
end
|
29
|
+
defined?(super) ? super : to_format
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Transit
|
2
|
+
module CoreExt
|
3
|
+
|
4
|
+
module String
|
5
|
+
def to_slug
|
6
|
+
value = self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s
|
7
|
+
value.gsub!(/[']+/, '')
|
8
|
+
value.gsub!(/\W+/, ' ')
|
9
|
+
value.strip!
|
10
|
+
value.downcase!
|
11
|
+
value.gsub!(' ', '-')
|
12
|
+
value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
String.send(:include, Transit::CoreExt::String)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'paperclip'
|
2
|
+
|
3
|
+
module Transit
|
4
|
+
module Model
|
5
|
+
module Attachments
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
include Paperclip::Glue
|
10
|
+
end
|
11
|
+
|
12
|
+
#Convenience method for only finding the assets that are images
|
13
|
+
def images
|
14
|
+
self.assets.find_all{ |asset| asset.image? }
|
15
|
+
end
|
16
|
+
|
17
|
+
def image?
|
18
|
+
image.file?
|
19
|
+
end
|
20
|
+
|
21
|
+
# Convenience method for only finding the assets that are files
|
22
|
+
def files
|
23
|
+
self.assets.reject{ |asset| asset.image? }
|
24
|
+
end
|
25
|
+
|
26
|
+
# Override to show a "default image" in the admin.
|
27
|
+
def preview_image_url
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
##
|
33
|
+
# Convenience method for Paperclip's has_attached_file to ensure fields also exist.
|
34
|
+
#
|
35
|
+
def attach(name, options = {})
|
36
|
+
|
37
|
+
if options[:styles].present?
|
38
|
+
options.reverse_merge!(original: '1500x1500>')
|
39
|
+
end
|
40
|
+
|
41
|
+
has_attached_file name, options
|
42
|
+
field :"#{name.to_s}_file_name", :type => String
|
43
|
+
field :"#{name.to_s}_content_type", :type => String
|
44
|
+
field :"#{name.to_s}_file_size", :type => Integer
|
45
|
+
field :"#{name.to_s}_updated_at", :type => Time
|
46
|
+
field :"#{name.to_s}_fingerprint", :type => String
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Transit
|
2
|
+
module Model
|
3
|
+
##
|
4
|
+
# Provides SQL like auto-incrementing of an id using a "uid" field
|
5
|
+
#
|
6
|
+
module AutoIncrement
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
field :uid, :type => Integer
|
11
|
+
before_create :generate_uid, :on => :create
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate_uid
|
15
|
+
return true unless self.uid.nil?
|
16
|
+
ref = (self.class.superclass == Object ? self.class : self.class.superclass)
|
17
|
+
self.uid = ref.max(:uid).to_i + 1
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Transit
|
2
|
+
module Model
|
3
|
+
|
4
|
+
module Base
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
class_attribute :delivery_options, instance_writer: false
|
9
|
+
self.delivery_options ||= []
|
10
|
+
|
11
|
+
class_attribute :admin_options, instance_writer: false
|
12
|
+
|
13
|
+
include Mongoid::Timestamps
|
14
|
+
include Mongoid::MultiParameterAttributes
|
15
|
+
include Transit::Model::AutoIncrement
|
16
|
+
|
17
|
+
# All transit models embed many contexts
|
18
|
+
embeds_many :contexts, as: :package, autosave: true, class_name: 'Transit::Context'
|
19
|
+
accepts_nested_attributes_for :contexts, :allow_destroy => true
|
20
|
+
alias :contexts_attributes= :process_context_attributes=
|
21
|
+
before_create :ensure_text_context
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def context_named(n)
|
26
|
+
self.contexts.by_name(n).first
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Convenience method to determine the particular options this
|
31
|
+
# model delivers
|
32
|
+
#
|
33
|
+
def delivers?(opt)
|
34
|
+
self.class.delivery_options.include?(opt.to_s)
|
35
|
+
end
|
36
|
+
|
37
|
+
##
|
38
|
+
# Each model should pre-build at least one context for its main body content
|
39
|
+
#
|
40
|
+
def ensure_text_context
|
41
|
+
return true unless self.contexts.size == 0
|
42
|
+
self.contexts.build({ :name => 'Body Copy' }, Text)
|
43
|
+
end
|
44
|
+
|
45
|
+
def process_context_attributes=(hash)
|
46
|
+
hash.each_pair do |pos, attrs|
|
47
|
+
attrs.stringify_keys!
|
48
|
+
field = self.contexts.all.detect{ |cf| cf.id.to_s == attrs['id'] } || self.contexts.build({ }, attrs['_type'].classify.constantize)
|
49
|
+
field.attributes = attrs
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Transit
|
2
|
+
module Model
|
3
|
+
|
4
|
+
module Comments
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
field :comment_count, :type => Integer, :default => 0
|
9
|
+
has_many :comments, as: :commentable
|
10
|
+
end
|
11
|
+
|
12
|
+
def has_comments?
|
13
|
+
self.comment_count >= 1
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Transit
|
2
|
+
module Model
|
3
|
+
|
4
|
+
module Hooks
|
5
|
+
|
6
|
+
def deliver_as(type)
|
7
|
+
scope = type.to_s.classify
|
8
|
+
include Transit::Package.const_get(scope)
|
9
|
+
Transit.track(self, type.to_sym)
|
10
|
+
end
|
11
|
+
|
12
|
+
def deliver_with(*opts)
|
13
|
+
opts.map(&:to_s).map(&:classify).each do |t|
|
14
|
+
begin
|
15
|
+
include Transit::Model.const_get(t.pluralize)
|
16
|
+
rescue NameError
|
17
|
+
raise Transit::Errors::ResourceNotFound.new("You called deliver_with #{t.underscore} but no resource called #{t.pluralize} was found.")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
self.delivery_options |= opts.map!(&:to_s)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Provide auto-incrementing functionality for any model
|
24
|
+
def auto_increment
|
25
|
+
include Transit::Model::AutoIncrement
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Mongoid::Document::ClassMethods.class_eval do
|
34
|
+
include Transit::Model::Hooks
|
35
|
+
include Transit::Model::Paginator::ClassMethods
|
36
|
+
end
|
37
|
+
Mongoid::Criteria.send :include, Transit::Model::Paginator::Criteria
|
38
|
+
Mongoid::Document.send :include, Transit::Model::Paginator::Document
|