Class: WifiWand::Models::Helpers::ResourceManager

Inherits:
Object
  • Object
show all
Defined in:
lib/wifi_wand/models/helpers/resource_manager.rb

Defined Under Namespace

Classes: OpenResource, OpenResources

Instance Method Summary collapse

Instance Method Details

#available_resources_helpObject

Get help string for available resources



52
53
54
# File 'lib/wifi_wand/models/helpers/resource_manager.rb', line 52

def available_resources_help
  "Please specify a resource to open:\n #{open_resources.help_string.gsub(',', "\n")}"
end

#invalid_codes_error(invalid_codes) ⇒ Object

Get error message for invalid codes



57
58
59
60
61
62
# File 'lib/wifi_wand/models/helpers/resource_manager.rb', line 57

def invalid_codes_error(invalid_codes)
  codes_string = invalid_codes.map { |code| "'#{code}'" }.join(', ')
  pluralized_codes = invalid_codes.length > 1 ? 'codes' : 'code'
  resource_list_str = open_resources.help_string.gsub(',', "\n")
  "Invalid resource #{pluralized_codes}: #{codes_string}. Valid codes are:\n #{resource_list_str}"
end

#invalid_resource_codes(*resource_codes) ⇒ Object



21
22
23
# File 'lib/wifi_wand/models/helpers/resource_manager.rb', line 21

def invalid_resource_codes(*resource_codes)
  normalized_resource_codes(resource_codes).reject { |code| open_resources.find_by_code(code) }
end

#open_resourcesObject



19
# File 'lib/wifi_wand/models/helpers/resource_manager.rb', line 19

def open_resources = @open_resources ||= load_resources

#open_resources_by_codes(model, *resource_codes) ⇒ Hash

Opens resources by their abbreviation codes

Parameters:

  • model (BaseModel)

    The model instance that will open the resources

  • resource_codes (Array<String,Symbol>)

    Resource codes to open

Returns:

  • (Hash)

    with :opened_resources and :invalid_codes arrays

Raises:

  • (ArgumentError)

    if model is nil



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/wifi_wand/models/helpers/resource_manager.rb', line 30

def open_resources_by_codes(model, *resource_codes)
  raise ArgumentError, 'Model cannot be nil' if model.nil?

  resource_codes = normalized_resource_codes(resource_codes)
  return { opened_resources: [], invalid_codes: [] } if resource_codes.empty?

  invalid_codes = invalid_resource_codes(*resource_codes)
  unless invalid_codes.empty?
    return { opened_resources: [], invalid_codes: invalid_codes }
  end

  opened_resources = resource_codes.map do |code|
    resource = open_resources.find_by_code(code)

    model.open_resource(resource.url)
    resource
  end

  { opened_resources: opened_resources, invalid_codes: invalid_codes }
end