Method transition
has a Cognitive Complexity of 44 (exceeds 5 allowed). Consider refactoring. Open
def transition(inst, name, state)
self.transition_save_node = false
return [404, "No state specified"] if state.nil?
# FIXME: validate state
- Read upRead up
- Create a ticketCreate a ticket
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
File crowbar_service.rb
has 421 lines of code (exceeds 250 allowed). Consider refactoring. Open
class CrowbarService < ServiceObject
attr_accessor :transition_save_node
def initialize(thelogger = nil)
super
- Create a ticketCreate a ticket
Method transition
has 91 lines of code (exceeds 25 allowed). Consider refactoring. Open
def transition(inst, name, state)
self.transition_save_node = false
return [404, "No state specified"] if state.nil?
# FIXME: validate state
- Create a ticketCreate a ticket
Method initiate_nodes_upgrade
has a Cognitive Complexity of 22 (exceeds 5 allowed). Consider refactoring. Open
def initiate_nodes_upgrade
upgrade_nodes = Node.all.reject do |node|
node.admin? || node[:platform] == "windows" || node.state != "crowbar_upgrade"
end
check_if_nodes_are_available upgrade_nodes
- Read upRead up
- Create a ticketCreate a ticket
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
Method bootstrap_ensure_proposal
has 70 lines of code (exceeds 25 allowed). Consider refactoring. Open
def bootstrap_ensure_proposal(bc, override_attr_path)
Rails.logger.info("Bootstrap: ensure proposal for bc: #{bc}, name: #{override_attr_path}")
unless override_attr_path == "default" || File.exist?(override_attr_path)
msg = "Cannot ensure proposal for #{bc} exists: #{override_attr_path} does not exist."
- Create a ticketCreate a ticket
Method bootstrap_ensure_proposal
has a Cognitive Complexity of 20 (exceeds 5 allowed). Consider refactoring. Open
def bootstrap_ensure_proposal(bc, override_attr_path)
Rails.logger.info("Bootstrap: ensure proposal for bc: #{bc}, name: #{override_attr_path}")
unless override_attr_path == "default" || File.exist?(override_attr_path)
msg = "Cannot ensure proposal for #{bc} exists: #{override_attr_path} does not exist."
- Read upRead up
- Create a ticketCreate a ticket
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
Method prepare_nodes_for_crowbar_upgrade
has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring. Open
def prepare_nodes_for_crowbar_upgrade
proposal = Proposal.find_by(barclamp: "crowbar", name: "default")
# To all nodes, add a new role which prepares them for the upgrade
nodes_to_upgrade = []
- Read upRead up
- Create a ticketCreate a ticket
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
Method initiate_nodes_upgrade
has 43 lines of code (exceeds 25 allowed). Consider refactoring. Open
def initiate_nodes_upgrade
upgrade_nodes = Node.all.reject do |node|
node.admin? || node[:platform] == "windows" || node.state != "crowbar_upgrade"
end
check_if_nodes_are_available upgrade_nodes
- Create a ticketCreate a ticket
Method prepare_nodes_for_crowbar_upgrade
has 30 lines of code (exceeds 25 allowed). Consider refactoring. Open
def prepare_nodes_for_crowbar_upgrade
proposal = Proposal.find_by(barclamp: "crowbar", name: "default")
# To all nodes, add a new role which prepares them for the upgrade
nodes_to_upgrade = []
- Create a ticketCreate a ticket
Method bootstrap_proposals
has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring. Open
def bootstrap_proposals(crowbar_role, inst)
answer = [200, {}]
role = crowbar_role.default_attributes
return answer if role["crowbar"].nil? ||
- Read upRead up
- Create a ticketCreate a ticket
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
Method commit_and_check_proposal
has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring. Open
def commit_and_check_proposal
answer = proposal_commit(
"default",
in_queue: false,
validate: false,
- Read upRead up
- Create a ticketCreate a ticket
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
Avoid too many return
statements within this method. Open
return answer
- Create a ticketCreate a ticket
Similar blocks of code found in 2 locations. Consider refactoring. Open
if answer[0] != 200
msg = "Failed to commit proposal '#{id}' for '#{bc}' " \
"(The error message was: #{answer[1].strip})"
Rails.logger.error(msg)
answer[1] = msg
- Read upRead up
- Create a ticketCreate a ticket
Duplicated Code
Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:
Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.
When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).
Tuning
This issue has a mass of 32.
We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.
The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.
If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.
See codeclimate-duplication
's documentation for more information about tuning the mass threshold in your .codeclimate.yml
.
Refactorings
- Extract Method
- Extract Class
- Form Template Method
- Introduce Null Object
- Pull Up Method
- Pull Up Field
- Substitute Algorithm
Further Reading
- Don't Repeat Yourself on the C2 Wiki
- Duplicated Code on SourceMaking
- Refactoring: Improving the Design of Existing Code by Martin Fowler. Duplicated Code, p76
Similar blocks of code found in 2 locations. Consider refactoring. Open
if answer[0] != 200
msg = "Failed to create proposal '#{id}' for barclamp '#{bc}' " \
"(The error message was: #{answer[1].strip})"
Rails.logger.error(msg)
answer[1] = msg
- Read upRead up
- Create a ticketCreate a ticket
Duplicated Code
Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:
Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.
When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).
Tuning
This issue has a mass of 32.
We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.
The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.
If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.
See codeclimate-duplication
's documentation for more information about tuning the mass threshold in your .codeclimate.yml
.
Refactorings
- Extract Method
- Extract Class
- Form Template Method
- Introduce Null Object
- Pull Up Method
- Pull Up Field
- Substitute Algorithm
Further Reading
- Don't Repeat Yourself on the C2 Wiki
- Duplicated Code on SourceMaking
- Refactoring: Improving the Design of Existing Code by Martin Fowler. Duplicated Code, p76