class Cuki
Constants
- CONFIG_PATH
- DEFAULT_CONTAINER
- FEATURE_HEADER
- FLAGS
- PRIMARY_HEADER
- SCENARIO_HEADER
Public Class Methods
invoke(args)
click to toggle source
# File lib/cuki.rb, line 23 def self.invoke(args) new(args) end
new(args)
click to toggle source
# File lib/cuki.rb, line 27 def initialize(args) @args = args validate_args read_config configure_http_client @link_builder = LinkBuilder.new(@config['host']) action = args.first if args.include?(FLAGS[:skip_autoformat]) args.delete_if { |arg| FLAGS[:skip_autoformat] == arg } @skip_autoformat = true end configure_pull_stubs verify_project file = args[1] if file id = mappings.invert[file] terminate "could not get id for #{file}" unless id pull_feature id, file else Parallel.map(mappings, :in_processes => 4) do |id, filepath| pull_feature id, filepath end end autoformat! end
Private Instance Methods
autoformat!()
click to toggle source
# File lib/cuki.rb, line 86 def autoformat! unless @skip_autoformat `cucumber -a . --dry-run -P` puts "Running autoformat" end end
configure_http_client()
click to toggle source
# File lib/cuki.rb, line 69 def configure_http_client @client = HTTPClient.new @client.ssl_config.set_trust_ca(ENV['CER']) if ENV['CER'] @client.ssl_config.set_client_cert_file(ENV['PEM'], ENV['PEM']) if ENV['PEM'] end
container()
click to toggle source
# File lib/cuki.rb, line 82 def container @config['container'] ||= DEFAULT_CONTAINER end
handle_multi(response_body, id)
click to toggle source
# File lib/cuki.rb, line 93 def handle_multi response_body, id confluence_page = ConfluencePage.new(response_body) full_content = confluence_page.content terminate "Could not find acceptance criteria container" unless full_content.match(container) acceptance_criteria = full_content.split(container).last if acceptance_criteria.include?(PRIMARY_HEADER) acceptance_criteria = acceptance_criteria.split(/#{PRIMARY_HEADER}/).first end terminate "Could not match #{container} in #{id}" unless acceptance_criteria scenario_titles = acceptance_criteria.scan(/#{FEATURE_HEADER} (.*)/).flatten scenario_blocks = acceptance_criteria.split(/#{FEATURE_HEADER} .*/) scenario_blocks.shift puts "Warning: No scenarios found in doc #{id}" if scenario_titles.empty? pretext = acceptance_criteria.split(/#{FEATURE_HEADER}/).first combined = {} scenario_titles.each_with_index do |title, index| combined[title] = scenario_blocks[index].gsub(/h\d. ([Scenario|Scenario Outline].*)/, '\1') end combined.each do |title, content| feature_filename = title.parameterize dirpath = mappings[id] FileUtils.mkdir_p(dirpath) fname = "#{dirpath}/#{feature_filename.gsub("\r", '').parameterize}.feature" puts "Writing #{fname}" File.open(fname, 'w') do |f| if @config['tags'] @config['tags'].each do |tag, token| f.write "@#{tag}\n" if pretext.include?(token) end end if @config['tags'] @config['tags'].each do |tag, token| content.gsub!(token, "@#{tag}\n") end end f.write "Feature: #{title}\n\n" f.write @link_builder.view(id, confluence_page.title, title) f.write content end end end
mappings()
click to toggle source
# File lib/cuki.rb, line 153 def mappings @config['mappings'] end
pull_feature(id, filepath)
click to toggle source
# File lib/cuki.rb, line 75 def pull_feature(id, filepath) wiki_edit_link = @link_builder.edit(id) puts "Downloading #{wiki_edit_link}" response = @client.get wiki_edit_link handle_multi response.body, id end
read_config()
click to toggle source
# File lib/cuki.rb, line 62 def read_config terminate "No config file found at #{CONFIG_PATH}" unless File.exist?(CONFIG_PATH) @config = YAML::load( File.open( CONFIG_PATH ) ) terminate "Host not found in #{CONFIG_PATH}" unless @config["host"] terminate "Mappings not found in #{CONFIG_PATH}" unless @config["mappings"] end
terminate(message)
click to toggle source
# File lib/cuki.rb, line 157 def terminate(message) puts message exit(1) end
validate_args()
click to toggle source
# File lib/cuki.rb, line 147 def validate_args terminate "No action given" if @args.empty? command = @args.first terminate "Unknown action '#{@args.first}'" unless 'pull' == command end
verify_project()
click to toggle source
# File lib/cuki.rb, line 55 def verify_project terminate "features folder not found" unless File.exists?('features') puts "Verifying existing features" `cucumber --dry-run -P` terminate "Validation of existing features failed" unless 0 == $? end