leap 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.4
1
+ 0.4.5
data/leap.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{leap}
8
- s.version = "0.4.4"
8
+ s.version = "0.4.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andy Rossmeissl", "Seamus Abshere"]
12
- s.date = %q{2010-10-28}
12
+ s.date = %q{2010-11-04}
13
13
  s.description = %q{Leap to conclusions}
14
14
  s.email = %q{andy@rossmeissl.net}
15
15
  s.extra_rdoc_files = [
@@ -9,11 +9,11 @@ module Leap
9
9
  @quorums = []
10
10
  end
11
11
 
12
- def report(characteristics, considerations, options = {})
12
+ def report(subject, characteristics, considerations, options = {})
13
13
  quorums.grab do |quorum|
14
14
  next unless quorum.satisfied_by? characteristics and quorum.complies_with? Array.wrap(options[:comply])
15
15
  if conclusion = quorum.acknowledge(characteristics.slice(*quorum.characteristics), considerations.dup)
16
- ::Leap::Report.new self, quorum => conclusion
16
+ ::Leap::Report.new subject, self, quorum => conclusion
17
17
  end
18
18
  end
19
19
  end
data/lib/leap/decision.rb CHANGED
@@ -8,10 +8,11 @@ module Leap
8
8
  @committees = []
9
9
  end
10
10
 
11
- def make(characteristics, *considerations)
11
+ def make(subject, *considerations)
12
+ characteristics = subject.send(subject.class.decisions[goal].signature_method)
12
13
  options = considerations.extract_options!
13
14
  committees.reject { |c| characteristics.keys.include? c.name }.reverse.inject(Deliberation.new(characteristics)) do |deliberation, committee|
14
- if report = committee.report(deliberation.characteristics, considerations, options)
15
+ if report = committee.report(subject, deliberation.characteristics, considerations, options)
15
16
  deliberation.reports.unshift report
16
17
  deliberation.characteristics[committee.name] = report.conclusion
17
18
  end
data/lib/leap/report.rb CHANGED
@@ -2,19 +2,28 @@ module Leap
2
2
  class Report
3
3
  include XmlSerializer
4
4
 
5
- attr_reader :committee, :conclusion, :quorum
5
+ attr_reader :subject, :committee, :conclusion, :quorum
6
6
 
7
- def initialize(committee, report)
7
+ def initialize(subject, committee, report)
8
8
  raise ArgumentError, 'Reports must identify themselves' unless committee.is_a?(::Leap::Committee)
9
+ @subject = subject
9
10
  @committee = committee
10
11
  raise ArgumentError, 'Please report with quorum => conclusion' unless report.is_a?(Hash) and report.length == 1
11
12
  @quorum, @conclusion = report.first
12
13
  end
13
14
 
15
+ def formatted_conclusion
16
+ return @formatted_conclusion unless @formatted_conclusion.nil?
17
+ if characteristic = subject.class.characteristics[committee.name]
18
+ @formatted_conclusion = characteristic.display committee.name => conclusion
19
+ end
20
+ @formatted_conclusion ||= conclusion
21
+ end
22
+
14
23
  def as_json(*)
15
24
  {
16
25
  'committee' => committee.as_json,
17
- 'conclusion' => conclusion,
26
+ 'conclusion' => formatted_conclusion,
18
27
  'quorum' => quorum.as_json
19
28
  }
20
29
  end
@@ -23,7 +32,7 @@ module Leap
23
32
  super options do |xml|
24
33
  xml.report do |report_block|
25
34
  committee.to_xml(options.merge :skip_instruct => true, :builder => report_block)
26
- report_block.conclusion conclusion, :type => conclusion.class.to_s.downcase
35
+ report_block.conclusion formatted_conclusion, :type => formatted_conclusion.class.to_s.downcase
27
36
  quorum.to_xml(options.merge :skip_instruct => true, :builder => report_block)
28
37
  end
29
38
  end
data/lib/leap/subject.rb CHANGED
@@ -12,7 +12,7 @@ module Leap
12
12
  define_method goal do |*considerations|
13
13
  options = considerations.extract_options!
14
14
  @deliberations ||= {}
15
- @deliberations[goal] = self.class.decisions[goal].make(send(self.class.decisions[goal].signature_method), *considerations.push(options))
15
+ @deliberations[goal] = self.class.decisions[goal].make(self, *considerations.push(options))
16
16
  @deliberations[goal][goal] or raise ::Leap::NoSolutionError
17
17
  end
18
18
  end
@@ -1,22 +1,33 @@
1
1
  require 'helper'
2
2
 
3
+ class Vagabond
4
+ include Characterizable
5
+
6
+ characterize do
7
+ has :scruples
8
+ has :tenacity do
9
+ displays { |t| "ferocious" }
10
+ end
11
+ end
12
+ end
13
+
3
14
  class Leap::ReportTest < Test::Unit::TestCase
4
15
  context 'to_xml' do
5
16
  should 'serialize to xml' do
6
17
  choc = Leap::Quorum.new('with chocolate chips', {}, Proc.new {})
7
18
  mac = Leap::Quorum.new('with macadamia nuts', {}, Proc.new {})
8
- committee = Leap::Committee.new 'Senate Committee on Chocolate Cookies'
19
+ committee = Leap::Committee.new :scruples
9
20
  committee.instance_variable_set :@quorums, [choc, mac]
10
21
 
11
- report = Leap::Report.new committee, choc => 'good'
22
+ report = Leap::Report.new Vagabond.new, committee, choc => 'good'
12
23
 
13
24
  output = ''
14
25
  report.to_xml(:target => output)
15
- assert_equal(<<XML, output)
26
+ assert_equal(<<-XML, output)
16
27
  <?xml version=\"1.0\" encoding=\"UTF-8\"?>
17
28
  <report>
18
29
  <committee>
19
- <name type="string">Senate Committee on Chocolate Cookies</name>
30
+ <name type="string">scruples</name>
20
31
  <quorums type="array">
21
32
  <quorum>
22
33
  <name type="string">with chocolate chips</name>
@@ -49,7 +60,75 @@ class Leap::ReportTest < Test::Unit::TestCase
49
60
  </complies>
50
61
  </quorum>
51
62
  </report>
52
- XML
63
+ XML
64
+ end
65
+ should 'use a custom conclusion' do
66
+ choc = Leap::Quorum.new('with chocolate chips', {}, Proc.new {})
67
+ mac = Leap::Quorum.new('with macadamia nuts', {}, Proc.new {})
68
+ committee = Leap::Committee.new :tenacity
69
+ committee.instance_variable_set :@quorums, [choc, mac]
70
+
71
+ report = Leap::Report.new Vagabond.new, committee, choc => 'tough'
72
+
73
+ output = ''
74
+ report.to_xml :target => output
75
+ assert_equal(<<-XML, output)
76
+ <?xml version=\"1.0\" encoding=\"UTF-8\"?>
77
+ <report>
78
+ <committee>
79
+ <name type="string">tenacity</name>
80
+ <quorums type="array">
81
+ <quorum>
82
+ <name type="string">with chocolate chips</name>
83
+ <requirements type="array">
84
+ </requirements>
85
+ <appreciates type="array">
86
+ </appreciates>
87
+ <complies type="array">
88
+ </complies>
89
+ </quorum>
90
+ <quorum>
91
+ <name type="string">with macadamia nuts</name>
92
+ <requirements type="array">
93
+ </requirements>
94
+ <appreciates type="array">
95
+ </appreciates>
96
+ <complies type="array">
97
+ </complies>
98
+ </quorum>
99
+ </quorums>
100
+ </committee>
101
+ <conclusion type="string">ferocious</conclusion>
102
+ <quorum>
103
+ <name type="string">with chocolate chips</name>
104
+ <requirements type="array">
105
+ </requirements>
106
+ <appreciates type="array">
107
+ </appreciates>
108
+ <complies type="array">
109
+ </complies>
110
+ </quorum>
111
+ </report>
112
+ XML
113
+ end
114
+ end
115
+
116
+ context 'formatted_conclusion' do
117
+ should 'return the regular conclusion if there is no custom format for the conclusion corresponding characteristic' do
118
+ choc = Leap::Quorum.new('with chocolate chips', {}, Proc.new {})
119
+ committee = Leap::Committee.new :scruples
120
+ committee.instance_variable_set :@quorums, [choc]
121
+
122
+ report = Leap::Report.new Vagabond.new, committee, choc => 'good'
123
+ assert_equal 'good', report.formatted_conclusion
124
+ end
125
+ should 'return the formatted conclusion if there is a custom format for the conclusion corresponding characteristic' do
126
+ choc = Leap::Quorum.new('with chocolate chips', {}, Proc.new {})
127
+ committee = Leap::Committee.new :tenacity
128
+ committee.instance_variable_set :@quorums, [choc]
129
+
130
+ report = Leap::Report.new Vagabond.new, committee, choc => 'good'
131
+ assert_equal 'ferocious', report.formatted_conclusion
53
132
  end
54
133
  end
55
134
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 4
9
- version: 0.4.4
8
+ - 5
9
+ version: 0.4.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andy Rossmeissl
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-28 00:00:00 -04:00
18
+ date: 2010-11-04 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency