Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
ruby_odata / features / support / pickle.rb
Size: Mime:
require "pickle/world"
require "vcr"
require File.expand_path("../../../lib/ruby_odata", __FILE__)

module OData
  module PickleAdapter
    include Pickle::Adapter::Base
    @@service = nil
    def self.get_service
      return @@service if @@service
      VCR.use_cassette("unsecured_metadata") do
        return OData::Service.new "http://#{WEBSERVER}:#{HTTP_PORT_NUMBER}/SampleService/RubyOData.svc"
      end
    end

    # Do not consider these to be part of the class list
    def self.except_classes
      @@except_classes ||= []
    end

    # Gets a list of the available models for this adapter
    def self.model_classes
      self.get_service.classes.values
    end

    # get a list of column names for a given class
    def self.column_names(klass)
      klass.properties.keys
    end

    # Get an instance by id of the model
    def self.get_model(klass, id, expand = false)
      collection = klass.to_s.split('::').last.pluralize
      service = self.get_service

      query = service.send collection, id

      if expand then
        # Expand all navigation properties
        navigation_properties = klass.properties.select { |k, v| v.nav_prop }
        # Ruby 1.9 Hash.select returns a Hash, 1.8 returns an Array, so normalize the return type
        props = (navigation_properties.is_a? Hash) ? navigation_properties : Hash[*navigation_properties.flatten]
        props.keys.each do |prop|
          query.expand(prop)
        end
      end

      service.execute.first
    end

    # Find the first instance matching conditions
    def self.find_first_model(klass, conditions)
      collection = klass.to_s.split('::').last.pluralize
      service = self.get_service

      q = service.send collection
      q.filter(conditions)
      q.take(1)
      service.execute.first
    end

    # Find all models matching conditions
    def self.find_all_models(klass, conditions)
      collection = klass.to_s.split('::').last.pluralize
      service = self.get_service

      q = service.send collection
      q.filter(conditions)
      service.execute
    end

    # Create a model using attributes
    def self.create_model(klass, attributes)
      instance = klass.send :make, attributes

      collection = klass.to_s.split('::').last.pluralize
      service = self.get_service
      service.send "AddTo#{collection}", instance
      service.save_changes.first
    end
  end
end

module Pickle
  module Session
    # return a newly selected model with the navigation properties expanded
    def model_with_associations(name)
      model = created_model(name)
      return nil unless model
      OData::PickleAdapter.get_model(model.class, model.id, true)
    end
  end
end