class RuboCop::Cop::SketchupRequirements::SketchupRequire
Omit file extensions when using `Sketchup.require` to allow encrypted files to be loaded.
Ruby C extensions, `.so`/`.bundle` libraries must always be loaded via the normal `require`.
@example Bad - This will fail if extension is encrypted
Sketchup.require 'hello/world.rb'
@example Good - This will work for `.rbe`, `.rbs` and `rb` files.
Sketchup.require 'hello/world'
@example Bad - This will fail if extension is encrypted
extension = SketchupExtension.new("Example", "Example/main.rb")
@example Good - This will work for `.rbe`, `.rbs` and `rb` files.
extension = SketchupExtension.new("Example", "Example/main")
Constants
- MSG_EXTENSION_NEW_EXT_NAME
- MSG_REQUIRE_ENCRYPTED
- MSG_REQUIRE_FOR_BINARY
- MSG_SKETCHUP_REQUIRE_EXT_NAME
- TOOLS_RUBY_FILES
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 71 def on_send(node) if sketchup_require?(node) filename = sketchup_require(node) return if check_binary_sketchup_require(node, filename) return if check_sketchup_require_filename(node, filename) elsif ruby_require?(node) filename = ruby_require(node) return if check_encrypted_require(node, filename) elsif sketchup_extension_new?(node) filename = sketchup_extension_new(node) return if check_sketchup_extension_new_filename(node, filename) end end
Private Instance Methods
binary_require?(filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 90 def binary_require?(filename) return unless extension_binaries? return if extension_binaries.empty? extension_binaries.include?(filename) end
check_binary_sketchup_require(node, filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 97 def check_binary_sketchup_require(node, filename) return unless binary_require?(filename) end_pos = node.loc.dot.end_pos range = node.receiver.loc.expression.with(end_pos: end_pos) add_offense(node, location: range, message: MSG_REQUIRE_FOR_BINARY) true end
check_encrypted_require(node, filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 122 def check_encrypted_require(node, filename) return unless encrypted_extension? return unless extension_file?(filename) add_offense(node, location: node.loc.selector, message: MSG_REQUIRE_ENCRYPTED) true end
check_sketchup_extension_new_filename(node, filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 114 def check_sketchup_extension_new_filename(node, filename) return if valid_filename?(filename) add_offense(node, location: file_ext_range(node.arguments.last), message: MSG_EXTENSION_NEW_EXT_NAME) true end
check_sketchup_require_filename(node, filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 106 def check_sketchup_require_filename(node, filename) return if valid_filename?(filename) add_offense(node, location: file_ext_range(node.arguments.first), message: MSG_SKETCHUP_REQUIRE_EXT_NAME) true end
extension_file?(filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 135 def extension_file?(filename) pathname = Pathname.new(filename).cleanpath return false unless pathname.relative? first_directory(extension_directory) == first_directory(pathname) end
first_directory(path)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 131 def first_directory(path) path.to_s.split(File::SEPARATOR).first.downcase end
valid_filename?(filename)
click to toggle source
# File lib/rubocop/sketchup/cop/requirements/sketchup_require.rb, line 142 def valid_filename?(filename) File.extname(filename).empty? || TOOLS_RUBY_FILES.include?(filename) end