Class: FixtureReader
- Inherits:
-
Object
- Object
- FixtureReader
- Includes:
- LogUtils::Logging
- Defined in:
- lib/textutils/reader/fixture_reader.rb
Overview
use ManifestReader ?? why? why not? - reuse in manifest gem (or manman e.g. manifest manger) ??
Class Method Summary collapse
Instance Method Summary collapse
- #each ⇒ Object
-
#initialize(arg) ⇒ FixtureReader
constructor
A new instance of FixtureReader.
-
#plain_text_reader(text) ⇒ Object
find a better name - just read?.
Constructor Details
#initialize(arg) ⇒ FixtureReader
Returns a new instance of FixtureReader.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/textutils/reader/fixture_reader.rb', line 55 def initialize( arg ) if arg.is_a?( String ) ## old style (deprecated) - pass in filepath as string path = arg logger.info "FixtureReader.new - deprecated API - use FixtureReader.from_file() instead" text = File.read_utf8( path ) else ## assume it's a hash opts = arg text = opts[:text] end @ary = [] ## nb: assume/enfore utf-8 encoding (with or without BOM - byte order mark) ## - see textutils/utils.rb @ary = plain_text_reader( text ) logger.debug "fixture setup:" logger.debug @ary.to_json end |
Class Method Details
.from_file(path) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/textutils/reader/fixture_reader.rb', line 43 def self.from_file( path ) ## note: assume/enfore utf-8 encoding (with or without BOM - byte order mark) ## - see textutils/utils.rb text = File.read_utf8( path ) self.from_string( text ) end |
.from_string(text) ⇒ Object
50 51 52 |
# File 'lib/textutils/reader/fixture_reader.rb', line 50 def self.from_string( text ) FixtureReader.new( { text: text } ) end |
.from_zip(zip_file, entry_path) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/textutils/reader/fixture_reader.rb', line 16 def self.from_zip( zip_file, entry_path ) entry = zip_file.find_entry( entry_path ) ## todo/fix: add force encoding to utf-8 ?? ## check!!! ## clean/prepprocess lines ## e.g. CR/LF (/r/n) to LF (e.g. /n) text = entry.get_input_stream().read() ## NOTE: needs logger ref; only available in instance methods; use global logger for now logger = LogUtils::Logger.root logger.debug "text.encoding.name (before): #{text.encoding.name}" ##### # NB: ASCII-8BIT == BINARY == Encoding Unknown; Raw Bytes Here ## NB: # for now "hardcoded" to utf8 - what else can we do? # - note: force_encoding will NOT change the chars only change the assumed encoding w/o translation text = text.force_encoding( Encoding::UTF_8 ) logger.debug "text.encoding.name (after): #{text.encoding.name}" ## todo: # NB: for convenience: convert fancy unicode dashes/hyphens to plain ascii hyphen-minus ## text = TextUtils.convert_unicode_dashes_to_plain_ascii( text, path: path ) self.from_string( text ) end |
Instance Method Details
#each ⇒ Object
119 120 121 122 123 |
# File 'lib/textutils/reader/fixture_reader.rb', line 119 def each @ary.each do |fixture| yield( fixture ) end end |
#plain_text_reader(text) ⇒ Object
find a better name - just read?
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/textutils/reader/fixture_reader.rb', line 78 def plain_text_reader( text ) ## find a better name - just read? ## use LineReader ?? for (re)use of comment processing - why? why not??? ### build up array for fixtures from hash ary = [] text.each_line do |line| # comments allow: # 1) ##### (shell/ruby style) # 2) -- comment here (haskel/?? style) # 3) % comment here (tex/latex style) if line =~ /^\s*#/ || line =~ /^\s*--/ || line =~ /^\s*%/ # skip komments and do NOT copy to result (keep comments secret!) logger.debug 'skipping comment line' next end if line =~ /^\s*$/ # skip blank lines logger.debug 'skipping blank line' next end # pass 1) remove possible trailing eol comment ## e.g -> nyc, New York # Sample EOL Comment Here (with or without commas,,,,) ## becomes -> nyc, New York line = line.sub( /\s+#.+$/, '' ) # pass 2) remove leading and trailing whitespace line = line.strip ary << line end # each lines ary # return fixture ary end |