mongoid_document_editor 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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