datagrid 0.3.6 → 0.4.0

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 CHANGED
@@ -1,28 +1,28 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
2
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
-
9
- gem "rails"
3
+ gem "rails", ">= 3.0"
10
4
 
11
5
 
12
6
 
13
7
  group :development do
14
- gem "rake", "0.8.7"
15
- gem "mocha"
16
- gem "rspec", "2.6.0"
8
+
9
+ gem "rake"
17
10
  gem "bundler", "~> 1.0.0"
18
11
  gem "jeweler", "~> 1.6.0"
19
- gem "rcov", ">= 0"
12
+
20
13
  gem "ruby-debug", :platform => "mri_18"
21
14
  #gem "ruby-debug19", :platform => "mri_19"
15
+
16
+ gem "mocha"
17
+ gem "rspec", "2.6.0"
18
+ gem "accept_values_for"
19
+ gem "nokogiri" # used to test html output
20
+
22
21
  gem "sqlite3-ruby"
23
- gem "fastercsv"
24
- gem "nokogiri"
25
22
  gem 'will_paginate', '2.3.15'
26
- gem "accept_values_for"
27
23
 
24
+ gem "mongoid", "2.2.3"
25
+ gem "bson_ext"
26
+
27
+ gem "fastercsv", :platform => "mri_18"
28
28
  end
@@ -32,6 +32,8 @@ GEM
32
32
  activesupport (= 3.0.7)
33
33
  activesupport (3.0.7)
34
34
  arel (2.0.10)
35
+ bson (1.4.1)
36
+ bson_ext (1.4.1)
35
37
  builder (2.1.2)
36
38
  columnize (0.3.2)
37
39
  diff-lcs (1.1.2)
@@ -52,6 +54,12 @@ GEM
52
54
  treetop (~> 1.4.8)
53
55
  mime-types (1.16)
54
56
  mocha (0.9.12)
57
+ mongo (1.4.1)
58
+ bson (= 1.4.1)
59
+ mongoid (2.2.3)
60
+ activemodel (~> 3.0)
61
+ mongo (~> 1.3)
62
+ tzinfo (~> 0.3.22)
55
63
  nokogiri (1.4.4)
56
64
  polyglot (0.3.1)
57
65
  rack (1.2.3)
@@ -72,8 +80,7 @@ GEM
72
80
  activesupport (= 3.0.7)
73
81
  rake (>= 0.8.7)
74
82
  thor (~> 0.14.4)
75
- rake (0.8.7)
76
- rcov (0.9.9)
83
+ rake (0.9.2.2)
77
84
  rspec (2.6.0)
78
85
  rspec-core (~> 2.6.0)
79
86
  rspec-expectations (~> 2.6.0)
@@ -101,14 +108,15 @@ PLATFORMS
101
108
 
102
109
  DEPENDENCIES
103
110
  accept_values_for
111
+ bson_ext
104
112
  bundler (~> 1.0.0)
105
113
  fastercsv
106
114
  jeweler (~> 1.6.0)
107
115
  mocha
116
+ mongoid (= 2.2.3)
108
117
  nokogiri
109
- rails
110
- rake (= 0.8.7)
111
- rcov
118
+ rails (>= 3.0)
119
+ rake
112
120
  rspec (= 2.6.0)
113
121
  ruby-debug
114
122
  sqlite3-ruby
data/Rakefile CHANGED
@@ -38,12 +38,3 @@ end
38
38
 
39
39
  task :default => :spec
40
40
 
41
- require 'rake/rdoctask'
42
- Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
-
45
- rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "datagrid #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
49
- end
@@ -13,16 +13,25 @@ Ruby library that helps you to build and represent table-like data with:
13
13
 
14
14
  In order to create a report, you need to define:
15
15
 
16
- * scope of ActiveRecord objects to look through
16
+ * scope of objects to look through
17
17
  * filters that will be used to filter data
18
18
  * columns that should be displayed and sortable (if possible)
19
19
 
20
20
 
21
- ### Working grid example
21
+ ### ORM Support
22
+
23
+ * ActiveRecord
24
+ * Mongoid (beta)
25
+
26
+ [Create an issue](https://github.com/bogdan/datagrid/issues/new) if you want more.
27
+
28
+ ### Live Demo
22
29
 
23
30
  [Datagrid DEMO application](http://datagrid.heroku.com) is available live!
24
31
  [Demo source code](https://github.com/bogdan/datagrid-demo).
25
32
 
33
+ ### Example
34
+
26
35
  In order to create a grid:
27
36
 
28
37
  ``` ruby
@@ -83,7 +92,7 @@ report.to_csv # => Yes, it is
83
92
  ### Scope
84
93
 
85
94
  Default scope of objects to filter and display.
86
- In common case it is `ActiveRecord::Base` subclass with some generic scopes like in example above:
95
+ In common case it is `ActiveRecord::Base` (or any other supported ORM) subclass with some generic scopes like in example above:
87
96
 
88
97
  ``` ruby
89
98
  scope do
@@ -164,7 +173,7 @@ end
164
173
  ```
165
174
 
166
175
  There is a simple helper set of helpers that allows you display report:
167
- (require will_paginate)
176
+ (require any pagination gem, will\_paginate is used as an example)
168
177
 
169
178
  ``` haml
170
179
  - assets = @report.assets.paginate(:page => params[:page])
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.6
1
+ 0.4.0
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{datagrid}
8
- s.version = "0.3.6"
7
+ s.name = "datagrid"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bogdan Gusiev"]
12
- s.date = %q{2011-08-22}
13
- s.description = %q{This allows you to easily build datagrid aka data tables with sortable columns and filters}
14
- s.email = %q{agresso@gmail.com}
12
+ s.date = "2011-11-03"
13
+ s.description = "This allows you to easily build datagrid aka data tables with sortable columns and filters"
14
+ s.email = "agresso@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt"
17
17
  ]
@@ -30,6 +30,10 @@ Gem::Specification.new do |s|
30
30
  "lib/datagrid/columns.rb",
31
31
  "lib/datagrid/columns/column.rb",
32
32
  "lib/datagrid/core.rb",
33
+ "lib/datagrid/drivers.rb",
34
+ "lib/datagrid/drivers/abstract_driver.rb",
35
+ "lib/datagrid/drivers/active_record.rb",
36
+ "lib/datagrid/drivers/mongoid.rb",
33
37
  "lib/datagrid/filters.rb",
34
38
  "lib/datagrid/filters/base_filter.rb",
35
39
  "lib/datagrid/filters/boolean_enum_filter.rb",
@@ -48,6 +52,8 @@ Gem::Specification.new do |s|
48
52
  "lib/datagrid/utils.rb",
49
53
  "spec/datagrid/active_model_spec.rb",
50
54
  "spec/datagrid/columns_spec.rb",
55
+ "spec/datagrid/drivers/active_record_spec.rb",
56
+ "spec/datagrid/drivers/mongoid_spec.rb",
51
57
  "spec/datagrid/filters/composite_filters_spec.rb",
52
58
  "spec/datagrid/filters/enum_filter_spec.rb",
53
59
  "spec/datagrid/filters_spec.rb",
@@ -57,62 +63,65 @@ Gem::Specification.new do |s|
57
63
  "spec/datagrid_spec.rb",
58
64
  "spec/spec_helper.rb",
59
65
  "spec/support/equal_to_dom.rb",
66
+ "spec/support/mongoid.rb",
60
67
  "spec/support/schema.rb",
61
68
  "spec/support/simple_report.rb"
62
69
  ]
63
- s.homepage = %q{http://github.com/bogdan/datagrid}
70
+ s.homepage = "http://github.com/bogdan/datagrid"
64
71
  s.licenses = ["MIT"]
65
72
  s.require_paths = ["lib"]
66
- s.rubygems_version = %q{1.3.7}
67
- s.summary = %q{Ruby gem to create datagrids}
73
+ s.rubygems_version = "1.8.11"
74
+ s.summary = "Ruby gem to create datagrids"
68
75
 
69
76
  if s.respond_to? :specification_version then
70
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
71
77
  s.specification_version = 3
72
78
 
73
79
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
74
- s.add_runtime_dependency(%q<rails>, [">= 0"])
75
- s.add_development_dependency(%q<rake>, ["= 0.8.7"])
76
- s.add_development_dependency(%q<mocha>, [">= 0"])
77
- s.add_development_dependency(%q<rspec>, ["= 2.6.0"])
80
+ s.add_runtime_dependency(%q<rails>, [">= 3.0"])
81
+ s.add_development_dependency(%q<rake>, [">= 0"])
78
82
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
79
83
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
80
- s.add_development_dependency(%q<rcov>, [">= 0"])
81
84
  s.add_development_dependency(%q<ruby-debug>, [">= 0"])
82
- s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
83
- s.add_development_dependency(%q<fastercsv>, [">= 0"])
85
+ s.add_development_dependency(%q<mocha>, [">= 0"])
86
+ s.add_development_dependency(%q<rspec>, ["= 2.6.0"])
87
+ s.add_development_dependency(%q<accept_values_for>, [">= 0"])
84
88
  s.add_development_dependency(%q<nokogiri>, [">= 0"])
89
+ s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
85
90
  s.add_development_dependency(%q<will_paginate>, ["= 2.3.15"])
86
- s.add_development_dependency(%q<accept_values_for>, [">= 0"])
91
+ s.add_development_dependency(%q<mongoid>, ["= 2.2.3"])
92
+ s.add_development_dependency(%q<bson_ext>, [">= 0"])
93
+ s.add_development_dependency(%q<fastercsv>, [">= 0"])
87
94
  else
88
- s.add_dependency(%q<rails>, [">= 0"])
89
- s.add_dependency(%q<rake>, ["= 0.8.7"])
90
- s.add_dependency(%q<mocha>, [">= 0"])
91
- s.add_dependency(%q<rspec>, ["= 2.6.0"])
95
+ s.add_dependency(%q<rails>, [">= 3.0"])
96
+ s.add_dependency(%q<rake>, [">= 0"])
92
97
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
93
98
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
94
- s.add_dependency(%q<rcov>, [">= 0"])
95
99
  s.add_dependency(%q<ruby-debug>, [">= 0"])
96
- s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
97
- s.add_dependency(%q<fastercsv>, [">= 0"])
100
+ s.add_dependency(%q<mocha>, [">= 0"])
101
+ s.add_dependency(%q<rspec>, ["= 2.6.0"])
102
+ s.add_dependency(%q<accept_values_for>, [">= 0"])
98
103
  s.add_dependency(%q<nokogiri>, [">= 0"])
104
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
99
105
  s.add_dependency(%q<will_paginate>, ["= 2.3.15"])
100
- s.add_dependency(%q<accept_values_for>, [">= 0"])
106
+ s.add_dependency(%q<mongoid>, ["= 2.2.3"])
107
+ s.add_dependency(%q<bson_ext>, [">= 0"])
108
+ s.add_dependency(%q<fastercsv>, [">= 0"])
101
109
  end
102
110
  else
103
- s.add_dependency(%q<rails>, [">= 0"])
104
- s.add_dependency(%q<rake>, ["= 0.8.7"])
105
- s.add_dependency(%q<mocha>, [">= 0"])
106
- s.add_dependency(%q<rspec>, ["= 2.6.0"])
111
+ s.add_dependency(%q<rails>, [">= 3.0"])
112
+ s.add_dependency(%q<rake>, [">= 0"])
107
113
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
108
114
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
109
- s.add_dependency(%q<rcov>, [">= 0"])
110
115
  s.add_dependency(%q<ruby-debug>, [">= 0"])
111
- s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
112
- s.add_dependency(%q<fastercsv>, [">= 0"])
116
+ s.add_dependency(%q<mocha>, [">= 0"])
117
+ s.add_dependency(%q<rspec>, ["= 2.6.0"])
118
+ s.add_dependency(%q<accept_values_for>, [">= 0"])
113
119
  s.add_dependency(%q<nokogiri>, [">= 0"])
120
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
114
121
  s.add_dependency(%q<will_paginate>, ["= 2.3.15"])
115
- s.add_dependency(%q<accept_values_for>, [">= 0"])
122
+ s.add_dependency(%q<mongoid>, ["= 2.2.3"])
123
+ s.add_dependency(%q<bson_ext>, [">= 0"])
124
+ s.add_dependency(%q<fastercsv>, [">= 0"])
116
125
  end
117
126
  end
118
127
 
@@ -41,7 +41,7 @@ class Datagrid::Columns::Column
41
41
  if options.has_key?(:order)
42
42
  self.options[:order]
43
43
  else
44
- grid.scope.column_names.include?(name.to_s) ? [grid.scope.table_name, name].join(".") : nil
44
+ grid.driver.default_order(grid.scope, name)
45
45
  end
46
46
  end
47
47
 
@@ -1,4 +1,4 @@
1
- require "active_record"
1
+ require "datagrid/drivers"
2
2
 
3
3
  module Datagrid
4
4
  module Core
@@ -42,6 +42,9 @@ module Datagrid
42
42
  end
43
43
  end
44
44
 
45
+ def driver
46
+ @driver ||= Drivers::AbstractDriver.guess_driver(scope).new
47
+ end
45
48
 
46
49
  protected
47
50
  def check_scope_defined!(message = "Scope not defined")
@@ -77,7 +80,7 @@ module Datagrid
77
80
  end
78
81
 
79
82
  def assets
80
- scope.scoped({})
83
+ driver.to_scope(scope)
81
84
  end
82
85
 
83
86
  def attributes=(attributes)
@@ -94,9 +97,9 @@ module Datagrid
94
97
  self.class.scope
95
98
  end
96
99
 
97
-
98
-
99
- protected
100
+ def driver
101
+ self.class.driver
102
+ end
100
103
 
101
104
  def check_scope_defined!(message)
102
105
  self.class.check_scope_defined!(message)
@@ -0,0 +1,9 @@
1
+ require "datagrid/drivers/abstract_driver"
2
+ require "datagrid/drivers/active_record"
3
+ require "datagrid/drivers/mongoid"
4
+
5
+
6
+ module Datagrid
7
+ module Drivers
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ module Datagrid
2
+ module Drivers
3
+ class AbstractDriver
4
+
5
+ class_attribute :subclasses
6
+
7
+ def self.inherited(base)
8
+ super(base)
9
+ self.subclasses ||= []
10
+ self.subclasses << base
11
+ end
12
+
13
+ def self.guess_driver(scope)
14
+ klass = self.subclasses.find do |driver_class|
15
+ driver_class.match?(scope)
16
+ end || raise(Datagrid::ConfigurationError, "ORM Driver not found for scope: #{scope.inspect}.")
17
+ end
18
+
19
+
20
+ #TODO api declaration
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,40 @@
1
+ module Datagrid
2
+ module Drivers
3
+ class ActiveRecord < AbstractDriver
4
+
5
+ def self.match?(scope)
6
+ if scope.is_a?(Class)
7
+ scope.ancestors.include?(::ActiveRecord::Base)
8
+ else
9
+ scope.is_a?(::ActiveRecord::Relation)
10
+ end
11
+ end
12
+
13
+ def to_scope(scope)
14
+ scope.scoped({})
15
+ end
16
+
17
+ def where(scope, condition)
18
+ scope.where(condition)
19
+ end
20
+
21
+ def asc(scope, order)
22
+ # Rails 3.x.x don't able to override already applied order
23
+ # Using #reorder instead
24
+ scope.reorder(order)
25
+ end
26
+
27
+ def desc(scope, order)
28
+ scope.reorder(order).reverse_order
29
+ end
30
+
31
+ def table_name(scope)
32
+ scope.table_name
33
+ end
34
+
35
+ def default_order(scope, column_name)
36
+ scope.column_names.include?(column_name.to_s) ? [scope.table_name, column_name].join(".") : nil
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,35 @@
1
+ module Datagrid
2
+ module Drivers
3
+ class Mongoid < AbstractDriver
4
+
5
+ def self.match?(scope)
6
+ if scope.is_a?(Class)
7
+ scope.ancestors.include?(::Mongoid::Document)
8
+ else
9
+ scope.is_a?(::Mongoid::Criteria)
10
+ end
11
+ end
12
+
13
+ def to_scope(scope)
14
+ scope.where
15
+ end
16
+
17
+ def where(scope, condition)
18
+ scope.where(condition)
19
+ end
20
+
21
+ def asc(scope, order)
22
+ scope.asc(order)
23
+ end
24
+
25
+ def desc(scope, order)
26
+ scope.desc(order)
27
+ end
28
+
29
+ def default_order(scope, column_name)
30
+ column_name
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -67,8 +67,9 @@ module Datagrid
67
67
  protected
68
68
  def default_filter(attribute)
69
69
  check_scope_defined!("Scope should be defined before filters")
70
+ grid = self
70
71
  lambda do |value|
71
- self.scoped(:conditions => {attribute => value})
72
+ grid.driver.where(grid.scope, attribute => value)
72
73
  end
73
74
  end
74
75
 
@@ -11,7 +11,7 @@ module Datagrid
11
11
  end # self.included
12
12
 
13
13
  module ClassMethods
14
-
14
+ #TODO: decide what to do with cross-orm
15
15
 
16
16
  def date_range_filters(field, from_name = :"from_#{field}", to_name = :"to_#{field}")
17
17
  filter(from_name, :date) do |date|
@@ -21,7 +21,7 @@ module Datagrid
21
21
  options = args.extract_options!
22
22
  html = options[:html] || {}
23
23
  html[:class] ||= "datagrid"
24
- assets = report.assets
24
+ assets = args.any? ? args.shift : report.assets
25
25
  paginate = options[:paginate]
26
26
  assets = assets.paginate(paginate) if paginate
27
27
  content = content_tag(:tr, datagrid_header(report, options)) + datagrid_rows(report, assets, options)
@@ -37,7 +37,7 @@ module Datagrid
37
37
  if options[:order] && column.order
38
38
  data << datagrid_order_for(grid, column)
39
39
  end
40
- header << content_tag(:th, data)
40
+ header << content_tag(:th, data, :class => column.name)
41
41
  end
42
42
  header
43
43
  end
@@ -46,7 +46,7 @@ module Datagrid
46
46
  columns = report.columns
47
47
  result = assets.map do |asset|
48
48
  content = columns.map do |column|
49
- content_tag(:td, datagrid_format_value(report, column, asset))
49
+ content_tag(:td, datagrid_format_value(report, column, asset), :class => column.name)
50
50
  end.join(empty_string)
51
51
  content_tag(:tr, _safe(content), :class => options[:cycle] && cycle(*options[:cycle]))
52
52
  end.join(empty_string)
@@ -61,23 +61,15 @@ module Datagrid
61
61
 
62
62
  def apply_order(assets, column)
63
63
 
64
- # Rails 3.0.x don't able to override already applied order
65
- # Using #reorder instead
66
- order_method = assets.respond_to?(:reorder) ? :reorder : :order # Rails 3?
67
-
68
64
  order = column.order
69
65
  if self.descending?
70
66
  if column.order_desc
71
- assets.send(order_method, column.order_desc)
67
+ driver.asc(assets, column.order_desc)
72
68
  else
73
- if assets.respond_to?(:reverse_order) # Rails 3?
74
- assets.reorder(order).reverse_order
75
- else
76
- assets.order(ActiveRecord::Base.send(:reverse_sql_order, order))
77
- end
69
+ driver.desc(assets, order)
78
70
  end
79
71
  else
80
- assets.send(order_method, order)
72
+ driver.asc(assets, order)
81
73
  end
82
74
  end
83
75
 
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Datagrid::Drivers::ActiveRecord do
4
+
5
+ describe ".match?" do
6
+ subject { described_class }
7
+
8
+ it {should be_match(Entry)}
9
+ it {should be_match(Entry.scoped)}
10
+ it {should_not be_match(MongoidEntry)}
11
+ end
12
+
13
+ end
@@ -0,0 +1,56 @@
1
+ describe Datagrid::Drivers::Mongoid do
2
+
3
+ describe ".match?" do
4
+
5
+ subject { described_class }
6
+
7
+ it {should be_match(MongoidEntry)}
8
+ it {should be_match(MongoidEntry.scoped)}
9
+ it {should_not be_match(Entry.scoped)}
10
+
11
+ end
12
+ describe "api" do
13
+
14
+ subject do
15
+ MongoidGrid.new(
16
+ defined?(_attributes) ? _attributes : {}
17
+ )
18
+ end
19
+
20
+ let!(:first) do
21
+ MongoidEntry.create!(
22
+ :group_id => 2,
23
+ :name => "Main First",
24
+ :disabled => false
25
+ )
26
+ end
27
+ let!(:second) do
28
+ MongoidEntry.create!(
29
+ :group_id => 3,
30
+ :name => "Main Second",
31
+ :disabled => true
32
+ )
33
+ end
34
+
35
+
36
+ its(:assets) {should include(first, second)}
37
+
38
+ its(:"assets.size") {should == 2}
39
+ its(:rows) {should == [["Main First", 2, false], ["Main Second", 3, true]]}
40
+ its(:header) {should ==[ "Name", "Group", "Disabled"]}
41
+
42
+ its(:data) {should == [[ "Name", "Group", "Disabled"], ["Main First", 2, false], ["Main Second", 3, true]]}
43
+
44
+
45
+ describe "when some filters specified" do
46
+ let(:_attributes) { {:group_id => 2} }
47
+ its(:assets) {should include(first)}
48
+ its(:assets) {should_not include(second)}
49
+ end
50
+
51
+ describe "when reverse ordering is specified" do
52
+ let(:_attributes) { {:order => :name, :descending => true} }
53
+ its(:rows) {should == [["Main Second", 3, true], ["Main First", 2, false]]}
54
+ end
55
+ end
56
+ end
@@ -28,15 +28,33 @@ describe Datagrid::Helper do
28
28
  subject.datagrid_table(grid).should equal_to_dom(<<-HTML)
29
29
  <table class="datagrid">
30
30
  <tr>
31
- <th>Group<div class="order"></div>
31
+ <th class="group">Group<div class="order"></div>
32
32
  </th>
33
- <th>Name<div class="order"></div>
33
+ <th class="name">Name<div class="order"></div>
34
34
  </th>
35
35
  </tr>
36
36
 
37
37
  <tr>
38
- <td>Pop</td>
39
- <td>Star</td>
38
+ <td class="group">Pop</td>
39
+ <td class="name">Star</td>
40
+ </tr>
41
+ </table>
42
+ HTML
43
+ end
44
+ it "should support giving assets explicitly" do
45
+ other_entry = Entry.create!(entry.attributes)
46
+ subject.datagrid_table(grid, [entry]).should equal_to_dom(<<-HTML)
47
+ <table class="datagrid">
48
+ <tr>
49
+ <th class="group">Group<div class="order"></div>
50
+ </th>
51
+ <th class="name">Name<div class="order"></div>
52
+ </th>
53
+ </tr>
54
+
55
+ <tr>
56
+ <td class="group">Pop</td>
57
+ <td class="name">Star</td>
40
58
  </tr>
41
59
  </table>
42
60
  HTML
@@ -45,8 +63,8 @@ HTML
45
63
  it "should support cycle option" do
46
64
  subject.datagrid_rows(grid, [entry], :cycle => ["odd", "even"]).should equal_to_dom(<<-HTML)
47
65
  <tr class="odd">
48
- <td>Pop</td>
49
- <td>Star</td>
66
+ <td class="group">Pop</td>
67
+ <td class="name">Star</td>
50
68
  </tr>
51
69
  HTML
52
70
  end
@@ -35,7 +35,7 @@ describe SimpleReport do
35
35
 
36
36
  describe ".scope" do
37
37
  it "should return defined scope of objects" do
38
- subject.scope.should respond_to(:table_name)
38
+ subject.scope.should respond_to(:each)
39
39
  end
40
40
 
41
41
 
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
+
3
4
  begin
4
5
  Bundler.setup(:default, :development)
5
6
  rescue Bundler::BundlerError => e
@@ -7,19 +8,24 @@ rescue Bundler::BundlerError => e
7
8
  $stderr.puts "Run `bundle install` to install missing gems"
8
9
  exit e.status_code
9
10
  end
11
+
10
12
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
13
  $LOAD_PATH.unshift(File.dirname(__FILE__))
12
14
 
13
15
  require "active_record"
14
16
  require "will_paginate"
17
+ require "mongoid"
15
18
  require 'datagrid'
16
19
  require "discover"
17
20
  begin
18
- #require 'ruby-debug'
21
+ require 'ruby-debug'
19
22
  rescue
20
23
  end
21
24
  require 'rspec'
25
+ require "logger"
22
26
 
27
+ File.open('spec.log', "w").close
28
+ TEST_LOGGER = Logger.new('spec.log')
23
29
 
24
30
  RSpec.configure do |config|
25
31
 
@@ -28,6 +34,7 @@ RSpec.configure do |config|
28
34
  #TODO better database truncation
29
35
  Group.delete_all
30
36
  Entry.delete_all
37
+ MongoidEntry.delete_all
31
38
 
32
39
  end
33
40
 
@@ -39,4 +46,5 @@ end
39
46
  # Requires supporting files with custom matchers and macros, etc,
40
47
  # in ./support/ and its subdirectories.
41
48
  Dir["#{File.dirname(__FILE__)}/support/schema.rb"].each {|f| require f}
49
+ Dir["#{File.dirname(__FILE__)}/support/mongoid.rb"].each {|f| require f}
42
50
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
@@ -0,0 +1,47 @@
1
+ require "rubygems"
2
+ require 'mongoid'
3
+
4
+
5
+ Mongoid.from_hash({
6
+ "host" => "localhost",
7
+ "database" =>"datagrid_mongoid",
8
+ "autocreate_indexes" => true,
9
+ })
10
+
11
+ #Mongoid.logger = TEST_LOGGER #TODO: understand why still output to STDOUT
12
+ Mongoid.logger = nil
13
+
14
+
15
+ class MongoidEntry
16
+
17
+ include Mongoid::Document
18
+ include Mongoid::Timestamps
19
+
20
+ field :group_id, :type => Integer
21
+ field :name, :type => String
22
+ field :category, :type => String
23
+ field :disabled, :default => false, :type => Boolean
24
+ field :confirmed, :default => false, :type => Boolean
25
+ field :shipping_date, :type => DateTime
26
+
27
+ end
28
+
29
+ class MongoidGrid
30
+ include ::Datagrid
31
+
32
+ scope do
33
+ MongoidEntry
34
+ end
35
+
36
+ filter :name
37
+ filter :group_id do |value|
38
+ where(:group_id => value)
39
+ end
40
+ filter :disabled, :eboolean
41
+
42
+ column :name
43
+ column :group_id
44
+ column :disabled
45
+
46
+ end
47
+
@@ -1,10 +1,8 @@
1
- require "logger"
2
1
 
3
2
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
4
3
  ActiveRecord::Base.configurations = true
5
4
 
6
- File.open('spec.log', "w").close
7
- ActiveRecord::Base.logger = Logger.new('spec.log')
5
+ ActiveRecord::Base.logger = TEST_LOGGER
8
6
 
9
7
 
10
8
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datagrid
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
4
+ hash: 15
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 6
10
- version: 0.3.6
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bogdan Gusiev
@@ -15,41 +15,26 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-22 00:00:00 +03:00
19
- default_executable:
18
+ date: 2011-11-03 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ type: :runtime
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- hash: 3
27
+ hash: 7
28
28
  segments:
29
+ - 3
29
30
  - 0
30
- version: "0"
31
- requirement: *id001
32
- type: :runtime
33
- name: rails
31
+ version: "3.0"
34
32
  prerelease: false
33
+ name: rails
34
+ version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
- none: false
38
- requirements:
39
- - - "="
40
- - !ruby/object:Gem::Version
41
- hash: 49
42
- segments:
43
- - 0
44
- - 8
45
- - 7
46
- version: 0.8.7
47
- requirement: *id002
48
36
  type: :development
49
- name: rake
50
- prerelease: false
51
- - !ruby/object:Gem::Dependency
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
53
38
  none: false
54
39
  requirements:
55
40
  - - ">="
@@ -58,28 +43,12 @@ dependencies:
58
43
  segments:
59
44
  - 0
60
45
  version: "0"
61
- requirement: *id003
62
- type: :development
63
- name: mocha
64
46
  prerelease: false
47
+ name: rake
48
+ version_requirements: *id002
65
49
  - !ruby/object:Gem::Dependency
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - "="
70
- - !ruby/object:Gem::Version
71
- hash: 23
72
- segments:
73
- - 2
74
- - 6
75
- - 0
76
- version: 2.6.0
77
- requirement: *id004
78
50
  type: :development
79
- name: rspec
80
- prerelease: false
81
- - !ruby/object:Gem::Dependency
82
- version_requirements: &id005 !ruby/object:Gem::Requirement
51
+ requirement: &id003 !ruby/object:Gem::Requirement
83
52
  none: false
84
53
  requirements:
85
54
  - - ~>
@@ -90,12 +59,12 @@ dependencies:
90
59
  - 0
91
60
  - 0
92
61
  version: 1.0.0
93
- requirement: *id005
94
- type: :development
95
- name: bundler
96
62
  prerelease: false
63
+ name: bundler
64
+ version_requirements: *id003
97
65
  - !ruby/object:Gem::Dependency
98
- version_requirements: &id006 !ruby/object:Gem::Requirement
66
+ type: :development
67
+ requirement: &id004 !ruby/object:Gem::Requirement
99
68
  none: false
100
69
  requirements:
101
70
  - - ~>
@@ -106,12 +75,12 @@ dependencies:
106
75
  - 6
107
76
  - 0
108
77
  version: 1.6.0
109
- requirement: *id006
110
- type: :development
111
- name: jeweler
112
78
  prerelease: false
79
+ name: jeweler
80
+ version_requirements: *id004
113
81
  - !ruby/object:Gem::Dependency
114
- version_requirements: &id007 !ruby/object:Gem::Requirement
82
+ type: :development
83
+ requirement: &id005 !ruby/object:Gem::Requirement
115
84
  none: false
116
85
  requirements:
117
86
  - - ">="
@@ -120,12 +89,12 @@ dependencies:
120
89
  segments:
121
90
  - 0
122
91
  version: "0"
123
- requirement: *id007
124
- type: :development
125
- name: rcov
126
92
  prerelease: false
93
+ name: ruby-debug
94
+ version_requirements: *id005
127
95
  - !ruby/object:Gem::Dependency
128
- version_requirements: &id008 !ruby/object:Gem::Requirement
96
+ type: :development
97
+ requirement: &id006 !ruby/object:Gem::Requirement
129
98
  none: false
130
99
  requirements:
131
100
  - - ">="
@@ -134,12 +103,28 @@ dependencies:
134
103
  segments:
135
104
  - 0
136
105
  version: "0"
137
- requirement: *id008
106
+ prerelease: false
107
+ name: mocha
108
+ version_requirements: *id006
109
+ - !ruby/object:Gem::Dependency
138
110
  type: :development
139
- name: ruby-debug
111
+ requirement: &id007 !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - "="
115
+ - !ruby/object:Gem::Version
116
+ hash: 23
117
+ segments:
118
+ - 2
119
+ - 6
120
+ - 0
121
+ version: 2.6.0
140
122
  prerelease: false
123
+ name: rspec
124
+ version_requirements: *id007
141
125
  - !ruby/object:Gem::Dependency
142
- version_requirements: &id009 !ruby/object:Gem::Requirement
126
+ type: :development
127
+ requirement: &id008 !ruby/object:Gem::Requirement
143
128
  none: false
144
129
  requirements:
145
130
  - - ">="
@@ -148,12 +133,12 @@ dependencies:
148
133
  segments:
149
134
  - 0
150
135
  version: "0"
151
- requirement: *id009
152
- type: :development
153
- name: sqlite3-ruby
154
136
  prerelease: false
137
+ name: accept_values_for
138
+ version_requirements: *id008
155
139
  - !ruby/object:Gem::Dependency
156
- version_requirements: &id010 !ruby/object:Gem::Requirement
140
+ type: :development
141
+ requirement: &id009 !ruby/object:Gem::Requirement
157
142
  none: false
158
143
  requirements:
159
144
  - - ">="
@@ -162,12 +147,12 @@ dependencies:
162
147
  segments:
163
148
  - 0
164
149
  version: "0"
165
- requirement: *id010
166
- type: :development
167
- name: fastercsv
168
150
  prerelease: false
151
+ name: nokogiri
152
+ version_requirements: *id009
169
153
  - !ruby/object:Gem::Dependency
170
- version_requirements: &id011 !ruby/object:Gem::Requirement
154
+ type: :development
155
+ requirement: &id010 !ruby/object:Gem::Requirement
171
156
  none: false
172
157
  requirements:
173
158
  - - ">="
@@ -176,12 +161,12 @@ dependencies:
176
161
  segments:
177
162
  - 0
178
163
  version: "0"
179
- requirement: *id011
180
- type: :development
181
- name: nokogiri
182
164
  prerelease: false
165
+ name: sqlite3-ruby
166
+ version_requirements: *id010
183
167
  - !ruby/object:Gem::Dependency
184
- version_requirements: &id012 !ruby/object:Gem::Requirement
168
+ type: :development
169
+ requirement: &id011 !ruby/object:Gem::Requirement
185
170
  none: false
186
171
  requirements:
187
172
  - - "="
@@ -192,12 +177,28 @@ dependencies:
192
177
  - 3
193
178
  - 15
194
179
  version: 2.3.15
195
- requirement: *id012
196
- type: :development
180
+ prerelease: false
197
181
  name: will_paginate
182
+ version_requirements: *id011
183
+ - !ruby/object:Gem::Dependency
184
+ type: :development
185
+ requirement: &id012 !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - "="
189
+ - !ruby/object:Gem::Version
190
+ hash: 1
191
+ segments:
192
+ - 2
193
+ - 2
194
+ - 3
195
+ version: 2.2.3
198
196
  prerelease: false
197
+ name: mongoid
198
+ version_requirements: *id012
199
199
  - !ruby/object:Gem::Dependency
200
- version_requirements: &id013 !ruby/object:Gem::Requirement
200
+ type: :development
201
+ requirement: &id013 !ruby/object:Gem::Requirement
201
202
  none: false
202
203
  requirements:
203
204
  - - ">="
@@ -206,10 +207,23 @@ dependencies:
206
207
  segments:
207
208
  - 0
208
209
  version: "0"
209
- requirement: *id013
210
+ prerelease: false
211
+ name: bson_ext
212
+ version_requirements: *id013
213
+ - !ruby/object:Gem::Dependency
210
214
  type: :development
211
- name: accept_values_for
215
+ requirement: &id014 !ruby/object:Gem::Requirement
216
+ none: false
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ hash: 3
221
+ segments:
222
+ - 0
223
+ version: "0"
212
224
  prerelease: false
225
+ name: fastercsv
226
+ version_requirements: *id014
213
227
  description: This allows you to easily build datagrid aka data tables with sortable columns and filters
214
228
  email: agresso@gmail.com
215
229
  executables: []
@@ -233,6 +247,10 @@ files:
233
247
  - lib/datagrid/columns.rb
234
248
  - lib/datagrid/columns/column.rb
235
249
  - lib/datagrid/core.rb
250
+ - lib/datagrid/drivers.rb
251
+ - lib/datagrid/drivers/abstract_driver.rb
252
+ - lib/datagrid/drivers/active_record.rb
253
+ - lib/datagrid/drivers/mongoid.rb
236
254
  - lib/datagrid/filters.rb
237
255
  - lib/datagrid/filters/base_filter.rb
238
256
  - lib/datagrid/filters/boolean_enum_filter.rb
@@ -251,6 +269,8 @@ files:
251
269
  - lib/datagrid/utils.rb
252
270
  - spec/datagrid/active_model_spec.rb
253
271
  - spec/datagrid/columns_spec.rb
272
+ - spec/datagrid/drivers/active_record_spec.rb
273
+ - spec/datagrid/drivers/mongoid_spec.rb
254
274
  - spec/datagrid/filters/composite_filters_spec.rb
255
275
  - spec/datagrid/filters/enum_filter_spec.rb
256
276
  - spec/datagrid/filters_spec.rb
@@ -260,9 +280,9 @@ files:
260
280
  - spec/datagrid_spec.rb
261
281
  - spec/spec_helper.rb
262
282
  - spec/support/equal_to_dom.rb
283
+ - spec/support/mongoid.rb
263
284
  - spec/support/schema.rb
264
285
  - spec/support/simple_report.rb
265
- has_rdoc: true
266
286
  homepage: http://github.com/bogdan/datagrid
267
287
  licenses:
268
288
  - MIT
@@ -292,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
312
  requirements: []
293
313
 
294
314
  rubyforge_project:
295
- rubygems_version: 1.3.7
315
+ rubygems_version: 1.8.11
296
316
  signing_key:
297
317
  specification_version: 3
298
318
  summary: Ruby gem to create datagrids