transit 0.0.1 → 0.0.2

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 (186) hide show
  1. data/Gemfile +19 -11
  2. data/app/assets/images/transit/icon24x24.png +0 -0
  3. data/app/assets/images/transit/icon24x24_files.png +0 -0
  4. data/app/assets/images/transit/jplayer.swf +0 -0
  5. data/app/assets/images/transit/uploadify.swf +0 -0
  6. data/app/assets/images/transit/video_player.swf +0 -0
  7. data/app/assets/javascripts/jqtools/expose.js +224 -0
  8. data/app/assets/javascripts/jqtools/flashembed.js +300 -0
  9. data/app/assets/javascripts/jqtools/overlay.js +294 -0
  10. data/app/assets/javascripts/jqtools/scrollable.js +3 -0
  11. data/app/assets/javascripts/jqtools/scrollable/autoscroll.js +81 -0
  12. data/app/assets/javascripts/jqtools/scrollable/base.js +335 -0
  13. data/app/assets/javascripts/jqtools/scrollable/navigator.js +139 -0
  14. data/app/assets/javascripts/jqtools/validator.js +590 -0
  15. data/app/assets/javascripts/jqueryui/accordion.js +611 -0
  16. data/app/assets/javascripts/jqueryui/autocomplete.js +612 -0
  17. data/app/assets/javascripts/jqueryui/button.js +388 -0
  18. data/app/assets/javascripts/jqueryui/core.js +312 -0
  19. data/app/assets/javascripts/jqueryui/datepicker.js +1791 -0
  20. data/app/assets/javascripts/jqueryui/dialog.js +878 -0
  21. data/app/assets/javascripts/jqueryui/draggable.js +815 -0
  22. data/app/assets/javascripts/jqueryui/droppable.js +285 -0
  23. data/app/assets/javascripts/jqueryui/effects/blind.js +49 -0
  24. data/app/assets/javascripts/jqueryui/effects/bounce.js +78 -0
  25. data/app/assets/javascripts/jqueryui/effects/clip.js +54 -0
  26. data/app/assets/javascripts/jqueryui/effects/core.js +746 -0
  27. data/app/assets/javascripts/jqueryui/effects/drop.js +50 -0
  28. data/app/assets/javascripts/jqueryui/effects/explode.js +79 -0
  29. data/app/assets/javascripts/jqueryui/effects/fade.js +32 -0
  30. data/app/assets/javascripts/jqueryui/effects/fold.js +56 -0
  31. data/app/assets/javascripts/jqueryui/effects/highlight.js +50 -0
  32. data/app/assets/javascripts/jqueryui/effects/pulsate.js +51 -0
  33. data/app/assets/javascripts/jqueryui/effects/scale.js +178 -0
  34. data/app/assets/javascripts/jqueryui/effects/shake.js +57 -0
  35. data/app/assets/javascripts/jqueryui/effects/slide.js +50 -0
  36. data/app/assets/javascripts/jqueryui/effects/transfer.js +45 -0
  37. data/app/assets/javascripts/jqueryui/mouse.js +160 -0
  38. data/app/assets/javascripts/jqueryui/position.js +252 -0
  39. data/app/assets/javascripts/jqueryui/progressbar.js +109 -0
  40. data/app/assets/javascripts/jqueryui/resizable.js +814 -0
  41. data/app/assets/javascripts/jqueryui/selectable.js +266 -0
  42. data/app/assets/javascripts/jqueryui/slider.js +666 -0
  43. data/app/assets/javascripts/jqueryui/sortable.js +1077 -0
  44. data/app/assets/javascripts/jqueryui/tabs.js +758 -0
  45. data/app/assets/javascripts/jqueryui/widget.js +262 -0
  46. data/app/assets/javascripts/libs/backbone.js +1152 -0
  47. data/app/assets/javascripts/libs/cookie.js +89 -0
  48. data/app/assets/javascripts/libs/fileinput.js +130 -0
  49. data/app/assets/javascripts/libs/jplayer.js +1768 -0
  50. data/app/assets/javascripts/libs/proper.js +541 -0
  51. data/app/assets/javascripts/libs/sanitize.js +282 -0
  52. data/app/assets/javascripts/libs/selecttolist.js +75 -0
  53. data/app/assets/javascripts/libs/underscore.js +807 -0
  54. data/app/assets/javascripts/libs/uploadify.js +677 -0
  55. data/app/assets/javascripts/libs/wymeditor.js +9538 -0
  56. data/app/assets/javascripts/transit.js +4 -0
  57. data/app/assets/javascripts/transit/admin.js +22 -0
  58. data/app/assets/javascripts/transit/admin/contexts.js +52 -0
  59. data/app/assets/javascripts/transit/admin/fields.js +36 -0
  60. data/app/assets/javascripts/transit/admin/upload.js +109 -0
  61. data/app/assets/javascripts/transit/config.js.erb +101 -0
  62. data/app/assets/javascripts/transit/contexts/audio.js +39 -0
  63. data/app/assets/javascripts/transit/contexts/video.js +79 -0
  64. data/app/assets/javascripts/transit/core.js +171 -0
  65. data/app/assets/javascripts/transit/frontend.js +3 -0
  66. data/app/assets/javascripts/transit/lib/base64.js +120 -0
  67. data/app/assets/javascripts/transit/lib/editor.js +177 -0
  68. data/app/assets/javascripts/transit/views/audio_player.jst +22 -0
  69. data/app/assets/javascripts/transit/views/editor_toolbar.jst +12 -0
  70. data/app/assets/javascripts/transit/views/file_upload.jst +5 -0
  71. data/app/assets/javascripts/transit/views/video_player.jst +20 -0
  72. data/app/assets/javascripts/transit/views/wym_box.jst +4 -0
  73. data/app/assets/javascripts/transit/views/wym_iframe.jst +3 -0
  74. data/app/assets/stylesheets/transit.css.scss.erb +42 -0
  75. data/app/assets/stylesheets/transit/forms.css.scss +66 -0
  76. data/app/assets/stylesheets/transit/media/audio.css.scss +65 -0
  77. data/app/assets/stylesheets/transit/media/video.css.scss +30 -0
  78. data/app/assets/stylesheets/transit/panel.css.scss +100 -0
  79. data/app/assets/stylesheets/transit/ui.css.scss +507 -0
  80. data/app/controllers/pages_controller.rb +3 -0
  81. data/app/controllers/posts_controller.rb +3 -0
  82. data/app/controllers/transit/assets_controller.rb +38 -0
  83. data/app/controllers/transit/contexts_controller.rb +12 -9
  84. data/app/controllers/transit/pages_controller.rb +26 -0
  85. data/app/controllers/transit/posts_controller.rb +31 -0
  86. data/app/controllers/transit/topics_controller.rb +5 -0
  87. data/app/controllers/transit_controller.rb +16 -0
  88. data/app/helpers/transit/admin_helper.rb +43 -0
  89. data/app/helpers/transit/form_helper.rb +17 -0
  90. data/app/helpers/transit/package_helper.rb +41 -0
  91. data/app/helpers/transit/pagination_helper.rb +58 -0
  92. data/app/helpers/transit_helper.rb +42 -0
  93. data/app/models/comment.rb +37 -0
  94. data/app/models/contexts/audio.rb +12 -0
  95. data/app/models/{text.rb → contexts/text.rb} +0 -0
  96. data/app/models/contexts/video.rb +24 -0
  97. data/app/models/topic.rb +19 -0
  98. data/app/models/transit/asset.rb +68 -0
  99. data/{lib → app/models}/transit/context.rb +29 -0
  100. data/app/views/contexts/_text.html.erb +1 -1
  101. data/app/views/posts/index.rss.builder +18 -0
  102. data/app/views/transit/assets/_file.html.erb +4 -0
  103. data/app/views/transit/assets/_image.html.erb +13 -0
  104. data/app/views/transit/assets/create.js.erb +8 -0
  105. data/app/views/transit/assets/destroy.js.erb +3 -0
  106. data/app/views/transit/assets/manage.html.erb +20 -0
  107. data/app/views/transit/contexts/_audio.html.erb +18 -0
  108. data/app/views/transit/contexts/_text.html.erb +6 -0
  109. data/app/views/transit/contexts/_video.html.erb +13 -0
  110. data/app/views/transit/contexts/destroy.js.erb +1 -0
  111. data/app/views/transit/contexts/index.html.erb +5 -0
  112. data/app/views/transit/contexts/new.js.erb +7 -0
  113. data/app/views/transit/contexts/show.html.erb +8 -0
  114. data/app/views/transit/index.html.erb +26 -0
  115. data/app/views/transit/index.js.erb +1 -0
  116. data/app/views/transit/interface/post_panel.html.erb +96 -0
  117. data/app/views/transit/pages/_table.html.erb +7 -0
  118. data/app/views/transit/pages/edit.html.erb +17 -0
  119. data/app/views/transit/pages/index.html.erb +17 -0
  120. data/app/views/transit/pages/update.js.erb +1 -0
  121. data/app/views/transit/posts/_form.html.erb +49 -0
  122. data/app/views/transit/posts/edit.html.erb +14 -0
  123. data/app/views/transit/posts/new.html.erb +21 -0
  124. data/app/views/transit/table.html.erb +13 -0
  125. data/app/views/transit/table.js.erb +8 -0
  126. data/app/views/transit/topics/manage.html.erb +28 -0
  127. data/config/locales/en.yml +22 -0
  128. data/config/routes.rb +3 -3
  129. data/lib/transit.rb +51 -17
  130. data/lib/transit/admin.rb +85 -0
  131. data/lib/transit/builders/form_builder.rb +319 -0
  132. data/lib/transit/builders/jst_builder.rb +38 -0
  133. data/lib/transit/builders/package_builder.rb +45 -0
  134. data/lib/transit/config.rb +20 -0
  135. data/lib/transit/controller/generator.rb +42 -0
  136. data/lib/transit/controller/responder.rb +34 -0
  137. data/lib/transit/core_ext.rb +18 -0
  138. data/lib/transit/errors/resource_not_found.rb +6 -0
  139. data/lib/transit/model/assets.rb +14 -0
  140. data/lib/transit/model/attachments.rb +55 -0
  141. data/lib/transit/model/auto_increment.rb +22 -0
  142. data/lib/transit/model/base.rb +56 -0
  143. data/lib/transit/model/comments.rb +19 -0
  144. data/lib/transit/model/hooks.rb +38 -0
  145. data/lib/transit/model/owners.rb +14 -0
  146. data/lib/transit/model/paginator.rb +92 -0
  147. data/lib/transit/model/topics.rb +14 -0
  148. data/lib/transit/package/page.rb +20 -12
  149. data/lib/transit/package/post.rb +87 -33
  150. data/lib/transit/package/post/validations.rb +14 -0
  151. data/lib/transit/rails/engine.rb +29 -13
  152. data/lib/transit/rails/railtie.rb +31 -0
  153. data/lib/transit/rails/routing.rb +11 -6
  154. data/lib/transit/services.rb +13 -0
  155. data/lib/transit/services/base.rb +14 -0
  156. data/lib/transit/services/facebook.rb +13 -0
  157. data/lib/transit/services/ted.rb +10 -0
  158. data/lib/transit/services/twitter.rb +13 -0
  159. data/lib/transit/services/vimeo.rb +10 -0
  160. data/lib/transit/services/you_tube.rb +12 -0
  161. data/lib/transit/version.rb +1 -1
  162. metadata +178 -31
  163. data/app/assets/stylesheets/includes/_compat.scss +0 -24
  164. data/app/assets/stylesheets/includes/_defaults.scss +0 -99
  165. data/app/assets/stylesheets/includes/_global.scss +0 -16
  166. data/app/assets/stylesheets/includes/_imports.scss +0 -27
  167. data/app/assets/stylesheets/includes/_mixins.scss +0 -38
  168. data/app/assets/stylesheets/includes/_setup.scss +0 -85
  169. data/app/assets/stylesheets/layout.css.scss +0 -29
  170. data/app/assets/stylesheets/transit.css +0 -3
  171. data/app/controllers/application_controller.rb +0 -5
  172. data/app/controllers/transit/index_controller.rb +0 -7
  173. data/app/controllers/transit/packages_controller.rb +0 -64
  174. data/app/controllers/transit/transit_controller.rb +0 -4
  175. data/app/helpers/routing_helpers.rb +0 -7
  176. data/app/models/audio.rb +0 -4
  177. data/app/models/package_asset.rb +0 -11
  178. data/app/models/video.rb +0 -8
  179. data/app/views/contexts/_audio.html.erb +0 -1
  180. data/app/views/contexts/_video.html.erb +0 -1
  181. data/app/views/layouts/transit.html.erb +0 -31
  182. data/app/views/transit/index/index.html.erb +0 -0
  183. data/lib/transit/helpers/controller_helpers.rb +0 -40
  184. data/lib/transit/helpers/model_helpers.rb +0 -26
  185. data/lib/transit/package.rb +0 -25
  186. 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,6 @@
1
+ module Transit
2
+ module Errors
3
+ class ResourceNotFound < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ module Transit
2
+ module Model
3
+
4
+ module Assets
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_many :assets, as: :assetable, class_name: "Transit::Asset"
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -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
@@ -0,0 +1,14 @@
1
+ module Transit
2
+ module Model
3
+ module Owners
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :user
9
+ User.send(:has_many, :"#{self.name.pluralize.underscore}")
10
+ end
11
+
12
+ end
13
+ end
14
+ end