mtif 0.0.1 → 0.0.2

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: 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: