atomutil 0.1.4 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c5e5092a293b758eebec1ed5bf93a970d0a42302
4
- data.tar.gz: d6136b8ed4dd134a1e61229b2dfb96ec2bedf66c
2
+ SHA256:
3
+ metadata.gz: 6caef9b5e4041251ca11a21315b28a321595a0e71bc3a97d431717cb47c19f29
4
+ data.tar.gz: 5f099d23a860ca5b7c8e8cef3945a4f9c2a4dababf37d0c4efc366a4c15da103
5
5
  SHA512:
6
- metadata.gz: bf09b9e297e8db93abff0c1e4570eacdef522f2db65b53380f0399e57c20d55bcb6379796313582d76bac44102fed8fa878ce8c66db4832e85de586727694063
7
- data.tar.gz: 42b0ec28835f1fcd05e346e3d8afec257556eefc457d4fc0cffbc95b6e94b1bb083ae22d574ea94c1c29c4a31a3d3aa5e32aa76b0954057a77558daa17ca4a0f
6
+ metadata.gz: 5cdcb74f7433581eab266e6cb3d37d4e996dd27955912b3275164d2afb51cae65f6805440714b111ea1c1b569cfca4da54d2b3bc295578b66fb4a5f49fac5bf7
7
+ data.tar.gz: 88e25859ee8e8f26f87e3dd34fae92e61f8690508f70c69b8154d55fbe6a141fb528e439da06f3769abf01c6a88b1c5233719de9c9c01d5641c95f68cbc930da
@@ -0,0 +1,10 @@
1
+ # Change Log
2
+
3
+ ## [0.1.5] - 2018/09/05
4
+
5
+ ### CHANGED
6
+
7
+ Fixed 2 issues, thanks to rnanba.
8
+
9
+ - https://github.com/lyokato/ruby-atomutil/issues/2
10
+ - https://github.com/lyokato/ruby-atomutil/issues/3
data/Gemfile CHANGED
@@ -7,7 +7,8 @@ source "http://rubygems.org"
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
9
  gem "rspec", "~> 2.4.0"
10
- gem "bundler", "~> 1.0.0"
11
- gem "jeweler", "~> 1.5.2"
12
- gem "rcov", ">= 0"
10
+ gem "bundler", "~> 1.16.1"
11
+ gem "jeweler", "~> 2.3.9"
13
12
  end
13
+
14
+ gem 'rake', '< 11.0'
@@ -1,14 +1,52 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.4.0)
5
+ builder (3.2.3)
6
+ descendants_tracker (0.0.4)
7
+ thread_safe (~> 0.3, >= 0.3.1)
4
8
  diff-lcs (1.1.2)
5
- git (1.2.5)
6
- jeweler (1.5.2)
7
- bundler (~> 1.0.0)
9
+ faraday (0.9.2)
10
+ multipart-post (>= 1.2, < 3)
11
+ git (1.5.0)
12
+ github_api (0.16.0)
13
+ addressable (~> 2.4.0)
14
+ descendants_tracker (~> 0.0.4)
15
+ faraday (~> 0.8, < 0.10)
16
+ hashie (>= 3.4)
17
+ mime-types (>= 1.16, < 3.0)
18
+ oauth2 (~> 1.0)
19
+ hashie (3.6.0)
20
+ highline (2.0.0)
21
+ jeweler (2.3.9)
22
+ builder
23
+ bundler
8
24
  git (>= 1.2.5)
25
+ github_api (~> 0.16.0)
26
+ highline (>= 1.6.15)
27
+ nokogiri (>= 1.5.10)
28
+ psych
9
29
  rake
10
- rake (0.9.2)
11
- rcov (0.9.9)
30
+ rdoc
31
+ semver2
32
+ jwt (1.5.6)
33
+ mime-types (2.99.3)
34
+ mini_portile2 (2.3.0)
35
+ multi_json (1.13.1)
36
+ multi_xml (0.6.0)
37
+ multipart-post (2.0.0)
38
+ nokogiri (1.8.4)
39
+ mini_portile2 (~> 2.3.0)
40
+ oauth2 (1.4.0)
41
+ faraday (>= 0.8, < 0.13)
42
+ jwt (~> 1.0)
43
+ multi_json (~> 1.3)
44
+ multi_xml (~> 0.5)
45
+ rack (>= 1.2, < 3)
46
+ psych (3.0.2)
47
+ rack (2.0.5)
48
+ rake (10.5.0)
49
+ rdoc (6.0.4)
12
50
  rspec (2.4.0)
13
51
  rspec-core (~> 2.4.0)
14
52
  rspec-expectations (~> 2.4.0)
@@ -17,12 +55,17 @@ GEM
17
55
  rspec-expectations (2.4.0)
18
56
  diff-lcs (~> 1.1.2)
19
57
  rspec-mocks (2.4.0)
58
+ semver2 (3.4.2)
59
+ thread_safe (0.3.6)
20
60
 
21
61
  PLATFORMS
22
62
  ruby
23
63
 
24
64
  DEPENDENCIES
25
- bundler (~> 1.0.0)
26
- jeweler (~> 1.5.2)
27
- rcov
65
+ bundler (~> 1.16.1)
66
+ jeweler (~> 2.3.9)
67
+ rake (< 11.0)
28
68
  rspec (~> 2.4.0)
69
+
70
+ BUNDLED WITH
71
+ 1.16.1
data/Rakefile CHANGED
@@ -32,15 +32,10 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
32
32
  spec.pattern = FileList['spec/**/*_spec.rb']
33
33
  end
34
34
 
35
- RSpec::Core::RakeTask.new(:rcov) do |spec|
36
- spec.pattern = 'spec/**/*_spec.rb'
37
- spec.rcov = true
38
- end
39
-
40
35
  task :default => :spec
41
36
 
42
- require 'rake/rdoctask'
43
- Rake::RDocTask.new do |rdoc|
37
+ require 'rdoc/task'
38
+ RDoc::Task.new do |rdoc|
44
39
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
40
 
46
41
  rdoc.rdoc_dir = 'rdoc'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
@@ -2,22 +2,25 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: atomutil 0.1.5 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
- s.name = "atomutil"
8
- s.version = "0.1.4"
8
+ s.name = "atomutil".freeze
9
+ s.version = "0.1.5"
9
10
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["lyokato"]
12
- s.date = "2011-09-29"
13
- s.description = "This library allows your to handle AtomPub and Atom Feed easily"
14
- s.email = "lyo.kato@gmail.com"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["lyokato".freeze]
14
+ s.date = "2018-09-04"
15
+ s.description = "This library allows your to handle AtomPub and Atom Feed easily".freeze
16
+ s.email = "lyo.kato@gmail.com".freeze
15
17
  s.extra_rdoc_files = [
16
18
  "README.rdoc"
17
19
  ]
18
20
  s.files = [
19
21
  ".document",
20
22
  ".rspec",
23
+ "CHANGELOG.md",
21
24
  "Gemfile",
22
25
  "Gemfile.lock",
23
26
  "License.txt",
@@ -40,44 +43,30 @@ Gem::Specification.new do |s|
40
43
  "spec/spec_helper.rb",
41
44
  "spec/threading_spec.rb"
42
45
  ]
43
- s.homepage = "http://github.com/lyokato/ruby-atomutil"
44
- s.licenses = ["MIT"]
45
- s.require_paths = ["lib"]
46
- s.rubygems_version = "1.8.10"
47
- s.summary = "Ruby AtomPub Client"
48
- s.test_files = [
49
- "spec/categories_spec.rb",
50
- "spec/category_spec.rb",
51
- "spec/content_spec.rb",
52
- "spec/customfeed_spec.rb",
53
- "spec/feed_spec.rb",
54
- "spec/link_spec.rb",
55
- "spec/namespace_spec.rb",
56
- "spec/opensearch_spec.rb",
57
- "spec/person_spec.rb",
58
- "spec/spec_helper.rb",
59
- "spec/threading_spec.rb"
60
- ]
46
+ s.homepage = "http://github.com/lyokato/ruby-atomutil".freeze
47
+ s.licenses = ["MIT".freeze]
48
+ s.rubygems_version = "2.7.6".freeze
49
+ s.summary = "Ruby AtomPub Client".freeze
61
50
 
62
51
  if s.respond_to? :specification_version then
63
- s.specification_version = 3
52
+ s.specification_version = 4
64
53
 
65
54
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
66
- s.add_development_dependency(%q<rspec>, ["~> 2.4.0"])
67
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
68
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
69
- s.add_development_dependency(%q<rcov>, [">= 0"])
55
+ s.add_runtime_dependency(%q<rake>.freeze, ["< 11.0"])
56
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 2.4.0"])
57
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.16.1"])
58
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
70
59
  else
71
- s.add_dependency(%q<rspec>, ["~> 2.4.0"])
72
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
73
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
74
- s.add_dependency(%q<rcov>, [">= 0"])
60
+ s.add_dependency(%q<rake>.freeze, ["< 11.0"])
61
+ s.add_dependency(%q<rspec>.freeze, ["~> 2.4.0"])
62
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.16.1"])
63
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
75
64
  end
76
65
  else
77
- s.add_dependency(%q<rspec>, ["~> 2.4.0"])
78
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
79
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
80
- s.add_dependency(%q<rcov>, [">= 0"])
66
+ s.add_dependency(%q<rake>.freeze, ["< 11.0"])
67
+ s.add_dependency(%q<rspec>.freeze, ["~> 2.4.0"])
68
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.16.1"])
69
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
81
70
  end
82
71
  end
83
72
 
@@ -1,24 +1,24 @@
1
1
  #--
2
2
  # Copyright (C) 2007 Lyo Kato, <lyo.kato _at_ gmail.com>.
3
3
  #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
11
  #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #
23
23
  # This package allows you to handle AtomPub and Atom Syndication Format easily.
24
24
  # This is just a porting for Perl's great libraries, XML::Atom, XML::Atom::Service,
@@ -55,7 +55,7 @@ module AtomUtil
55
55
  module VERSION#:nodoc:
56
56
  MAJOR = 0
57
57
  MINOR = 1
58
- TINY = 4
58
+ TINY = 5
59
59
  STRING = [MAJOR, MINOR, TINY].join('.')
60
60
  end
61
61
  end
@@ -216,7 +216,7 @@ module Atom
216
216
  return false unless value.type == @type
217
217
  return true if value.subtype == '*'
218
218
  return false unless value.subtype == @subtype
219
- return true if value.parameters.nil? || @parameters.nil?
219
+ return true if value.parameters.nil? || @parameters.nil?
220
220
  return value.parameters == @parameters
221
221
  end
222
222
  SERVICE = self.new 'application/atomsvc+xml'
@@ -254,7 +254,7 @@ module Atom
254
254
  @element_ns = nil
255
255
  def self.element_ns(ns=nil)
256
256
  unless ns.nil?
257
- @element_ns = ns.is_a?(Namespace) ? ns : Namespace.new(:uri => ns)
257
+ @element_ns = ns.is_a?(Namespace) ? ns : Namespace.new(:uri => ns)
258
258
  end
259
259
  @element_ns
260
260
  end
@@ -359,7 +359,7 @@ module Atom
359
359
  name.tr!('-', '_')
360
360
  unless moniker.nil?
361
361
  moniker = moniker.to_s
362
- moniker.tr!('-', '_')
362
+ moniker.tr!('-', '_')
363
363
  end
364
364
  elem_ns = element_ns || ns
365
365
  class_eval(<<-EOS, __FILE__, __LINE__)
@@ -396,7 +396,7 @@ module Atom
396
396
  name.tr!('-', '_')
397
397
  unless moniker.nil?
398
398
  moniker = moniker.to_s
399
- moniker.tr!('-', '_')
399
+ moniker.tr!('-', '_')
400
400
  end
401
401
  elem_ns = ext_class.element_ns || ns
402
402
  class_eval(<<-EOS, __FILE__, __LINE__)
@@ -523,7 +523,11 @@ module Atom
523
523
  element.add_attribute a
524
524
  end
525
525
  end
526
- element.text = value.elem.text unless value.elem.text.nil?
526
+ #element.text = value.elem.text unless value.elem.text.nil?
527
+ text = value.elem.get_text
528
+ unless text.nil?
529
+ element.text = REXML::Text.new(text.to_s, true, nil, true)
530
+ end
527
531
  else
528
532
  if value.is_a?(REXML::Element)
529
533
  element.add_element value.deep_clone
@@ -564,7 +568,7 @@ module Atom
564
568
  def get_object(ns, element_name, ext_class)
565
569
  elements = getlist(ns, element_name)
566
570
  return nil if elements.empty?
567
- ext_class.new(:namespace => ns, :elem => elements.first)
571
+ ext_class.new(:namespace => ns, :elem => elements.first)
568
572
  end
569
573
  # Get all indicated elements as an object of the class you passed as thrid argument.
570
574
  #
@@ -576,7 +580,7 @@ module Atom
576
580
  elements = getlist(ns, element_name)
577
581
  return [] if elements.empty?
578
582
  elements.collect do |e|
579
- ext_class.new(:namespace => ns, :elem => e)
583
+ ext_class.new(:namespace => ns, :elem => e)
580
584
  end
581
585
  end
582
586
  # Get attribute value for indicated key
@@ -754,23 +758,8 @@ module Atom
754
758
 
755
759
  def body=(value)
756
760
 
757
- if value =~ Regexp.new("^(?:
758
- [[:print:]]
759
- |[\xc0-\xdf][\x80-\xbf]
760
- |[\xe0-\xef][\x80-\xbf]{2}
761
- |[\xf0-\xf7][\x80-\xbf]{3}
762
- |[\xf8-\xfb][\x80-\xbf]{4}
763
- |[\xfc-\xfd][\x80-\xbf]{5}
764
- )*$", Regexp::EXTENDED, 'n')
765
- #if value =~ /^(?:
766
- # [[:print:]]
767
- # |[\xc0-\xdf][\x80-\xbf]
768
- # |[\xe0-\xef][\x80-\xbf]{2}
769
- # |[\xf0-\xf7][\x80-\xbf]{3}
770
- # |[\xf8-\xfb][\x80-\xbf]{4}
771
- # |[\xfc-\xfd][\x80-\xbf]{5}
772
- # )*$/x
773
- copy = "<div xmlns=\"http://www.w3.org/1999/xhtml\">#{value}</div>"
761
+ if is_utf8?(value)
762
+ copy = "<div xmlns=\"http://www.w3.org/1999/xhtml\">#{value}</div>"
774
763
  is_valid = true
775
764
  begin
776
765
  node = REXML::Document.new(copy).elements[1][0]
@@ -819,6 +808,20 @@ module Atom
819
808
  end
820
809
  @body
821
810
  end
811
+
812
+ private
813
+
814
+ def is_utf8?(str)
815
+ case str.encoding
816
+ when Encoding::UTF_8
817
+ str.valid_encoding?
818
+ when Encoding::ASCII_8BIT, Encoding::US_ASCII
819
+ str.dup.force_encoding(Encoding::UTF_8).valid_encoding?
820
+ else
821
+ false
822
+ end
823
+ end
824
+
822
825
  end
823
826
 
824
827
  class RootElement < Element
@@ -1100,7 +1103,7 @@ module Atom
1100
1103
  gen = gen.is_a?(Generator) ? gen : Generator.new(:name => gen)
1101
1104
  set(Namespace::ATOM, 'generator', gen)
1102
1105
  end
1103
-
1106
+
1104
1107
  def language
1105
1108
  @elem.attributes['xml:lang']
1106
1109
  end
@@ -1229,7 +1232,7 @@ module Atompub
1229
1232
  return true if @collection.nil?
1230
1233
  if @accepts.nil?
1231
1234
  @accepts = @collection.accepts.collect do |accept|
1232
- accept.text.split(/[\s,]+/)
1235
+ accept.text.split(/[\s,]+/)
1233
1236
  end.flatten
1234
1237
  @accepts << Atom::MediaType::ENTRY if @accepts.empty?
1235
1238
  end
@@ -1269,7 +1272,7 @@ module Atompub
1269
1272
  collection.accepts.each { |a| coll.add_accept a.text }
1270
1273
  collection.categories_list.each do |cats|
1271
1274
  unless cats.nil?
1272
- new_cats = cats.href.nil?? clone_categories(cats) : get_categories(cats.href, client)
1275
+ new_cats = cats.href.nil?? clone_categories(cats) : get_categories(cats.href, client)
1273
1276
  coll.categories = new_cats unless new_cats.nil?
1274
1277
  end
1275
1278
  end
@@ -1352,8 +1355,8 @@ module Atompub
1352
1355
  @rc = Atom::Service.new :stream => @res.body
1353
1356
  @rc.workspaces.each do |workspace|
1354
1357
  workspace.collections.each do |collection|
1355
- #@service_info.put(collection.href, collection, self)
1356
- @service_info.put(collection.href, collection)
1358
+ #@service_info.put(collection.href, collection, self)
1359
+ @service_info.put(collection.href, collection)
1357
1360
  end
1358
1361
  end
1359
1362
  end
@@ -1490,7 +1493,7 @@ module Atompub
1490
1493
  # client.delete_entry(entry.edit_link)
1491
1494
  #
1492
1495
  def delete_entry(edit_uri)
1493
- delete_resource(edit_uri)
1496
+ delete_resource(edit_uri)
1494
1497
  end
1495
1498
  # Delete media
1496
1499
  #
@@ -1506,7 +1509,7 @@ module Atompub
1506
1509
  # Set request headers those are required on each request accessing resources.
1507
1510
  def set_common_info(req)
1508
1511
  req['User-Agent'] = @agent
1509
- @auth.authorize(req)
1512
+ @auth.authorize(req)
1510
1513
  end
1511
1514
  # Get contents, for example, service-document, categories, and feed.
1512
1515
  def get_contents_except_resources(uri, &block)
@@ -1671,7 +1674,7 @@ module Atompub
1671
1674
  # initializer
1672
1675
  #
1673
1676
  # Set two parameters as hash
1674
- # * username
1677
+ # * username
1675
1678
  # * password
1676
1679
  #
1677
1680
  # Usage:
@@ -1714,7 +1717,7 @@ module Atompub
1714
1717
  # initializer
1715
1718
  #
1716
1719
  # Set two parameters as hash
1717
- # * username
1720
+ # * username
1718
1721
  # * password
1719
1722
  #
1720
1723
  # Usage:
@@ -1,5 +1,16 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
+ require 'base64'
4
+
5
+ describe Atom::Entry, "setter/getter and building xml" do
6
+
7
+ it "should escape body collectly" do
8
+ entry = Atom::Entry.new
9
+ entry.content = "&lt;br&gt;"
10
+ entry.to_s.should == "<?xml version='1.0' encoding='UTF-8'?><entry xmlns='http://www.w3.org/2005/Atom'><content type='text'>&amp;lt;br&amp;gt;</content></entry>"
11
+ end
12
+ end
13
+
3
14
  describe Atom::Content, "setter/getter and building xml" do
4
15
 
5
16
  it "should set and get type" do
@@ -30,6 +41,14 @@ describe Atom::Content, "setter/getter and building xml" do
30
41
  content.type.should == 'foo/bar'
31
42
  end
32
43
 
44
+ it "should handle UTF-8 text body collectly" do
45
+ content = Atom::Content.new
46
+ content.body = 'こんにちは'
47
+ content.body.should == 'こんにちは'
48
+ content.type = 'foo/bar'
49
+ content.type.should == 'foo/bar'
50
+ end
51
+
33
52
  it "should handle xhtml body collectly" do
34
53
  content = Atom::Content.new
35
54
  content.body = '<p>This is a test with XHTML</p>'
@@ -45,11 +64,205 @@ describe Atom::Content, "setter/getter and building xml" do
45
64
  end
46
65
 
47
66
  it "should handle image data collectly" do
67
+ img_b64 = <<EOF;
68
+ /9j/4AAQSkZJRgABAQAAkACQAAD/4QCARXhpZgAATU0AKgAAAAgABQESAAMA
69
+ AAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdp
70
+ AAQAAAABAAAAWgAAAAAAAACQAAAAAQAAAJAAAAABAAKgAgAEAAAAAQAAAGSg
71
+ AwAEAAAAAQAAAGQAAAAA/+EJIWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu
72
+ MC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6
73
+ TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRh
74
+ LyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPiA8cmRmOlJERiB4bWxuczpy
75
+ ZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1u
76
+ cyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+IDwvcmRmOlJE
77
+ Rj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
78
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
79
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
80
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
81
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
82
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
83
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
84
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
85
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
86
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
87
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
88
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
89
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
90
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
91
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
92
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
93
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
94
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
95
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
96
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
97
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
98
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
99
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
100
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
101
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
102
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
103
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
104
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
105
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
106
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
107
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
108
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
109
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
110
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
111
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
112
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
113
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
114
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
115
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
116
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
117
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
118
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
119
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
120
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
121
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
122
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFj
123
+ a2V0IGVuZD0idyI/PgD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4
124
+ QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IM5ElDQ19QUk9GSUxFAAEB
125
+ AAAM1GFwcGwCEAAAbW50clJHQiBYWVogB+IAAQAKAAAAIwAVYWNzcEFQUEwA
126
+ AAAAQVBQTAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAA
127
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARZGVz
128
+ YwAAAVAAAABiZHNjbQAAAbQAAAG8Y3BydAAAA3AAAAAjd3RwdAAAA5QAAAAU
129
+ clhZWgAAA6gAAAAUZ1hZWgAAA7wAAAAUYlhZWgAAA9AAAAAUclRSQwAAA+QA
130
+ AAgMYWFyZwAAC/AAAAAgdmNndAAADBAAAAAwbmRpbgAADEAAAAA+Y2hhZAAA
131
+ DIAAAAAsbW1vZAAADKwAAAAoYlRSQwAAA+QAAAgMZ1RSQwAAA+QAAAgMYWFi
132
+ ZwAAC/AAAAAgYWFnZwAAC/AAAAAgZGVzYwAAAAAAAAAIRGlzcGxheQAAAAAA
133
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
134
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAIwAA
135
+ AAxockhSAAAACAAAAbRrb0tSAAAACAAAAbRuYk5PAAAACAAAAbRpZAAAAAAA
136
+ CAAAAbRodUhVAAAACAAAAbRjc0NaAAAACAAAAbRkYURLAAAACAAAAbR1a1VB
137
+ AAAACAAAAbRhcgAAAAAACAAAAbR6aFRXAAAACAAAAbRyb1JPAAAACAAAAbRu
138
+ bE5MAAAACAAAAbRoZUlMAAAACAAAAbRlc0VTAAAACAAAAbRmaUZJAAAACAAA
139
+ AbRpdElUAAAACAAAAbR2aVZOAAAACAAAAbRza1NLAAAACAAAAbR6aENOAAAA
140
+ CAAAAbRydVJVAAAACAAAAbRtcwAAAAAACAAAAbRmckZSAAAACAAAAbRoaUlO
141
+ AAAACAAAAbR0aFRIAAAACAAAAbRjYUVTAAAACAAAAbRlc1hMAAAACAAAAbRk
142
+ ZURFAAAACAAAAbRlblVTAAAACAAAAbRwdEJSAAAACAAAAbRwbFBMAAAACAAA
143
+ AbRlbEdSAAAACAAAAbRzdlNFAAAACAAAAbR0clRSAAAACAAAAbRqYUpQAAAA
144
+ CAAAAbRwdFBUAAAACAAAAbQAaQBNAGEAY3RleHQAAAAAQ29weXJpZ2h0IEFw
145
+ cGxlIEluYy4sIDIwMTgAAFhZWiAAAAAAAADwzwABAAAAARkRWFlaIAAAAAAA
146
+ AIXsAAA+t////7ZYWVogAAAAAAAASbUAALIwAAALNlhZWiAAAAAAAAAnNAAA
147
+ DxkAAMhBY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA2ADsA
148
+ QABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKMAqACt
149
+ ALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUB
150
+ KwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJ
151
+ AdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4C
152
+ mAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOK
153
+ A5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgE
154
+ tgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYG
155
+ BhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YH
156
+ mQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglP
157
+ CWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkL
158
+ UQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10
159
+ DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P
160
+ 7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKE
161
+ EqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYV
162
+ eBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiK
163
+ GK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9oc
164
+ AhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+U
165
+ H78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2Yj
166
+ lCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneier
167
+ J9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUs
168
+ OSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDb
169
+ MRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1
170
+ /TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zst
171
+ O2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA
172
+ 50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0ar
173
+ RvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpN
174
+ Ak1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1Nf
175
+ U6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4Wgda
176
+ VlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFP
177
+ YaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo
178
+ 7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CG
179
+ cOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54
180
+ zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEK
181
+ gWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ
182
+ /opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLj
183
+ k02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByc
184
+ iZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYa
185
+ poum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACw
186
+ dbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1
187
+ uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvF
188
+ yMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC6
189
+ 0TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXc
190
+ it0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy
191
+ 6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0
192
+ wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9wYXJh
193
+ AAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW3ZjZ3QAAAAAAAAAAQABAAAA
194
+ AAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAAAAAAEAAG5kaW4AAAAAAAAANgAA
195
+ rgAAAFIAAABBgAAAskAAACYAAAAOAAAAT0AAAFRAAAIzMwACMzMAAjMzAAAA
196
+ AAAAAABzZjMyAAAAAAABDqsAAAch///ybwAACW8AAPxH///7UP///ZwAAAPU
197
+ AAC+6G1tb2QAAAAAAAAGEAAArhNoYy5F0v6AgAAAAAAAAAAAAAAAAAAAAAD/
198
+ wAARCABkAGQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQF
199
+ BgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
200
+ FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI
201
+ SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKj
202
+ pKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
203
+ 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
204
+ tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB
205
+ CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldY
206
+ WVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmq
207
+ srO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6
208
+ /9sAQwACAgICAgIDAgIDBAMDAwQFBAQEBAUHBQUFBQUHCAcHBwcHBwgICAgI
209
+ CAgICgoKCgoKCwsLCwsNDQ0NDQ0NDQ0N/9sAQwECAgIDAwMGAwMGDQkHCQ0N
210
+ DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0N
211
+ DQ0N/90ABAAH/9oADAMBAAIRAxEAPwD+f+iiigAooooAKKKKACiiigAooooA
212
+ KKKKACiiigD/0P5/6KKKACiium8IeD/EHjrXrfw34atWur24PAHCRoPvSSN0
213
+ VF7k/QZJAIa0KFStUjSoxcpN2SWrbfRHM13Phz4Z/EDxcizeHPD+oX0LdJ0g
214
+ YQH/ALasAn/j1fpL8Lf2YvA3gOGG/wBehj8Qa0AGae5TdbQtjpDC2V4PR3Bb
215
+ uNvSvpVVVFCqAABgAcAAVDn2P3HIPBSvWpqrm1bkv9mNm/nLZP0T9T8hP+GZ
216
+ fjh5fm/8Iy+3rj7ZZ7v++fPz+lcB4j+GfxA8Io03iPw/qFjCvWd4GMA/7aqC
217
+ n/j1ft3SMqupVgCCMEHkEGp52fR4nwQyuULYfEVIy7vlkvuSj+Z+BlFfq78U
218
+ v2YvA3jyGa/0GGPw/rRBZZrZNttM3pNCuF5PV0Abud3SvzI8X+D/ABB4F164
219
+ 8N+JbVrW9tzyDykiH7skbdGRuxH0OCCBopJn4xxZwNmOQTTxK5qb2mtvR9n5
220
+ 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
258
+ EOF
259
+
260
+ img = Base64.decode64(img_b64)
48
261
  content = Atom::Content.new
49
262
  content.type = 'image/jpeg'
50
- content.body = "\xff\xde\xde\xde"
263
+ content.body = img
51
264
  content.type.should == 'image/jpeg'
52
- content.body.should == "\xff\xde\xde\xde"
265
+ content.body.should == img
53
266
  end
54
267
 
55
268
  end
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atomutil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - lyokato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2011-09-29 00:00:00.000000000 Z
11
+ date: 2018-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "<"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.0
20
- type: :development
19
+ version: '11.0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "<"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.4.0
26
+ version: '11.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0
33
+ version: 2.4.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0
40
+ version: 2.4.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: jeweler
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.5.2
47
+ version: 1.16.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.5.2
54
+ version: 1.16.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: rcov
56
+ name: jeweler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 2.3.9
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 2.3.9
69
69
  description: This library allows your to handle AtomPub and Atom Feed easily
70
70
  email: lyo.kato@gmail.com
71
71
  executables: []
@@ -73,8 +73,9 @@ extensions: []
73
73
  extra_rdoc_files:
74
74
  - README.rdoc
75
75
  files:
76
- - .document
77
- - .rspec
76
+ - ".document"
77
+ - ".rspec"
78
+ - CHANGELOG.md
78
79
  - Gemfile
79
80
  - Gemfile.lock
80
81
  - License.txt
@@ -106,29 +107,18 @@ require_paths:
106
107
  - lib
107
108
  required_ruby_version: !ruby/object:Gem::Requirement
108
109
  requirements:
109
- - - '>='
110
+ - - ">="
110
111
  - !ruby/object:Gem::Version
111
112
  version: '0'
112
113
  required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  requirements:
114
- - - '>='
115
+ - - ">="
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
117
118
  requirements: []
118
119
  rubyforge_project:
119
- rubygems_version: 2.0.0
120
+ rubygems_version: 2.7.6
120
121
  signing_key:
121
- specification_version: 3
122
+ specification_version: 4
122
123
  summary: Ruby AtomPub Client
123
- test_files:
124
- - spec/categories_spec.rb
125
- - spec/category_spec.rb
126
- - spec/content_spec.rb
127
- - spec/customfeed_spec.rb
128
- - spec/feed_spec.rb
129
- - spec/link_spec.rb
130
- - spec/namespace_spec.rb
131
- - spec/opensearch_spec.rb
132
- - spec/person_spec.rb
133
- - spec/spec_helper.rb
134
- - spec/threading_spec.rb
124
+ test_files: []