mtif 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 44c470cee7b56a046a34966a7b58929cdb0e621b
4
- data.tar.gz: a945fa44a90c6b21eca02c4e6004a42ddb85f81d
2
+ SHA256:
3
+ metadata.gz: ecef4cc75fdd2298659ea13b4b95bd4bffe17ac255dc48d95c7285fce1b09d3e
4
+ data.tar.gz: 3aca00918efdea29df349cf13e4391d260f8c4c4d6821f8d880b18d17bfc7b12
5
5
  SHA512:
6
- metadata.gz: 651394118662adddc2c3a75fa986e92c6d6512c42b6b12a0bbfd1a4a285ba081484f0ec2f25f29107f5bef57994cc7670a8f47000644f450851e1e507dd477d0
7
- data.tar.gz: ab362a64ae4119711fe172d93554a86234df3cd24be0b91390c1f5e5db5aee8d5f7bd59f8c42dc7d0ccec6dba66ab63f0807c37421fc226b23d0a0f08cf8eddc
6
+ metadata.gz: 61a8b2704956521264d34c0668654ff4d38dc697e135bfce165f535553b6d4b6e67fd1d95dff1f4848d0085013312b04e3b6ba8a8475e2717035834644e7548d
7
+ data.tar.gz: 9becf310f2aa4bed72aa9bfeff3d519e5c49356d21976e57dea3f17e859899f51ae69f19a3340b3d98fa65c6e7c9871a2f35199fabe571f8d0da888bf3ff10ba
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  *.a
14
14
  mkmf.log
15
15
  *.gem
16
+ .ruby-version
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MTIF
2
2
 
3
- A gem to read Movable Type Import Format
3
+ A gem to read Movable Type Import Format, as documented at [TypePad.org](https://movabletype.org/documentation/appendices/import-export-format.html) and also in the [Wayback Machine](https://web.archive.org/web/20210105063407/https://movabletype.org/documentation/appendices/import-export-format.html)
4
4
 
5
5
  ## Installation
6
6
 
@@ -20,10 +20,21 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
-
23
+ Boy, it'd be smart to put something here. One day I will. Or maybe you will? See "Contributing" below.
24
24
 
25
25
  ## Contributing
26
26
 
27
+ [![Build Status](https://travis-ci.org/purp/mtif.svg?branch=master)](https://travis-ci.org/purp/mtif) [![Maintainability](https://api.codeclimate.com/v1/badges/a52b50316f369a5baa8f/maintainability)](https://codeclimate.com/github/purp/mtif/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/a52b50316f369a5baa8f/test_coverage)](https://codeclimate.com/github/purp/mtif/test_coverage)
28
+
29
+ Looking to get involved but don't have a particular itch to scratch? There are plenty of other ways to help!
30
+
31
+ * A bit of documentation
32
+ * A tutorial to help someone else along
33
+ * More test coverage
34
+ * Improving the overall code health by addressing Code Climate issues
35
+
36
+ Meanwhile, you can get started the usual way:
37
+
27
38
  1. Fork it ( https://github.com/[my-github-username]/mtif/fork )
28
39
  2. Create your feature branch (`git checkout -b my-new-feature`)
29
40
  3. Commit your changes (`git commit -am 'Add some feature'`)
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
9
+ rescue LoadError
10
+ # no rspec available
11
+ end
@@ -9,12 +9,12 @@ class MTIF
9
9
  def initialize(content)
10
10
  @posts = content.slice_after(/^--------$/).map {|raw_post| MTIF::Post.new(raw_post)}
11
11
  end
12
-
12
+
13
13
  def self.load_file(filename)
14
14
  mtif_file = File.open(filename)
15
15
  mtif = MTIF.new(mtif_file.readlines)
16
16
  mtif_file.close
17
-
17
+
18
18
  mtif
19
19
  end
20
20
 
@@ -3,17 +3,19 @@ require "time"
3
3
  class MTIF
4
4
  class Post
5
5
  attr_accessor :source, :data
6
-
6
+
7
7
  SINGLE_VALUE_KEYS = %w(author title status basename date unique_url body extended_body excerpt
8
- keywords allow_comments allow_pings convert_breaks no_entry).map(&:to_sym)
9
-
8
+ keywords allow_comments allow_pings convert_breaks no_entry primary_category).map(&:to_sym)
10
9
  MULTILINE_KEYS = %w(body extended_body excerpt keywords comment ping).map(&:to_sym)
11
-
12
- MULTIVALUE_KEYS = %w(category tag comment ping).map(&:to_sym)
13
-
10
+ MULTIVALUE_KEYS = %w(category tags comment ping).map(&:to_sym)
11
+ CSV_KEYS = %w(tags).map(&:to_sym)
12
+
14
13
  VALID_KEYS = (SINGLE_VALUE_KEYS + MULTILINE_KEYS + MULTIVALUE_KEYS).sort.uniq
15
14
 
16
15
  DATE_FORMAT = "%m/%d/%Y %I:%M:%S %p"
16
+
17
+ FIELD_SEPARATOR = '-----'
18
+ POST_SEPARATOR = '--------'
17
19
 
18
20
  def valid_keys
19
21
  VALID_KEYS
@@ -42,14 +44,14 @@ class MTIF
42
44
  def initialize(content)
43
45
  @source = content
44
46
  @data = {}
45
-
47
+
46
48
  MULTIVALUE_KEYS.each do |key|
47
49
  @data[key] = []
48
50
  end
49
-
51
+
50
52
  parse_source
51
53
  end
52
-
54
+
53
55
  def to_mtif
54
56
  result = []
55
57
  single_line_single_value_keys.each do |key|
@@ -63,6 +65,14 @@ class MTIF
63
65
  values = self.send(key)
64
66
  next if values.nil? || (values.respond_to?(:empty) && values.empty?)
65
67
 
68
+ if CSV_KEYS.include?(key)
69
+ values = [
70
+ values.map{|v|
71
+ v.include?("\s") ? "\"#{v}\"" : v
72
+ }.join(',')
73
+ ]
74
+ end
75
+
66
76
  values.each do |value|
67
77
  result << "#{mtif_key(key)}: #{mtif_value(value)}"
68
78
  end
@@ -72,23 +82,23 @@ class MTIF
72
82
  value = self.send(key)
73
83
  next if value.nil? || (value.respond_to?(:empty) && value.empty?)
74
84
 
75
- result << '-----'
85
+ result << FIELD_SEPARATOR
76
86
  result << "#{mtif_key(key)}:\n#{mtif_value(value)}"
77
87
  end
78
-
88
+
79
89
  multiline_multivalue_keys.each do |key|
80
90
  values = self.send(key)
81
91
  next if values.nil? || (values.respond_to?(:empty) && values.empty?)
82
92
 
83
93
  values.each do |value|
84
- result << '-----'
94
+ result << FIELD_SEPARATOR
85
95
  result << "#{mtif_key(key)}:\n#{mtif_value(value)}"
86
96
  end
87
97
  end
88
98
 
89
99
 
90
- result << '-----' unless result.last == '-----' #close the final field
91
- result << '--------' # close the post
100
+ result << FIELD_SEPARATOR unless result.last == FIELD_SEPARATOR #close the final field
101
+ result << POST_SEPARATOR # close the post
92
102
  result.join("\n") + "\n"
93
103
  end
94
104
 
@@ -97,7 +107,7 @@ class MTIF
97
107
  key = method.to_s.chomp('=').to_sym
98
108
 
99
109
  if valid_key?(key)
100
- if key = method
110
+ if key == method
101
111
  data[key]
102
112
  else
103
113
  data[key] = args.first
@@ -116,7 +126,7 @@ class MTIF
116
126
  def mtif_key_to_key(raw_key)
117
127
  raw_key.strip.downcase.tr(' ','_').to_sym unless raw_key.nil?
118
128
  end
119
-
129
+
120
130
  def mtif_key(key)
121
131
  key.to_s.tr('_', ' ').upcase
122
132
  end
@@ -135,21 +145,27 @@ class MTIF
135
145
  raw_value
136
146
  end
137
147
  end
138
-
148
+
139
149
  def store_data(raw_key, raw_value)
140
150
  key = mtif_key_to_key(raw_key)
141
151
  value = convert_to_native_type(raw_value)
142
152
 
143
153
  if MULTIVALUE_KEYS.include?(key)
144
- self.data[key] << value unless value.empty?
154
+ if CSV_KEYS.include?(key)
155
+ value.split(',').each do |v|
156
+ self.data[key] << v.gsub(/^\"|\"$/, '') unless v.empty?
157
+ end
158
+ else
159
+ self.data[key] << value unless value.empty?
160
+ end
145
161
  else
146
162
  self.data[key] = value
147
163
  end
148
164
  end
149
165
 
150
166
  def parse_source
151
- source.slice_before(/-----/).each do |lines|
152
- if lines.first =~ /^-----/ && lines.size > 1
167
+ source.slice_before(/^#{FIELD_SEPARATOR}/).each do |lines|
168
+ if lines.first =~ /^#{FIELD_SEPARATOR}/ && lines.size > 1
153
169
  # Multiline data
154
170
  store_data(lines.shift(2).last.chomp(":\n"), lines.join.strip)
155
171
  elsif lines.first =~ /^[A-Z ]+: /
@@ -1,3 +1,3 @@
1
1
  class MTIF
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
24
  spec.add_development_dependency "simplecov"
25
25
  end
@@ -3,7 +3,7 @@ RSpec.describe MTIF::Post do
3
3
  expect(MTIF::Post.new([])).to respond_to(:source, :data)
4
4
  end
5
5
 
6
- context 'valid keys' do
6
+ describe 'class constants' do
7
7
  it 'should have a list of valid single-value keys' do
8
8
  expect(MTIF::Post).to have_constant('SINGLE_VALUE_KEYS')
9
9
  expect(MTIF::Post::SINGLE_VALUE_KEYS).not_to be_empty
@@ -27,104 +27,112 @@ RSpec.describe MTIF::Post do
27
27
  expect(MTIF::Post).to have_constant('VALID_KEYS')
28
28
  expect(MTIF::Post::VALID_KEYS).to match_array((MTIF::Post::SINGLE_VALUE_KEYS + MTIF::Post::MULTILINE_KEYS + MTIF::Post::MULTIVALUE_KEYS).uniq)
29
29
  end
30
-
31
- context 'key methods' do
32
- before :each do
33
- @post = MTIF::Post.new([])
30
+ end
31
+
32
+ describe 'instances' do
33
+ subject(:post) {MTIF::Post.new([])}
34
+
35
+ it {should respond_to(:valid_keys)}
36
+ context '#valid_keys' do
37
+ subject {post.valid_keys}
38
+
39
+ it {should == MTIF::Post::VALID_KEYS}
40
+ end
41
+
42
+ it {should respond_to(:valid_key?)}
43
+ describe '#valid_key?' do
44
+ context 'given a valid key' do
45
+ subject(:valid_key) {post.valid_keys.first}
46
+
47
+ it 'should be true' do
48
+ expect(post.valid_key?(valid_key)).to be_truthy
49
+ end
34
50
  end
35
51
 
36
- subject {@post}
37
-
38
- it {should respond_to(:valid_keys)}
39
- context '#valid_keys' do
40
- subject {@post.valid_keys}
52
+ context 'given a valid key name as a string' do
53
+ subject(:valid_key) {post.valid_keys.first.to_s}
41
54
 
42
- it {should == MTIF::Post::VALID_KEYS}
55
+ it 'should be true' do
56
+ expect(post.valid_key?(valid_key)).to be_truthy
57
+ end
43
58
  end
59
+
60
+ context 'given an invalid key' do
61
+ subject(:invalid_key) {post.valid_keys.first.to_s.reverse.to_sym}
44
62
 
45
- it {should respond_to(:valid_key?)}
46
- context '#valid_key?' do
47
- it 'should be true when valid, false otherwise' do
48
- valid_key = @post.valid_keys.first.to_sym
49
- invalid_key = valid_key.to_s.reverse.to_sym
50
-
51
- expect(@post.valid_key?(valid_key)).to be_truthy
52
- expect(@post.valid_key?(valid_key.to_s)).to be_truthy
53
- expect(@post.valid_key?(invalid_key)).to be_falsey
54
- expect(@post.valid_key?(invalid_key.to_s)).to be_falsey
63
+ it 'should be false' do
64
+ expect(post.valid_key?(invalid_key)).to be_falsey
55
65
  end
56
66
  end
67
+ end
57
68
 
58
- context 'returning lists' do
59
- it {should respond_to(:single_line_single_value_keys)}
60
- context '#single_line_single_value_keys' do
61
- subject {@post.single_line_single_value_keys}
69
+ it {should respond_to(:single_line_single_value_keys)}
70
+ describe '#single_line_single_value_keys' do
71
+ subject {post.single_line_single_value_keys}
62
72
 
63
- it {should_not include(*MTIF::Post::MULTILINE_KEYS)}
64
- it {should_not include(*MTIF::Post::MULTIVALUE_KEYS)}
65
- it {should include(*(MTIF::Post::SINGLE_VALUE_KEYS - MTIF::Post::MULTILINE_KEYS))}
66
- end
73
+ it {should_not include(*MTIF::Post::MULTILINE_KEYS)}
74
+ it {should_not include(*MTIF::Post::MULTIVALUE_KEYS)}
75
+ it {should include(*(MTIF::Post::SINGLE_VALUE_KEYS - MTIF::Post::MULTILINE_KEYS))}
76
+ end
67
77
 
68
- it {should respond_to(:single_line_multivalue_keys)}
69
- context '#single_line_multivalue_keys' do
70
- subject {@post.single_line_multivalue_keys}
78
+ it {should respond_to(:single_line_multivalue_keys)}
79
+ describe '#single_line_multivalue_keys' do
80
+ subject {post.single_line_multivalue_keys}
71
81
 
72
- it {should_not include(*MTIF::Post::MULTILINE_KEYS)}
73
- it {should_not include(*MTIF::Post::SINGLE_VALUE_KEYS)}
74
- it {should include(*(MTIF::Post::MULTIVALUE_KEYS - MTIF::Post::MULTILINE_KEYS))}
75
- end
82
+ it {should_not include(*MTIF::Post::MULTILINE_KEYS)}
83
+ it {should_not include(*MTIF::Post::SINGLE_VALUE_KEYS)}
84
+ it {should include(*(MTIF::Post::MULTIVALUE_KEYS - MTIF::Post::MULTILINE_KEYS))}
85
+ end
76
86
 
77
- it {should respond_to(:multiline_single_value_keys)}
78
- context '#multiline_single_value_keys' do
79
- subject {@post.multiline_single_value_keys}
87
+ it {should respond_to(:multiline_single_value_keys)}
88
+ describe '#multiline_single_value_keys' do
89
+ subject {post.multiline_single_value_keys}
80
90
 
81
- it {should_not include(*MTIF::Post::MULTIVALUE_KEYS)}
82
- it {should include(*(MTIF::Post::MULTILINE_KEYS & MTIF::Post::SINGLE_VALUE_KEYS))}
83
- end
91
+ it {should_not include(*MTIF::Post::MULTIVALUE_KEYS)}
92
+ it {should include(*(MTIF::Post::MULTILINE_KEYS & MTIF::Post::SINGLE_VALUE_KEYS))}
93
+ end
84
94
 
85
- it {should respond_to(:multiline_multivalue_keys)}
86
- context '#multiline_multivalue_keys' do
87
- subject {@post.multiline_multivalue_keys}
95
+ it {should respond_to(:multiline_multivalue_keys)}
96
+ describe '#multiline_multivalue_keys' do
97
+ subject {post.multiline_multivalue_keys}
88
98
 
89
- it {should_not include(*MTIF::Post::SINGLE_VALUE_KEYS)}
90
- it {should include(*(MTIF::Post::MULTILINE_KEYS & MTIF::Post::MULTIVALUE_KEYS))}
91
- end
92
- end
99
+ it {should_not include(*MTIF::Post::SINGLE_VALUE_KEYS)}
100
+ it {should include(*(MTIF::Post::MULTILINE_KEYS & MTIF::Post::MULTIVALUE_KEYS))}
93
101
  end
94
- end
95
-
96
- context 'fetching data' do
97
- subject {MTIF::Post.new([])}
98
102
 
99
- MTIF::Post::VALID_KEYS.each do |key|
100
- it {should respond_to(key)}
101
- it {should respond_to("#{key}=")}
102
- end
103
-
104
- it {should_not respond_to(:this_is_not_a_valid_key)}
105
- it {should_not respond_to(:this_is_not_a_valid_key=)}
103
+ describe '#method_missing' do
104
+ context 'acting as an attribute accessor for valid keys only' do
105
+ MTIF::Post::VALID_KEYS.each do |key|
106
+ it {should respond_to(key)}
107
+ it {should respond_to("#{key}=")}
108
+ end
106
109
 
107
- it 'should default to arrays for multivalue keys' do
108
- post = MTIF::Post.new([])
110
+ it {should_not respond_to(:this_is_not_a_valid_key)}
111
+ it {should_not respond_to(:this_is_not_a_valid_key=)}
109
112
 
110
- MTIF::Post::MULTIVALUE_KEYS.each do |key|
111
- expect(post.send(key)) == []
113
+ it 'should return arrays for multivalue keys by default' do
114
+ MTIF::Post::MULTIVALUE_KEYS.each do |key|
115
+ expect(post.send(key)) == []
116
+ end
117
+ end
112
118
  end
113
119
  end
114
120
  end
115
-
116
- context '#to_mtif' do
121
+
122
+ describe 'instances with content' do
117
123
  before :each do
118
- # TODO: refactor to remove ordering dependency
119
124
  @content = [
120
- "AUTHOR: The Meyer Kids\n",
121
- "TITLE: Crazy Parents: A Primer\n",
125
+ "AUTHOR: The ----- Meyer Kids\n",
126
+ "TITLE: Crazy Parents: -------- A Primer\n",
122
127
  "DATE: 06/19/1999 07:00:00 PM\n",
123
128
  "ALLOW COMMENTS: 0\n",
129
+ "PRIMARY CATEGORY: Fun!\n",
124
130
  "CATEGORY: Fun!\n",
131
+ "CATEGORY: More Fun!\n",
132
+ "TAGS: \"Movable Type\",foo,bar\n",
125
133
  "-----\n",
126
134
  "BODY:\n",
127
- "Start singing an obnoxious song and never stop.\n",
135
+ "Start singing an obnoxious song and ----- never ----- stop.\n",
128
136
  "-----\n",
129
137
  "COMMENT:\n",
130
138
  "AUTHOR: Jim Meyer\n",
@@ -136,14 +144,48 @@ RSpec.describe MTIF::Post do
136
144
  "-----\n",
137
145
  "--------\n"
138
146
  ]
139
-
140
- @post = MTIF::Post.new(@content)
141
147
  end
142
148
 
143
- it 'should return concise MTIF containing only keys which are set' do
144
- expect(@post).to respond_to(:to_mtif)
145
- expect(@post.to_mtif).to eq(@content.join)
149
+ subject(:post) {MTIF::Post.new(@content)}
150
+
151
+ it 'should correctly parse fields with separator text inside the field' do
152
+ expect(post.author).to eq("The ----- Meyer Kids")
153
+ expect(post.title).to eq("Crazy Parents: -------- A Primer")
154
+ expect(post.body).to eq("Start singing an obnoxious song and ----- never ----- stop.")
155
+ end
156
+
157
+ it 'should correctly parse tags as comma-separated values' do
158
+ expect(post.tags).to eq(["Movable Type","foo","bar"])
159
+ end
160
+
161
+ describe '#method_missing' do
162
+ it 'should properly update values' do
163
+ expect(post.allow_comments).not_to eq(1)
164
+ post.allow_comments = 1
165
+ expect(post.allow_comments).to eq(1)
166
+ end
146
167
  end
147
- end
148
168
 
169
+ describe '#to_mtif' do
170
+ it {should respond_to(:to_mtif)}
171
+ it 'should return concise MTIF containing only keys which are set' do
172
+ # TODO: one day this will break because the hash doesn't join in key order.
173
+ expect(post.to_mtif).to eq(@content.join)
174
+ end
175
+
176
+ it 'should include updated values' do
177
+ post.allow_comments = 1
178
+ expect(post.to_mtif).to match(/ALLOW COMMENTS: 1/)
179
+ end
180
+
181
+ it 'should convert tags to comma-separated values with proper quoting' do
182
+ expect(post.to_mtif).to match(/TAGS: "Movable Type",foo,bar/)
183
+ end
184
+
185
+ it 'should convert categories to multiple CATEGORY lines' do
186
+ expect(post.to_mtif).to match(/CATEGORY: Fun!/)
187
+ expect(post.to_mtif).to match(/CATEGORY: More Fun!/)
188
+ end
189
+ end
190
+ end
149
191
  end
@@ -6,7 +6,7 @@ RSpec.describe MTIF do
6
6
  context "#initialize" do
7
7
  context 'without content' do
8
8
  it 'should fail' do
9
- expect {MTIF.new}.to raise_error
9
+ expect {MTIF.new}.to raise_error(ArgumentError)
10
10
  end
11
11
  end
12
12
 
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mtif
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Meyer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-26 00:00:00.000000000 Z
11
+ date: 2021-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0'
20
20
  type: :development
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: '1.7'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '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: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description:
69
+ description:
70
70
  email:
71
71
  - jim@geekdaily.org
72
72
  executables: []
@@ -90,7 +90,7 @@ homepage: https://geekdaily.org/projects/mtif
90
90
  licenses:
91
91
  - MIT
92
92
  metadata: {}
93
- post_install_message:
93
+ post_install_message:
94
94
  rdoc_options: []
95
95
  require_paths:
96
96
  - lib
@@ -105,9 +105,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
108
- rubyforge_project:
109
- rubygems_version: 2.4.5
110
- signing_key:
108
+ rubygems_version: 3.2.3
109
+ signing_key:
111
110
  specification_version: 4
112
111
  summary: Read, parse, and write Movable Type Import Format files.
113
112
  test_files: