Sha256: 9f220d2a153fc54c6388a8da8e19691e1f14696294c1b5d9538ce02dc492044f
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
module StairMaster class Step attr_accessor :label, :path, :conditions def initialize(label, path, conditions) @label = label @path = path @conditions = build_conditions conditions end ## Methods -------------------------------------------- def available?(context) rules = @conditions[:availability] ( rules.empty? ? [true] : test_rules(rules, context) ).all? end def skip?(context) rules = @conditions[:skippable] ( rules.empty? ? [false] : test_rules(rules, context) ).all? end def test_rules(rules, context) results = [] rules.each{ |condition| results << condition.test(context) } results end def url_for(resources=[], options={}) begin Rails.application.routes.url_helpers.send @path.to_sym, resources, options rescue raise RuntimeError, "Could not find the route '#{ @path }' in your application." end end private # --------------------------------------------- def build_conditions(conditions) conditions = conditions.empty? ? {} : conditions.first availability_rules = [] skip_rules = [] conditions.each do |k,v| condition_type, type = k.to_s.split('_').map{ |v| v.to_sym } if condition_type == :available ## It is an "availability" condition availability_rules << ::StairMaster::Conditions::Availability.new(self, type, v) elsif condition_type == :skip ## It is a "skip" condition skip_rules << ::StairMaster::Conditions::Skippable.new(self, type, v) else ## We don't know what this type of condition is so raise an exception raise RuntimeError, "Unknown type for: #{ k }" end end { availability: availability_rules, skippable: skip_rules } end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
stair_master-0.0.1 | lib/stair_master/step.rb |