feedtxt 1.0.0 → 1.0.1

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