Class: DAV4Rack::Carddav::Resource

Inherits:
Resource
  • Object
show all
Extended by:
Helpers::Properties
Defined in:
lib/dav4rack_ext/carddav/resource.rb

Constant Summary collapse

CARDAV_NS =
'urn:ietf:params:xml:ns:carddav'.freeze
PRIVILEGES =
%w(read read-acl read-current-user-privilege-set)

Instance Method Summary collapse

Methods included from Helpers::Properties

define_properties, extended

Constructor Details

#initializeResource

Returns a new instance of Resource.

Raises:

  • (ArgumentError)


11
12
13
14
# File 'lib/dav4rack_ext/carddav/resource.rb', line 11

def initialize(*)
  super
  raise ArgumentError, "missing current_user lambda" unless options[:current_user]
end

Instance Method Details

#childrenObject



95
96
97
# File 'lib/dav4rack_ext/carddav/resource.rb', line 95

def children
  []
end

#current_userObject



16
17
18
# File 'lib/dav4rack_ext/carddav/resource.rb', line 16

def current_user
  @current_user ||= options[:current_user].call(env)
end

#get_property(element) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/dav4rack_ext/carddav/resource.rb', line 43

def get_property(element)
  name = element[:name]
  namespace = element[:ns_href]
  
  key = "#{namespace}*#{name}"

  if handler = self.class.properties[key]
    ret = instance_exec(element, &handler[0])
    # TODO: find better than that
    if ret.is_a?(String) && ret.include?('<')
      Nokogiri::XML::DocumentFragment.parse(ret)
    else
      ret
    end
  else
    Logger.debug("[#{self.class.name}] no handler for #{namespace}:#{name}")
    super
  end
end

#is_self?(other_path) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
39
40
41
# File 'lib/dav4rack_ext/carddav/resource.rb', line 36

def is_self?(other_path)
  ary = [@public_path]
  ary.push(@public_path+'/') if @public_path[-1] != '/'
  ary.push(@public_path[0..-2]) if @public_path[-1] == '/'
  ary.include? other_path
end

#propertiesObject



87
88
89
90
91
92
93
# File 'lib/dav4rack_ext/carddav/resource.rb', line 87

def properties
  selected_properties = self.class.properties.reject{|key, arr| arr[1] == true }
  selected_properties.keys.map do |key|
    ns, name = key.split('*')
    {:name => name, :ns_href => ns}
  end
end

#router_paramsObject



24
25
26
# File 'lib/dav4rack_ext/carddav/resource.rb', line 24

def router_params
  env['router.params'] || {}
end

#setupObject



28
29
30
31
32
33
34
# File 'lib/dav4rack_ext/carddav/resource.rb', line 28

def setup
  @propstat_relative_path = true
  @root_xml_attributes = {
    'xmlns:C' => CARDAV_NS,
    'xmlns:APPLE1' => 'http://calendarserver.org/ns/'
  }
end

#user_agentObject



20
21
22
# File 'lib/dav4rack_ext/carddav/resource.rb', line 20

def user_agent
  options[:env]['HTTP_USER_AGENT'].to_s rescue ""
end