feedtxt 1.0.0 → 1.0.1

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
2
  SHA1:
3
- metadata.gz: a63195357fa98e1b02d6513762ae80282a69fda1
4
- data.tar.gz: 6d95a5daca55ba51b167689c19cad486259ca9ca
3
+ metadata.gz: d789a406ff8c3b40a8796526c335f417b1d7bef7
4
+ data.tar.gz: bbb14f11154e100c1cf35df74d96de005d922bc8
5
5
  SHA512:
6
- metadata.gz: e261cd043984b29ff7ed8532939a972f9e1738142477c5ab025017a13cc96f799a0f96f942d1d9a9a815c1332066ec6ef6f0b263028066f717415b785d085b62
7
- data.tar.gz: c3bed556bd29fd1379ecd703422b1d7f427e6c57723f0b87f755331dfd1580a0d71cc44cefc4b11595c266c1b68db8513c44d36440ceb3eff42c74514bd736eb
6
+ metadata.gz: d6989519e169db7a4b8cbb24ce8fad4529934627ce196c262e777c42b11fcbfd4aaff20cc8d42131abe46b47a8ba572129462b59ba027358fe5394261f92909b
7
+ data.tar.gz: 94ee18c107eb40be036311b89219cf5662fc94aa66453e44b405d7ad1d2993fc0893daacd1eaccef05c775467bcfe65a1f75655cd891280c3b6c1e70c5bb8951
data/README.md CHANGED
@@ -207,6 +207,36 @@ item_content
207
207
  Note: Feed.TXT supports alternative formats / styles for meta data blocks.
208
208
  For now YAML, JSON and INI style
209
209
  are built-in and shipping with the `feedtxt` gem.
210
+ To use a format-specific parser use:
211
+
212
+ - `Feedtxt::YAML.parse`
213
+ - `Feedtxt::JSON.parse`
214
+ - `Feedtxt::INI.parse`
215
+
216
+ Note: `Feedtxt.parse` will handle all formats auto-magically,
217
+ that is, it will check the text for the best matching (first)
218
+ feed begin marker
219
+ to find out what meta data format parser to use:
220
+
221
+ | Format | `FEED_BEGIN` |
222
+ |--------|--------------|
223
+ | YAML | `\|>>>` |
224
+ | JSON | `\|{` |
225
+ | INI | `[>>>` |
226
+
227
+
228
+ Or use the built-in text pattern (regular expression)
229
+ constants to find out:
230
+
231
+ ``` ruby
232
+ Feedtxt::YAML::FEED_BEGIN
233
+ # => "^[ ]*\\|>>>+[ ]*$"
234
+ Feedtxt::JSON::FEED_BEGIN
235
+ # => "^[ ]*\\|{+[ ]*$"
236
+ Feedtxt::INI::FEED_BEGIN
237
+ # => "^[ ]*\\[>>>+[ ]*$"
238
+ ```
239
+
210
240
 
211
241
 
212
242
  ### JSON Example
@@ -257,6 +287,26 @@ Hello, world!
257
287
  <<<]
258
288
  ```
259
289
 
290
+ or
291
+
292
+ ```
293
+ [>>>
294
+ title: My Example Feed
295
+ home_page_url: https://example.org/
296
+ feed_url: https://example.org/feed.txt
297
+ </>
298
+ id: 2
299
+ url: https://example.org/second-item
300
+ ---
301
+ This is a second item.
302
+ </>
303
+ id: 1
304
+ url: https://example.org/initial-post
305
+ ---
306
+ Hello, world!
307
+ <<<]
308
+ ```
309
+
260
310
  (Source: [`feeds/spec/example.ini.txt`](https://github.com/feedtxt/feedtxt/blob/master/test/feeds/spec/example.ini.txt))
261
311
 
262
312
 
@@ -33,6 +33,10 @@ module Feedtxt
33
33
  def self.parse( text, opts={} )
34
34
  Parser.parse( text, )
35
35
  end
36
+
37
+ INI = IniParser ## note: add a shortcut; lets you use Feedtxt::INI.parse
38
+ YAML = YamlParser ## note: add a shortcut; lets you use Feedtxt::YAML.parse
39
+ JSON = JsonParser ## note: add a shortcut; lets you use Feedttxt::JSON.parse
36
40
  end
37
41
 
38
42
 
@@ -23,25 +23,25 @@ class Parser
23
23
  ## auto-detect format
24
24
  ## use "best" matching format (e.g. first match by pos(ition))
25
25
 
26
- klass = YamlParser ## default to yamlparser for now
27
- pos = 9999999 ## todo:use MAX INTEGER or something!!
26
+ klass = YAML ## default to yamlparser for now
27
+ pos = 9_999_999 ## todo:use MAX INTEGER or something!!
28
28
 
29
- json = @text.index( /#{JsonParser::FEED_BEGIN}/ )
29
+ json = @text.index( /#{JSON::FEED_BEGIN}/ )
30
30
  if json # found e.g. not nil? incl. 0
31
31
  pos = json
32
- klass = JsonParser
32
+ klass = JSON
33
33
  end
34
34
 
35
- ini = @text.index( /#{IniParser::FEED_BEGIN}/ )
35
+ ini = @text.index( /#{INI::FEED_BEGIN}/ )
36
36
  if ini && ini < pos # found e.g. not nil? and match before last?
37
37
  pos = ini
38
- klass = IniParser
38
+ klass = INI
39
39
  end
40
40
 
41
- yaml = @text.index( /#{YamlParser::FEED_BEGIN}/ )
41
+ yaml = @text.index( /#{YAML::FEED_BEGIN}/ )
42
42
  if yaml && yaml < pos # found e.g. not nil? and match before last?
43
43
  pos = yaml
44
- klass = YamlParser
44
+ klass = YAML
45
45
  end
46
46
 
47
47
  feed = klass.parse( @text )
@@ -75,7 +75,7 @@ class IniParser
75
75
  ## 1st block is feed meta data
76
76
  block1st = blocks.shift ## get/remove 1st block from blocks
77
77
  block1st = block1st.strip ## strip leading and trailing whitespace
78
- feed_metadata = INI.load( block1st )
78
+ feed_metadata = ::INI.load( block1st )
79
79
 
80
80
  feed_items = []
81
81
  blocks.each do |block|
@@ -87,7 +87,7 @@ class IniParser
87
87
 
88
88
  item_metadata = s2.scan_until( /(?=#{FEED_META})/ )
89
89
  item_metadata = item_metadata.strip # remove leading and trailing whitespace
90
- item_metadata = INI.load( item_metadata ) ## convert to hash with inifile parser
90
+ item_metadata = ::INI.load( item_metadata ) ## convert to hash with inifile parser
91
91
 
92
92
  feed_meta = s2.scan( /#{FEED_META}/ )
93
93
 
@@ -103,4 +103,5 @@ class IniParser
103
103
 
104
104
  end # class IniParser
105
105
 
106
+
106
107
  end # module Feedtxt
@@ -79,7 +79,7 @@ class JsonParser
79
79
  ## 1st block is feed meta data
80
80
  block1st = blocks.shift ## get/remove 1st block from blocks
81
81
  block1st = block1st.strip # remove leading and trailing whitespaces
82
- feed_metadata = JSON.parse( "{ #{block1st} }" )
82
+ feed_metadata = ::JSON.parse( "{ #{block1st} }" )
83
83
 
84
84
  feed_items = []
85
85
  blocks.each do |block|
@@ -91,7 +91,7 @@ class JsonParser
91
91
 
92
92
  item_metadata = s2.scan_until( /(?=#{FEED_META})/ )
93
93
  item_metadata = item_metadata.strip # remove leading and trailing whitespace
94
- item_metadata = JSON.parse( "{ #{item_metadata} }" ) ## convert to hash with yaml
94
+ item_metadata = ::JSON.parse( "{ #{item_metadata} }" ) ## convert to hash with yaml
95
95
 
96
96
  feed_meta = s2.scan( /#{FEED_META}/ )
97
97
 
@@ -75,7 +75,7 @@ class YamlParser
75
75
  ## 1st block is feed meta data
76
76
  block1st = blocks.shift ## get/remove 1st block from blocks
77
77
  block1st = block1st.strip ## strip leading and trailing whitespace
78
- feed_metadata = YAML.load( block1st )
78
+ feed_metadata = ::YAML.load( block1st )
79
79
 
80
80
  feed_items = []
81
81
  blocks.each do |block|
@@ -87,7 +87,7 @@ class YamlParser
87
87
 
88
88
  item_metadata = s2.scan_until( /(?=#{FEED_META})/ )
89
89
  item_metadata = item_metadata.strip # remove leading and trailing whitespace
90
- item_metadata = YAML.load( item_metadata ) ## convert to hash with yaml
90
+ item_metadata = ::YAML.load( item_metadata ) ## convert to hash with yaml
91
91
 
92
92
  feed_meta = s2.scan( /#{FEED_META}/ )
93
93
 
@@ -4,7 +4,7 @@ module Feedtxt
4
4
 
5
5
  MAJOR = 1
6
6
  MINOR = 0
7
- PATCH = 0
7
+ PATCH = 1
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
@@ -27,7 +27,7 @@ class TestIni < MiniTest::Test
27
27
  "Hello, world!"
28
28
  ]]]
29
29
 
30
- assert_equal exp, Feedtxt::IniParser.parse( text )
30
+ assert_equal exp, Feedtxt::INI.parse( text )
31
31
  assert_equal exp, Feedtxt.parse( text ) ## try shortcut alias too
32
32
  end
33
33
 
@@ -54,7 +54,7 @@ class TestIni < MiniTest::Test
54
54
  "duration_in_seconds"=>"6629"}},
55
55
  "Chris has worked at [Adobe][1] and as a founder of Rogue Sheep, which won an Apple Design Award for Postage.\nChris's new company is Aged & Distilled with Guy English - which shipped [Napkin](2),\na Mac app for visual collaboration. Chris is also the co-host of The Record.\nHe lives on [Bainbridge Island][3], a quick ferry ride from Seattle.\n\n[1]: http://adobe.com/\n[2]: http://aged-and-distilled.com/napkin/\n[3]: http://www.ci.bainbridge-isl.wa.us/"]]]
56
56
 
57
- assert_equal exp, Feedtxt::IniParser.parse( text )
57
+ assert_equal exp, Feedtxt::INI.parse( text )
58
58
  assert_equal exp, Feedtxt.parse( text ) ## try shortcut alias too
59
59
  end
60
60
 
@@ -27,7 +27,7 @@ class TestJson < MiniTest::Test
27
27
  "Hello, world!"
28
28
  ]]]
29
29
 
30
- assert_equal exp, Feedtxt::JsonParser.parse( text )
30
+ assert_equal exp, Feedtxt::JSON.parse( text )
31
31
  assert_equal exp, Feedtxt.parse( text ) ## try shortcut alias too
32
32
  end
33
33
 
@@ -55,7 +55,7 @@ class TestJson < MiniTest::Test
55
55
  "duration_in_seconds"=>6629}]},
56
56
  "Chris has worked at [Adobe][1] and as a founder of Rogue Sheep, which won an Apple Design Award for Postage.\nChris's new company is Aged & Distilled with Guy English - which shipped [Napkin](2),\na Mac app for visual collaboration. Chris is also the co-host of The Record.\nHe lives on [Bainbridge Island][3], a quick ferry ride from Seattle.\n\n[1]: http://adobe.com/\n[2]: http://aged-and-distilled.com/napkin/\n[3]: http://www.ci.bainbridge-isl.wa.us/"]]]
57
57
 
58
- assert_equal exp, Feedtxt::JsonParser.parse( text )
58
+ assert_equal exp, Feedtxt::JSON.parse( text )
59
59
  assert_equal exp, Feedtxt.parse( text ) ## try shortcut alias too
60
60
  end
61
61
 
@@ -27,7 +27,7 @@ class TestYaml < MiniTest::Test
27
27
  "Hello, world!"
28
28
  ]]]
29
29
 
30
- assert_equal exp, Feedtxt::YamlParser.parse( text )
30
+ assert_equal exp, Feedtxt::YAML.parse( text )
31
31
  assert_equal exp, Feedtxt.parse( text ) ## try shortcut alias too
32
32
  end
33
33
 
@@ -55,7 +55,7 @@ class TestYaml < MiniTest::Test
55
55
  "duration_in_seconds"=>6629}]},
56
56
  "Chris has worked at [Adobe][1] and as a founder of Rogue Sheep, which won an Apple Design Award for Postage.\nChris's new company is Aged & Distilled with Guy English - which shipped [Napkin](2),\na Mac app for visual collaboration. Chris is also the co-host of The Record.\nHe lives on [Bainbridge Island][3], a quick ferry ride from Seattle.\n\n[1]: http://adobe.com/\n[2]: http://aged-and-distilled.com/napkin/\n[3]: http://www.ci.bainbridge-isl.wa.us/"]]]
57
57
 
58
- assert_equal exp, Feedtxt::YamlParser.parse( text )
58
+ assert_equal exp, Feedtxt::YAML.parse( text )
59
59
  assert_equal exp, Feedtxt.parse( text ) ## try shortcut alias too
60
60
  end
61
61
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedtxt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-13 00:00:00.000000000 Z
11
+ date: 2017-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc