exempla-atomic 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 2
2
+ :patch: 3
3
3
  :major: 0
4
4
  :minor: 0
data/lib/atomic/entry.rb CHANGED
@@ -10,10 +10,6 @@ module Atomic
10
10
 
11
11
  def parse(xml)
12
12
 
13
- namespaces = { "xmlns:atom" => "http://www.w3.org/2005/Atom",
14
- "xmlns:app" => "http://www.w3.org/2007/app",
15
- "xmlns:cirrus" => "http://www.glam.ac.uk/2009/cirrus" }
16
-
17
13
  doc = Nokogiri.XML(xml)
18
14
 
19
15
  # puts("================================================================")
@@ -22,30 +18,30 @@ module Atomic
22
18
  # puts(doc)
23
19
  # puts("================================================================")
24
20
 
25
- entry_xml = doc.xpath('//atom:entry', namespaces).first
21
+ entry_xml = doc.xpath('//atom:entry', NAMESPACES).first
26
22
 
27
23
  attributes = {}
28
- attributes[:id] = entry_xml.xpath('atom:id', namespaces).first.text
29
- attributes[:title] = entry_xml.xpath('atom:title', namespaces).first.text
30
- attributes[:created_at] = entry_xml.xpath('atom:published', namespaces).first.text
31
- attributes[:updated_at] = entry_xml.xpath('atom:updated', namespaces).first.text
24
+ attributes[:id] = entry_xml.xpath('atom:id', NAMESPACES).first.text
25
+ attributes[:title] = entry_xml.xpath('atom:title', NAMESPACES).first.text
26
+ attributes[:created_at] = entry_xml.xpath('atom:published', NAMESPACES).first.text
27
+ attributes[:updated_at] = entry_xml.xpath('atom:updated', NAMESPACES).first.text
32
28
 
33
- content_xml = entry_xml.xpath('atom:content', namespaces).first
29
+ content_xml = entry_xml.xpath('atom:content', NAMESPACES).first
34
30
 
35
31
  if (content_xml['type'] == 'application/xml')
36
32
  attributes[:content] = {}
37
33
 
38
- announcement_xml = content_xml.xpath('cirrus:announcement', namespaces).first
34
+ announcement_xml = content_xml.xpath('cirrus:announcement', NAMESPACES).first
39
35
  unless announcement_xml.nil?
40
- attributes[:content][:message] = announcement_xml.xpath('cirrus:message', namespaces).first.text
41
- attributes[:content][:starts_at] = announcement_xml.xpath('cirrus:starts-at', namespaces).first.text
42
- attributes[:content][:ends_at] = announcement_xml.xpath('cirrus:ends-at', namespaces).first.text
36
+ attributes[:content][:message] = announcement_xml.xpath('cirrus:message', NAMESPACES).first.text
37
+ attributes[:content][:starts_at] = announcement_xml.xpath('cirrus:starts-at', NAMESPACES).first.text
38
+ attributes[:content][:ends_at] = announcement_xml.xpath('cirrus:ends-at', NAMESPACES).first.text
43
39
  end
44
40
  else
45
41
  attributes[:content] = content_xml.inner_html
46
42
  end
47
43
  attributes[:categories] = []
48
- entry_xml.xpath('atom:category', namespaces).each do |category_node|
44
+ entry_xml.xpath('atom:category', NAMESPACES).each do |category_node|
49
45
  attributes[:categories] << {:term => category_node['term'], :scheme => category_node['scheme']}
50
46
  end
51
47
 
@@ -0,0 +1,85 @@
1
+ require 'rubygems'
2
+ require 'nokogiri'
3
+ require 'time'
4
+
5
+ module Atomic
6
+
7
+ class Workspace
8
+ class << self
9
+ def parse(data)
10
+ workspace = new
11
+ doc = data.kind_of?(Nokogiri::XML::Element) ? data : Nokogiri.XML(data)
12
+ workspace_node = doc.xpath('//app:workspace', NAMESPACES).first
13
+ workspace.title = workspace_node.xpath('atom:title', NAMESPACES).first.text
14
+ workspace_node.xpath('app:collection', NAMESPACES).each do |collection_node|
15
+ workspace.collections << Collection.parse(collection_node)
16
+ end
17
+ workspace
18
+ end
19
+ end
20
+ attr_accessor :title, :collections
21
+ def initialize(params = {})
22
+ @title = params[:title]
23
+ @collections = params[:collections] || []
24
+ end
25
+ def to_hash
26
+ {
27
+ :title => @title,
28
+ :collections => @collections.collect{ |collection| collection.to_hash }
29
+ }
30
+ end
31
+ end
32
+
33
+ class Collection
34
+ class << self
35
+ def parse(data)
36
+ collection = new
37
+ doc = data.kind_of?(Nokogiri::XML::Element) ? data : Nokogiri.XML(data)
38
+ collection_node = doc.xpath('//app:collection', NAMESPACES).first
39
+ collection.href = collection_node['href']
40
+ collection.title = collection_node.xpath('atom:title', NAMESPACES).first.text
41
+ collection
42
+ end
43
+ end
44
+ attr_accessor :href, :title
45
+ def initialize(params = {})
46
+ @href = params[:href]
47
+ @title = params[:title]
48
+ end
49
+ def to_hash
50
+ {
51
+ :href => @href,
52
+ :title => @title
53
+ }
54
+ end
55
+ end
56
+
57
+ class Service
58
+
59
+ class << self
60
+
61
+ def parse(data)
62
+ service = new
63
+ doc = data.kind_of?(Nokogiri::XML::Element) ? data : Nokogiri.XML(data)
64
+ service_node = doc.xpath('//app:service', NAMESPACES).first
65
+ service_node.xpath('app:workspace', NAMESPACES).each do |workspace_node|
66
+ service.workspaces << Workspace.parse(workspace_node)
67
+ end
68
+ service
69
+ end
70
+
71
+ end
72
+
73
+ attr_accessor :workspaces
74
+
75
+ def initialize(params = {})
76
+ @workspaces = params[:workspaces] || []
77
+ end
78
+
79
+ def to_hash
80
+ { :workspaces => @workspaces.collect { |workspace| workspace.to_hash } }
81
+ end
82
+
83
+ end
84
+
85
+ end
data/lib/atomic.rb CHANGED
@@ -1 +1,6 @@
1
- require File.dirname(__FILE__) + '/atomic/entry'
1
+ require File.dirname(__FILE__) + '/atomic/service'
2
+ require File.dirname(__FILE__) + '/atomic/entry'
3
+
4
+ Atomic::NAMESPACES = { "xmlns:atom" => "http://www.w3.org/2005/Atom",
5
+ "xmlns:app" => "http://www.w3.org/2007/app",
6
+ "xmlns:cirrus" => "http://www.glam.ac.uk/2009/cirrus" }
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Atomic::Service do
4
+
5
+ before(:each) do
6
+ end
7
+
8
+ it "should work" do
9
+ xml = File.read(File.join(File.dirname(__FILE__), '..', 'fixtures', 'valid_atom_service.xml'))
10
+ @service = Atomic::Service.parse(xml)
11
+ end
12
+
13
+ end
14
+
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <service xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/2007/app">
3
+ <workspace>
4
+ <atom:title>Workspace Title</atom:title>
5
+ <collection href="http://localhost:4000/collections/announcements/entries">
6
+ <atom:title>Announcements</atom:title>
7
+ <accept>application/atom+xml;type=entry</accept>
8
+ <categories>
9
+
10
+ <category term="treforest" scheme="http://localhost:4000/schemes/locations"/>
11
+ <category term="glyntaff" scheme="http://localhost:4000/schemes/locations"/>
12
+ <category term="atrium" scheme="http://localhost:4000/schemes/locations"/>
13
+ <category term="bus" scheme="http://localhost:4000/schemes/faculties"/>
14
+ <category term="cell" scheme="http://localhost:4000/schemes/faculties"/>
15
+ <category term="hass" scheme="http://localhost:4000/schemes/faculties"/>
16
+ <category term="hesas" scheme="http://localhost:4000/schemes/faculties"/>
17
+ <category term="fat" scheme="http://localhost:4000/schemes/faculties"/>
18
+ <category term="cci" scheme="http://localhost:4000/schemes/faculties"/>
19
+
20
+ </categories>
21
+ </collection>
22
+ <collection href="http://localhost:4000/collections/news/entries">
23
+ <atom:title>News</atom:title>
24
+ <accept>application/atom+xml;type=entry</accept>
25
+ <categories>
26
+ </categories>
27
+ </collection>
28
+
29
+ <collection href="http://localhost:4000/collections/events/entries">
30
+ <atom:title>Events</atom:title>
31
+ <accept>application/atom+xml;type=entry</accept>
32
+ <categories>
33
+ </categories>
34
+ </collection>
35
+ </workspace>
36
+ </service>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exempla-atomic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darrin Wortlehock
@@ -25,13 +25,18 @@ files:
25
25
  - VERSION.yml
26
26
  - lib/atomic.rb
27
27
  - lib/atomic
28
+ - lib/atomic/service.rb
28
29
  - lib/atomic/entry.rb
30
+ - lib/atomic/category.rb
31
+ - lib/atomic/feed.rb
29
32
  - spec/spec.opts
30
33
  - spec/fixtures
31
34
  - spec/fixtures/valid_atom_entry.xml
35
+ - spec/fixtures/valid_atom_service.xml
32
36
  - spec/spec_helper.rb
33
37
  - spec/atomic
34
38
  - spec/atomic/entry_spec.rb
39
+ - spec/atomic/service_spec.rb
35
40
  has_rdoc: true
36
41
  homepage: http://github.com/exempla/atomic
37
42
  post_install_message: