module Mongoid::Oslc::ClassMethods

Public Instance Methods

describe(describe) click to toggle source
# File lib/mongoid/oslc.rb, line 38
def describe(describe)
  Mongoid::Oslc.resources[self.name].merge!(describe: describe)
end
domain(name) click to toggle source
# File lib/mongoid/oslc.rb, line 34
def domain(name)
  Mongoid::Oslc.resources[self.name].merge!(domain: name)
end
oslc_embeds_many(name, options = {}) click to toggle source
# File lib/mongoid/oslc.rb, line 48
def oslc_embeds_many(name, options = {})
  oslc_options = options_for_oslc(options)
  embeds_many(name, options)
  embedded_class = relations[name.to_s].class_name.constantize
  register_oslc_field(name, oslc_options.merge(type: Array, embedded: embedded_class))
end
oslc_field(name, options = {}) click to toggle source
# File lib/mongoid/oslc.rb, line 42
def oslc_field(name, options = {})
  oslc_options = options_for_oslc(options)
  field(name, options)
  register_oslc_field(name, oslc_options)
end
oslc_fields() click to toggle source
# File lib/mongoid/oslc.rb, line 55
def oslc_fields
  (ancestors - included_modules).inject({}) do |hash, ancestor_class|
    hash.merge(Mongoid::Oslc.resources[ancestor_class.name][:fields])
  end
end
oslc_where(query) click to toggle source
# File lib/mongoid/oslc.rb, line 61
def oslc_where(query)
  mongoid_query = Strategy.to_query(query)
  where(mongoid_query)
end
register_oslc_field(name, options) click to toggle source
# File lib/mongoid/oslc.rb, line 66
def register_oslc_field(name, options)
  Mongoid::Oslc.resources[self.name][:fields][options[:mapping]] = {
    name: name,
    value_type: ::Oslc::VALUE_TYPES[options[:value_type] || fields[name.to_s].type.to_s],
    read_only: (options[:read_only] || false),
    occurs: occurs(options),
    allowed_values: (options[:allowed_values] || []),
    embedded: (options[:embedded] || false),
    range: (options[:range] || [])
  }
end

Private Instance Methods

occurs(options) click to toggle source
# File lib/mongoid/oslc.rb, line 80
def occurs(options)
  mandatory = options[:mandatory] || false
  case
    when mandatory && options[:type] == Array then ::Oslc::ONE_OR_MANY
    when mandatory                            then ::Oslc::EXACTLY_ONE
    when options[:type] == Array              then ::Oslc::ZERO_OR_MANY
    else ::Oslc::ZERO_OR_ONE
  end
end
options_for_oslc(options) click to toggle source
# File lib/mongoid/oslc.rb, line 90
def options_for_oslc(options)
  [:value_type, :read_only, :allowed_values, :mapping, :mandatory, :range].inject({}) do |hash, field|
    hash.merge(field => options.delete(field))
  end.reject{|field, value| value.nil?}.merge(type: options[:type])
end