Class: AnEncoding

Inherits:
Object
  • Object
show all
Defined in:
lib/enlint.rb

Overview

Parse, model, and print an encoding. Distinct from Ruby’s built-in Encoding class.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename, empty, encoding) ⇒ AnEncoding

Returns a new instance of AnEncoding.



110
111
112
113
114
# File 'lib/enlint.rb', line 110

def initialize(filename, empty, encoding)
  @filename = filename
  @empty = empty
  @encoding = encoding
end

Instance Attribute Details

#emptyObject

Returns the value of attribute empty.



95
96
97
# File 'lib/enlint.rb', line 95

def empty
  @empty
end

#encodingObject

Returns the value of attribute encoding.



95
96
97
# File 'lib/enlint.rb', line 95

def encoding
  @encoding
end

#filenameObject

Returns the value of attribute filename.



95
96
97
# File 'lib/enlint.rb', line 95

def filename
  @filename
end

Class Method Details

.parse(filename, file_line) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/enlint.rb', line 97

def self.parse(filename, file_line)
  if file_line =~ DNE
    AnEncoding.new(filename, false, NO_SUCH_FILE)
  else
    match = file_line.match(PARSER)

    empty = match[1] == 'inode/x-empty' || match[2] == 'binary'
    encoding = match[2]

    AnEncoding.new(filename, empty, encoding)
  end
end

Instance Method Details

#to_s(encoding_difference = false) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/enlint.rb', line 133

def to_s(encoding_difference = false)
  if encoding_difference
    observed = encoding_difference[0]
    preferred = encoding_difference[1].inspect

    if observed == NO_SUCH_FILE
      "#{@filename}: #{NO_SUCH_FILE}"
    else
      "#{@filename}: observed #{observed} preferred: #{preferred}"
    end
  else
    "#{@filename}: #{@encoding}"
  end
end

#violate?(rules) ⇒ Boolean

Returns:

  • (Boolean)


116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/enlint.rb', line 116

def violate?(rules)
  # Ignore empty files, which are considered binary.
  if @empty
    false
  else
    preferred = rules.select do |rule|
      Dotsmack::fnmatch?(rule.first, filename)
    end.first[1]

    if ! (encoding =~ preferred)
      [encoding, preferred]
    else
      false
    end
  end
end