Sha256: f317646dd32c2bad22cf0d6d861b8544808a58bd8d4fc045c721c46d92b731f3

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

module OpenX
  module Services
    module Persistance

      module ClassMethods

        def create!(params = {})
          new(params).save!
        end

        def find(id, *args)
          if id == :all
            responses = remote.call(find_all, *args)
            responses.map do |response|
              new(translate(response))
            end
          else
            response  = remote.call(find_one, id)
            new(translate(response))
          end
        end

        def destroy(id)
          new(:id => id).destroy
        end

        private

          def translate(response)
            params    = {}
            self.translations.each do |k,v|
              params[k] = response[v.to_s] if response[v.to_s]
            end
            params
          end

      end

      module InstanceMethods

        def save!
          params = {}
          self.class.translations.keys.each do |k|
            value = send(:"#{k}")
            params[self.class.translations[k].to_s] = value if value
          end

          if new_record?
            @id = remote.call(self.class.create, params)
          else
            remote.call(self.class.update, params)
          end
          self
        end

        def destroy
          remote.call(self.class.delete, id)
          @id = nil
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bsm-openx-1.9.3 lib/openx/services/persistance.rb
bsm-openx-1.9.2 lib/openx/services/persistance.rb
bsm-openx-1.9.1 lib/openx/services/persistance.rb