Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib/warbler/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ class Config

# Traits: an array of trait classes corresponding to
# characteristics of the project that are either auto-detected or
# configured.
attr_accessor :traits
# forced enabled during `Config.new(forced_traits: [...]) do |config|`
attr_reader :traits

# Directory where the war file will be written. Can be used to direct
# Warbler to place your war file directly in your application server's
Expand Down Expand Up @@ -183,8 +183,8 @@ class Config
attr_reader :warbler_templates
attr_reader :warbler_scripts

def initialize(warbler_home = WARBLER_HOME)
super()
def initialize(warbler_home = WARBLER_HOME, forced_traits: nil)
super(forced_traits)

@warbler_home = warbler_home
@warbler_templates = "#{WARBLER_HOME}/lib/warbler/templates"
Expand Down
10 changes: 6 additions & 4 deletions lib/warbler/traits.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ module Warbler
# the kind of project and how it should be packed into the jar or
# war file.
module Traits
attr_accessor :traits

def initialize
@traits = auto_detect_traits
def initialize(forced_traits)
@traits = if forced_traits.nil? || forced_traits.empty?
auto_detect_traits
else
TraitsDependencyArray.new(forced_traits)
end
end

def auto_detect_traits
Expand Down
32 changes: 32 additions & 0 deletions spec/warbler/traits_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,36 @@
end
end
end

describe "#auto_detect_traits" do
context "in a Rack project with Bundler" do
run_in_directory 'spec/sample_bundler'

it "auto-detects traits" do
config = Warbler::Config.new
expect(config.traits).to eq([Warbler::Traits::War, Warbler::Traits::Rack, Warbler::Traits::Bundler])
end
end
end

describe "forced_traits" do
context "with no forced traits" do
run_in_directory 'spec/sample_jar'

it "behaves identically to auto-detection" do
default_config = Warbler::Config.new
forced_config = Warbler::Config.new(forced_traits: [])
expect(forced_config.traits).to eq(default_config.traits)
end
end

context "in a Rack project with Bundler with Jar forced" do
run_in_directory 'spec/sample_bundler'

it "only has the Jar trait" do
config = Warbler::Config.new(forced_traits: [Warbler::Traits::Jar])
expect(config.traits).to eq([Warbler::Traits::Jar])
end
end
end
end