Module: TiendappValidator

Defined in:
lib/tiendapp_validator.rb,
lib/tiendapp_validator/version.rb,
lib/tiendapp_validator/required_files.rb,
lib/tiendapp_validator/auxiliar_methods.rb,
lib/tiendapp_validator/liquid_validators.rb,
lib/tiendapp_validator/schema_validators.rb

Overview

TiendApp Validator - Methods to validate customization schema

Constant Summary collapse

VALIDATION_METHODS =
[method(:validate_liquid_files),
method(:validate_partial_liquid_files),
method(:validate_folders_liquid_files),
method(:validate_include_liquid_files),
method(:validate_liquid_files_syntax),
method(:validate_customation_schema_file),
method(:validate_extensions)].freeze
VERSION =
'0.1.3'.freeze
LIQUID_FILES =

Nombre de los archivos necesarios de la aplicacion

['layout.liquid', 'home.liquid', 'product.liquid', 'blog.liquid',
'static_page.liquid', 'post.liquid', 'order.liquid',
'sidebar.liquid'].freeze
LIQUID_FILES_CHECKOUT =

Subcarpeta checkout

['address.liquid', 'cart.liquid', 'delivery.liquid', 'address.liquid',
'payment.liquid'].freeze
LIQUID_FILES_MAILER =

Subcarpeta mailer

['cancel_order.liquid', 'confirm_order.liquid', 'layout.liquid',
'shipped_order.liquid'].freeze
DEFAULT_PATH =

Paths basicos de los archivos necesarios

'public/store_templates/public/'.freeze
CHECKOUT_PATH =
'checkout/'.freeze
MAILER_PATH =
'mailer/'.freeze
SCHEMA_FILES =

Schema files

['customization_schema.json',
'email_customization_schema.json'].freeze
EXTENSIONS =

Format list

['liquid', 'css', 'json', 'js', 'map', 'eot', 'svg', 'ttf',
'woff', 'woff2', 'jpg', 'png'].freeze

Class Method Summary collapse

Class Method Details

.customization_schemasObject



17
18
19
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 17

def self.customization_schemas
  @customization_schemas ||= get_files(root_path + 'config/', 'json')
end

.exist_liquid_file(str) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 58

def self.exist_liquid_file(str)
  path = root_path
  while str.include? '/'
    substring = str.split('/')[0]
    str = str.split('/')[1]
    path = path + substring + '/'
  end
  path + '_' + str + '.liquid'
end

.get_content(path) ⇒ Object



29
30
31
32
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 29

def self.get_content(path)
  file = File.open(path)
  file.read
end

.get_files(path, extension) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 21

def self.get_files(path, extension)
  file_paths = []
  Find.find(path) do |p|
    file_paths << p if p =~ /\.(?:#{extension})$/i
  end
  file_paths
end

.get_format(file) ⇒ Object



39
40
41
42
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 39

def self.get_format(file)
  expr = /\.(\w*)$/
  expr.match(file)[1]
end

.get_includes(content) ⇒ Object



34
35
36
37
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 34

def self.get_includes(content)
  expr = /\{\%\s+include\s+[",'](.*)[",']\s+\%\}/
  content.scan(expr)
end

.liquid_filesObject



13
14
15
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 13

def self.liquid_files
  @liquid_files ||= get_files(root_path, 'liquid')
end

.permit_extension?(file) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 44

def self.permit_extension?(file)
  extension = get_format(file)
  EXTENSIONS.include? extension
end


28
29
30
# File 'lib/tiendapp_validator.rb', line 28

def self.print_response(res)
  puts res[:status] + ' - ' + res[:message]
end

.response(status, message, valid) ⇒ Object



68
69
70
71
72
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 68

def self.response(status, message, valid)
  { status: status,
    message: message,
    valid: valid }
end

.root_path(path = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 3

def self.root_path(path = nil)
  if path.nil?
    @root_path ||= DEFAULT_PATH
  else
    @root_path = path
    @liquid_files = nil
    @customization_schemas = nil
  end
end

.validate(path) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/tiendapp_validator.rb', line 18

def self.validate(path)
  root_path(path)
  VALIDATION_METHODS.each do |method|
    res = method.call
    next if res[:valid]
    return res
  end
  response 'OK', 'All validation are OK', true
end

.validate_customation_schema_fileObject

VG001 - Validar syntaxis customization schema



4
5
6
7
8
9
10
# File 'lib/tiendapp_validator/schema_validators.rb', line 4

def self.validate_customation_schema_file
  SCHEMA_FILES.each do |schema|
    next if customization_schemas.include? root_path + 'config/' + schema
    response 'Error', 'Customization schema not found: ' + schema, false
  end
  response 'OK', 'found all customization schema files', true
end

.validate_extensionsObject



49
50
51
52
53
54
55
56
# File 'lib/tiendapp_validator/auxiliar_methods.rb', line 49

def self.validate_extensions
  Find.find(root_path) do |p|
    next unless p.include? '.'
    next if permit_extension? p
    return response 'ERROR', 'not support extension: ' + p.split(root_path)[1], false
  end
  response 'OK', 'all format support', true
end

.validate_folders_liquid_filesObject

VL003 - Validar si todas las llamadas a vistas parciales existen



28
29
30
31
32
33
34
35
36
# File 'lib/tiendapp_validator/liquid_validators.rb', line 28

def self.validate_folders_liquid_files
  path = root_path
  (LIQUID_FILES_CHECKOUT + LIQUID_FILES_MAILER).each do |liquid|
    next if liquid_files.include? path + CHECKOUT_PATH + liquid
    next if liquid_files.include? path + MAILER_PATH + liquid
    return response 'error', 'file not found: ' + liquid, false
  end
  response 'OK', 'found checkout liquid files', true
end

.validate_include_liquid_filesObject

VL004 - Validar si todas las llamadas a vistas parciales existen



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/tiendapp_validator/liquid_validators.rb', line 39

def self.validate_include_liquid_files
  liquid_files.each do |liquid|
    content = get_content(liquid)
    includes = get_includes(content)
    includes.each do |include|
      unless exist_liquid_file(include[0])
        return response 'error', include[0] + 'not found', false
      end
    end
  end
  response 'OK', 'all includes exists', true
end

.validate_liquid_filesObject

VL001 - Validar presencia de los archivos liquid



6
7
8
9
10
11
12
# File 'lib/tiendapp_validator/liquid_validators.rb', line 6

def self.validate_liquid_files
  LIQUID_FILES.each do |liquid|
    next if liquid_files.include? root_path + liquid
    return response 'error', 'file not found: ' + liquid, false
  end
  response 'OK', 'found all liquid files.', true
end

.validate_liquid_files_syntaxObject

VL006 - Valida que los archivos tengan sintaxis correcta en Liquid



53
54
55
56
57
58
59
60
# File 'lib/tiendapp_validator/liquid_validators.rb', line 53

def self.validate_liquid_files_syntax
  file_paths = get_files root_path, 'liquid'
  file_paths.each do |liquid|
    next if Liquid::Template.parse(get_content(liquid), error_mode: :strict)
    return response 'error', 'syntax error: ' + liquid.split(root_path)[0], false
  end
  response 'OK', 'liquid files have correct syntax', true
end

.validate_partial_liquid_filesObject

VL002 - Validar vistas parciales liquid



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/tiendapp_validator/liquid_validators.rb', line 15

def self.validate_partial_liquid_files
  file_paths = get_files root_path, 'liquid'
  file_paths.each do |liquid|
    liquid = liquid.split('/').last
    next if LIQUID_FILES.include? liquid
    next if liquid[0] == '_'
    next if (LIQUID_FILES_CHECKOUT + LIQUID_FILES_MAILER).include? liquid
    return response 'error', 'name invalid:' + liquid, false
  end
  response 'OK', 'partial liquid files are OK.', true
end