mongoid-data_table 1.0.2 → 1.0.3

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid-data_table (1.0.1)
4
+ mongoid-data_table (1.0.3)
5
5
  rails (~> 3.0.0)
6
6
  will_paginate (~> 3.0.pre2)
7
7
 
@@ -35,7 +35,7 @@ GEM
35
35
  activemodel (= 3.0.7)
36
36
  activesupport (= 3.0.7)
37
37
  activesupport (3.0.7)
38
- arel (2.0.9)
38
+ arel (2.0.10)
39
39
  bson (1.3.1)
40
40
  bson_ext (1.3.1)
41
41
  builder (2.1.2)
@@ -81,7 +81,7 @@ GEM
81
81
  rspec-core (~> 2.6.0)
82
82
  rspec-expectations (~> 2.6.0)
83
83
  rspec-mocks (~> 2.6.0)
84
- rspec-core (2.6.0)
84
+ rspec-core (2.6.1)
85
85
  rspec-expectations (2.6.0)
86
86
  diff-lcs (~> 1.1.2)
87
87
  rspec-mocks (2.6.0)
data/README.rdoc CHANGED
@@ -1,40 +1,91 @@
1
- = Data Table
1
+ = Mongoid: Data Table
2
2
 
3
- Makes it easy to ship data to a jQuery DataTable from ActiveRecord or Mongoid.
3
+ Makes it easy to ship data to a jQuery DataTable from Mongoid.
4
4
 
5
5
  == Quick example:
6
6
 
7
- in your javascript:
7
+ === Javascript
8
8
 
9
- $(".providers-data-table").dataTable({"bJQueryUI" : true,
10
- "bProcessing" : true,
11
- "bAutoWidth" : false,
12
- "sPaginationType" : "full_numbers",
13
- "aoColumns" : [{"sType" : "html"}, null, null, null, null],
14
- "aaSorting" : [[0, 'asc'], [1, 'asc']],
15
- "bServerSide" : true,
16
- "sAjaxSource" : "/providers.json" }).fnSetFilteringDelay();
9
+ $(".providers-data-table").dataTable({
10
+ "bJQueryUI" : true,
11
+ "bProcessing" : true,
12
+ "bAutoWidth" : false,
13
+ "sPaginationType" : "full_numbers",
14
+ "aoColumns" : [{"sType" : "html"}, null, null, null, null],
15
+ "aaSorting" : [[0, 'asc'], [1, 'asc']],
16
+ "bServerSide" : true,
17
+ "sAjaxSource" : "/providers.json"
18
+ }).fnSetFilteringDelay();
17
19
 
18
- Note: the fnSetFilteringDelay() call isn't required but highly recommended: http://datatables.net/plug-ins/api#fnSetFilteringDelay
20
+ *Note:* the fnSetFilteringDelay() call isn't required but highly recommended: http://datatables.net/plug-ins/api#fnSetFilteringDelay
19
21
 
20
- in your controller:
22
+ === Model
23
+
24
+ class Provider
25
+
26
+ include Mongoid::Documenta
27
+ include Mongoid::DataTable
28
+
29
+ ## fields ##
30
+ field :name
31
+ field :fein
32
+ field :country
33
+ field :state
34
+
35
+ ## associations ##
36
+ referenced_in :category
37
+
38
+ ## data_table ##
39
+ data_table_options.merge!({
40
+ :fields => %w(name fein category country state),
41
+ :searchable => %w(name fein),
42
+ :dataset => lambda do |provider|
43
+ {
44
+ 0 => "<%= link_to(provider.name, provider) %>",
45
+ 1 => provider.fein,
46
+ 2 => provider.category.name,
47
+ 3 => provider.country,
48
+ 4 => provider.state,
49
+ :DT_RowId => provider._id
50
+ }
51
+ end
52
+ })
53
+
54
+ end
55
+
56
+ === Controller (InheritedResources::Base)
57
+
58
+ *Recommended:* https://github.com/josevalim/inherited_resources
59
+
60
+ class PrividersController < InheritedResources::Base
61
+
62
+ respond_to :json, :only => :index
63
+
64
+ protected
65
+
66
+ def collection
67
+ @providers ||= end_of_association_chain.to_data_table(self)
68
+ end
69
+
70
+ end
71
+
72
+ === Controller (ActionController::Base)
21
73
 
22
74
  class ProvidersController < ApplicationController
23
75
 
24
76
  def index
25
- respond_to do |wants|
26
- wants.html
27
- wants.json do
28
- render(:json => Provider.for_data_table(self, %w(name fein categories.name county state), %w(name fein)) do |provider|
29
- ["<%= link_to(provider, provider) %>", provider.fein, provider.category.name, provider.county, provider.state]
30
- end)
77
+ respond_to do |format|
78
+ format.html
79
+ format.json do
80
+ render :json => Provider.to_data_table(self)
31
81
  end
32
82
  end
33
83
  end
34
84
 
35
85
  end
36
86
 
37
- in your view (assuming HAML):
87
+
88
+ === View (HAML)
38
89
 
39
90
  %table.providers-data-table
40
91
  %thead
@@ -51,4 +102,4 @@ Patches welcome, enjoy!
51
102
 
52
103
  == Copyright
53
104
 
54
- Copyright (c) 2010 Jason Dew. See LICENSE for details.
105
+ Copyright (c) 2010-2011 Jason Dew, Andrew Bennett. See LICENSE for details.
@@ -0,0 +1,31 @@
1
+ module Mongoid
2
+ module DataTable
3
+ module Criteria
4
+ # do nothing
5
+ end
6
+ end
7
+
8
+ class Criteria
9
+
10
+ # Used for chaining +Criteria+ scopes together in the for of class methods
11
+ # on the +Document+ the criteria is for.
12
+ #
13
+ # Options:
14
+ #
15
+ # name: The name of the class method on the +Document+ to chain.
16
+ # args: The arguments passed to the method.
17
+ # block: Optional block to pass
18
+ #
19
+ # Returns: <tt>Criteria</tt>
20
+ def method_missing(name, *args, &block)
21
+ if @klass.respond_to?(name)
22
+ @klass.send(:with_scope, self) do
23
+ @klass.send(name, *args, &block)
24
+ end
25
+ else
26
+ return entries.send(name, *args)
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -8,9 +8,9 @@ module Mongoid
8
8
  @klass = klass
9
9
  @controller = controller
10
10
  @options = klass.data_table_options.merge(options)
11
- @extension = block
11
+ @extension = block || klass.data_table_dataset || default_data_table_dataset
12
12
 
13
- @params = options[:params] || controller.params.dup
13
+ @params = options[:params] || (controller.params.dup rescue {})
14
14
  @criteria = options[:criteria] || klass.criteria
15
15
  @unscoped = options[:unscoped] || klass.unscoped
16
16
  @fields = options[:fields] || klass.data_table_fields
@@ -44,7 +44,7 @@ module Mongoid
44
44
  end
45
45
 
46
46
  def to_hash(&inline_block)
47
- inline_block = extension || default_data_table_block unless block_given?
47
+ inline_block = extension unless block_given?
48
48
  {
49
49
  :sEcho => params[:sEcho].to_i,
50
50
  :iTotalRecords => unscoped.count,
@@ -60,8 +60,12 @@ module Mongoid
60
60
  }
61
61
  end
62
62
 
63
- def to_json(*args)
64
- to_hash.to_json
63
+ def as_json(options = nil, &inline_block)
64
+ to_hash(&inline_block).to_json(options)
65
+ end
66
+
67
+ def to_json(*args, &inline_block)
68
+ as_json(*args, &inline_block)
65
69
  end
66
70
 
67
71
  protected
@@ -105,7 +109,7 @@ module Mongoid
105
109
 
106
110
  private
107
111
 
108
- def default_data_table_block
112
+ def default_data_table_dataset
109
113
  lambda do |object|
110
114
  Hash[aliases.map { |c| [ aliases.index(c), object.send(c) ] }].merge(:DT_RowId => object._id)
111
115
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module DataTable
3
- VERSION = "1.0.2"
3
+ VERSION = "1.0.3"
4
4
  end
5
5
  end
@@ -6,8 +6,10 @@ require 'active_support/core_ext/string/inflections'
6
6
  require 'active_support/core_ext/class/inheritable_attributes'
7
7
  require 'active_support/concern'
8
8
 
9
+ require 'mongoid/criteria'
9
10
  require 'mongoid/relations/proxy'
10
11
 
12
+ require 'mongoid/data_table/criteria'
11
13
  require 'mongoid/data_table/proxy'
12
14
  require 'mongoid/data_table/version'
13
15
 
@@ -35,6 +37,10 @@ module Mongoid
35
37
  self.data_table_options[:sortable] ||= self.data_table_fields
36
38
  end
37
39
 
40
+ def data_table_dataset
41
+ self.data_table_options[:dataset]
42
+ end
43
+
38
44
  def to_data_table(controller, options = {}, &block)
39
45
  ::Mongoid::DataTable::Proxy.new(self, controller, options, &block)
40
46
  end
@@ -0,0 +1,11 @@
1
+ class Category
2
+
3
+ include Mongoid::Document
4
+
5
+ ## fields ##
6
+ field :name
7
+
8
+ ## associations ##
9
+ references_many :providers
10
+
11
+ end
@@ -0,0 +1,31 @@
1
+ class Provider
2
+
3
+ include Mongoid::Document
4
+ include Mongoid::DataTable
5
+
6
+ ## fields ##
7
+ field :name
8
+ field :fein
9
+ field :country
10
+ field :state
11
+
12
+ ## associations ##
13
+ referenced_in :category
14
+
15
+ ## data_table ##
16
+ data_table_options.merge!({
17
+ :fields => %w(name fein category country state),
18
+ :searchable => %w(name fein),
19
+ :dataset => lambda do |provider|
20
+ {
21
+ 0 => "<%= link_to(provider.name, '#') %>",
22
+ 1 => provider.fein,
23
+ 2 => provider.category.name,
24
+ 3 => provider.country,
25
+ 4 => provider.state,
26
+ :DT_RowId => provider._id
27
+ }
28
+ end
29
+ })
30
+
31
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::DataTable::Criteria do
4
+
5
+ before do
6
+ Rails.stubs(:logger).returns(LOGGER)
7
+ end
8
+
9
+ let(:controller) do
10
+ Class.new(ActionController::Base).new.tap do |c|
11
+ c.stubs(:params).returns({})
12
+ end
13
+ end
14
+
15
+ let(:custom_array) { %w(custom) }
16
+
17
+ let(:custom_block) do
18
+ lambda { |object| custom_array }
19
+ end
20
+
21
+ context "with custom block" do
22
+
23
+ let(:bob) do
24
+ Person.find_or_create_by(:name => 'Bob')
25
+ end
26
+
27
+ let(:dt) do
28
+ bob
29
+ Person.criteria.to_data_table(controller, {}, &custom_block)
30
+ end
31
+
32
+ it "should store it as an @extension" do
33
+ dt.extension.should == custom_block
34
+ end
35
+
36
+ describe "#to_hash" do
37
+
38
+ it "should run the custom block" do
39
+ dt.to_hash[:aaData].first.should == custom_array
40
+ end
41
+
42
+ context "with inline block" do
43
+
44
+ it "should run the inline block" do
45
+ a = custom_array.push('inline')
46
+ h = dt.to_hash { |object| a }
47
+ h[:aaData].first.should == a
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Mongoid::DataTable::Proxy do
4
4
 
5
- let(:controller) do
5
+ let!(:controller) do
6
6
  Class.new(ActionController::Base).new.tap do |c|
7
7
  c.stubs(:params).returns({})
8
8
  end
@@ -1,2 +1,74 @@
1
1
  require 'spec_helper'
2
2
 
3
+ describe 'mongoid-data_table' do
4
+
5
+ let(:category) do
6
+ Category.find_or_create_by(:name => 'my_category')
7
+ end
8
+
9
+ let(:provider) do
10
+ Provider.find_or_create_by({
11
+ :name => 'my_name',
12
+ :fein => 'my_fein',
13
+ :country => 'my_country',
14
+ :state => 'my_state',
15
+ :category_id => category.id
16
+ })
17
+ end
18
+
19
+ before do
20
+ Rails.stubs(:logger).returns(LOGGER)
21
+ end
22
+
23
+ let(:controller) do
24
+ Class.new(ActionController::Base).new.tap do |c|
25
+ c.stubs(:params).returns({})
26
+ end
27
+ end
28
+
29
+ context "when using example from README" do
30
+
31
+ def sample_data(id)
32
+ {
33
+ "sEcho" => 0,
34
+ "iTotalRecords" => 1,
35
+ "iTotalDisplayRecords" => 1,
36
+ "aaData" => [{
37
+ "0" => "<a href=\"#\">my_name</a>",
38
+ "1" => "my_fein",
39
+ "2" => "my_category",
40
+ "3" => "my_country",
41
+ "4" => "my_state",
42
+ "DT_RowId" => id.to_s
43
+ }]
44
+ }
45
+ end
46
+
47
+ it "should return sample data" do
48
+ provider.category.should == category
49
+ JSON.load(Provider.where(:name => 'my_name').to_data_table(controller).to_json).should == sample_data(provider.id)
50
+ end
51
+
52
+ context "with inline block" do
53
+
54
+ def custom_sample_data(id)
55
+ {
56
+ "sEcho" => 0,
57
+ "iTotalRecords" => 1,
58
+ "iTotalDisplayRecords" => 1,
59
+ "aaData" => [[id.to_s]]
60
+ }
61
+ end
62
+
63
+ it "should return sample data" do
64
+ provider.category.should == category
65
+ JSON.load(Provider.where(:name => 'my_name').to_data_table(controller).to_json do |provider|
66
+ [ provider.id ]
67
+ end).should == custom_sample_data(provider.id)
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: mongoid-data_table
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.2
5
+ version: 1.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Dew
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-05-18 00:00:00 Z
14
+ date: 2011-05-19 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -120,16 +120,19 @@ files:
120
120
  - LICENSE
121
121
  - README.rdoc
122
122
  - Rakefile
123
- - TODO
124
123
  - lib/mongoid-data_table.rb
125
124
  - lib/mongoid/data_table.rb
125
+ - lib/mongoid/data_table/criteria.rb
126
126
  - lib/mongoid/data_table/proxy.rb
127
127
  - lib/mongoid/data_table/version.rb
128
128
  - mongoid-data_table.gemspec
129
+ - spec/models/category.rb
129
130
  - spec/models/person.rb
131
+ - spec/models/provider.rb
130
132
  - spec/models/user_agent.rb
131
133
  - spec/spec_helper.rb
132
134
  - spec/unit/mongoid-data_table_spec.rb
135
+ - spec/unit/mongoid/data_table/criteria_spec.rb
133
136
  - spec/unit/mongoid/data_table/proxy_spec.rb
134
137
  - spec/unit/mongoid/data_table_spec.rb
135
138
  homepage: http://rubygems.org/gems/mongoid-data_table
@@ -160,10 +163,13 @@ signing_key:
160
163
  specification_version: 3
161
164
  summary: Simple data preparation from Mongoid to the jQuery DataTables plugin
162
165
  test_files:
166
+ - spec/models/category.rb
163
167
  - spec/models/person.rb
168
+ - spec/models/provider.rb
164
169
  - spec/models/user_agent.rb
165
170
  - spec/spec_helper.rb
166
171
  - spec/unit/mongoid-data_table_spec.rb
172
+ - spec/unit/mongoid/data_table/criteria_spec.rb
167
173
  - spec/unit/mongoid/data_table/proxy_spec.rb
168
174
  - spec/unit/mongoid/data_table_spec.rb
169
175
  has_rdoc:
data/TODO DELETED
@@ -1 +0,0 @@
1
- - repackage as a Rails 3 responder