preproc 0.0.1 → 0.1.0

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: ff0c96dff9fae900457ec375618a44563c3cd9e7
4
- data.tar.gz: 9aee9864313c95764be72bfd825bc33ebeae7d55
3
+ metadata.gz: 010e8983d1847ac0c76197c74740339c3a8d8242
4
+ data.tar.gz: d219dec85408bcaffb072393780bc8eed62af109
5
5
  SHA512:
6
- metadata.gz: 40030d64c5d5ca4e6191f6bf75496ca3a53bbfe9787ab18ecff5f5e5ae371261dffcad9ab4a43635e55a696cb6a22c70dd63cd451d99e39bd14933ca11e5eeb0
7
- data.tar.gz: cecc2b5597007d2f03bc2da8b1bfb77189fb0bc66d5a14e2fc978b6f81556d2eb69e8ae1956e666bfa1e686f1da4785f7ae99c3c60e8cf758afe916e6cbb4777
6
+ metadata.gz: cf7a60481e2fd36a650c4c4ef8816449bd36388fd74a0faa4838b2dfab6d3fa84ee8ec7fecbc09b700867320f26d3ddae8610cd81639bbd94f4440ba7567b8bf
7
+ data.tar.gz: 5476cacabfac6632042ed5c02a4d6259c8bad143a3f845525fee70b0faa754286ceefcdac90b7e90c81cbedeb8e9f46cfbee16c1fa6607560acdffa1c183b1e5
File without changes
@@ -10,6 +10,106 @@ require 'fetcher'
10
10
  require 'preproc/version' # let version always go first
11
11
 
12
12
 
13
+
14
+ module Preproc
15
+
16
+ #############
17
+ ### todo/fix: use/find better name? - e.g. Fetcher.read_utf8!() move out of global ns etc.
18
+ ## move to Fetcher gem; (re)use!!! remove here
19
+ ### e.g. use Fetch.read_utf8!() e.g. throws exception on error
20
+ ## read_blob!()
21
+ def self.fetcher_read_utf8!( src )
22
+ worker = Fetcher::Worker.new
23
+ res = worker.get_response( src )
24
+ if res.code != '200'
25
+ puts "sorry; failed to fetch >#{src} - HTTP #{res.code} - #{res.message}"
26
+ exit 1
27
+ end
28
+
29
+ ###
30
+ # Note: Net::HTTP will NOT set encoding UTF-8 etc.
31
+ # will be set to ASCII-8BIT == BINARY == Encoding Unknown; Raw Bytes Here
32
+ # thus, set/force encoding to utf-8
33
+ txt = res.body.to_s
34
+ txt = txt.force_encoding( Encoding::UTF_8 )
35
+ txt
36
+ end
37
+
38
+
39
+ class IncludeReader
40
+
41
+ ###
42
+ ## concat files w/ @include directive
43
+ include LogUtils::Logging
44
+
45
+ def self.from_url( src )
46
+ uri = URI.parse( src )
47
+ text = Preproc.fetcher_read_utf8!( src )
48
+
49
+ base_path = uri.path[0..uri.path.rindex('/')] # get everything upto incl. last slash (/)
50
+ self.new( text, base: "#{uri.scheme}://#{uri.host}:#{uri.port}#{base_path}" )
51
+ end
52
+
53
+
54
+ def initialize( text, opts={} )
55
+ @text = text
56
+ @base = opts[:base]
57
+
58
+ logger.debug(" base: #{@base}")
59
+ end
60
+
61
+ def read
62
+ preproc( @text )
63
+ end
64
+
65
+
66
+ private
67
+ def preproc( text )
68
+ buf = ''
69
+ text.each_line do |line|
70
+ ### e.g. allows
71
+ ## @include 'test' or
72
+ ## @INCLUDE "test"
73
+ ## note: for now we strip (allow) leading and trailing spaces (e.g. [ ]*)
74
+ ##
75
+ ## todo/allow
76
+ ## @include( test ) - alternative syntax - why? why not?
77
+ if line =~ /^[ ]*@include[ ]+("|')(.+?)\1[ ]*$/i
78
+ logger.info( " try to include '#{$2}'")
79
+ ## buf << preproc( 'include here' )
80
+ buf << preproc( read_include( $2 ) )
81
+ buf << "\n"
82
+ else
83
+ buf << line
84
+ buf << "\n"
85
+ end
86
+ end
87
+ buf
88
+ end
89
+
90
+ def read_include( name )
91
+ ## for now assume fetch via url
92
+ ## note: assume partial e.g. add leading underscore (_)
93
+ ## e.g. test => _test.ini
94
+
95
+ src = "#{@base}_#{name}.ini"
96
+ logger.info( " try to fetch include #{src}")
97
+
98
+ Preproc.fetcher_read_utf8!( src )
99
+ end
100
+
101
+ end # class IncludeReader
102
+
103
+
104
+ end # module Preproc
105
+
106
+
107
+ ## add top level (convenience) alias
108
+ InclPreproc = Preproc::IncludeReader
109
+ IncludePreproc = Preproc::IncludeReader
110
+
111
+
112
+
13
113
  ## say hello
14
114
  puts Preproc.banner if $DEBUG || (defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG)
15
115
 
@@ -3,8 +3,8 @@
3
3
  module Preproc
4
4
 
5
5
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
- MINOR = 0
7
- PATCH = 1
6
+ MINOR = 1
7
+ PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_incl.rb
6
+ # or better
7
+ # rake test
8
+
9
+
10
+ require 'helper'
11
+
12
+
13
+ class TestIncl < MiniTest::Test
14
+
15
+ def test_ruby
16
+ src = 'https://raw.github.com/feedreader/planet-ruby/master/ruby.ini'
17
+ txt = InclPreproc.from_url( src ).read
18
+ pp txt
19
+
20
+ assert true ## if we get here it should work
21
+ end
22
+
23
+ end # class TestIncl
24
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: preproc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
@@ -76,12 +76,14 @@ extra_rdoc_files:
76
76
  - Manifest.txt
77
77
  - README.md
78
78
  files:
79
+ - ".gemtest"
79
80
  - HISTORY.md
80
81
  - Manifest.txt
81
82
  - README.md
82
83
  - Rakefile
83
84
  - lib/preproc.rb
84
85
  - lib/preproc/version.rb
86
+ - test/test_incl.rb
85
87
  homepage: https://github.com/rubylibs/preproc
86
88
  licenses:
87
89
  - Public Domain
@@ -108,4 +110,5 @@ rubygems_version: 2.4.2
108
110
  signing_key:
109
111
  specification_version: 4
110
112
  summary: preproc - simple preprocessor (lets you include files in files in files etc.)
111
- test_files: []
113
+ test_files:
114
+ - test/test_incl.rb