Add foodsoft expansion variables for wiki
This commit is contained in:
parent
be128243fc
commit
9df483cf4e
2 changed files with 91 additions and 0 deletions
87
lib/foodsoft/expansion_variables.rb
Normal file
87
lib/foodsoft/expansion_variables.rb
Normal file
|
@ -0,0 +1,87 @@
|
|||
module Foodsoft
|
||||
# Variable expansions for user-specified texts.
|
||||
#
|
||||
# This is used in wiki-pages and the footer, for example, to allow foodcoops
|
||||
# to show dynamic information in the text.
|
||||
#
|
||||
# Plugins can modify the variables by means of the `#variables` accessor.
|
||||
# Please be thoughful when choosing names as to avoid collisions.
|
||||
# Do not put non-public info in variables.
|
||||
module ExpansionVariables
|
||||
|
||||
ACTIVE_MONTHS = 3
|
||||
|
||||
# @return [Hash] Variables and their values
|
||||
cattr_accessor :variables
|
||||
|
||||
# Hash of variables. Note that keys are Strings.
|
||||
@@variables = {
|
||||
'scope' => ->{ FoodsoftConfig.scope },
|
||||
'name' => ->{ FoodsoftConfig[:name] },
|
||||
'contact.street' => ->{ FoodsoftConfig[:contact][:street] },
|
||||
'contact.zip_code' => ->{ FoodsoftConfig[:contact][:zip_code] },
|
||||
'contact.city' => ->{ FoodsoftConfig[:contact][:city] },
|
||||
'contact.country' => ->{ FoodsoftConfig[:contact][:country] },
|
||||
'contact.email' => ->{ FoodsoftConfig[:contact][:email] },
|
||||
'contact.phone' => ->{ FoodsoftConfig[:contact][:phone] },
|
||||
'price_markup' => ->{ FoodsoftConfig[:price_markup] },
|
||||
'homepage' => ->{ FoodsoftConfig[:homepage] },
|
||||
|
||||
'help_url' => ->{ FoodsoftConfig[:help_url] },
|
||||
'applepear_url' => ->{ FoodsoftConfig[:applepear_url] },
|
||||
|
||||
'foodsoft.url' => ->{ FoodsoftConfig[:foodsoft_url] },
|
||||
'foodsoft.version' => Foodsoft::VERSION,
|
||||
'foodsoft.revision' => Foodsoft::REVISION,
|
||||
|
||||
'user_count' => ->{ User.count },
|
||||
'ordergroup_count' => ->{ Ordergroup.undeleted.count },
|
||||
'active_ordergroup_count' => ->{ active_ordergroup_count },
|
||||
'supplier_count' => ->{ Supplier.undeleted.count },
|
||||
'active_supplier_count' => ->{ active_supplier_count },
|
||||
'active_suppliers' => ->{ active_suppliers },
|
||||
'first_order_date' => ->{ I18n.l Order.first.created_at.to_date }
|
||||
}
|
||||
|
||||
# Return expanded variable
|
||||
# @return [String] Expanded variable
|
||||
def self.get(var)
|
||||
s = @@variables[var.to_s]
|
||||
s.respond_to?(:call) ? s.call : s.to_s
|
||||
end
|
||||
|
||||
# Expand variables in a string
|
||||
# @param str [String] String to expand variables in
|
||||
# @param options [Hash<String, String>] Extra variables to expand
|
||||
# @return [String] Expanded string
|
||||
def self.expand(str, options = {})
|
||||
str.gsub /{{([._a-zA-Z0-9]+)}}/ do
|
||||
options[$1] || self.get($1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# @return [Number] Number of ordergroups that have been active in the past 3 months
|
||||
def self.active_ordergroup_count
|
||||
GroupOrder
|
||||
.where('updated_on > ?', ACTIVE_MONTHS.months.ago)
|
||||
.select(:ordergroup_id).distinct.count
|
||||
end
|
||||
|
||||
# @return [Number] Number of suppliers that has been ordered from in the past 3 months
|
||||
def self.active_supplier_count
|
||||
Order
|
||||
.where('starts > ?', ACTIVE_MONTHS.months.ago)
|
||||
.select(:supplier_id).distinct.count
|
||||
end
|
||||
|
||||
# @return [String] Comma-separated list of suppliers that has been ordered from in the past 3 months
|
||||
def self.active_suppliers
|
||||
Supplier.joins(:orders)
|
||||
.where('orders.starts > ?', ACTIVE_MONTHS.months.ago)
|
||||
.order(:name).select(:name).distinct
|
||||
.map(&:name).join(', ')
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -1,6 +1,10 @@
|
|||
module FoodsoftWiki
|
||||
class WikiParser < WikiCloth::Parser
|
||||
|
||||
template do |template|
|
||||
Foodsoft::ExpansionVariables.get(template)
|
||||
end
|
||||
|
||||
url_for do |page|
|
||||
url_for page
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue