daengine 0.6.16 → 0.6.17
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 +4 -4
 - data/app/controllers/content_folder_controller.rb +30 -0
 - data/app/controllers/digital_assets_controller.rb +5 -5
 - data/app/models/content_folder.rb +49 -0
 - data/config/routes.rb +3 -1
 - data/lib/daengine/version.rb +1 -1
 - data/spec/acceptance/content_folder_controller_spec.rb +72 -0
 - data/spec/factories.rb +18 -0
 - data/spec/models/content_folder_spec.rb +95 -0
 - metadata +8 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: fc3d0461ac1c9337ae22dbdf014261e342f8ff2d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: db9e2cb957aed90668d113cde843e1cd66d05e3a
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 3ec076eec326d72752ce4de5b7b2764257d7581ade1380ec116f23ef4594946b0b07dd9b64bdb72153e9b6e4bf2ac031f431a19112990e09f245624e1cf609f5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 772e62c3bc2a8141a54d416f5c70bbe9271736b7143605b7f3d4a73482ce70cb69d5c44e1cfe5942958e8f43c592fe5e7d461b772506f59b7bd8b68a4fcc1e55
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class ContentFolderController < ApplicationController
         
     | 
| 
      
 2 
     | 
    
         
            +
              respond_to :json
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              rescue_from 'Mongoid::Errors::DocumentNotFound' do |exception|
         
     | 
| 
      
 5 
     | 
    
         
            +
                render json: {errors: [exception.message]}, status: 404
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              # GET /content_folder
         
     | 
| 
      
 9 
     | 
    
         
            +
              # GET /content_folder.json
         
     | 
| 
      
 10 
     | 
    
         
            +
              def index
         
     | 
| 
      
 11 
     | 
    
         
            +
                content_folder = ContentFolder.last
         
     | 
| 
      
 12 
     | 
    
         
            +
                if content_folder.nil?
         
     | 
| 
      
 13 
     | 
    
         
            +
                  render json: {}, status: :not_found
         
     | 
| 
      
 14 
     | 
    
         
            +
                else
         
     | 
| 
      
 15 
     | 
    
         
            +
                  render json: content_folder
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              # POST /content_folder
         
     | 
| 
      
 20 
     | 
    
         
            +
              # POST /content_folder.json
         
     | 
| 
      
 21 
     | 
    
         
            +
              def create
         
     | 
| 
      
 22 
     | 
    
         
            +
                content_folder = ContentFolder.new(params[:content_folder])
         
     | 
| 
      
 23 
     | 
    
         
            +
                ContentFolder.delete_all # TODO:  need to validate prior to delete
         
     | 
| 
      
 24 
     | 
    
         
            +
                if content_folder.save
         
     | 
| 
      
 25 
     | 
    
         
            +
                  render json: content_folder, status: :created
         
     | 
| 
      
 26 
     | 
    
         
            +
                else
         
     | 
| 
      
 27 
     | 
    
         
            +
                  render json: content_folder.errors, status: :unprocessable_entity
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -48,12 +48,12 @@ class DigitalAssetsController < ApplicationController 
     | 
|
| 
       48 
48 
     | 
    
         
             
              end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
              def updated_time
         
     | 
| 
       51 
     | 
    
         
            -
                 
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                 
     | 
| 
       54 
     | 
    
         
            -
                   
     | 
| 
       55 
     | 
    
         
            -
                  updated_time[id] = da[0].doc_changed_at if da.present?
         
     | 
| 
      
 51 
     | 
    
         
            +
                if(params[:ids].present?)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  assets = DigitalAsset.where(:digital_asset_id.in => params[:ids])  
         
     | 
| 
      
 53 
     | 
    
         
            +
                else
         
     | 
| 
      
 54 
     | 
    
         
            +
                  assets = DigitalAsset.all
         
     | 
| 
       56 
55 
     | 
    
         
             
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
                updated_time = Hash[assets.map{|a| [a.digital_asset_id, a.doc_changed_at]}]
         
     | 
| 
       57 
57 
     | 
    
         
             
                render json: updated_time.to_json, status: :ok
         
     | 
| 
       58 
58 
     | 
    
         
             
              end  
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'mongoid'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ContentFolder
         
     | 
| 
      
 4 
     | 
    
         
            +
              include Mongoid::Document
         
     | 
| 
      
 5 
     | 
    
         
            +
              #include Mongoid::Timestamps
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              field :folder_id, type: String
         
     | 
| 
      
 8 
     | 
    
         
            +
              field :label, type: String
         
     | 
| 
      
 9 
     | 
    
         
            +
              field :document_ids, type: Array, default: []
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              #recursively_embeds_many
         
     | 
| 
      
 12 
     | 
    
         
            +
              embeds_many :child_folders, :class_name => "ContentFolder", :cyclic => true
         
     | 
| 
      
 13 
     | 
    
         
            +
              accepts_nested_attributes_for :child_folders
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              key :folder_id
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              validates_presence_of :folder_id, :label
         
     | 
| 
      
 18 
     | 
    
         
            +
              validate :validate_has_content
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def validate_has_content
         
     | 
| 
      
 21 
     | 
    
         
            +
                if child_folders.empty? && (document_ids.nil? || document_ids.empty?)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  errors[:base] << 'Either child_folders or document_ids are required'
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def self.lit_center_folder
         
     | 
| 
      
 27 
     | 
    
         
            +
                find_folder(FolderIds::LIT_CENTER)
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def self.merrill_lynch_folder
         
     | 
| 
      
 31 
     | 
    
         
            +
                find_folder(FolderIds::MERRILL_LYNCH)
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def self.plan_529_folder
         
     | 
| 
      
 35 
     | 
    
         
            +
                find_folder(FolderIds::PLANS_529)
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              def self.find_folder(id)
         
     | 
| 
      
 39 
     | 
    
         
            +
                root = ContentFolder.last
         
     | 
| 
      
 40 
     | 
    
         
            +
                child_folders = root.nil? ? [] : Array(root.child_folders)
         
     | 
| 
      
 41 
     | 
    
         
            +
                child_folders.find { |folder| id == folder.folder_id } unless child_folders.nil?
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            class ContentFolder::FolderIds
         
     | 
| 
      
 46 
     | 
    
         
            +
              LIT_CENTER = 'lit_center'
         
     | 
| 
      
 47 
     | 
    
         
            +
              MERRILL_LYNCH = 'merrill_lynch'
         
     | 
| 
      
 48 
     | 
    
         
            +
              PLANS_529 = '529'
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
    
        data/config/routes.rb
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Rails.application.routes.draw do
         
     | 
| 
       2 
     | 
    
         
            -
              resources :digital_assets, except: [:new, :edit], defaults: {format: 'json'} do 
     | 
| 
      
 2 
     | 
    
         
            +
              resources :digital_assets, except: [:new, :edit], defaults: {format: 'json'} do
         
     | 
| 
       3 
3 
     | 
    
         
             
                collection do
         
     | 
| 
       4 
4 
     | 
    
         
             
                  get 'fund_docs'
         
     | 
| 
       5 
5 
     | 
    
         
             
                  get 'search', to: 'digital_assets#search'
         
     | 
| 
         @@ -7,4 +7,6 @@ Rails.application.routes.draw do 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  post 'updated_time'
         
     | 
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              resources :content_folder, only: [:index, :create], defaults: {format: 'json'}
         
     | 
| 
       10 
12 
     | 
    
         
             
            end
         
     | 
    
        data/lib/daengine/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,72 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec_api_documentation'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rspec_api_documentation/dsl'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'securerandom'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            resource 'Content Folder', :api => true do
         
     | 
| 
      
 7 
     | 
    
         
            +
              get '/content_folder' do
         
     | 
| 
      
 8 
     | 
    
         
            +
                context 'has a content folder' do
         
     | 
| 
      
 9 
     | 
    
         
            +
                  example 'returns the content folder' do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    folder_id = 'folder id'
         
     | 
| 
      
 11 
     | 
    
         
            +
                    folder = ContentFolder.new(:folder_id => folder_id, :label => 'folder label', :document_ids => %w(id1 id2))
         
     | 
| 
      
 12 
     | 
    
         
            +
                    ContentFolder.stub(:last).and_return(folder)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    do_request
         
     | 
| 
      
 15 
     | 
    
         
            +
                    expect(status).to eq(200)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    result = JSON.parse(response_body)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    expect(result).not_to be_nil
         
     | 
| 
      
 18 
     | 
    
         
            +
                    expect(result['folder_id']).to eq(folder_id)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  example 'returns 404 when the folder does not exist' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    ContentFolder.stub(:last).and_return(nil)
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    do_request
         
     | 
| 
      
 25 
     | 
    
         
            +
                    expect(status).to eq(404)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              post '/content_folder' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                parameter :folder_id, 'folder id', :require => true, :scope => 'content_folder'
         
     | 
| 
      
 32 
     | 
    
         
            +
                parameter :label, 'folder label', :require => true, :scope => 'content_folder'
         
     | 
| 
      
 33 
     | 
    
         
            +
                parameter :document_ids, 'array of document ids associated with folder', :require => true, :scope => 'content_folder'
         
     | 
| 
      
 34 
     | 
    
         
            +
                parameter :child_folders, 'array of child folder hashes', :require => true, :scope => 'content_folder'
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                context 'successful' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  folder_id = 'folder id'
         
     | 
| 
      
 38 
     | 
    
         
            +
                  label = 'label'
         
     | 
| 
      
 39 
     | 
    
         
            +
                  document_ids = %w(id1 id2)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  child_folders = nil
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  let(:folder_id) { folder_id }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  let(:label) { label }
         
     | 
| 
      
 44 
     | 
    
         
            +
                  let(:document_ids) { document_ids }
         
     | 
| 
      
 45 
     | 
    
         
            +
                  let(:child_folders) { [{:folder_id => 'child folder id', :label => 'child label', :document_ids => document_ids}] }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  example 'stores the content folder and returns the content folder instance' do
         
     | 
| 
      
 48 
     | 
    
         
            +
                    do_request
         
     | 
| 
      
 49 
     | 
    
         
            +
                    expect(status).to eq(201)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    result = JSON.parse(response_body)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    expect(result).not_to be_nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                context 'missing required values' do
         
     | 
| 
      
 56 
     | 
    
         
            +
                  folder_id = 'folder id'
         
     | 
| 
      
 57 
     | 
    
         
            +
                  label = 'label'
         
     | 
| 
      
 58 
     | 
    
         
            +
                  document_ids = nil
         
     | 
| 
      
 59 
     | 
    
         
            +
                  child_folders = nil
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  let(:folder_id) { folder_id }
         
     | 
| 
      
 62 
     | 
    
         
            +
                  let(:label) { label }
         
     | 
| 
      
 63 
     | 
    
         
            +
                  let(:document_ids) { document_ids }
         
     | 
| 
      
 64 
     | 
    
         
            +
                  let(:child_folders) { child_folders }
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  example 'returns status 422 when missing document id and child_folders' do
         
     | 
| 
      
 67 
     | 
    
         
            +
                    do_request
         
     | 
| 
      
 68 
     | 
    
         
            +
                    expect(status).to eq(422)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/factories.rb
    CHANGED
    
    | 
         @@ -37,4 +37,22 @@ FactoryGirl.define do 
     | 
|
| 
       37 
37 
     | 
    
         
             
                fund_codes []
         
     | 
| 
       38 
38 
     | 
    
         
             
                display_on_website true
         
     | 
| 
       39 
39 
     | 
    
         
             
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              factory :content_folder, aliases: [:child_folder] do
         
     | 
| 
      
 42 
     | 
    
         
            +
                sequence(:folder_id) { |n| "id-content-folder-#{n}" }
         
     | 
| 
      
 43 
     | 
    
         
            +
                label 'Folder Label'
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                trait :document_ids do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  document_ids ['doc_id1', 'doc_id2']
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                factory :content_folder_with_child_folders do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  sequence(:folder_id) { |n| "id-content-folder-#{n}" }
         
     | 
| 
      
 51 
     | 
    
         
            +
                  label 'Root Label'
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  child_folders { build_list(:content_folder, 1, document_ids: ['child_doc_id']) }
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                factory :content_folder_with_document_ids, traits: [:document_ids]
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
       40 
58 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,95 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ContentFolder do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              context 'fields' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                subject { FactoryGirl.build :content_folder }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                let(:defined_fields) {
         
     | 
| 
      
 9 
     | 
    
         
            +
                  [:folder_id, :label, :document_ids, :child_folders]
         
     | 
| 
      
 10 
     | 
    
         
            +
                }
         
     | 
| 
      
 11 
     | 
    
         
            +
                it 'has all defined fields' do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  defined_fields.each { |f| should respond_to(f) }
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              context 'validation' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                subject { FactoryGirl.build :content_folder_with_document_ids }
         
     | 
| 
      
 18 
     | 
    
         
            +
                let(:basic_subject) { FactoryGirl.build :content_folder }
         
     | 
| 
      
 19 
     | 
    
         
            +
                let(:subject_with_folders) { FactoryGirl.build :content_folder_with_child_folders }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                required_fields = [:folder_id, :label]
         
     | 
| 
      
 22 
     | 
    
         
            +
                required_fields.each do |f|
         
     | 
| 
      
 23 
     | 
    
         
            +
                  it "validates #{f} is required" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    should be_valid
         
     | 
| 
      
 25 
     | 
    
         
            +
                    subject.send("#{f}=", nil)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    should be_invalid "should be invalid if #{f} is missing"
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                it 'cannot have empty child_folders AND document_ids' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  basic_subject.should be_invalid
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                it 'is valid when document_ids are present' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  subject.should be_valid
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                it 'is valid when child_folders are present' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                  subject_with_folders.should be_valid
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              context 'selectors' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                subject { FactoryGirl.build :content_folder_with_document_ids }
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                # TODO:  add tests for known ids
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              context 'db operations' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                let(:subject_with_folders) { FactoryGirl.build :content_folder_with_child_folders }
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                it 'saves and can be retrieved' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  id = subject_with_folders.folder_id
         
     | 
| 
      
 54 
     | 
    
         
            +
                  subject_with_folders.save
         
     | 
| 
      
 55 
     | 
    
         
            +
                  found = ContentFolder.find(id)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  found.should_not be_nil
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              context 'folder retrieval' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                before do
         
     | 
| 
      
 62 
     | 
    
         
            +
                  ContentFolder.delete_all
         
     | 
| 
      
 63 
     | 
    
         
            +
                  root = FactoryGirl.build :content_folder_with_document_ids
         
     | 
| 
      
 64 
     | 
    
         
            +
                  lit_center = FactoryGirl.build :content_folder_with_document_ids, :folder_id => ContentFolder::FolderIds::LIT_CENTER
         
     | 
| 
      
 65 
     | 
    
         
            +
                  merrill_lynch = FactoryGirl.build :content_folder_with_document_ids, :folder_id => ContentFolder::FolderIds::MERRILL_LYNCH
         
     | 
| 
      
 66 
     | 
    
         
            +
                  plan_529 = FactoryGirl.build :content_folder_with_document_ids, :folder_id => ContentFolder::FolderIds::PLANS_529
         
     | 
| 
      
 67 
     | 
    
         
            +
                  other = FactoryGirl.build :content_folder_with_document_ids, :folder_id => 'abcdefg'
         
     | 
| 
      
 68 
     | 
    
         
            +
                  root.child_folders = [lit_center, merrill_lynch, plan_529, other]
         
     | 
| 
      
 69 
     | 
    
         
            +
                  root.save
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                it 'should return the lit center folder' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  result = ContentFolder.lit_center_folder
         
     | 
| 
      
 74 
     | 
    
         
            +
                  result.should_not be_nil
         
     | 
| 
      
 75 
     | 
    
         
            +
                  result.folder_id.should == ContentFolder::FolderIds::LIT_CENTER
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                it 'should return the merrill lynch folder' do
         
     | 
| 
      
 79 
     | 
    
         
            +
                  result = ContentFolder.merrill_lynch_folder
         
     | 
| 
      
 80 
     | 
    
         
            +
                  result.should_not be_nil
         
     | 
| 
      
 81 
     | 
    
         
            +
                  result.folder_id.should == ContentFolder::FolderIds::MERRILL_LYNCH
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                it 'should return the 529 folder' do
         
     | 
| 
      
 85 
     | 
    
         
            +
                  result = ContentFolder.plan_529_folder
         
     | 
| 
      
 86 
     | 
    
         
            +
                  result.should_not be_nil
         
     | 
| 
      
 87 
     | 
    
         
            +
                  result.folder_id.should == ContentFolder::FolderIds::PLANS_529
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                it 'should return nil for an unknown folder' do
         
     | 
| 
      
 91 
     | 
    
         
            +
                  result = ContentFolder.find_folder('zyxw')
         
     | 
| 
      
 92 
     | 
    
         
            +
                  result.should be_nil
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
              end
         
     | 
| 
      
 95 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: daengine
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.17
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - sbhatia
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire:
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2014- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2014-03-03 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -147,8 +147,10 @@ executables: 
     | 
|
| 
       147 
147 
     | 
    
         
             
            extensions: []
         
     | 
| 
       148 
148 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       149 
149 
     | 
    
         
             
            files:
         
     | 
| 
      
 150 
     | 
    
         
            +
            - app/controllers/content_folder_controller.rb
         
     | 
| 
       150 
151 
     | 
    
         
             
            - app/controllers/digital_assets_controller.rb
         
     | 
| 
       151 
152 
     | 
    
         
             
            - app/helpers/digital_assets_helper.rb
         
     | 
| 
      
 153 
     | 
    
         
            +
            - app/models/content_folder.rb
         
     | 
| 
       152 
154 
     | 
    
         
             
            - app/models/content_service_resource.rb
         
     | 
| 
       153 
155 
     | 
    
         
             
            - app/models/digital_asset.rb
         
     | 
| 
       154 
156 
     | 
    
         
             
            - app/models/service_digital_asset.rb
         
     | 
| 
         @@ -177,6 +179,7 @@ files: 
     | 
|
| 
       177 
179 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       178 
180 
     | 
    
         
             
            - spec/factories.rb
         
     | 
| 
       179 
181 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 182 
     | 
    
         
            +
            - spec/acceptance/content_folder_controller_spec.rb
         
     | 
| 
       180 
183 
     | 
    
         
             
            - spec/acceptance/digital_assets_spec.rb
         
     | 
| 
       181 
184 
     | 
    
         
             
            - spec/controllers/digital_assets_controller_spec.rb
         
     | 
| 
       182 
185 
     | 
    
         
             
            - spec/dummy/config.ru
         
     | 
| 
         @@ -236,6 +239,7 @@ files: 
     | 
|
| 
       236 
239 
     | 
    
         
             
            - spec/mock_data/digitalAssets/TEST_FINRA_DOC.doc
         
     | 
| 
       237 
240 
     | 
    
         
             
            - spec/mock_data/taxonomy/taxonomy.xml
         
     | 
| 
       238 
241 
     | 
    
         
             
            - spec/mock_data/taxonomy/taxonomyengine.yml
         
     | 
| 
      
 242 
     | 
    
         
            +
            - spec/models/content_folder_spec.rb
         
     | 
| 
       239 
243 
     | 
    
         
             
            - spec/models/digital_asset_spec.rb
         
     | 
| 
       240 
244 
     | 
    
         
             
            - spec/models/service_digital_asset_spec.rb
         
     | 
| 
       241 
245 
     | 
    
         
             
            - spec/service/digital_asset_lookup_service_spec.rb
         
     | 
| 
         @@ -268,6 +272,7 @@ summary: Daengine GEM. 
     | 
|
| 
       268 
272 
     | 
    
         
             
            test_files:
         
     | 
| 
       269 
273 
     | 
    
         
             
            - spec/factories.rb
         
     | 
| 
       270 
274 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 275 
     | 
    
         
            +
            - spec/acceptance/content_folder_controller_spec.rb
         
     | 
| 
       271 
276 
     | 
    
         
             
            - spec/acceptance/digital_assets_spec.rb
         
     | 
| 
       272 
277 
     | 
    
         
             
            - spec/controllers/digital_assets_controller_spec.rb
         
     | 
| 
       273 
278 
     | 
    
         
             
            - spec/dummy/config.ru
         
     | 
| 
         @@ -327,6 +332,7 @@ test_files: 
     | 
|
| 
       327 
332 
     | 
    
         
             
            - spec/mock_data/digitalAssets/TEST_FINRA_DOC.doc
         
     | 
| 
       328 
333 
     | 
    
         
             
            - spec/mock_data/taxonomy/taxonomy.xml
         
     | 
| 
       329 
334 
     | 
    
         
             
            - spec/mock_data/taxonomy/taxonomyengine.yml
         
     | 
| 
      
 335 
     | 
    
         
            +
            - spec/models/content_folder_spec.rb
         
     | 
| 
       330 
336 
     | 
    
         
             
            - spec/models/digital_asset_spec.rb
         
     | 
| 
       331 
337 
     | 
    
         
             
            - spec/models/service_digital_asset_spec.rb
         
     | 
| 
       332 
338 
     | 
    
         
             
            - spec/service/digital_asset_lookup_service_spec.rb
         
     |