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