mongoid_document_editor 0.0.2 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 920e9e158e080607e1c9b4f715924505068850f8
4
- data.tar.gz: 75281429ff2f04be8ca4f1254246d03afae6eadb
3
+ metadata.gz: 1a560b84e3fe4da5adc33097334815fc355440e8
4
+ data.tar.gz: 5701273de9024ce00b415615a6635060b94322ad
5
5
  SHA512:
6
- metadata.gz: ca5938f12f2c21c5bd61f437d3962169504d3ca92414db3446987aa16763e1715c95995b8b5f6b66cadfdd41d7a6bed56fb4aec6e14e6c73d19cb2cc4e6c61e7
7
- data.tar.gz: 77410914726e7158ae2beea4a21e1f30988f1017a6f250aea803d2599d241f0c43adc0c4e95a94d1545c1d2e981e207214aecbe988211500ab59bd40378a52fb
6
+ metadata.gz: 2e8d01079e509c85715309554cb80d31f09fe5af7b3e3ed198d0b584f084bbad1afa4c18dae1c194caf0db5eaad4070dcd03473e2efc84b98d55a7eb4c5bfa49
7
+ data.tar.gz: 1ed9e7db517aec84842567ceeb27150c76d0f72667f396e683e4a063ec4a1b81504365d222b7594ad11b65a45eec41e641ae334ad36f4b3743c7b665435b0fe0
data/README.md CHANGED
@@ -1,29 +1,52 @@
1
- # MongoidDocumentEditor
1
+ # Mongoid Document Editor
2
2
 
3
- Mongoid
3
+ Mongoid Document Editor is Rails Engine that provides a DSL for setting up simple admin interfaces to edit MongoDB documents. No configuration is required in order to get a basic form, however you can override any form you want to provide a more custom and usable interface.
4
4
 
5
- ## Installation
5
+ ### Configuration
6
+ Create an initializer and configure your admin interface.
6
7
 
7
- Add this line to your application's Gemfile:
8
+ ```ruby
9
+ Mongoid::DocumentEditor.configure do
8
10
 
9
- gem 'mongoid_document_editor'
11
+ authenticate_with :admin_required
12
+
13
+ mount_at "/admin/documents"
10
14
 
11
- And then execute:
15
+ form_configuration_for User do
16
+ field :first_name
17
+ field :last_name
18
+ field :favorite_color, values: User::COLORS
19
+ field :email, type: :email
20
+ field :home_city_id, values: -> { City.all }, label: :name, value: :id
21
+ field :visitied_city_ids: values: ->(user) { user.visited_cities }, label: :name, value: :id
22
+ end
12
23
 
13
- $ bundle
24
+ index_configuration_for User do
25
+ column :first_name
26
+ column :last_Name
27
+ column :email
28
+ column :city, value: ->(user) { user.city.name }
29
+ end
14
30
 
15
- Or install it yourself as:
31
+ end
32
+ ```
16
33
 
17
- $ gem install mongoid_document_editor
34
+ ### Usage
35
+ In your application visit: **/documents**
18
36
 
19
- ## Usage
37
+ ### Options
38
+ `authenticate_with`: Provide a controller filter for granting / denying access
39
+ `form_configuration_for Class`: Allows you to specify the fields that you want on the form for the specified class
40
+ `index_configuration_for Class`: Allows you to specify the columns that are displayed on the index page
41
+ `mount_at`: Endpoint where editor is mounted (default is **/documents**)
20
42
 
21
- TODO: Write usage instructions here
43
+ ### Notes
44
+ In development mode set `preload_models: true`
22
45
 
23
- ## Contributing
46
+ ### TODO
24
47
 
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
48
+ * Rails generator
49
+ * Remove simple_form dependency
50
+
51
+
52
+ Styled using [Base](http://matthewhartman.github.io/base/docs/index.html)
@@ -2,6 +2,9 @@ module Mongoid
2
2
  module DocumentEditor
3
3
  class ApplicationController < ::ApplicationController
4
4
  include DocumentsHelper
5
+
6
+ before_filter Mongoid::DocumentEditor.authentication_filter
7
+
5
8
  end
6
9
  end
7
10
  end
@@ -1,34 +1,50 @@
1
1
  module Mongoid
2
2
  module DocumentEditor
3
3
  class DocumentsController < ApplicationController
4
- include DocumentsHelper
5
4
 
6
5
  layout "mongoid/document_editor/layouts/application"
7
6
 
8
- before_filter Mongoid::DocumentEditor.authentication_filter
7
+ before_filter :setup_klass, except: [:all]
8
+
9
+ def all
10
+ end
9
11
 
10
12
  def index
13
+ @documents = @klass.all
11
14
  end
12
15
 
13
16
  def edit
14
- @klass = params[:type].classify.constantize
15
17
  @document = @klass.find(params[:id])
16
18
  end
17
19
 
18
20
  def update
19
- @klass = params[:type].classify.constantize
20
21
  @document = @klass.find(params[:id])
21
22
  @document.update_attributes(document_params)
22
23
 
23
- redirect_to edit_document_path(params[:type], @document.id)
24
+ redirect_to document_path(params[:type], @document.id)
25
+ end
26
+
27
+ def show
28
+ @document = @klass.find(params[:id])
24
29
  end
25
30
 
26
- private
31
+ def destroy
32
+ @document = @klass.find(params[:id])
33
+ @document.destroy
34
+
35
+ redirect_to documents_path(params[:type])
36
+ end
37
+
38
+ private
27
39
 
28
40
  def document_params
29
41
  params.require(params[:type].to_sym).permit!
30
42
  end
31
43
 
44
+ def setup_klass
45
+ @klass = params[:type].classify.constantize
46
+ end
47
+
32
48
  end
33
49
  end
34
50
  end
@@ -31,7 +31,19 @@ module Mongoid
31
31
  end
32
32
  end
33
33
 
34
- private
34
+ def cell_value(document, header, config)
35
+ if config[:value] && config[:value].respond_to?(:call)
36
+ config[:value].call(document)
37
+ else
38
+ document.send(header)
39
+ end
40
+ end
41
+
42
+ def model_param(model)
43
+ model.to_s.underscore.downcase
44
+ end
45
+
46
+ private
35
47
 
36
48
  def private_field?(name)
37
49
  return true if name.start_with?("_")
@@ -0,0 +1,3 @@
1
+ <% Mongoid.models.each do |model| %>
2
+ <p><%= link_to model_param(model), documents_path(model_param(model)) %></p>
3
+ <% end %>
@@ -1,6 +1,16 @@
1
- <%= simple_form_for @document, url: update_document_path(@klass.to_s.downcase, @document) do |f| %>
2
- <% Mongoid::DocumentEditor.fields_for(@klass).each_pair do |name, config| %>
3
- <p><%= document_edit_field(f, @klass, @document, name, config) %></p>
4
- <% end %>
5
- <%= f.submit %>
1
+ <div class="section header">
2
+ <div class="container clear">
3
+ <h1 class='logo'>Editing: <%= @document.id %></h1>
4
+ </div>
5
+ </div>
6
+
7
+ <%= simple_form_for @document, url: update_document_path(model_param(@klass), @document) do |f| %>
8
+ <fieldset class='row'>
9
+ <% Mongoid::DocumentEditor.fields_for(@klass).each_pair do |name, config| %>
10
+ <p><%= document_edit_field(f, @klass, @document, name, config) %></p>
11
+ <% end %>
12
+ <%= link_to "Cancel", document_path(model_param(@klass), @document), class: "button orange-button mobile-full" %>
13
+ <%= f.submit class: "button orange-button mobile-full" %>
14
+ </fieldset>
6
15
  <% end %>
16
+
@@ -1 +1,30 @@
1
- <h1>Document Editor</h1>
1
+ <div class="section header">
2
+ <div class="container clear">
3
+ <h1 class='logo'><%= @klass.name.pluralize %></h1>
4
+ </div>
5
+ </div>
6
+
7
+ <table>
8
+ <thead>
9
+ <tr>
10
+ <% Mongoid::DocumentEditor.index_for(@klass).each_pair do |header, config| %>
11
+ <th><%= header.to_s.humanize %></th>
12
+ <% end %>
13
+ <th>Actions</th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <% @documents.each do |document| %>
18
+ <tr>
19
+ <% Mongoid::DocumentEditor.index_for(@klass).each_pair do |header, config| %>
20
+ <td><%= cell_value(document, header, config) %></td>
21
+ <% end %>
22
+ <td>
23
+ <%= link_to "View", document_path(model_param(@klass), document) %> |
24
+ <%= link_to "Edit", edit_document_path(model_param(@klass), document) %> |
25
+ <%= link_to "Destroy", destroy_document_path(model_param(@klass), document), method: :delete, data: {confirm: "Are you sure you want to destroy this record?"} %>
26
+ </td>
27
+ </tr>
28
+ <% end %>
29
+ </tbody>
30
+ </table>
@@ -0,0 +1,25 @@
1
+ <div class="section header">
2
+ <div class="container clear">
3
+ <h1 class='logo'>Viewing: <%= @document.id %></h1>
4
+ </div>
5
+ </div>
6
+ <h3><%= link_to "Edit", edit_document_path(model_param(@klass), @document.id) %></h3>
7
+
8
+ <% @klass.fields.each do |key, value| %>
9
+ <p><b><%= key %>:</b> <%= @document.send(key) %></p>
10
+ <% end %>
11
+
12
+ <hr>
13
+ <h2>Relations:</h2>
14
+ <% @klass.relations.each do |key, value| %>
15
+ <h3><%= key %></h3>
16
+ <% if [:has_many, :has_and_belongs_to_many].include?(@document.relations[key].macro) %>
17
+ <% @document.send(key).each do |relation| %>
18
+ <p><%= link_to relation.send(:id), document_path(model_param(value.class_name), relation.send(:id)) %></p>
19
+ <% end %>
20
+ <% elsif [:has_one, :belongs_to].include?(@document.relations[key].macro) %>
21
+ <% if relation = @document.send(key) %>
22
+ <p><%= link_to relation.send(:id), document_path(model_param(value.class_name), relation.send(:id)) %></p>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
@@ -2,8 +2,13 @@
2
2
  <html>
3
3
  <head>
4
4
  <%= csrf_meta_tags %>
5
+ <%= stylesheet_link_tag "base/style", "base/doc" %>
5
6
  </head>
6
7
  <body>
7
- <%= yield %>
8
+ <div class="container content-inner">
9
+ <%= link_to "All Documents", document_listing_path %>
10
+ <%= yield %>
11
+ </div>
12
+ <%= javascript_include_tag "jquery", "jquery_ujs" %>
8
13
  </body>
9
14
  </html>
data/config/routes.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  Mongoid::DocumentEditor::Engine.routes.draw do
2
2
 
3
+ get "/", to: "documents#all", as: :document_listing
3
4
  get "/:type/:id/edit", to: "documents#edit", as: :edit_document
5
+ get "/:type/:id", to: "documents#show", as: :document
4
6
  put "/:type/:id/edit", to: "documents#update", as: :update_document
5
- root to: "documents#index"
7
+ get "/:type", to: "documents#index", as: :documents
8
+ delete "/:type/:id", to: "documents#destroy", as: :destroy_document
6
9
 
7
10
  end
@@ -3,9 +3,13 @@ module Mongoid
3
3
  class Engine < ::Rails::Engine
4
4
  isolate_namespace Mongoid::DocumentEditor
5
5
 
6
+ initializer "mongoid-document-editor.assets.precompile" do |app|
7
+ app.config.assets.precompile += ["base/style.css", "base/doc.css", "jquery.js", "jquery_ujs.js"]
8
+ end
9
+
6
10
  config.after_initialize do |app|
7
11
  app.routes.prepend do
8
- mount Mongoid::DocumentEditor::Engine => "/documents"
12
+ mount Mongoid::DocumentEditor::Engine => Mongoid::DocumentEditor.endpoint
9
13
  end
10
14
  end
11
15
 
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module DocumentEditor
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -17,6 +17,9 @@ module Mongoid
17
17
  mattr_accessor :authentication_filter
18
18
  @@authentication_filter = nil
19
19
 
20
+ mattr_accessor :endpoint
21
+ @@endpoint = "/documents"
22
+
20
23
  def self.configure(&block)
21
24
  instance_eval(&block)
22
25
  end
@@ -30,7 +33,12 @@ module Mongoid
30
33
  end
31
34
 
32
35
  def self.index_for(klass)
33
- @@index_configuration[klass]
36
+ default_fields = {}
37
+ klass.fields.each_pair do |name, options|
38
+ next if name.start_with?("_")
39
+ default_fields[name.to_s] = {}
40
+ end
41
+ @@index_configuration.fetch(klass, default_fields)
34
42
  end
35
43
 
36
44
  def self.form_configuration_for(document_class, &block)
@@ -49,5 +57,9 @@ module Mongoid
49
57
  @@authentication_filter = filter
50
58
  end
51
59
 
60
+ def self.mount_at(endpoint)
61
+ @@endpoint = endpoint
62
+ end
63
+
52
64
  end
53
65
  end
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "simple_form", "~> 2.1.0"
26
26
  spec.add_dependency "mongoid", "~> 3.1.0"
27
27
  spec.add_dependency "strong_parameters"
28
+ spec.add_dependency "jquery-rails"
28
29
 
29
30
  spec.add_development_dependency "bundler", "~> 1.3"
30
31
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_document_editor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick DeSteffen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-13 00:00:00.000000000 Z
11
+ date: 2013-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jquery-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -111,8 +125,10 @@ files:
111
125
  - app/controllers/mongoid/document_editor/application_controller.rb
112
126
  - app/controllers/mongoid/document_editor/documents_controller.rb
113
127
  - app/helpers/mongoid/document_editor/documents_helper.rb
128
+ - app/views/mongoid/document_editor/documents/all.html.erb
114
129
  - app/views/mongoid/document_editor/documents/edit.html.erb
115
130
  - app/views/mongoid/document_editor/documents/index.html.erb
131
+ - app/views/mongoid/document_editor/documents/show.html.erb
116
132
  - app/views/mongoid/document_editor/layouts/application.html.erb
117
133
  - config/routes.rb
118
134
  - README.md