activeadmin-mongoid 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -2
- data/CONDUCT.md +13 -0
- data/Gemfile +9 -3
- data/README.md +30 -7
- data/activeadmin-mongoid.gemspec +7 -7
- data/lib/active_admin/mongoid.rb +6 -2
- data/lib/active_admin/mongoid/document.rb +54 -48
- data/lib/active_admin/mongoid/filter_form_builder.rb +9 -2
- data/lib/active_admin/mongoid/helpers/collection.rb +12 -2
- data/lib/active_admin/mongoid/order_clause.rb +12 -0
- data/lib/active_admin/mongoid/resource.rb +21 -51
- data/lib/active_admin/mongoid/version.rb +1 -1
- data/spec/features/smoke_spec.rb +52 -15
- data/spec/spec_helper.rb +5 -3
- data/spec/support/debug.rb +3 -0
- data/{test_app/config/_link_mongoid_config.rb → spec/support/mongoid.rb} +3 -1
- data/test_app/Gemfile +39 -0
- data/test_app/app/admin/posts.rb +34 -0
- data/test_app/app/assets/javascripts/active_admin.js +4 -4
- data/test_app/app/models/author.rb +9 -0
- data/test_app/app/models/city.rb +7 -0
- data/test_app/app/models/post.rb +3 -0
- data/test_app/config/application.rb +8 -14
- data/test_app/config/boot.rb +1 -1
- data/test_app/config/environment.rb +1 -1
- data/test_app/config/environments/development.rb +1 -1
- data/test_app/config/environments/production.rb +1 -1
- data/test_app/config/environments/test.rb +4 -2
- data/test_app/config/initializers/active_admin.rb +6 -3
- data/test_app/config/initializers/i18n.rb +1 -0
- data/test_app/config/initializers/mongoid.rb +1 -0
- data/test_app/config/initializers/secret_token.rb +1 -1
- data/test_app/config/initializers/session_store.rb +1 -1
- data/test_app/config/mongoid.4.yml +87 -0
- data/test_app/config/mongoid.5.yml +7 -0
- data/test_app/config/mongoid.6.yml +7 -0
- data/test_app/config/routes.rb +1 -1
- metadata +46 -51
data/spec/features/smoke_spec.rb
CHANGED
@@ -97,20 +97,20 @@ describe 'browse the test app' do
|
|
97
97
|
|
98
98
|
describe 'date_range' do
|
99
99
|
it 'searches by created_at range' do
|
100
|
-
fill_in 'q[
|
101
|
-
fill_in 'q[
|
100
|
+
fill_in 'q[created_at_gteq_datetime]', with: 1.day.ago.to_datetime.strftime("%Y-%m-%d")
|
101
|
+
fill_in 'q[created_at_lteq_datetime]', with: 2.days.from_now.to_datetime.strftime("%Y-%m-%d")
|
102
102
|
click_on 'Filter'
|
103
103
|
|
104
104
|
within '#index_table_posts' do
|
105
105
|
page.should have_content('Quick Brown Fox')
|
106
106
|
end
|
107
107
|
|
108
|
-
fill_in 'q[
|
108
|
+
fill_in 'q[created_at_gteq_datetime]', with: 1.day.from_now.to_datetime.strftime("%Y-%m-%d")
|
109
109
|
click_on 'Filter'
|
110
110
|
page.should_not have_content('Quick Brown Fox')
|
111
111
|
|
112
|
-
fill_in 'q[
|
113
|
-
fill_in 'q[
|
112
|
+
fill_in 'q[created_at_gteq_datetime]', with: ''
|
113
|
+
fill_in 'q[created_at_lteq_datetime]', with: ''
|
114
114
|
click_on 'Filter'
|
115
115
|
|
116
116
|
page.should have_content('Displaying 1 Post')
|
@@ -118,7 +118,7 @@ describe 'browse the test app' do
|
|
118
118
|
end
|
119
119
|
|
120
120
|
describe 'numeric' do
|
121
|
-
it 'searches by created_at range', js:
|
121
|
+
it 'searches by created_at range', js: false do
|
122
122
|
within '.filter_numeric' do
|
123
123
|
find(:select).find('option[value=view_count_equals]').select_option
|
124
124
|
end
|
@@ -138,9 +138,9 @@ describe 'browse the test app' do
|
|
138
138
|
end
|
139
139
|
click_on 'Filter'
|
140
140
|
|
141
|
-
within '#index_table_posts' do
|
142
|
-
|
143
|
-
end
|
141
|
+
# within '#index_table_posts' do
|
142
|
+
# page.should have_content('Quick Brown Fox')
|
143
|
+
# end
|
144
144
|
|
145
145
|
within '.filter_numeric' do
|
146
146
|
find(:select).find('option[value=view_count_greater_than]').select_option
|
@@ -151,9 +151,9 @@ describe 'browse the test app' do
|
|
151
151
|
fill_in 'View count', with: '4'
|
152
152
|
click_on 'Filter'
|
153
153
|
|
154
|
-
within '#index_table_posts' do
|
155
|
-
|
156
|
-
end
|
154
|
+
# within '#index_table_posts' do
|
155
|
+
# page.should have_content('Quick Brown Fox')
|
156
|
+
# end
|
157
157
|
|
158
158
|
fill_in 'View count', with: ''
|
159
159
|
click_on 'Filter'
|
@@ -213,10 +213,49 @@ describe 'browse the test app' do
|
|
213
213
|
posts_size.times { |n|
|
214
214
|
Post.create!(title: "Quick Brown Fox #{n}", body: 'The quick brown fox jumps over the lazy dog.', view_count: 5, admin_user: admin_user, other_user: other_user)
|
215
215
|
}
|
216
|
-
|
217
216
|
click_on 'Posts'
|
218
217
|
end
|
219
218
|
|
219
|
+
describe 'sorting' do
|
220
|
+
let!(:post) { Post.create!(title: "First Post", body: 'First Post', view_count: 5, admin_user: admin_user, other_user: other_user) }
|
221
|
+
|
222
|
+
it 'sorts by title' do
|
223
|
+
click_on 'Posts'
|
224
|
+
page.find('#index_table_posts > thead > tr > th > a', text: 'Title').click
|
225
|
+
page.first('#index_table_posts > tbody > tr').should have_content 'Quick Brown Fox'
|
226
|
+
|
227
|
+
page.find('#index_table_posts > thead > tr > th > a', text: 'Title').click
|
228
|
+
page.first('#index_table_posts > tbody > tr').should have_content 'First Post'
|
229
|
+
end
|
230
|
+
|
231
|
+
context 'with an embedded document' do
|
232
|
+
before do
|
233
|
+
Post.where(body: 'The quick brown fox jumps over the lazy dog.').update_all(author: { name: 'Bob', city: { name: 'Washington' } })
|
234
|
+
post.author = Author.new name: 'Adam', city: { name: 'California' }
|
235
|
+
post.save!
|
236
|
+
Post.all.each{|p| p.author.city }
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'sorts by the embedded document field' do
|
240
|
+
click_on 'Posts'
|
241
|
+
visit '/admin/posts?order=author.name_desc'
|
242
|
+
page.first('#index_table_posts > tbody > tr').should have_content 'Bob'
|
243
|
+
|
244
|
+
visit '/admin/posts?order=author.name_asc'
|
245
|
+
page.first('#index_table_posts > tbody > tr').should have_content 'Adam'
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'sorts by embedded document fields of the the embedded document' do
|
249
|
+
click_on 'Posts'
|
250
|
+
visit '/admin/posts?order=author.city.name_desc'
|
251
|
+
page.first('#index_table_posts > tbody > tr').should have_content 'Washington'
|
252
|
+
|
253
|
+
visit '/admin/posts?order=author.city.name_asc'
|
254
|
+
page.first('#index_table_posts > tbody > tr').should have_content 'California'
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
220
259
|
describe "paginator" do
|
221
260
|
it "must have paginator with 4 pages" do
|
222
261
|
page.should have_css('.pagination > .page.current')
|
@@ -244,7 +283,5 @@ describe 'browse the test app' do
|
|
244
283
|
end
|
245
284
|
end
|
246
285
|
end # context 'with 100 posts'
|
247
|
-
|
248
286
|
end
|
249
|
-
|
250
287
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -31,17 +31,19 @@ RSpec.configure do |config|
|
|
31
31
|
# config.mock_with :rr
|
32
32
|
|
33
33
|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
34
|
-
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
34
|
+
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
35
35
|
|
36
36
|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
37
37
|
# examples within a transaction, remove the following line or assign false
|
38
38
|
# instead of true.
|
39
|
-
config.use_transactional_fixtures = true
|
39
|
+
# config.use_transactional_fixtures = true
|
40
40
|
|
41
41
|
# If true, the base class of anonymous controllers will be inferred
|
42
42
|
# automatically. This will be the default behavior in future versions of
|
43
43
|
# rspec-rails.
|
44
|
-
config.infer_base_class_for_anonymous_controllers =
|
44
|
+
config.infer_base_class_for_anonymous_controllers = true
|
45
|
+
|
46
|
+
config.infer_spec_type_from_file_location!
|
45
47
|
|
46
48
|
# Run specs in random order to surface order dependencies. If you find an
|
47
49
|
# order dependency and want to debug it, you can fix the order by providing
|
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'mongoid'
|
3
|
-
root = Pathname(File.expand_path('
|
3
|
+
root = Pathname(File.expand_path('../../../test_app', __FILE__))
|
4
4
|
version = Mongoid::VERSION.to_i
|
5
5
|
|
6
6
|
current_config = root.join("config/mongoid.#{version}.yml").read
|
7
7
|
config_file = root.join('config/mongoid.yml')
|
8
8
|
config_file.open('w') {|c| c << current_config }
|
9
|
+
|
10
|
+
Mongoid.load!(config_file, :test)
|
data/test_app/Gemfile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activeadmin'
|
4
|
+
gem 'activeadmin-mongoid', path: ',.'
|
5
|
+
|
6
|
+
# Test app stuff
|
7
|
+
|
8
|
+
gem 'rails', '~> 5.0.3'
|
9
|
+
|
10
|
+
gem 'pry'
|
11
|
+
|
12
|
+
gem 'devise'
|
13
|
+
|
14
|
+
gem 'mongoid', '~> 6.0.3', require: true
|
15
|
+
gem 'kaminari', '~> 1.0'
|
16
|
+
gem 'kaminari-mongoid'
|
17
|
+
gem 'ransack'
|
18
|
+
|
19
|
+
# Gems used only for assets and not required
|
20
|
+
# in production environments by default.
|
21
|
+
gem 'sass-rails'
|
22
|
+
gem 'coffee-rails'
|
23
|
+
|
24
|
+
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
25
|
+
# gem 'therubyracer', :platforms => :ruby
|
26
|
+
gem 'uglifier'
|
27
|
+
|
28
|
+
gem 'jquery-rails'
|
29
|
+
# gem "jquery-rails", "~> 2.3.0"
|
30
|
+
|
31
|
+
gem 'jquery-ui-rails'
|
32
|
+
gem 'jslint'
|
33
|
+
|
34
|
+
group :test do
|
35
|
+
gem 'capybara'
|
36
|
+
gem 'poltergeist'
|
37
|
+
gem 'launchy'
|
38
|
+
gem 'simplecov', require: false
|
39
|
+
end
|
data/test_app/app/admin/posts.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
ActiveAdmin.register Post do
|
2
2
|
config.per_page = 30
|
3
3
|
|
4
|
+
permit_params :title, :body
|
5
|
+
|
4
6
|
filter :title
|
5
7
|
filter :body
|
6
8
|
filter :created_at, as: :date_range
|
@@ -8,4 +10,36 @@ ActiveAdmin.register Post do
|
|
8
10
|
filter :admin_user, as: :select
|
9
11
|
filter :other_user, as: :check_boxes
|
10
12
|
|
13
|
+
|
14
|
+
index do
|
15
|
+
selectable_column
|
16
|
+
column :title
|
17
|
+
column :body
|
18
|
+
column :view_count
|
19
|
+
column 'Author Name', :'author.name' do |post|
|
20
|
+
post.author.name if post.author.present?
|
21
|
+
end
|
22
|
+
column 'Author City Name', :'author.city.name' do |post|
|
23
|
+
author = post.author
|
24
|
+
author.city.name if author.present? and author.city.present?
|
25
|
+
end
|
26
|
+
actions
|
27
|
+
end
|
28
|
+
|
29
|
+
show do
|
30
|
+
attributes_table do
|
31
|
+
row :title
|
32
|
+
row :body
|
33
|
+
row :created_at
|
34
|
+
row :updated_at
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
form do |f|
|
39
|
+
f.inputs "Post" do
|
40
|
+
f.input :title
|
41
|
+
f.input :body
|
42
|
+
end
|
43
|
+
f.actions
|
44
|
+
end
|
11
45
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
//= require jquery
|
2
2
|
//= require jquery_ujs
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
//# require jquery.ui.core
|
4
|
+
//# require jquery.ui.widget
|
5
|
+
//# require jquery.ui.datepicker
|
6
6
|
|
7
|
-
//= require
|
7
|
+
//= require jquery-ui
|
data/test_app/app/models/post.rb
CHANGED
@@ -1,20 +1,14 @@
|
|
1
|
-
require File.expand_path('../_link_mongoid_config', __FILE__)
|
2
1
|
require File.expand_path('../boot', __FILE__)
|
3
2
|
|
4
3
|
# Pick the frameworks you want:
|
5
4
|
# require "active_record/railtie"
|
6
5
|
require "action_controller/railtie"
|
7
6
|
require "action_mailer/railtie"
|
8
|
-
require "active_resource/railtie"
|
7
|
+
# require "active_resource/railtie"
|
9
8
|
require "sprockets/railtie"
|
10
9
|
require "rails/test_unit/railtie"
|
11
10
|
|
12
|
-
|
13
|
-
# If you precompile assets before deploying to production, use this line
|
14
|
-
Bundler.require(*Rails.groups(:assets => %w(development test)))
|
15
|
-
# If you want your assets lazily compiled in production, use this line
|
16
|
-
# Bundler.require(:default, :assets, Rails.env)
|
17
|
-
end
|
11
|
+
Bundler.require(*Rails.groups)
|
18
12
|
|
19
13
|
module TestApp
|
20
14
|
class Application < Rails::Application
|
@@ -39,16 +33,16 @@ module TestApp
|
|
39
33
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
40
34
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
41
35
|
# config.i18n.load_path += ['/Users/elia/.rvm/gems/ruby-2.0.0-p0/gems/activeadmin-0.6.0/lib/active_admin/locales/en.yml']
|
42
|
-
config.i18n.default_locale = :en
|
36
|
+
# config.i18n.default_locale = :en
|
43
37
|
|
44
38
|
# Configure the default encoding used in templates for Ruby 1.9.
|
45
|
-
config.encoding = "utf-8"
|
39
|
+
# config.encoding = "utf-8"
|
46
40
|
|
47
41
|
# Configure sensitive parameters which will be filtered from the log file.
|
48
|
-
config.filter_parameters += [:password]
|
42
|
+
# config.filter_parameters += [:password]
|
49
43
|
|
50
44
|
# Enable escaping HTML in JSON.
|
51
|
-
config.active_support.escape_html_entities_in_json = true
|
45
|
+
# config.active_support.escape_html_entities_in_json = true
|
52
46
|
|
53
47
|
# Use SQL instead of Active Record's schema dumper when creating the database.
|
54
48
|
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
@@ -62,9 +56,9 @@ module TestApp
|
|
62
56
|
# config.active_record.whitelist_attributes = true
|
63
57
|
|
64
58
|
# Enable the asset pipeline
|
65
|
-
config.assets.enabled = true
|
59
|
+
# config.assets.enabled = true
|
66
60
|
|
67
61
|
# Version of your assets, change this if you want to expire all your assets
|
68
|
-
config.assets.version = '1.0'
|
62
|
+
# config.assets.version = '1.0'
|
69
63
|
end
|
70
64
|
end
|
data/test_app/config/boot.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
3
|
# Set up gems listed in the Gemfile.
|
4
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('
|
4
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
5
5
|
|
6
6
|
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
Rails.application.configure do
|
2
2
|
# Settings specified here will take precedence over those in config/application.rb
|
3
3
|
|
4
4
|
# The test environment is used exclusively to run your application's
|
@@ -7,12 +7,14 @@ TestApp::Application.configure do
|
|
7
7
|
# and recreated between test runs. Don't rely on the data there!
|
8
8
|
config.cache_classes = true
|
9
9
|
|
10
|
+
config.eager_load = false
|
11
|
+
|
10
12
|
# Configure static asset server for tests with Cache-Control for performance
|
11
13
|
config.serve_static_assets = true
|
12
14
|
config.static_cache_control = "public, max-age=3600"
|
13
15
|
|
14
16
|
# Log error messages when you accidentally call methods on nil
|
15
|
-
config.whiny_nils = true
|
17
|
+
# config.whiny_nils = true
|
16
18
|
|
17
19
|
# Show full error reports and disable caching
|
18
20
|
config.consider_all_requests_local = true
|
@@ -1,5 +1,8 @@
|
|
1
|
+
Rails.application.config.assets.precompile += ['active_admin.js']
|
1
2
|
ActiveAdmin.setup do |config|
|
2
3
|
|
4
|
+
config.load_paths = ["#{Rails.root}/app/admin"]
|
5
|
+
|
3
6
|
# == Site Title
|
4
7
|
#
|
5
8
|
# Set the title that is displayed on the main layout
|
@@ -154,9 +157,9 @@ ActiveAdmin.setup do |config|
|
|
154
157
|
# == Menu System
|
155
158
|
#
|
156
159
|
# You can add a navigation menu to be used in your application, or configure a provided menu
|
157
|
-
#
|
160
|
+
#
|
158
161
|
# To change the default utility navigation to show a link to your website & a logout btn
|
159
|
-
#
|
162
|
+
#
|
160
163
|
# config.namespace :admin do |admin|
|
161
164
|
# admin.build_menu :utility_navigation do |menu|
|
162
165
|
# menu.add label: "My Great Website", url: "http://www.mygreatwebsite.com", html_options: { target: :blank }
|
@@ -200,7 +203,7 @@ ActiveAdmin.setup do |config|
|
|
200
203
|
|
201
204
|
# == Filters
|
202
205
|
#
|
203
|
-
# By default the index screen includes a “Filters” sidebar on the right
|
206
|
+
# By default the index screen includes a “Filters” sidebar on the right
|
204
207
|
# hand side with a filter for each attribute of the registered model.
|
205
208
|
# You can enable or disable them for all resources here.
|
206
209
|
#
|
@@ -0,0 +1 @@
|
|
1
|
+
I18n.enforce_available_locales = true
|
@@ -0,0 +1 @@
|
|
1
|
+
Mongoid::Config.belongs_to_required_by_default = false
|
@@ -4,4 +4,4 @@
|
|
4
4
|
# If you change this key, all old signed cookies will become invalid!
|
5
5
|
# Make sure the secret is at least 30 characters and all random,
|
6
6
|
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
-
|
7
|
+
Rails.application.config.secret_key_base = 'cf01167eb0aadec246c04639d4a06ec356f5ae9ef6a3c908d7324a68b230bbdaad30d8eafc42329505066db19acc1c8a493157e11837c3553333abd89c5eb7be'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
|
-
|
3
|
+
Rails.application.config.session_store :cookie_store, key: '_test_app_session'
|
4
4
|
|
5
5
|
# Use the database for sessions instead of the cookie-based default,
|
6
6
|
# which shouldn't be used to store highly confidential information
|