summary_judgement 1.2.4 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/summary_judgement/instance_methods.rb +50 -14
- data/lib/summary_judgement/summary.rb +15 -1
- data/summary_judgement.gemspec +2 -2
- data/test/helper.rb +6 -0
- data/test/test_summary_judgement.rb +12 -7
- metadata +2 -2
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.3.0
|
|
@@ -42,8 +42,12 @@ module SummaryJudgement
|
|
|
42
42
|
|
|
43
43
|
def summarize_as_branch(options = {})
|
|
44
44
|
result = ''
|
|
45
|
+
leaves = canopy
|
|
46
|
+
options[:verbs] ||= :canopy if leaves.map(&:class).uniq.all? { |k| k.summary.predicate }
|
|
47
|
+
options[:verbs] ||= :branches
|
|
48
|
+
|
|
45
49
|
if conjugation = options.delete(:conjugate)
|
|
46
|
-
options.reverse_merge! :
|
|
50
|
+
options.reverse_merge! :plurality => :singular
|
|
47
51
|
case conjugation
|
|
48
52
|
when String
|
|
49
53
|
options[:person] ||= :third
|
|
@@ -53,25 +57,28 @@ module SummaryJudgement
|
|
|
53
57
|
when TrueClass
|
|
54
58
|
options[:person] ||= :third
|
|
55
59
|
end
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
if options[:verbs] == :canopy and options[:subject]
|
|
61
|
+
result << case options[:subject]
|
|
62
|
+
when String
|
|
63
|
+
options[:subject]
|
|
64
|
+
when Symbol, TrueClass
|
|
65
|
+
Verbs::Conjugator.subject(options.slice(:person, :plurality)).humanize
|
|
66
|
+
end
|
|
67
|
+
elsif options[:verbs] == :branches
|
|
68
|
+
result << Verbs::Conjugator.conjugate(self.class.summary.predicate, options.slice(:person, :subject, :tense, :plurality, :aspect)).to_s
|
|
69
|
+
result = result.humanize unless options[:subject]
|
|
70
|
+
end
|
|
71
|
+
result << ' ' if options[:subject]
|
|
59
72
|
end
|
|
60
73
|
|
|
74
|
+
|
|
61
75
|
verbosity = options.delete(:verbose)
|
|
62
76
|
verbosity = self.class.summary.class.render verbosity, self
|
|
63
77
|
verbosity = canopy.length <= verbosity if verbosity.is_a? Fixnum
|
|
64
78
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
result << leaves.map { |leaf| leaf.summary :capitalize_indefinite_article => false }.unshift(first_leaf.summary(:capitalize_indefinite_article => !conjugation)).to_sentence
|
|
69
|
-
else
|
|
70
|
-
result << canopy.map {|c| c.class}.uniq.map do |k|
|
|
71
|
-
siblings = canopy.select {|c| c.is_a? k}
|
|
72
|
-
siblings.length.to_s + ' ' + k.to_s.underscore.humanize.downcase.pluralize_on(siblings.length)
|
|
73
|
-
end.to_sentence
|
|
74
|
-
end
|
|
79
|
+
tufts = organize_leaves(*leaves)
|
|
80
|
+
first_tuft = tufts.shift
|
|
81
|
+
result << tufts.map { |tuft| summarize_tuft(tuft, conjugation, verbosity, options) }.unshift(summarize_tuft(first_tuft, conjugation, verbosity, options.merge(:capitalize_anonymous => true))).to_sentence(:words_connector => ';', :last_word_connector => '; and ')
|
|
75
82
|
end
|
|
76
83
|
|
|
77
84
|
def summarize_as_bare_branch(options = {})
|
|
@@ -92,6 +99,35 @@ module SummaryJudgement
|
|
|
92
99
|
end
|
|
93
100
|
result << self.class.summary.class.render(self.class.summary.default, self).with_indefinite_article
|
|
94
101
|
end
|
|
102
|
+
|
|
103
|
+
def organize_leaves(*leaves)
|
|
104
|
+
leaves.inject(::ActiveSupport::OrderedHash.new) do |memo, leaf|
|
|
105
|
+
memo[leaf.class] ||= []
|
|
106
|
+
memo[leaf.class] << leaf
|
|
107
|
+
memo
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def summarize_tuft(tuft, conjugation, verbosity, options)
|
|
112
|
+
klass, siblings = tuft
|
|
113
|
+
tuft_summary = ''
|
|
114
|
+
if options[:verbs] == :canopy and conjugation
|
|
115
|
+
tuft_summary << Verbs::Conjugator.conjugate(klass.summary.predicate, options.slice(:person, :tense, :aspect, :plurality).reverse_merge(klass.summary.options_for_conjugation)).to_s
|
|
116
|
+
tuft_summary = tuft_summary.humanize unless options[:subject]
|
|
117
|
+
tuft_summary << ' '
|
|
118
|
+
end
|
|
119
|
+
if verbosity
|
|
120
|
+
if conjugation
|
|
121
|
+
tuft_summary << siblings.map { |leaf| leaf.summary :capitalize_indefinite_article => false }.to_sentence
|
|
122
|
+
else
|
|
123
|
+
first_sibling = siblings.shift
|
|
124
|
+
tuft_summary << siblings.map { |leaf| leaf.summary :capitalize_indefinite_article => false }.unshift(first_sibling.summary(:capitalize_indefinite_article => !options[:subject])).to_sentence
|
|
125
|
+
end
|
|
126
|
+
else
|
|
127
|
+
tuft_summary << siblings.length.to_s + ' ' + klass.to_s.underscore.humanize.downcase.pluralize_on(siblings.length)
|
|
128
|
+
end
|
|
129
|
+
tuft_summary
|
|
130
|
+
end
|
|
95
131
|
|
|
96
132
|
end
|
|
97
133
|
end
|
|
@@ -9,6 +9,8 @@ module SummaryJudgement
|
|
|
9
9
|
@modifiers = options[:modifiers] || []
|
|
10
10
|
@subordinates = options[:subordinates] || []
|
|
11
11
|
@verb = options[:verb]
|
|
12
|
+
@aspect = options[:aspect]
|
|
13
|
+
@tense = options[:tense]
|
|
12
14
|
@placeholder = options[:placeholder]
|
|
13
15
|
end
|
|
14
16
|
|
|
@@ -47,6 +49,18 @@ module SummaryJudgement
|
|
|
47
49
|
@verb
|
|
48
50
|
end
|
|
49
51
|
|
|
52
|
+
def tense(t)
|
|
53
|
+
@tense = t
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def aspect(a)
|
|
57
|
+
@aspect = a
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def options_for_conjugation
|
|
61
|
+
{ :tense => @tense, :aspect => @aspect }
|
|
62
|
+
end
|
|
63
|
+
|
|
50
64
|
def placeholder(p)
|
|
51
65
|
@placeholder = p
|
|
52
66
|
end
|
|
@@ -56,7 +70,7 @@ module SummaryJudgement
|
|
|
56
70
|
end
|
|
57
71
|
|
|
58
72
|
def to_hash
|
|
59
|
-
[:adjectives, :modifiers, :subordinates, :terms, :verb, :placeholder].inject({}) do |properties, property|
|
|
73
|
+
[:adjectives, :modifiers, :subordinates, :terms, :verb, :placeholder, :aspect, :tense].inject({}) do |properties, property|
|
|
60
74
|
val = instance_variable_get :"@#{property}"
|
|
61
75
|
case val
|
|
62
76
|
when Symbol, NilClass, TrueClass, FalseClass, Fixnum
|
data/summary_judgement.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{summary_judgement}
|
|
8
|
-
s.version = "1.
|
|
8
|
+
s.version = "1.3.0"
|
|
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"]
|
|
12
|
-
s.date = %q{2009-12-
|
|
12
|
+
s.date = %q{2009-12-10}
|
|
13
13
|
s.description = %q{Constructs adaptive summaries of object hierarchies based on ActiveRecord associations and other simple relationship structures}
|
|
14
14
|
s.email = %q{andy@rossmeissl.net}
|
|
15
15
|
s.extra_rdoc_files = [
|
data/test/helper.rb
CHANGED
|
@@ -26,6 +26,9 @@ class Book
|
|
|
26
26
|
has.adjective lambda { |book| "#{book.length_in_pages}pp" }, :if => :length_in_pages
|
|
27
27
|
has.identity lambda { |book| book.book_type }
|
|
28
28
|
has.modifier lambda { |book| "by #{book.author}" }, :if => :author
|
|
29
|
+
has.verb :read
|
|
30
|
+
has.aspect :perfect
|
|
31
|
+
has.tense :present
|
|
29
32
|
end
|
|
30
33
|
end
|
|
31
34
|
|
|
@@ -52,6 +55,9 @@ class Magazine
|
|
|
52
55
|
has.adjective lambda { |magazine| "#{magazine.length_in_pages}pp" }, :if => :length_in_pages
|
|
53
56
|
has.identity 'magazine issue'
|
|
54
57
|
has.modifier lambda { |magazine| "from #{magazine.date}" }, :if => :date
|
|
58
|
+
has.verb :skim
|
|
59
|
+
has.aspect :perfect
|
|
60
|
+
has.tense :present
|
|
55
61
|
end
|
|
56
62
|
end
|
|
57
63
|
|
|
@@ -19,7 +19,7 @@ class TestSummaryJudgement < Test::Unit::TestCase
|
|
|
19
19
|
assert_equal Book, @neuromancer.class
|
|
20
20
|
assert_equal Library, @bookshelf.class
|
|
21
21
|
assert_equal 2, @bookshelf.books.length
|
|
22
|
-
assert_equal
|
|
22
|
+
assert_equal 'accept', Verbs::Conjugator.conjugate(:accept, :tense => :present, :person => :first, :plurality => :singular)
|
|
23
23
|
assert_equal 'a', 'one'.indefinite_article
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -52,9 +52,9 @@ class TestSummaryJudgement < Test::Unit::TestCase
|
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
def test_conjugated_summary
|
|
55
|
-
assert_equal 'Has 2 books', @bookshelf.summary(:conjugate => true, :subject => false)
|
|
56
|
-
assert_equal 'You have 2 books', @bookshelf.summary(:conjugate => :second, :subject => true)
|
|
57
|
-
assert_equal 'The catalog contains 2 books and 1 magazine', @catalog.summary(:conjugate => :third, :subject => 'The catalog')
|
|
55
|
+
assert_equal 'Has read 2 books', @bookshelf.summary(:conjugate => true, :subject => false)
|
|
56
|
+
assert_equal 'You have 2 books', @bookshelf.summary(:conjugate => :second, :subject => true, :verbs => :branches)
|
|
57
|
+
assert_equal 'The catalog contains 2 books and 1 magazine', @catalog.summary(:conjugate => :third, :subject => 'The catalog', :verbs => :branches)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def test_verbose_summaries
|
|
@@ -62,7 +62,7 @@ class TestSummaryJudgement < Test::Unit::TestCase
|
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def test_conjugated_verbose_summaries
|
|
65
|
-
assert_equal 'I have a novel by William Gibson and an illustrated childrens book by Maurice Sendak', @bookshelf.summary(:verbose => true, :conjugate => :first, :subject => true)
|
|
65
|
+
assert_equal 'I have read a novel by William Gibson and an illustrated childrens book by Maurice Sendak', @bookshelf.summary(:verbose => true, :conjugate => :first, :subject => true)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def test_summaries_with_adaptive_verbosity
|
|
@@ -71,8 +71,8 @@ class TestSummaryJudgement < Test::Unit::TestCase
|
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
def test_conjugated_summaries_with_adaptive_verbosity
|
|
74
|
-
assert_equal 'They have 2 books', @bookshelf.summary(:verbose => :small?, :conjugate => :third, :plurality => :plural, :subject => true)
|
|
75
|
-
assert_equal 'They have a novel by William Gibson', @bedstand.summary(:verbose => :small?, :conjugate => :third, :plurality => :plural, :subject => true)
|
|
74
|
+
assert_equal 'They have read 2 books', @bookshelf.summary(:verbose => :small?, :conjugate => :third, :plurality => :plural, :subject => true)
|
|
75
|
+
assert_equal 'They have read a novel by William Gibson', @bedstand.summary(:verbose => :small?, :conjugate => :third, :plurality => :plural, :subject => true)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def test_inheritance
|
|
@@ -91,4 +91,9 @@ class TestSummaryJudgement < Test::Unit::TestCase
|
|
|
91
91
|
def test_empty_state
|
|
92
92
|
assert_equal 'You have an empty shelf', @new_releases.summary(:conjugate => :second, :subject => true)
|
|
93
93
|
end
|
|
94
|
+
|
|
95
|
+
def test_conjugated_summary_with_multiple_verbs
|
|
96
|
+
assert_equal 'I have read 2 books and have skimmed 1 magazine', @catalog.summary(:conjugate => :first, :subject => true, :aspect => :perfect)
|
|
97
|
+
assert_equal 'I have read a novel by William Gibson and an illustrated childrens book by Maurice Sendak and have skimmed a magazine issue from December 2009', @catalog.summary(:conjugate => :first, :subject => true, :aspect => :perfect, :verbose => true)
|
|
98
|
+
end
|
|
94
99
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: summary_judgement
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andy Rossmeissl
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2009-12-
|
|
12
|
+
date: 2009-12-10 00:00:00 -05:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies: []
|
|
15
15
|
|