~ubuntu-branches/ubuntu/hardy/ruby1.8/hardy-updates

« back to all changes in this revision

Viewing changes to lib/rss/image.rb

  • Committer: Bazaar Package Importer
  • Author(s): akira yamada
  • Date: 2007-03-13 22:11:58 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20070313221158-h3oql37brlaf2go2
Tags: 1.8.6-1
* new upstream version, 1.8.6.
* libruby1.8 conflicts with libopenssl-ruby1.8 (< 1.8.6) (closes: #410018)
* changed packaging style to cdbs from dbs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
require 'rss/1.0'
 
2
require 'rss/dublincore'
 
3
 
 
4
module RSS
 
5
 
 
6
  IMAGE_PREFIX = 'image'
 
7
  IMAGE_URI = 'http://web.resource.org/rss/1.0/modules/image/'
 
8
 
 
9
  RDF.install_ns(IMAGE_PREFIX, IMAGE_URI)
 
10
 
 
11
  IMAGE_ELEMENTS = []
 
12
 
 
13
  %w(item favicon).each do |name|
 
14
    class_name = Utils.to_class_name(name)
 
15
    BaseListener.install_class_name(IMAGE_URI, name, "Image#{class_name}")
 
16
    IMAGE_ELEMENTS << "#{IMAGE_PREFIX}_#{name}"
 
17
  end
 
18
  
 
19
  module ImageModelUtils
 
20
    def validate_one_tag_name(ignore_unknown_element, name, tags)
 
21
      if !ignore_unknown_element
 
22
        invalid = tags.find {|tag| tag != name}
 
23
        raise UnknownTagError.new(invalid, IMAGE_URI) if invalid
 
24
      end
 
25
      raise TooMuchTagError.new(name, tag_name) if tags.size > 1
 
26
    end
 
27
  end
 
28
  
 
29
  module ImageItemModel
 
30
    include ImageModelUtils
 
31
    extend BaseModel
 
32
 
 
33
    def self.append_features(klass)
 
34
      super
 
35
 
 
36
      klass.install_have_child_element("item", IMAGE_URI, "?",
 
37
                                       "#{IMAGE_PREFIX}_item")
 
38
      klass.install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)
 
39
    end
 
40
 
 
41
    class ImageItem < Element
 
42
      include RSS10
 
43
      include DublinCoreModel
 
44
 
 
45
      @tag_name = "item"
 
46
      
 
47
      class << self
 
48
        def required_prefix
 
49
          IMAGE_PREFIX
 
50
        end
 
51
        
 
52
        def required_uri
 
53
          IMAGE_URI
 
54
        end
 
55
      end
 
56
 
 
57
      install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)
 
58
 
 
59
      [
 
60
        ["about", ::RSS::RDF::URI, true],
 
61
        ["resource", ::RSS::RDF::URI, false],
 
62
      ].each do |name, uri, required|
 
63
        install_get_attribute(name, uri, required, nil, nil,
 
64
                              "#{::RSS::RDF::PREFIX}:#{name}")
 
65
      end
 
66
 
 
67
      %w(width height).each do |tag|
 
68
        full_name = "#{IMAGE_PREFIX}_#{tag}"
 
69
        disp_name = "#{IMAGE_PREFIX}:#{tag}"
 
70
        install_text_element(tag, IMAGE_URI, "?",
 
71
                             full_name, :integer, disp_name)
 
72
        BaseListener.install_get_text_element(IMAGE_URI, tag, "#{full_name}=")
 
73
      end
 
74
 
 
75
      alias width= image_width=
 
76
      alias width image_width
 
77
      alias height= image_height=
 
78
      alias height image_height
 
79
 
 
80
      def initialize(*args)
 
81
        if Utils.element_initialize_arguments?(args)
 
82
          super
 
83
        else
 
84
          super()
 
85
          self.about = args[0]
 
86
          self.resource = args[1]
 
87
        end
 
88
      end
 
89
 
 
90
      def full_name
 
91
        tag_name_with_prefix(IMAGE_PREFIX)
 
92
      end
 
93
 
 
94
      private
 
95
      def maker_target(target)
 
96
        target.image_item
 
97
      end
 
98
 
 
99
      def setup_maker_attributes(item)
 
100
        item.about = self.about
 
101
        item.resource = self.resource
 
102
      end
 
103
    end
 
104
  end
 
105
  
 
106
  module ImageFaviconModel
 
107
    include ImageModelUtils
 
108
    extend BaseModel
 
109
    
 
110
    def self.append_features(klass)
 
111
      super
 
112
 
 
113
      unless klass.class == Module
 
114
        klass.install_have_child_element("favicon", IMAGE_URI, "?",
 
115
                                         "#{IMAGE_PREFIX}_favicon")
 
116
        klass.install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)
 
117
      end
 
118
    end
 
119
 
 
120
    class ImageFavicon < Element
 
121
      include RSS10
 
122
      include DublinCoreModel
 
123
 
 
124
      @tag_name = "favicon"
 
125
      
 
126
      class << self
 
127
        def required_prefix
 
128
          IMAGE_PREFIX
 
129
        end
 
130
        
 
131
        def required_uri
 
132
          IMAGE_URI
 
133
        end
 
134
      end
 
135
 
 
136
      [
 
137
        ["about", ::RSS::RDF::URI, true, ::RSS::RDF::PREFIX],
 
138
        ["size", IMAGE_URI, true, IMAGE_PREFIX],
 
139
      ].each do |name, uri, required, prefix|
 
140
        install_get_attribute(name, uri, required, nil, nil,
 
141
                              "#{prefix}:#{name}")
 
142
      end
 
143
 
 
144
      AVAILABLE_SIZES = %w(small medium large)
 
145
      alias_method :_size=, :size=
 
146
      private :_size=
 
147
      def size=(new_value)
 
148
        if @do_validate and !new_value.nil?
 
149
          new_value = new_value.strip
 
150
          unless AVAILABLE_SIZES.include?(new_value)
 
151
            attr_name = "#{IMAGE_PREFIX}:size"
 
152
            raise NotAvailableValueError.new(full_name, new_value, attr_name)
 
153
          end
 
154
        end
 
155
        __send__(:_size=, new_value)
 
156
      end
 
157
      
 
158
      alias image_size= size=
 
159
      alias image_size size
 
160
 
 
161
      def initialize(*args)
 
162
        if Utils.element_initialize_arguments?(args)
 
163
          super
 
164
        else
 
165
          super()
 
166
          self.about = args[0]
 
167
          self.size = args[1]
 
168
        end
 
169
      end
 
170
 
 
171
      def full_name
 
172
        tag_name_with_prefix(IMAGE_PREFIX)
 
173
      end
 
174
 
 
175
      private
 
176
      def maker_target(target)
 
177
        target.image_favicon
 
178
      end
 
179
 
 
180
      def setup_maker_attributes(favicon)
 
181
        favicon.about = self.about
 
182
        favicon.size = self.size
 
183
      end
 
184
    end
 
185
 
 
186
  end
 
187
 
 
188
  class RDF
 
189
    class Channel; include ImageFaviconModel; end
 
190
    class Item; include ImageItemModel; end
 
191
  end
 
192
 
 
193
end