Module: XML::Smart

Defined in:
lib/xml/smart.rb,
lib/xml/smart_dom.rb,
lib/xml/smart_qname.rb,
lib/xml/smart_domtext.rb,
lib/xml/smart_domother.rb,
lib/xml/smart_domelement.rb,
lib/xml/smart_domnodeset.rb,
lib/xml/smart_domattribute.rb,
lib/xml/smart_domnamespace.rb,
lib/xml/smart_domattributeset.rb,
lib/xml/smart_domnamespaceset.rb,
lib/xml/smart_processinginstruction.rb

Defined Under Namespace

Classes: Dom, Error, ProcessingInstruction, QName

Constant Summary collapse

VERSION =
LIBXML_VERSION =
LOCKFILE =
{
  :min_sleep => 0.25,
  :max_sleep => 5,
  :sleep_inc => 0.25,
  :max_age => 5
}
COPY =
0
MOVE =
1

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.modify(name, default = nil, &block) ⇒ Object

Raises:



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/xml/smart.rb', line 126

def self::modify(name,default=nil,&block)
  raise Error, 'first parameter has to be a filename or filehandle' unless name.is_a?(String) || name.is_a?(IO) || name.is_a?(Tempfile)
  raise Error, 'a block is mandatory' unless block_given?
  lfname = name.is_a?(String) ? name : name.fileno.to_s
  lockfile = Lockfile.new(lfname + '.lock',LOCKFILE)
  begin
    lockfile.lock
    so = Smart::open_unprotected(name,default)
    block.call(so)
    so.save_as(name)
  ensure
    lockfile.unlock
  end
  nil
end

.open(name, default = nil) ⇒ Object

Raises:



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/xml/smart.rb', line 142

def self::open(name,default=nil)
  raise Error, 'first parameter has to be a filename or filehandle' unless name.is_a?(String) || name.is_a?(IO) || name.is_a?(Tempfile)
  raise Error, 'second parameter has to be an xml string' unless default.is_a?(String) || default.nil?
  lfname = name.is_a?(String) ? name : name.fileno.to_s
  lockfile = Lockfile.new(lfname + '.lock',LOCKFILE)
  dom = nil
  begin
    lockfile.lock
    dom = Smart::open_unprotected(name,default)
  ensure  
    lockfile.unlock
  end
  if dom && block_given?
    yield dom
    nil
  else  
    dom
  end
end

.open_unprotected(name, default = nil) ⇒ Object

Raises:



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/xml/smart.rb', line 162

def self::open_unprotected(name,default=nil)
  raise Error, 'first parameter has to be a filename or filehandle' unless name.is_a?(String) || name.is_a?(IO) || name.is_a?(Tempfile)
  raise Error, 'second parameter has to be an xml string' unless default.is_a?(String) || default.nil?
  dom = begin
    io =  name.is_a?(String) ? ::Kernel::open(name) : name
    Dom.new Nokogiri::XML::parse(io){|config| config.noblanks.noent.nsclean.strict }
  rescue
    if default.nil?
      raise Error, "could not open #{name}"
    else
      Smart::string(default)
    end
  end
  if block_given?
    yield dom
    nil
  else  
    dom
  end
end

.string(str) ⇒ Object

Raises:



183
184
185
186
187
188
189
190
191
192
# File 'lib/xml/smart.rb', line 183

def self::string(str)
  raise Error, 'first parameter has to be stringable (:to_s)' unless str.is_a?(String)
  dom = Dom.new Nokogiri::XML::parse(str.to_s){|config| config.noblanks.noent.nsclean.strict }
  if block_given?
    yield dom
    nil
  else  
    dom
  end
end

Instance Method Details

#initialize(name, default = nil) ⇒ Object



124
# File 'lib/xml/smart.rb', line 124

def initialize(name,default=nil); open(name,default); end