From 8ba51fbdb339f461c99bca7f20108e719e2f580c Mon Sep 17 00:00:00 2001 From: Michael O'Boyle Date: Wed, 14 Aug 2024 15:15:28 -0400 Subject: [PATCH] Add RuboCop extensions --- .robucop.yml | 230 ++++++++++++++++++++++++++++++++++++++ Gemfile | 6 +- Gemfile.lock | 8 +- lib/obsidian_api/note.rb | 19 +++- lib/obsidian_api/vault.rb | 3 +- obsidian_api-0.1.0.gem | Bin 8192 -> 8192 bytes obsidian_api.gemspec | 4 +- spec/obsidian_api_spec.rb | 5 - 8 files changed, 264 insertions(+), 11 deletions(-) diff --git a/.robucop.yml b/.robucop.yml index e69de29..5091015 100644 --- a/.robucop.yml +++ b/.robucop.yml @@ -0,0 +1,230 @@ +AllCops: + NewCops: enable + SuggestExtensions: true + +# Enable the recommended extension libraries +require: + - rubocop-rspec + - rubocop-rake + +# Gemspec specific cops +Gemspec/AddRuntimeDependency: + Enabled: true +Gemspec/DeprecatedAttributeAssignment: + Enabled: true +Gemspec/DevelopmentDependencies: + Enabled: true +Gemspec/RequireMFA: + Enabled: true + +# Layout specific cops +Layout/LineContinuationLeadingSpace: + Enabled: true +Layout/LineContinuationSpacing: + Enabled: true +Layout/LineEndStringConcatenationIndentation: + Enabled: true +Layout/SpaceBeforeBrackets: + Enabled: true + +# Lint specific cops +Lint/AmbiguousAssignment: + Enabled: true +Lint/AmbiguousOperatorPrecedence: + Enabled: true +Lint/AmbiguousRange: + Enabled: true +Lint/ConstantOverwrittenInRescue: + Enabled: true +Lint/DeprecatedConstants: + Enabled: true +Lint/DuplicateBranch: + Enabled: true +Lint/DuplicateMagicComment: + Enabled: true +Lint/DuplicateMatchPattern: + Enabled: true +Lint/DuplicateRegexpCharacterClassElement: + Enabled: true +Lint/EmptyBlock: + Enabled: true +Lint/EmptyClass: + Enabled: true +Lint/EmptyInPattern: + Enabled: true +Lint/IncompatibleIoSelectWithFiberScheduler: + Enabled: true +Lint/ItWithoutArgumentsInBlock: + Enabled: true +Lint/LambdaWithoutLiteralBlock: + Enabled: true +Lint/LiteralAssignmentInCondition: + Enabled: true +Lint/MixedCaseRange: + Enabled: true +Lint/NoReturnInBeginEndBlocks: + Enabled: true +Lint/NonAtomicFileOperation: + Enabled: true +Lint/NumberedParameterAssignment: + Enabled: true +Lint/OrAssignmentToConstant: + Enabled: true +Lint/RedundantDirGlobSort: + Enabled: true +Lint/RedundantRegexpQuantifiers: + Enabled: true +Lint/RefinementImportMethods: + Enabled: true +Lint/RequireRangeParentheses: + Enabled: true +Lint/RequireRelativeSelfPath: + Enabled: true +Lint/SymbolConversion: + Enabled: true +Lint/ToEnumArguments: + Enabled: true +Lint/TripleQuotes: + Enabled: true +Lint/UnexpectedBlockArity: + Enabled: true +Lint/UnmodifiedReduceAccumulator: + Enabled: true +Lint/UselessRescue: + Enabled: true +Lint/UselessRuby2Keywords: + Enabled: true + +# Metrics specific cops +Metrics/CollectionLiteralLength: + Enabled: true + +# Naming specific cops +Naming/BlockForwarding: + Enabled: true + +# Security specific cops +Security/CompoundHash: + Enabled: true +Security/IoMethods: + Enabled: true + +# Style specific cops +Style/ArgumentsForwarding: + Enabled: true +Style/ArrayIntersect: + Enabled: true +Style/CollectionCompact: + Enabled: true +Style/ComparableClamp: + Enabled: true +Style/ConcatArrayLiterals: + Enabled: true +Style/DataInheritance: + Enabled: true +Style/DirEmpty: + Enabled: true +Style/DocumentDynamicEvalDefinition: + Enabled: true +Style/EmptyHeredoc: + Enabled: true +Style/EndlessMethod: + Enabled: true +Style/EnvHome: + Enabled: true +Style/ExactRegexpMatch: + Enabled: true +Style/FetchEnvVar: + Enabled: true +Style/FileEmpty: + Enabled: true +Style/FileRead: + Enabled: true +Style/FileWrite: + Enabled: true +Style/HashConversion: + Enabled: true +Style/HashExcept: + Enabled: true +Style/IfWithBooleanLiteralBranches: + Enabled: true +Style/InPatternThen: + Enabled: true +Style/MagicCommentFormat: + Enabled: true +Style/MapCompactWithConditionalBlock: + Enabled: true +Style/MapIntoArray: + Enabled: true +Style/MapToHash: + Enabled: true +Style/MapToSet: + Enabled: true +Style/MinMaxComparison: + Enabled: true +Style/MultilineInPatternThen: + Enabled: true +Style/NegatedIfElseCondition: + Enabled: true +Style/NestedFileDirname: + Enabled: true +Style/NilLambda: + Enabled: true +Style/NumberedParameters: + Enabled: true +Style/NumberedParametersLimit: + Enabled: true +Style/ObjectThen: + Enabled: true +Style/OpenStructUse: + Enabled: true +Style/OperatorMethodCall: + Enabled: true +Style/QuotedSymbols: + Enabled: true +Style/RedundantArgument: + Enabled: true +Style/RedundantArrayConstructor: + Enabled: true +Style/RedundantConstantBase: + Enabled: true +Style/RedundantCurrentDirectoryInPath: + Enabled: true +Style/RedundantDoubleSplatHashBraces: + Enabled: true +Style/RedundantEach: + Enabled: true +Style/RedundantFilterChain: + Enabled: true +Style/RedundantHeredocDelimiterQuotes: + Enabled: true +Style/RedundantInitialize: + Enabled: true +Style/RedundantLineContinuation: + Enabled: true +Style/RedundantRegexpArgument: + Enabled: true +Style/RedundantRegexpConstructor: + Enabled: true +Style/RedundantSelfAssignmentBranch: + Enabled: true +Style/RedundantStringEscape: + Enabled: true +Style/ReturnNilInPredicateMethodDefinition: + Enabled: true +Style/SelectByRegexp: + Enabled: true +Style/SendWithLiteralMethodName: + Enabled: true +Style/SingleLineDoEndBlock: + Enabled: true +Style/StringChars: + Enabled: true +Style/SuperArguments: + Enabled: true +Style/SuperWithArgsParentheses: + Enabled: true +Style/SwapValues: + Enabled: true +Style/YAMLFileRead: + Enabled: true \ No newline at end of file diff --git a/Gemfile b/Gemfile index af70db8..e22a7e2 100644 --- a/Gemfile +++ b/Gemfile @@ -9,4 +9,8 @@ gem "rake", "~> 13.0" gem "rspec", "~> 3.0" -gem "rubocop", "~> 1.21" +group :development, :test do + gem "rubocop", require: false + gem "rubocop-rake", require: false + gem "rubocop-rspec", require: false +end diff --git a/Gemfile.lock b/Gemfile.lock index 7a4b834..9110012 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,6 +46,10 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.32.0) parser (>= 3.3.1.0) + rubocop-rake (0.6.0) + rubocop (~> 1.0) + rubocop-rspec (3.0.4) + rubocop (~> 1.61) ruby-progressbar (1.13.0) strscan (3.1.0) unicode-display_width (2.5.0) @@ -58,7 +62,9 @@ DEPENDENCIES obsidian_api! rake (~> 13.0) rspec (~> 3.0) - rubocop (~> 1.21) + rubocop + rubocop-rake + rubocop-rspec BUNDLED WITH 2.5.17 diff --git a/lib/obsidian_api/note.rb b/lib/obsidian_api/note.rb index e19cbf7..6723ed1 100644 --- a/lib/obsidian_api/note.rb +++ b/lib/obsidian_api/note.rb @@ -1,8 +1,23 @@ # frozen_string_literal: true -# lib/obsidian_api/note.rb - module ObsidianAPI + # The Note class provides methods to interact with individual markdown notes in an Obsidian vault. + # It allows for reading, writing, and manipulating the content of the notes. + # It also provides methods to add and remove tags from notes. + # + # Example: + # + # vault = ObsidianAPI::Vault.new("path/to/vault") + # note = ObsidianAPI::Note.new(vault, "path/to/note.md") + # + # content = note.content + # puts content + # + # note.save("New content") + # + # note.add_tag("new-tag") + # + # note.remove_tag("old-tag") class Note attr_reader :vault, :file_path diff --git a/lib/obsidian_api/vault.rb b/lib/obsidian_api/vault.rb index 2235c0f..06b0114 100644 --- a/lib/obsidian_api/vault.rb +++ b/lib/obsidian_api/vault.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true -# lib/obsidian_api/vault.rb module ObsidianAPI + # The Vault class provides methods to interact with the Obsidian vault as a whole. + # It allows listing files, reading their content, writing new content, and deleting files. class Vault attr_reader :path diff --git a/obsidian_api-0.1.0.gem b/obsidian_api-0.1.0.gem index 27a19f6a392a5f7bf3be684c52fdfd1f1e22ad57..bc4a1babaccf4b96b994bd8e74e46d381deb30cc 100644 GIT binary patch delta 5017 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 X^FJ5Z(-(Ua^JtAQ+9`}A2>yQnrk$Oa delta 4908 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 R3-xaT{NJ7<#7PM9{{i6wSpEP2 diff --git a/obsidian_api.gemspec b/obsidian_api.gemspec index 40a8240..a66ef5f 100644 --- a/obsidian_api.gemspec +++ b/obsidian_api.gemspec @@ -9,7 +9,9 @@ Gem::Specification.new do |spec| spec.email = ["michael@oboyle.co"] spec.summary = "A Ruby gem for interacting with Obsidian vaults." - spec.description = "ObsidianAPI Gem provides an easy-to-use interface for managing Markdown files, metadata, and events within an Obsidian vault. Ideal for developers looking to automate tasks or integrate Obsidian with Ruby applications." + spec.description = "ObsidianAPI Gem provides an interface for managing Markdown files, metadata, and events"\ + "within an Obsidian vault. Ideal for developers looking to automate tasks or integrate Obsidian " \ + "with Ruby applications." spec.homepage = "https://github.com/michaeloboyle/obsidian_api" spec.license = "MIT" spec.required_ruby_version = ">= 3.0.0" diff --git a/spec/obsidian_api_spec.rb b/spec/obsidian_api_spec.rb index 30f5dcc..39875b4 100644 --- a/spec/obsidian_api_spec.rb +++ b/spec/obsidian_api_spec.rb @@ -6,9 +6,4 @@ it "has a version number" do expect(ObsidianApi::VERSION).not_to be nil end - - it "does something useful" do - # Replace this with an actual useful test or remove the test - expect(true).to eq(true) - end end