effective_resources 2.26.5 → 2.27.0
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/models/concerns/acts_as_job_status.rb +111 -0
 - data/app/models/concerns/acts_as_published.rb +19 -1
 - data/app/views/effective/acts_as_job_status/_wizard_step.html.haml +48 -0
 - data/lib/effective_resources/effective_gem.rb +16 -2
 - data/lib/effective_resources/engine.rb +1 -0
 - data/lib/effective_resources/version.rb +1 -1
 - metadata +18 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0a8d7a783095b227ca8e11253cb186f4b06c2fb7ec8b42511251d925bfddf7e0
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 53038ae639dc8fe0b9aa0764232b0ba4af4b94afe8f6f686c516bbfbbf153d82
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ff8d6145dc5cbbfb86170194d60e295a1c31face8480be9b3cd893afb17bd96b785bf2f886457e5082fb7c37f952d5f2842b551cafc98f493e3f4209b6adc1a9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f2e4c9e106f3a16490807df977089f1a40f51eb3f9abc6d9dc09dc85c863d818113035769417923384b43ea5c278685dc81de7108c3fe1d912c9862b8853cd91
         
     | 
| 
         @@ -0,0 +1,111 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # ActsAsJobStatus
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Tracks the status of background jobs. Intended to be used in a wizard.
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            # Mark your model with 'acts_as_job_status' 
         
     | 
| 
      
 6 
     | 
    
         
            +
            #
         
     | 
| 
      
 7 
     | 
    
         
            +
            # Add the the following columns
         
     | 
| 
      
 8 
     | 
    
         
            +
            #
         
     | 
| 
      
 9 
     | 
    
         
            +
            # job_status            :string
         
     | 
| 
      
 10 
     | 
    
         
            +
            # job_started_at        :datetime
         
     | 
| 
      
 11 
     | 
    
         
            +
            # job_ended_at          :datetime
         
     | 
| 
      
 12 
     | 
    
         
            +
            # job_error             :text
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # Use with_job_status in your background job
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            module ActsAsJobStatus
         
     | 
| 
      
 17 
     | 
    
         
            +
              extend ActiveSupport::Concern
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              module Base
         
     | 
| 
      
 20 
     | 
    
         
            +
                def acts_as_job_status(options = nil)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  include ::ActsAsJobStatus
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              included do
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              module ClassMethods
         
     | 
| 
      
 29 
     | 
    
         
            +
                def acts_as_job_status?; true; end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              # Instance Methods
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def perform_with_job_status!(&block)
         
     | 
| 
      
 35 
     | 
    
         
            +
                assign_attributes(job_status: nil, job_started_at: nil, job_ended_at: nil, job_error: nil)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                after_commit { yield }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                save!
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              def job_status_display_item_counts?
         
     | 
| 
      
 43 
     | 
    
         
            +
                job_status_completed_items_count.present? && job_status_total_items_count.present?
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              def job_status_completed_items_count
         
     | 
| 
      
 47 
     | 
    
         
            +
                nil
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def job_status_total_items_count
         
     | 
| 
      
 51 
     | 
    
         
            +
                nil
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              def job_status_enqueued?
         
     | 
| 
      
 55 
     | 
    
         
            +
                job_status == 'enqueued'
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
              def job_status_running?
         
     | 
| 
      
 59 
     | 
    
         
            +
                job_status == 'running'
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              def job_status_completed?
         
     | 
| 
      
 63 
     | 
    
         
            +
                job_status == 'completed'
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              def job_status_error?
         
     | 
| 
      
 67 
     | 
    
         
            +
                job_status == 'error'
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
              def with_job_status(&block)
         
     | 
| 
      
 71 
     | 
    
         
            +
                self.class.where(id: id).update_all(
         
     | 
| 
      
 72 
     | 
    
         
            +
                  job_status: :running,
         
     | 
| 
      
 73 
     | 
    
         
            +
                  job_started_at: Time.zone.now,
         
     | 
| 
      
 74 
     | 
    
         
            +
                  job_ended_at: nil,
         
     | 
| 
      
 75 
     | 
    
         
            +
                  job_error: nil
         
     | 
| 
      
 76 
     | 
    
         
            +
                )
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                exception = nil
         
     | 
| 
      
 79 
     | 
    
         
            +
                job_status = nil
         
     | 
| 
      
 80 
     | 
    
         
            +
                job_error = nil
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                begin
         
     | 
| 
      
 83 
     | 
    
         
            +
                  success = yield
         
     | 
| 
      
 84 
     | 
    
         
            +
                  raise('Unexpected error') unless success
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  job_status = :completed
         
     | 
| 
      
 87 
     | 
    
         
            +
                rescue Exception => e
         
     | 
| 
      
 88 
     | 
    
         
            +
                  exception = e
         
     | 
| 
      
 89 
     | 
    
         
            +
                  job_status = :error
         
     | 
| 
      
 90 
     | 
    
         
            +
                  job_error = e.message.presence || 'Unexpected error'
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                self.class.where(id: id).update_all(
         
     | 
| 
      
 94 
     | 
    
         
            +
                  job_status: job_status, 
         
     | 
| 
      
 95 
     | 
    
         
            +
                  job_ended_at: Time.zone.now, 
         
     | 
| 
      
 96 
     | 
    
         
            +
                  job_error: job_error
         
     | 
| 
      
 97 
     | 
    
         
            +
                )
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                if job_status == :error
         
     | 
| 
      
 100 
     | 
    
         
            +
                  EffectiveLogger.error(exception.message, associated: self) if defined?(EffectiveLogger)
         
     | 
| 
      
 101 
     | 
    
         
            +
                  ExceptionNotifier.notify_exception(exception, data: { id: id, class_name: self.class.name }) if defined?(ExceptionNotifier)
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                if job_status == :error && !ENV['TESTING_ACTS_AS_JOB_STATUS']
         
     | 
| 
      
 105 
     | 
    
         
            +
                  raise(exception) unless Rails.env.production? || Rails.env.staging?
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                true
         
     | 
| 
      
 109 
     | 
    
         
            +
              end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -23,7 +23,7 @@ module ActsAsPublished 
     | 
|
| 
       23 
23 
     | 
    
         
             
                attr_writer :save_as_draft
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                before_validation(if: -> { EffectiveResources.falsey?(@save_as_draft) && (@save_as_draft.present? || new_record?) }) do
         
     | 
| 
       26 
     | 
    
         
            -
                  self.published_start_at ||= Time.zone.now
         
     | 
| 
      
 26 
     | 
    
         
            +
                  self.published_start_at ||= Time.zone.now.beginning_of_day
         
     | 
| 
       27 
27 
     | 
    
         
             
                end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                before_validation(if: -> { EffectiveResources.truthy?(@save_as_draft) }) do
         
     | 
| 
         @@ -48,6 +48,24 @@ module ActsAsPublished 
     | 
|
| 
       48 
48 
     | 
    
         
             
              end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
              # Instance Methods
         
     | 
| 
      
 51 
     | 
    
         
            +
              def publish!
         
     | 
| 
      
 52 
     | 
    
         
            +
                now = Time.zone.now
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                if published_start_at.blank? || published_start_at > now
         
     | 
| 
      
 55 
     | 
    
         
            +
                  assign_attributes(published_start_at: now.beginning_of_day) 
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                if published_end_at.present? && (published_end_at <= now || published_end_at <= published_start_at)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  assign_attributes(published_end_at: nil)
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                save!
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              def draft!
         
     | 
| 
      
 66 
     | 
    
         
            +
                update!(published_start_at: nil, published_end_at: nil)
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
       51 
69 
     | 
    
         
             
              def published?
         
     | 
| 
       52 
70 
     | 
    
         
             
                return false if published_start_at.blank? || published_start_at > Time.zone.now
         
     | 
| 
       53 
71 
     | 
    
         
             
                return false if published_end_at.present? && published_end_at <= Time.zone.now
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            - if [nil, 'enqueued', 'running'].include?(resource.job_status)
         
     | 
| 
      
 2 
     | 
    
         
            +
              %p The background job is running. Please wait.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              %p.text-center
         
     | 
| 
      
 5 
     | 
    
         
            +
                = icon('spinner')
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              - if resource.job_status_display_item_counts?
         
     | 
| 
      
 8 
     | 
    
         
            +
                - completed = resource.job_status_completed_items_count
         
     | 
| 
      
 9 
     | 
    
         
            +
                - total = resource.job_status_total_items_count
         
     | 
| 
      
 10 
     | 
    
         
            +
                - percent = ((completed * 100).to_f / [total, 1].max).round(0)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                .progress
         
     | 
| 
      
 13 
     | 
    
         
            +
                  .progress-bar{role: 'progressbar', 'aria-valuenow': completed, 'aria-valuemin': 0, 'aria-valuemax': total, style: "width: #{percent}%"}
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                %p.text-center
         
     | 
| 
      
 16 
     | 
    
         
            +
                  Completed #{completed} out of #{pluralize(total, 'item')} so far
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              :javascript
         
     | 
| 
      
 19 
     | 
    
         
            +
                setTimeout(function() { window.location.reload(true) }, 5000);
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              %p.text-center
         
     | 
| 
      
 22 
     | 
    
         
            +
                = link_to 'Refresh', wizard_path(step), class: 'btn btn-secondary'
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              %p.text-center
         
     | 
| 
      
 25 
     | 
    
         
            +
                %small
         
     | 
| 
      
 26 
     | 
    
         
            +
                  %em This page will auto refresh every 5 seconds.
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            - if resource.job_status_error?
         
     | 
| 
      
 29 
     | 
    
         
            +
              %p The following error was encountered when running the background job:
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              .alert.alert-danger.my-4
         
     | 
| 
      
 32 
     | 
    
         
            +
                = resource.job_error.html_safe
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              %p Please fix any error, then try again.
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              %p.text-center
         
     | 
| 
      
 37 
     | 
    
         
            +
                = link_to 'Try Again', wizard_path(resource.previous_step(step)), class: 'btn btn-secondary'
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            - if resource.job_status_completed?
         
     | 
| 
      
 40 
     | 
    
         
            +
              %p.text-center
         
     | 
| 
      
 41 
     | 
    
         
            +
                = icon('check')
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              %p.text-center
         
     | 
| 
      
 44 
     | 
    
         
            +
                Job complete!
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                - if resource.job_status_display_item_counts?
         
     | 
| 
      
 47 
     | 
    
         
            +
                  = pluralize(resource.job_status_completed_items_count, 'item')
         
     | 
| 
      
 48 
     | 
    
         
            +
                  have been completed.
         
     | 
| 
         @@ -86,9 +86,23 @@ module EffectiveGem 
     | 
|
| 
       86 
86 
     | 
    
         
             
                  raise('gem does not respond to mailer_class') unless respond_to?(:mailer_class)
         
     | 
| 
       87 
87 
     | 
    
         
             
                  raise('expected args to be an Array') unless args.kind_of?(Array)
         
     | 
| 
       88 
88 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
                   
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 90 
     | 
    
         
            +
                    mailer_class.send(email, *args).send(deliver_method)
         
     | 
| 
      
 91 
     | 
    
         
            +
                  rescue => e
         
     | 
| 
      
 92 
     | 
    
         
            +
                    associated = args.first
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                    if associated.kind_of?(ActiveRecord::Base)
         
     | 
| 
      
 95 
     | 
    
         
            +
                      EffectiveLogger.error(e.message, associated: associated, details: { email: email }) if defined?(EffectiveLogger)
         
     | 
| 
      
 96 
     | 
    
         
            +
                      ExceptionNotifier.notify_exception(e, data: { email: email, associated_id: associated.id, associated_type: associated.class.name }) if defined?(ExceptionNotifier)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    else
         
     | 
| 
      
 98 
     | 
    
         
            +
                      args_to_s = args.to_s.gsub('<', '').gsub('>', '')
         
     | 
| 
      
 99 
     | 
    
         
            +
                      EffectiveLogger.error(e.message, details: { email: email, args: args_to_s }) if defined?(EffectiveLogger)
         
     | 
| 
      
 100 
     | 
    
         
            +
                      ExceptionNotifier.notify_exception(e, data: { email: email, args: args_to_s }) if defined?(ExceptionNotifier)
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
       91 
102 
     | 
    
         | 
| 
      
 103 
     | 
    
         
            +
                    raise(e) unless Rails.env.production? || Rails.env.staging?
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
       92 
106 
     | 
    
         
             
              end
         
     | 
| 
       93 
107 
     | 
    
         | 
| 
       94 
108 
     | 
    
         
             
            end
         
     | 
| 
         @@ -23,6 +23,7 @@ module EffectiveResources 
     | 
|
| 
       23 
23 
     | 
    
         
             
                initializer 'effective_resources.active_record' do |app|
         
     | 
| 
       24 
24 
     | 
    
         
             
                  app.config.to_prepare do
         
     | 
| 
       25 
25 
     | 
    
         
             
                    ActiveRecord::Base.extend(ActsAsArchived::Base)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    ActiveRecord::Base.extend(ActsAsJobStatus::Base)
         
     | 
| 
       26 
27 
     | 
    
         
             
                    ActiveRecord::Base.extend(ActsAsEmailForm::Base)
         
     | 
| 
       27 
28 
     | 
    
         
             
                    ActiveRecord::Base.extend(ActsAsEmailNotification::Base)
         
     | 
| 
       28 
29 
     | 
    
         
             
                    ActiveRecord::Base.extend(ActsAsTokened::Base)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: effective_resources
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.27.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Code and Effect
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2025-01-13 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -80,6 +80,20 @@ dependencies: 
     | 
|
| 
       80 
80 
     | 
    
         
             
                - - ">="
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 83 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 84 
     | 
    
         
            +
              name: effective_developer
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 86 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 88 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 90 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 91 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 92 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 93 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 95 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 96 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       83 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
98 
     | 
    
         
             
              name: haml
         
     | 
| 
       85 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -202,6 +216,7 @@ files: 
     | 
|
| 
       202 
216 
     | 
    
         
             
            - app/models/concerns/acts_as_archived.rb
         
     | 
| 
       203 
217 
     | 
    
         
             
            - app/models/concerns/acts_as_email_form.rb
         
     | 
| 
       204 
218 
     | 
    
         
             
            - app/models/concerns/acts_as_email_notification.rb
         
     | 
| 
      
 219 
     | 
    
         
            +
            - app/models/concerns/acts_as_job_status.rb
         
     | 
| 
       205 
220 
     | 
    
         
             
            - app/models/concerns/acts_as_paginable.rb
         
     | 
| 
       206 
221 
     | 
    
         
             
            - app/models/concerns/acts_as_published.rb
         
     | 
| 
       207 
222 
     | 
    
         
             
            - app/models/concerns/acts_as_purchasable_wizard.rb
         
     | 
| 
         @@ -259,6 +274,7 @@ files: 
     | 
|
| 
       259 
274 
     | 
    
         
             
            - app/views/application/update.js.erb
         
     | 
| 
       260 
275 
     | 
    
         
             
            - app/views/effective/acts_as_email_form/_fields.html.haml
         
     | 
| 
       261 
276 
     | 
    
         
             
            - app/views/effective/acts_as_email_notification/_fields.html.haml
         
     | 
| 
      
 277 
     | 
    
         
            +
            - app/views/effective/acts_as_job_status/_wizard_step.html.haml
         
     | 
| 
       262 
278 
     | 
    
         
             
            - app/views/effective/acts_as_published/_fields.html.haml
         
     | 
| 
       263 
279 
     | 
    
         
             
            - app/views/effective/acts_as_slugged/_fields.html.haml
         
     | 
| 
       264 
280 
     | 
    
         
             
            - app/views/effective/acts_as_wizard/_wizard_step.html.haml
         
     |