1#
2# The !okay/news module for YAML.rb
3#
4require 'okay'
5
6module Okay
7
8  class News < ModuleBase
9    attr_accessor :title, :link, :description, :updatePeriod, :items
10    def to_yaml_properties
11      [ '@title', '@link', '@description', '@updatePeriod', '@items' ]
12    end
13    def to_yaml_type
14      "!okay/news"
15    end
16  end
17
18  Okay.add_type( "news" ) { |type, val, modules|
19    Okay.object_maker( Okay::News, val, modules )
20  }
21
22  class NewsItem < ModuleBase
23    attr_accessor :title, :link, :description, :pubTime
24    def to_yaml_properties
25      [ '@title', '@link', '@description', '@pubTime' ]
26    end
27    def to_yaml_type
28      "!okay/news/item"
29    end
30  end
31
32  Okay.add_type( "news/item" ) { |type, val, modules|
33    Okay.object_maker( Okay::NewsItem, val, modules )
34  }
35
36end
37
38Okay.load_schema( <<EOY )
39
40# Schema for Okay::News types
41--- %YAML:1.0 !okay/schema
42okay/news:
43  description: >
44    Inspired by RSS, more limited...
45  examples: >
46    If I had a news site...
47  schema:
48    - map:
49        /title: [ str ]
50        /link: [ str ]
51        /description: [ str ]
52        /updatePeriod: [ str ]
53        /items:
54          - seq: { /*: [ okay/news/item ] }
55
56okay/news/item:
57  description: >
58    Inside okay/news lies...
59  examples: >
60    See okay/news examples...
61  schema:
62    - map:
63        /title: [ str ]
64        /pubTime: [ time ]
65        /link: [ str ]
66        /description: [ str ]
67        optional: [ /title ]
68
69EOY
70