Module: SData::ControllerMixin::Actions

Includes:
CollectionScope, SDataFeed, SDataInstance
Defined in:
lib/s_data/controller_mixin/actions.rb

Instance Method Summary collapse

Instance Method Details

#sdata_collectionObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/s_data/controller_mixin/actions.rb', line 6

def sdata_collection
  begin
    errors = []
    collection = build_sdata_feed
    sdata_scope.each do |entry|
      begin
        collection.entries << entry.to_atom(params)
      rescue Exception => e
        errors << ApplicationDiagnosis.new(:exception => e).to_xml(:feed)
      end
    end
    #TODO: syntactic sugar if possible (such as diagnosing_errors(&block) which does the dirty work)
    errors.each do |error|
      collection[SData.config[:schemas]['sdata'], 'diagnosis'] << error
    end
    populate_open_search_for(collection)
    build_feed_links_for(collection)
    render :xml => collection, :content_type => "application/atom+xml; type=feed"
  rescue Exception => e
    handle_exception(e)
  end
end

#sdata_create_instanceObject



39
40
41
# File 'lib/s_data/controller_mixin/actions.rb', line 39

def sdata_create_instance
  raise "not currently supported"
end


47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/s_data/controller_mixin/actions.rb', line 47

def sdata_create_link
  begin
    payload_xml = params['entry'].sdata_payload.raw_xml
    payload = Nokogiri::XML(payload_xml).root
    id = payload.attributes['key'].value.to_i
    uuid = payload.attributes['uuid'].value
    instance = model_class.find(id)
    assert_access_to instance
    instance.create_or_update_uuid! uuid
    render :xml => instance.to_atom(params), :content_type => "application/atom+xml; type=entry", :status => "201"
  rescue Exception => e
    handle_exception(e)
  end
end

#sdata_show_instanceObject



29
30
31
32
33
34
35
36
37
# File 'lib/s_data/controller_mixin/actions.rb', line 29

def sdata_show_instance
  begin
    instance = sdata_instance
    assert_access_to instance
    render :xml => instance.to_atom(params), :content_type => "application/atom+xml; type=entry"
  rescue Exception => e
    handle_exception(e)
  end
end

#sdata_update_instanceObject



43
44
45
# File 'lib/s_data/controller_mixin/actions.rb', line 43

def sdata_update_instance
  raise "not currently supported"
end