active_metadata 0.0.2 → 0.1.9
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/app/controllers/active_metadata/attachments_controller.rb +47 -0
- data/app/controllers/active_metadata/histories_controller.rb +16 -0
- data/app/controllers/active_metadata/notes_controller.rb +61 -0
- data/app/controllers/active_metadata/watchers_controller.rb +34 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/views/active_metadata/attachments/index.html.erb +11 -0
- data/app/views/active_metadata/histories/index.html.erb +5 -0
- data/app/views/active_metadata/notes/_form.html.erb +23 -0
- data/app/views/active_metadata/notes/edit.html.erb +8 -0
- data/app/views/active_metadata/notes/index.html.erb +11 -0
- data/app/views/active_metadata/notes/index.js.erb +1 -0
- data/app/views/active_metadata/notes/show.html.erb +9 -0
- data/app/views/active_metadata/watchers/create.js.erb +1 -0
- data/app/views/active_metadata/watchers/destroy.js.erb +1 -0
- data/app/views/active_metadata/watchers/index.html.erb +5 -0
- data/config/active_metadata.yml +17 -0
- data/config/application.rb +0 -0
- data/config/database.yml +11 -0
- data/config/initializers/inflections.rb +7 -0
- data/config/mongoid.yml +28 -0
- data/config/routes.rb +30 -0
- data/db/development.sqlite3 +0 -0
- data/db/migrate/001_create_document.rb +12 -0
- data/db/migrate/002_add_surname_to_document.rb +9 -0
- data/db/migrate/003_create_section.rb +13 -0
- data/db/migrate/004_create_user.rb +14 -0
- data/db/migrate/005_create_inboxes.rb +19 -0
- data/db/migrate/006_create_alert_message.rb +37 -0
- data/db/migrate/007_create_notes.rb +22 -0
- data/db/migrate/008_create_history.rb +20 -0
- data/db/migrate/009_create_watcher.rb +21 -0
- data/db/migrate/010_create_attachment.rb +26 -0
- data/db/migrate/011_add_created_by_to_histories.rb +10 -0
- data/db/test.sqlite3 +0 -0
- data/features/step_definitions/add_a_user_to_a_watcher_steps.rb +29 -0
- data/features/step_definitions/trigger_alert_on_modify_steps.rb +86 -0
- data/features/supports/file.txt +1 -0
- data/features/supports/initializer.rb +1 -0
- data/features/supports/updated_file.txt +1 -0
- data/features/watchlist/add_a_user_to_a_watcher.feature +19 -0
- data/features/watchlist/trigger_alert_on_modify.feature +90 -0
- data/lib/active_metadata/base.rb +59 -0
- data/lib/active_metadata/persistence/active_record/attachment.rb +42 -0
- data/lib/active_metadata/persistence/active_record/history.rb +22 -0
- data/lib/active_metadata/persistence/active_record/note.rb +45 -0
- data/lib/active_metadata/persistence/active_record/watcher.rb +45 -0
- data/lib/active_metadata/persistence/active_record.rb +26 -0
- data/lib/active_metadata/persistence/mongoid/attachment.rb +45 -0
- data/lib/active_metadata/persistence/mongoid/history.rb +26 -0
- data/lib/active_metadata/persistence/mongoid/note.rb +48 -0
- data/lib/active_metadata/persistence/mongoid/watcher.rb +43 -0
- data/lib/active_metadata/persistence/mongoid.rb +30 -0
- data/lib/active_metadata/persistence/persistence.rb +13 -0
- data/lib/active_metadata/railtie.rb +6 -0
- data/lib/active_metadata/version.rb +1 -1
- data/lib/active_metadata.rb +6 -12
- data/lib/application_controller.rb +28 -0
- data/lib/application_helper.rb +7 -0
- data/lib/engine.rb +29 -0
- data/lib/model/active_record/attachment.rb +18 -0
- data/lib/model/active_record/history.rb +2 -0
- data/lib/model/active_record/note.rb +2 -0
- data/lib/model/active_record/watcher.rb +4 -0
- data/lib/model/mongoid/active_meta.rb +6 -0
- data/lib/model/mongoid/attachment.rb +25 -0
- data/lib/model/mongoid/history.rb +9 -0
- data/lib/model/mongoid/label.rb +14 -0
- data/lib/model/mongoid/note.rb +10 -0
- data/lib/model/mongoid/watcher.rb +24 -0
- data/lib/rails/railties/tasks.rake +8 -0
- data/lib/rake/active_record_tasks.rb +77 -0
- data/lib/rake/task.rb +18 -0
- data/lib/templates/active_metadata.yml +17 -0
- data/lib/templates/active_metadata_migrations +67 -0
- data/lib/templates/mongoid.yml +20 -0
- data/spec/active_metadata_spec.rb +596 -0
- data/spec/benchmark_spec.rb +35 -0
- data/spec/controllers/metadata_controller_spec.rb +14 -0
- data/spec/spec_helper.rb +87 -0
- data/spec/support/document.rb +8 -0
- data/spec/support/pdf_test.pdf +0 -0
- data/spec/support/pdf_test_2.pdf +0 -0
- data/spec/support/section.rb +8 -0
- data/spec/support/user.rb +13 -0
- data/spec/support/watcher_notifier.rb +21 -0
- metadata +201 -19
- data/.gitignore +0 -4
- data/Gemfile +0 -4
- data/Rakefile +0 -1
- data/active_metadata.gemspec +0 -24
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            module ActiveMetadata
         | 
| 2 | 
            +
              class AttachmentsController < ApplicationController
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                unloadable
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def index
         | 
| 7 | 
            +
                   @document = eval(params[:model_name]).find params[:model_id] 
         | 
| 8 | 
            +
                   @attachments = @document.attachments_for params[:field_name]      
         | 
| 9 | 
            +
                   respond_to do |format|
         | 
| 10 | 
            +
                     format.html { render :layout => false}
         | 
| 11 | 
            +
                     format.xml  { render :xml => @histories }
         | 
| 12 | 
            +
                   end
         | 
| 13 | 
            +
                end  
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def create
         | 
| 16 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 17 | 
            +
                  @document.save_attachment_for(params[:field_name], params[:file])
         | 
| 18 | 
            +
                  
         | 
| 19 | 
            +
                  #todo: if errors send back the correct answer
         | 
| 20 | 
            +
                  respond_to do |format|
         | 
| 21 | 
            +
                    format.js {render :json => {'success' => true}}
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def update
         | 
| 26 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 27 | 
            +
                  @document.update_attachment_for(params[:field_name],params[:id],params[:file])
         | 
| 28 | 
            +
                  
         | 
| 29 | 
            +
                  #todo: if errors send back the correct answer
         | 
| 30 | 
            +
                  respond_to do |format|
         | 
| 31 | 
            +
                    format.js {render :json => {'success' => true}}
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def destroy
         | 
| 36 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 37 | 
            +
                  @document.delete_attachment_for(params[:field_name], params[:id])
         | 
| 38 | 
            +
                  
         | 
| 39 | 
            +
                  #todo: if errors send back the correct answer
         | 
| 40 | 
            +
                  respond_to do |format|
         | 
| 41 | 
            +
                    # TODO redirect to index
         | 
| 42 | 
            +
                    format.js
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            module ActiveMetadata
         | 
| 2 | 
            +
              class HistoriesController < ApplicationController
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                 unloadable
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def index
         | 
| 7 | 
            +
                     @document = eval(params[:model_name]).find params[:model_id] 
         | 
| 8 | 
            +
                     @histories = @document.history_for params[:field_name]      
         | 
| 9 | 
            +
                     respond_to do |format|
         | 
| 10 | 
            +
                       format.html { render :layout => false}
         | 
| 11 | 
            +
                       format.xml  { render :xml => @histories }
         | 
| 12 | 
            +
                     end
         | 
| 13 | 
            +
                  end  
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            module ActiveMetadata
         | 
| 2 | 
            +
              class NotesController < ApplicationController
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                unloadable
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def index
         | 
| 7 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id] 
         | 
| 8 | 
            +
                  @notes = @document.notes_for params[:field_name]      
         | 
| 9 | 
            +
                  respond_to do |format|
         | 
| 10 | 
            +
                    format.html { render :layout => false}
         | 
| 11 | 
            +
                    format.xml  { render :xml => @notes }
         | 
| 12 | 
            +
                    format.xls { send_data @notes.to_xls_data(:columns => [:note,:created_at], :headers => [:nota,'inserita']), :filename => 'notes.xls' }        
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end  
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def edit
         | 
| 17 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id] 
         | 
| 18 | 
            +
                  @note = @document.note_for params[:field_name],params[:id]     
         | 
| 19 | 
            +
                end  
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def show
         | 
| 22 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id] 
         | 
| 23 | 
            +
                  @note = @document.note_for params[:field_name],params[:id]     
         | 
| 24 | 
            +
                end  
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def create
         | 
| 27 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 28 | 
            +
                  @document.create_note_for(params[:field_name], params[:note])
         | 
| 29 | 
            +
                  respond_to do |format|
         | 
| 30 | 
            +
                    # TODO redirect to edit
         | 
| 31 | 
            +
                    format.js       
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def update
         | 
| 36 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 37 | 
            +
                  @note = @document.note_for params[:field_name],params[:id]     
         | 
| 38 | 
            +
                        
         | 
| 39 | 
            +
                  respond_to do |format|
         | 
| 40 | 
            +
                    if @document.update_note(params[:id],params[:note][:note])
         | 
| 41 | 
            +
                      format.html { redirect_to(active_metadata_show_note_path(@document.class,@document.id,@note.label,@note.id), :notice => 'Note was successfully updated.') }
         | 
| 42 | 
            +
                      format.xml  { head :ok }
         | 
| 43 | 
            +
                    else
         | 
| 44 | 
            +
                      format.html { render :action => "edit" }
         | 
| 45 | 
            +
                      format.xml  { render :xml => @note.errors, :status => :unprocessable_entity }
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                def destroy
         | 
| 51 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 52 | 
            +
                  @document.delete_note_for(params[:field_name],params[:id])
         | 
| 53 | 
            +
                  respond_to do |format|
         | 
| 54 | 
            +
                    # TODO redirect to index
         | 
| 55 | 
            +
                    format.js
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            module ActiveMetadata
         | 
| 2 | 
            +
              class WatchersController < ApplicationController
         | 
| 3 | 
            +
                unloadable
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def index
         | 
| 6 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  @watchers = @document.watchers_for params[:field_name]
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  respond_to do |format|
         | 
| 11 | 
            +
                    format.html { render :layout => false}
         | 
| 12 | 
            +
                    format.xml  { render :xml => @watchers }
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def create
         | 
| 17 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]     
         | 
| 18 | 
            +
                  @document.create_watcher_for params[:field_name], User.find(params[:user_id])
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  respond_to do |format|
         | 
| 21 | 
            +
                    format.js       
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end       
         | 
| 24 | 
            +
                
         | 
| 25 | 
            +
                def destroy
         | 
| 26 | 
            +
                  @document = eval(params[:model_name]).find params[:model_id]     
         | 
| 27 | 
            +
                  @document.delete_watcher_for params[:field_name], User.find(params[:user_id])
         | 
| 28 | 
            +
                  respond_to do |format|
         | 
| 29 | 
            +
                    format.js       
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            <ul>
         | 
| 2 | 
            +
              <% @attachments.each do |item| %>
         | 
| 3 | 
            +
                <li>
         | 
| 4 | 
            +
                	<%= link_to "File: #{item.attach.original_filename}", item.attach.url %><br/>
         | 
| 5 | 
            +
                	<%= "Path: #{item.attach.path}"%>
         | 
| 6 | 
            +
                  <%= "Size: #{item.attach.size}"%>
         | 
| 7 | 
            +
                  <%= "Updated at: #{item.attach.instance_read(:updated_at)}"%> <br/>
         | 
| 8 | 
            +
                  <%= link_to "Elimina", active_metadata_destroy_attachment_path(@document.class,@document.id,item.label,item.id), :method => :delete, :remote => true %>
         | 
| 9 | 
            +
              	</li>
         | 
| 10 | 
            +
              <% end %>
         | 
| 11 | 
            +
            </ul>
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            <%= form_for(@note,:url => active_metadata_update_note_path(@document.class,@document.id,@note.label,@note.id)) do |f| %>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              <% if @document.errors.any? %>
         | 
| 4 | 
            +
                  <div id  = "error_explanation">
         | 
| 5 | 
            +
                      <h2><%= pluralize(@note.errors.count, "error") %> prohibited this document from being saved:</h2>
         | 
| 6 | 
            +
                      <ul>
         | 
| 7 | 
            +
                          <% @note.errors.full_messages.each do |msg| %>
         | 
| 8 | 
            +
                              <li><%= msg %></li>
         | 
| 9 | 
            +
                          <% end %>
         | 
| 10 | 
            +
                      </ul>
         | 
| 11 | 
            +
                  </div>
         | 
| 12 | 
            +
              <% end %>
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              <div class = "field">
         | 
| 15 | 
            +
                  <%= f.label :note %><br/>
         | 
| 16 | 
            +
                  <%= f.text_field :note %>
         | 
| 17 | 
            +
              </div>
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              <div class = "actions">
         | 
| 20 | 
            +
                  <%= f.submit %>
         | 
| 21 | 
            +
              </div>
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            <% end %>
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            <ul>
         | 
| 2 | 
            +
                <% @notes.each do |note| %>
         | 
| 3 | 
            +
                    <li>
         | 
| 4 | 
            +
                    <b><%= note.note %></b><br/>
         | 
| 5 | 
            +
                    <%= "Inserita da: #{note.created_by}<br/>" unless note.created_by.nil? %>
         | 
| 6 | 
            +
                    Il: <%= note.created_at.strftime("%m/%d/%Y at %I:%M:%S") %>   <br/>
         | 
| 7 | 
            +
                    <%= link_to "Edit", active_metadata_edit_note_path(@document.class,@document.id,note.label,note.id) %>
         | 
| 8 | 
            +
                    <%= link_to "Destroy", active_metadata_destroy_note_path(@document.class,@document.id,note.label,note.id), :method => :delete, :remote => true %>
         | 
| 9 | 
            +
                    </li>
         | 
| 10 | 
            +
                <% end %>
         | 
| 11 | 
            +
            </ul>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            $(".name_notes").html("<%= escape_javascript(render(:partial => 'active_metadata/notes/notes', :locals => { :field_name => 'name' } )) %>");
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            <p id="notice"><%= notice %></p>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <p>
         | 
| 4 | 
            +
            	<b>Note:</b>
         | 
| 5 | 
            +
            	<%= @note.note %>
         | 
| 6 | 
            +
            </p>
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            <%= link_to "Edit", active_metadata_edit_note_path(@document.class,@document.id,@note.label,@note.id) %>|
         | 
| 9 | 
            +
            <%= link_to 'Back', active_metadata_notes_path(@document.class,@document.id,@note.label) %>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            alert('Watcher created');
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            alert('Watcher deleted');
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            development:
         | 
| 2 | 
            +
                persists_with: "active_record"
         | 
| 3 | 
            +
                history_skip_fields:
         | 
| 4 | 
            +
                  - 'id'
         | 
| 5 | 
            +
                  - 'created_at'
         | 
| 6 | 
            +
                  - 'updated_at'
         | 
| 7 | 
            +
                attachment_base_path: "public/system/metadata_attachments"
         | 
| 8 | 
            +
                attachment_base_url: "/system/metadata_attachments"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            test:
         | 
| 11 | 
            +
                persists_with: "active_record"
         | 
| 12 | 
            +
                history_skip_fields:
         | 
| 13 | 
            +
                  - 'id'
         | 
| 14 | 
            +
                  - 'created_at'
         | 
| 15 | 
            +
                  - 'updated_at'
         | 
| 16 | 
            +
                attachment_base_path: "public/system/metadata_attachments"
         | 
| 17 | 
            +
                attachment_base_url: "/system/metadata_attachments"
         | 
| 
            File without changes
         | 
    
        data/config/database.yml
    ADDED
    
    
    
        data/config/mongoid.yml
    ADDED
    
    | @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            development:
         | 
| 2 | 
            +
              host: localhost
         | 
| 3 | 
            +
              database: metadata_d
         | 
| 4 | 
            +
              max_retries_on_connection_failure: 50
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            test:
         | 
| 7 | 
            +
              hosts: 
         | 
| 8 | 
            +
                - - localhost
         | 
| 9 | 
            +
                  - 27017
         | 
| 10 | 
            +
                - - localhost
         | 
| 11 | 
            +
                  - 27018
         | 
| 12 | 
            +
                - - localhost
         | 
| 13 | 
            +
                  - 27019        
         | 
| 14 | 
            +
              database: metadata_t
         | 
| 15 | 
            +
              max_retries_on_connection_failure: 50
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            # set these environment variables on your prod server
         | 
| 18 | 
            +
            production:
         | 
| 19 | 
            +
              host: <%= ENV['MONGOID_HOST'] %>
         | 
| 20 | 
            +
              port: <%= ENV['MONGOID_PORT'] %>
         | 
| 21 | 
            +
              username: <%= ENV['MONGOID_USERNAME'] %>
         | 
| 22 | 
            +
              password: <%= ENV['MONGOID_PASSWORD'] %>
         | 
| 23 | 
            +
              database: <%= ENV['MONGOID_DATABASE'] %>
         | 
| 24 | 
            +
              # slaves:
         | 
| 25 | 
            +
              #   - host: slave1.local
         | 
| 26 | 
            +
              #     port: 27018
         | 
| 27 | 
            +
              #   - host: slave2.local
         | 
| 28 | 
            +
              #     port: 27019
         | 
    
        data/config/routes.rb
    ADDED
    
    | @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            Rails.application.routes.draw do
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              mount_at = ActiveMetadata::Engine.config.mount_at
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              namespace "active_metadata" do
         | 
| 6 | 
            +
                #note
         | 
| 7 | 
            +
                match ':model_name/:model_id/:field_name/notes' => 'notes#index', :via => :get, :as => "notes", :path_prefix => mount_at 
         | 
| 8 | 
            +
                match ':model_name/:model_id/:field_name/notes' => 'notes#create', :via => :post, :as => "create_note", :path_prefix => mount_at 
         | 
| 9 | 
            +
                match ':model_name/:model_id/:field_name/note/:id' => 'notes#destroy', :via => :delete, :as => "destroy_note", :path_prefix => mount_at 
         | 
| 10 | 
            +
                match ':model_name/:model_id/:field_name/note/:id/edit' => 'notes#edit', :via => :get, :as => "edit_note", :path_prefix => mount_at 
         | 
| 11 | 
            +
                match ':model_name/:model_id/:field_name/note/:id' => 'notes#update', :via => :put, :as => "update_note", :path_prefix => mount_at 
         | 
| 12 | 
            +
                match ':model_name/:model_id/:field_name/note/:id' => 'notes#show', :via => :get, :as => "show_note", :path_prefix => mount_at 
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                #history
         | 
| 15 | 
            +
                match ':model_name/:model_id/:field_name/histories' => 'histories#index', :via => :get, :as => "histories", :path_prefix => mount_at 
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                #attachments
         | 
| 18 | 
            +
                match ':model_name/:model_id/:field_name/attachments' => 'attachments#index', :via => :get, :as => "attachments", :path_prefix => mount_at 
         | 
| 19 | 
            +
                match ':model_name/:model_id/:field_name/attachments' => 'attachments#create', :via => :post, :as => "create_attachment", :path_prefix => mount_at 
         | 
| 20 | 
            +
                match ':model_name/:model_id/:field_name/attachments/:id' => 'attachments#destroy', :via => :delete, :as => "destroy_attachment", :path_prefix => mount_at   
         | 
| 21 | 
            +
                match ':model_name/:model_id/:field_name/attachments/:id' => 'attachments#update', :via => :put, :as => "update_attachment", :path_prefix => mount_at   
         | 
| 22 | 
            +
                                                                                                          
         | 
| 23 | 
            +
                #alerts
         | 
| 24 | 
            +
                get ':model_name/:model_id/:field_name/watchers' => 'watchers#index', :as => "watchers", :path_prefix => mount_at 
         | 
| 25 | 
            +
                post ':model_name/:model_id/:field_name/watchers/:user_id' => 'watchers#create',:as => "set_watcher", :path_prefix => mount_at 
         | 
| 26 | 
            +
                delete ':model_name/:model_id/:field_name/watchers/:user_id' => 'watchers#destroy',:as => "unset_watcher", :path_prefix => mount_at 
         | 
| 27 | 
            +
                # TODO missing routes to notice of a read message
         | 
| 28 | 
            +
              end   
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            end
         | 
| Binary file | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            class CreateInboxes < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                create_table :inboxes do |t|
         | 
| 4 | 
            +
                  t.string :label
         | 
| 5 | 
            +
                  t.string :object_class
         | 
| 6 | 
            +
                  t.integer :object_id
         | 
| 7 | 
            +
                  t.string :alert_type
         | 
| 8 | 
            +
                  t.string :old_value
         | 
| 9 | 
            +
                  t.string :new_value
         | 
| 10 | 
            +
                  t.text :content
         | 
| 11 | 
            +
                  t.integer :user_id
         | 
| 12 | 
            +
                  t.timestamps
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def self.down
         | 
| 17 | 
            +
                drop_table :inboxes
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            class CreateAlertMessage < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                drop_table :inboxes
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                create_table :inboxes do |t|
         | 
| 6 | 
            +
                  t.integer :user_id
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                create_table :alert_messages do |t|
         | 
| 10 | 
            +
                  t.string :label
         | 
| 11 | 
            +
                  t.string :model_class
         | 
| 12 | 
            +
                  t.integer :model_id
         | 
| 13 | 
            +
                  t.string :alert_type
         | 
| 14 | 
            +
                  t.text :old_value
         | 
| 15 | 
            +
                  t.text :new_value
         | 
| 16 | 
            +
                  t.integer :inbox_id
         | 
| 17 | 
            +
                  t.boolean :read
         | 
| 18 | 
            +
                  
         | 
| 19 | 
            +
                  t.timestamps
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def self.down
         | 
| 24 | 
            +
                drop_table :alert_messages
         | 
| 25 | 
            +
                create_table :inboxes do |t|
         | 
| 26 | 
            +
                   t.string :label
         | 
| 27 | 
            +
                   t.string :object_class
         | 
| 28 | 
            +
                   t.integer :object_id
         | 
| 29 | 
            +
                   t.string :alert_type
         | 
| 30 | 
            +
                   t.string :old_value
         | 
| 31 | 
            +
                   t.string :new_value
         | 
| 32 | 
            +
                   t.text :content
         | 
| 33 | 
            +
                   t.integer :user_id
         | 
| 34 | 
            +
                   t.timestamps
         | 
| 35 | 
            +
                 end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            class CreateNotes < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                create_table :notes do |t|
         | 
| 4 | 
            +
                  t.text :note
         | 
| 5 | 
            +
                  t.string :label
         | 
| 6 | 
            +
                  t.integer :document_id
         | 
| 7 | 
            +
                  t.integer :created_by
         | 
| 8 | 
            +
                  t.integer :updated_by      
         | 
| 9 | 
            +
                  t.timestamps
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                add_index :notes, :document_id
         | 
| 13 | 
            +
                add_index :notes, :label
         | 
| 14 | 
            +
                add_index :notes, :updated_at
         | 
| 15 | 
            +
                    
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def self.down
         | 
| 19 | 
            +
                drop_table :notes
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            class CreateHistory < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                create_table :histories do |t|
         | 
| 4 | 
            +
                  t.text :value
         | 
| 5 | 
            +
                  t.string :label
         | 
| 6 | 
            +
                  t.integer :document_id
         | 
| 7 | 
            +
                  t.timestamps
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                add_index :histories, :document_id
         | 
| 11 | 
            +
                add_index :histories, :label
         | 
| 12 | 
            +
                add_index :histories, :created_at
         | 
| 13 | 
            +
                    
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def self.down
         | 
| 17 | 
            +
                drop_table :histories
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            class CreateWatcher < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                create_table :watchers do |t|
         | 
| 4 | 
            +
                  t.integer :owner_id
         | 
| 5 | 
            +
                  t.string :label
         | 
| 6 | 
            +
                  t.integer :document_id
         | 
| 7 | 
            +
                  t.timestamps
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                add_index :watchers, :document_id
         | 
| 11 | 
            +
                add_index :watchers, :label
         | 
| 12 | 
            +
                add_index :watchers, :owner_id
         | 
| 13 | 
            +
                add_index :watchers, :created_at
         | 
| 14 | 
            +
                    
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def self.down
         | 
| 18 | 
            +
                drop_table :watchers
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            class CreateAttachment < ActiveRecord::Migration
         | 
| 2 | 
            +
              def self.up
         | 
| 3 | 
            +
                create_table :attachments do |t|
         | 
| 4 | 
            +
                  t.string :label
         | 
| 5 | 
            +
                  t.integer :document_id
         | 
| 6 | 
            +
                  t.integer :created_by
         | 
| 7 | 
            +
                  t.integer :updated_by
         | 
| 8 | 
            +
                  t.integer :counter
         | 
| 9 | 
            +
                  t.string :attach_file_name
         | 
| 10 | 
            +
                  t.string :attach_content_type
         | 
| 11 | 
            +
                  t.integer :attach_file_size
         | 
| 12 | 
            +
                  t.datetime :attach_updated_at
         | 
| 13 | 
            +
                  t.timestamps
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                add_index :attachments, :document_id
         | 
| 17 | 
            +
                add_index :attachments, :label
         | 
| 18 | 
            +
                add_index :attachments, :attach_updated_at
         | 
| 19 | 
            +
                    
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def self.down
         | 
| 23 | 
            +
                drop_table :attachments
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            end
         | 
    
        data/db/test.sqlite3
    ADDED
    
    | Binary file | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # encoding: UTF-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ### Background #
         | 
| 4 | 
            +
            Given /^an ActiveRecord object instance of 'Document'$/ do
         | 
| 5 | 
            +
              raise unless Document.ancestors.include?(::ActiveRecord::Base)
         | 
| 6 | 
            +
              @document = Document.create!(:name => 'Fractal', :surname => 'Garden' )
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            Given /^an ActiveRecord object instance of 'User'$/ do
         | 
| 10 | 
            +
              raise unless User.ancestors.include?(::ActiveRecord::Base)
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
            ### Scenarios #        
         | 
| 14 | 
            +
            Given /^a User "([^"]*)"$/ do |email|
         | 
| 15 | 
            +
              @current_user = User.create!(:email => email, :firstname => 'John', :lastname => 'smith' )
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            When /^adding the user to the watcherslist of an attribute "([^"]*)"$/ do |attribute|
         | 
| 19 | 
            +
              @attribute = attribute
         | 
| 20 | 
            +
              @document.create_watcher_for(@attribute, @current_user)
         | 
| 21 | 
            +
            end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            Then /^it should be created a new watcher for that field$/ do
         | 
| 24 | 
            +
              @document.watchers_for(@attribute).should_not be_nil
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            Then /^added a user to the list of the watcher$/ do
         | 
| 28 | 
            +
              @document.watchers_for(@attribute).first.owner_id.should be == @current_user.id
         | 
| 29 | 
            +
            end
         |