lib/houston/boot/extensions/deprecated.rb
module Houston
module Extensions
module Deprecated
def add_project_column(_slug, &block)
Houston.deprecation_notice 'Houston.add_project_column is deprecated and will be removed in houston-core 1.0; use Houston.views["project"].add_column instead'
dsl = DeprecatedColumnDsl.new
dsl.instance_eval(&block)
dsl.add_to Houston.view["projects"]
end
def add_user_option(_slug, &block)
Houston.deprecation_notice 'Houston.add_user_option is deprecated and will be removed in houston-core 1.0; use Houston.views["edit_user"].add_field instead'
dsl = DeprecatedFieldDsl.new
dsl.instance_eval(&block)
dsl.add_to Houston.view["edit_user"]
end
def add_project_option(_slug, &block)
Houston.deprecation_notice 'Houston.add_project_option is deprecated and will be removed in houston-core 1.0; use Houston.views["edit_project"].add_field instead'
dsl = DeprecatedFieldDsl.new
dsl.instance_eval(&block)
dsl.add_to Houston.view["edit_project"]
end
def add_navigation_renderer(slug, &block)
Houston.deprecation_notice 'Houston.add_navigation_renderer is deprecated and will be removed in houston-core 1.0; use Houston.navigation.add_link instead'
dsl = DeprecatedNavigationDsl.new
dsl.instance_eval(&block)
dsl.add_to_navigation(slug)
end
def add_project_feature(slug, &block)
Houston.deprecation_notice 'Houston.add_project_feature is deprecated and will be removed in houston-core 1.0; use Houston.project_features.add instead'
dsl = DeprecatedProjectFeatureDsl.new
dsl.instance_eval(&block)
dsl.add_to_project_features(slug)
end
def add_project_header_command(slug, &block)
Houston.deprecation_notice 'Houston.add_project_header_command is deprecated and will be removed in houston-core 1.0'
dsl = ProjectBannerFeatureDsl.new(ProjectBannerFeature.new)
dsl.instance_eval(&block)
feature = dsl.feature
feature.slug = slug
project_header_commands.push feature
end
def project_header_commands
@project_header_commands ||= []
end
class DeprecatedColumnDsl
def name(value)
@name = value
end
def html(&block)
@render_block = block
end
def ability(&block)
@ability_block = block
end
def add_to(view)
column = view.add_column @name, &@render_block
ability_block = @ability_block
column.ability { ability_block.call(self) } if ability_block
column
end
end
class DeprecatedFieldDsl
attr_reader :label, :render_block
def name(value)
@label = value
end
def html(&block)
@render_block = block
end
def add_to(view)
render_block = @render_block
view.add_field(@label) { |*args| instance_exec(*args, &render_block).html_safe }
end
end
class DeprecatedNavigationDsl
def name(value)
@name = value
end
def path(&block)
@path_block = block
end
def ability(&block)
@ability_block = block
end
def add_to_navigation(slug)
Houston.navigation.add_link(slug, &@path_block).tap do |link|
ability_block = @ability_block
link.ability { ability_block.call(self) } if ability_block
link.name { @name } unless @name == slug.to_s.titleize
end
end
end
class DeprecatedProjectFeatureDsl
def initialize
@field_blocks = []
end
def name(value)
@name = value
end
def path(&block)
@path_block = block
end
def ability(&block)
@ability_block = block
end
def field(_slug, &block)
@field_blocks.push block
end
def add_to_project_features(slug)
raise ArgumentError, "Project Feature must supply name, but #{slug.inspect} doesn't" unless @name
raise ArgumentError, "Project Feature must supply path lambda, but #{slug.inspect} doesn't" unless @path_block
Houston.project_features.add(slug, &@path_block).tap do |feature|
ability_block = @ability_block
feature.ability { |project| ability_block.call(self, project) } if ability_block
feature.name { @name } unless @name == slug.to_s.titleize
@field_blocks.each do |block|
dsl = DeprecatedFieldDsl.new
dsl.instance_eval(&block)
dsl.add_to feature
end
end
end
end
class ProjectBannerFeature
attr_accessor :partial
attr_accessor :ability_block
attr_accessor :slug
def permitted?(ability, project)
return true if ability_block.nil?
ability_block.call ability, project
end
end
class ProjectBannerFeatureDsl
attr_reader :feature
def initialize(feature)
@feature = feature
end
def partial(value)
feature.partial = value
end
def ability(&block)
feature.ability_block = block
end
end
end
end
end