series_joiner 1.1.1 → 1.2.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/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = SeriesJoiner
2
2
 
3
- A gem for joining items in arrays together into grammatically correct series.
3
+ A gem for joining items in arrays together into grammatically correct series, such as "a, b and c".
4
4
 
5
5
  SeriesJoiner extends the <tt>Array</tt> class with a <tt>join_as_series()</tt> method which is similar to the built-in <tt>join()</tt> method. However, <tt>join_as_series()</tt> allows for custom delimiters and conjunctions.
6
6
 
@@ -18,7 +18,7 @@ Add the following to your Gemfile:
18
18
 
19
19
  == Usage
20
20
 
21
- join_as_series() accepts the following options:
21
+ <tt>join_as_series()</tt> accepts the following options:
22
22
 
23
23
  :delimiter # inserted between items, except for the final two (default => ', ')
24
24
  :final_delimiter # inserted between the final two items (if > 2), but before the conjunction (default => '')
@@ -42,10 +42,22 @@ Here are some examples using custom delimiters and/or conjunctions:
42
42
 
43
43
  ['a', 'b', 'c'].join_as_series(:delimiter => '; ', :conjunction => '; or, ') #=> 'a; b; or, c'
44
44
 
45
- The use of the serial comma (i.e. the final comma sometimes used before the conjunction) is much debated in grammar (http://en.wikipedia.org/wiki/Serial_comma). By default, SeriesJoiner does not use the serial comma. However, the <tt>:final_delimiter</tt> option can be set to <tt>','</tt> to include it:
45
+ The use of the serial comma (i.e. the final comma sometimes used before the conjunction) is much debated in grammar circles (http://en.wikipedia.org/wiki/Serial_comma). And who doesn't enjoy a rousing debate about grammar? (Don't answer that)
46
+
47
+ By default, SeriesJoiner sides with The New York Times stylebook and does not use the serial comma. However, so as not to offend adherents to The Chicago Manual of Style, the <tt>:final_delimiter</tt> option can be set to <tt>','</tt> to include it. For example:
46
48
 
47
49
  ['a', 'b', 'c'].join_as_series(:final_delimiter => ',') #=> 'a, b, and c'
48
50
 
51
+ == I18n Support
52
+
53
+ If you're using SeriesJoiner in a project with I18n support, such as Rails, include the following translations for your locales:
54
+
55
+ en:
56
+ series_joiner:
57
+ default_delimiter: ', '
58
+ default_final_delimiter: ''
59
+ default_conjunction: ' and '
60
+
49
61
  == Implementation
50
62
 
51
63
  This gem is generated with jeweler and uses shoulda for testing. To run tests:
@@ -54,11 +66,10 @@ This gem is generated with jeweler and uses shoulda for testing. To run tests:
54
66
 
55
67
  == Notes
56
68
 
57
- This gem may be compared with the Rails ActiveSupport extension to Array <tt>to_sentence()</tt> (https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/conversions.rb). Here are a couple differences:
69
+ This gem's <tt>join_as_series()</tt> method may be compared with the similar <tt>to_sentence()</tt> method implemented in ActiveSupport (https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/conversions.rb). There are several differences:
58
70
  * <tt>to_sentence()</tt> requires ActiveSupport, while <tt>join_as_series</tt> has no dependencies;
59
- * <tt>to_sentence()</tt> has I18n support baken in; and,
60
- * <tt>to_sentence()</tt> implements the serial comma (see definition above) by default, while <tt>join_as_series</tt> does not; and,
61
- * <tt>to_sentence()</tt> requires two options (<tt>:two_words_connector</tt> and <tt>:last_word_connector</tt>) to override a conjunction, instead of the one (<tt>:conjunction</tt>) required by <tt>join_as_series</tt>.
71
+ * <tt>to_sentence()</tt> implements the serial comma (see definition above) by default, while <tt>join_as_series()</tt> does not; and,
72
+ * <tt>to_sentence()</tt> requires two options (<tt>:two_words_connector</tt> and <tt>:last_word_connector</tt>) to override a conjunction, instead of the one (<tt>:conjunction</tt>) required by <tt>join_as_series()</tt>.
62
73
 
63
74
  == License
64
75
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.2.0
data/lib/series_joiner.rb CHANGED
@@ -1,15 +1,24 @@
1
1
  module SeriesJoiner
2
- # join_as_series - join items in an array together in a grammatically correct manner
3
- #
4
- # options:
5
- # :delimiter => inserted between items, except for the final two (default => ',')
6
- # :final_delimiter => inserted between the final two items (if > 2), but before the conjunction (default => '')
7
- # :conjunction => inserted between the final two items (default => 'and')
2
+ # Joins items in an array together in a grammatically correct manner.
8
3
  #
4
+ # Options:
5
+ # * <tt>delimiter</tt> - inserted between items, except for the final two (default: ', ')
6
+ # * <tt>final_delimiter</tt> - inserted between the final two items (if > 2), but before the conjunction (default: '')
7
+ # * <tt>conjunction</tt> - inserted between the final two items (default: ' and ')
9
8
  def join_as_series(options = {})
10
- delimiter = options[:delimiter] || ', '
11
- final_delimiter = options[:final_delimiter] || ''
12
- conjunction = options[:conjunction] || ' and '
9
+ if defined?(I18n)
10
+ default_delimiter = I18n.translate(:'series_joiner.default_delimiter', :locale => options[:locale])
11
+ default_final_delimiter = I18n.translate(:'series_joiner.default_final_delimiter', :locale => options[:locale])
12
+ default_conjunction = I18n.translate(:'series_joiner.default_conjunction', :locale => options[:locale])
13
+ else
14
+ default_delimiter = ', '
15
+ default_final_delimiter = ''
16
+ default_conjunction = ' and '
17
+ end
18
+
19
+ delimiter = options[:delimiter] || default_delimiter
20
+ final_delimiter = options[:final_delimiter] || default_final_delimiter
21
+ conjunction = options[:conjunction] || default_conjunction
13
22
 
14
23
  sz = self.size
15
24
  if sz > 0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{series_joiner}
8
- s.version = "1.1.1"
8
+ s.version = "1.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dan Gebhardt"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: series_joiner
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- - 1
10
- version: 1.1.1
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dan Gebhardt