stringex 2.0.2 → 2.0.3

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Mjk4ZWZjOTA4ODlmMDVmOWQ0YzFkNTc4ZWRiNTkzMzY5MTU3OTVkNA==
4
+ YmMxOWVlZjNkYzk5YTMyOWM1MGViNWNjZWE3Y2EyYzc4OGNiZTJiNA==
5
5
  data.tar.gz: !binary |-
6
- YzcwNWY5M2YxYWY3OTZiMDJkOTIyMGM2MDVkNjRkOTU4Y2FjNmU2NQ==
6
+ NWM2ZjYwODhmZDU3ZDk0MzQzM2U4YmE2MGE5YzE0MzhmYzVmZWI5YQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NzVkMGNjNTVjMWY1NTk3YTdkYjRkNzdkNjg1Y2U0ZWRkOTJhZDZiYjliZmYx
10
- MGU5YTAwZDVkOTIwMWY4NDZjMWQxYzZiMDEwMDY0NDg3ZGI0NmMyMjg4YjE5
11
- ZjE3M2Y0MWU5OTJlYzMwMDY4ZmFmMGNiMTIzM2QxOGVlNDlkMzM=
9
+ MGI1Y2FiMGVhOGNmMjE4MmQwZDMyYjkwNzY2YzA0ZWQwN2I5NjAzZTZiODll
10
+ ZDRkZTdlOWVhMDkxYmQxOTE2OWYyM2IwZjdjMzk4ZTRmMGE2M2ZjYTBjYjdj
11
+ MDNhNDExZTIyNGJjMDE3OTk1NjA3NWFjMjFlYzYxMzI5ZDA1MjQ=
12
12
  data.tar.gz: !binary |-
13
- YzI1YzdjMWMwOGE2OGQ2MWExNzZhYWFmNjVmZTFkOTg1NmI3NTQyMzEzNGIz
14
- NmU1ZGM4YmQ4YjZiZDRjZGE0Mzg0OGIxMDUyOTgwOGEyZjEzZGRlOThkNGU1
15
- YjYzNmUxMzJkNDFiNDUwZDZjM2Q4YmQwOGYzMzA1OTlkYTZiNTA=
13
+ NTdlMjBlMWZmOGQ4YzBiNjk1MWExNGQyNTRiOTgxYjUxZjY1OTUwZTg3Mzgy
14
+ MWNhNzQ2YmQ2NjQ1MjM2YjAwMDBjYmUwZTRiN2JiZGIyZTJhNTlhMGJjNzIy
15
+ MzYyZGNjNGRiZjNiMDQ4MjA5Yzg5NTk5ZWMyODBjOGY0N2ZhNTM=
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.2
1
+ 2.0.3
@@ -11,7 +11,7 @@ module Stringex
11
11
  private
12
12
 
13
13
  def klass_previous_instances(&block)
14
- klass.find_each(:conditions => {settings.url_attribute => nil}, &block)
14
+ klass.find_each(:conditions => {settings.url_attribute => [nil, '']}, &block)
15
15
  end
16
16
 
17
17
  def self.orm_class
@@ -2,7 +2,7 @@ module Stringex
2
2
  module ActsAsUrl
3
3
  module Adapter
4
4
  class Base
5
- attr_accessor :base_url, :configuration, :instance, :klass, :settings
5
+ attr_accessor :base_url, :callback_options, :configuration, :instance, :klass, :settings
6
6
 
7
7
  def initialize(configuration)
8
8
  ensure_loadable
@@ -12,6 +12,7 @@ module Stringex
12
12
 
13
13
  def create_callbacks!(klass)
14
14
  self.klass = klass
15
+ self.callback_options = {}
15
16
  create_method_to_callback
16
17
  create_callback
17
18
  end
@@ -68,10 +69,24 @@ module Stringex
68
69
  end
69
70
 
70
71
  def create_callback
71
- if settings.sync_url
72
- klass.before_validation :ensure_unique_url
73
- else
74
- klass.before_validation :ensure_unique_url, :on => :create
72
+ klass.send klass_callback_method, :ensure_unique_url, callback_options
73
+ end
74
+
75
+ def klass_callback_method
76
+ settings.sync_url ? klass_sync_url_callback_method : klass_non_sync_url_callback_method
77
+ end
78
+
79
+ def klass_sync_url_callback_method
80
+ configuration.settings.callback_method
81
+ end
82
+
83
+ def klass_non_sync_url_callback_method
84
+ case configuration.settings.callback_method
85
+ when :before_save
86
+ :before_create
87
+ else # :before_validation
88
+ callback_options[:on] = :create
89
+ configuration.settings.callback_method
75
90
  end
76
91
  end
77
92
 
@@ -11,14 +11,8 @@ module Stringex
11
11
  private
12
12
 
13
13
  def create_callback
14
- if settings.sync_url
15
- klass.class_eval do
16
- before :save, :ensure_unique_url
17
- end
18
- else
19
- klass.class_eval do
20
- before :create, :ensure_unique_url
21
- end
14
+ klass.class_eval do
15
+ before acts_as_url_configuration.settings.sync_url ? :save : :create, :ensure_unique_url
22
16
  end
23
17
  end
24
18
 
@@ -39,7 +33,7 @@ module Stringex
39
33
  end
40
34
 
41
35
  def klass_previous_instances(&block)
42
- klass.all(:conditions => {settings.url_attribute => nil}).each(&block)
36
+ klass.all(:conditions => {settings.url_attribute => [nil]}).each(&block)
43
37
  end
44
38
 
45
39
  def primary_key
@@ -25,7 +25,7 @@ module Stringex
25
25
  end
26
26
 
27
27
  def klass_previous_instances(&block)
28
- klass.where(settings.url_attribute => nil).to_a.each(&block)
28
+ klass.all(settings.url_attribute => [nil]).to_a.each(&block)
29
29
  end
30
30
 
31
31
  def self.orm_class
@@ -31,6 +31,7 @@ module Stringex
31
31
  def self.default_settings
32
32
  @default_settings ||= {
33
33
  :allow_duplicates => false,
34
+ :callback_method => :before_validation,
34
35
  :duplicate_count_separator => "-",
35
36
  :enforce_uniqueness_on_sti_class => false,
36
37
  :only_when_blank => false,
@@ -77,7 +77,7 @@ module Stringex
77
77
  end
78
78
 
79
79
  def convert(string, options = {}, &block)
80
- converter = Converter.new(string)
80
+ converter = Converter.new(string, options)
81
81
  converter.instance_exec &block
82
82
  converter.smart_strip!
83
83
  converter.string
@@ -25,7 +25,7 @@ module Stringex
25
25
  }
26
26
 
27
27
  # Things that just get converted to spaces
28
- CLEANUP_CHARACTERS = /[\.,:;(){}\[\]\/\?!\^'ʼ"_\|]/
28
+ CLEANUP_CHARACTERS = /[\.,:;(){}\[\]\?!\^'ʼ"_\|]/
29
29
  CLEANUP_HTML_ENTITIES = /&[^;]+;/
30
30
 
31
31
  CURRENCIES_SUPPORTED_SIMPLE = {
@@ -33,11 +33,13 @@ module Stringex
33
33
  :euros => /€/,
34
34
  :pounds => /£/,
35
35
  :yen => /¥/,
36
+ :reais => /R$/
36
37
  }
37
38
  CURRENCIES_SUPPORTED_COMPLEX = {
38
39
  :dollars => :dollars_cents,
39
40
  :euros => :euros_cents,
40
41
  :pounds => :pounds_pence,
42
+ :reais => :reais_cents
41
43
  }
42
44
  CURRENCIES_SUPPORTED = Regexp.new(CURRENCIES_SUPPORTED_SIMPLE.values.join('|'))
43
45
  CURRENCIES_SIMPLE = CURRENCIES_SUPPORTED_SIMPLE.inject({}) do |hash, content|
@@ -52,7 +52,7 @@ module Stringex
52
52
  # you should run any methods which convert HTML entities (convert_accented_html_entities and convert_miscellaneous_html_entities)
53
53
  # before running this method.
54
54
  def convert_miscellaneous_characters(options = {})
55
- stringex_convert do
55
+ stringex_convert(options) do
56
56
  translate! :ellipses, :currencies, :abbreviations, :characters, :apostrophes
57
57
  cleanup_characters!
58
58
  end
data/locales/da.yml CHANGED
@@ -26,6 +26,8 @@ da:
26
26
  euros: \1 euro
27
27
  euros_cents: \1 euro \2 cent
28
28
  yen: \1 yen
29
+ reais: \1 reais
30
+ reais_cents: \1 reais \2 cents
29
31
  html_entities:
30
32
  amp: and
31
33
  cent: " cents"
data/locales/en.yml CHANGED
@@ -26,6 +26,8 @@ en:
26
26
  euros: \1 euros
27
27
  euros_cents: \1 euros \2 cents
28
28
  yen: \1 yen
29
+ reais: \1 reais
30
+ reais_cents: \1 reais \2 cents
29
31
  html_entities:
30
32
  amp: and
31
33
  cent: " cents"
data/locales/pt-BR.yml ADDED
@@ -0,0 +1,68 @@
1
+ # NOTE: Some translation keys make use of matches from regular expressions
2
+ # to manipulate whitespace and order. Please consult the source code for
3
+ # Stringex::Localization::ConversionExpressions to see what those
4
+ # regular expressions look like if you need to manipulate the order
5
+ # differently than the usage below.
6
+ pt-BR:
7
+ stringex:
8
+ characters:
9
+ and: e
10
+ at: em
11
+ divide: dividido por
12
+ degrees: graus
13
+ dot: \1 ponto \2
14
+ ellipsis: reticências
15
+ equals: igual à
16
+ number: número
17
+ percent: porcento
18
+ plus: mais
19
+ slash: barra
20
+ star: estrela
21
+ currencies:
22
+ dollars: \1 dólares
23
+ dollars_cents: \1 dólares \2 cents
24
+ pounds: \1 libras
25
+ pounds_pence: \1 libras \2 centavos
26
+ euros: \1 euros
27
+ euros_cents: \1 euros \2 cents
28
+ yen: \1 yen
29
+ reais: \1 reais
30
+ reais_cents: \1 reais \2 centavos
31
+ html_entities:
32
+ amp: e
33
+ cent: " centavos"
34
+ copy: (c)
35
+ deg: " graus "
36
+ divide: " dividido por "
37
+ double_quote: '"'
38
+ ellipsis: "..."
39
+ en_dash: "-"
40
+ em_dash: "--"
41
+ frac14: um quarto
42
+ frac12: metade
43
+ frac34: três quartos
44
+ gt: ">"
45
+ lt: <
46
+ nbsp: " "
47
+ pound: " libras "
48
+ reg: (r)
49
+ single_quote: "'"
50
+ times: x
51
+ trade: (tm)
52
+ yen: " yen "
53
+ vulgar_fractions:
54
+ half: metade
55
+ one_third: um terço
56
+ two_thirds: dois terços
57
+ one_fourth: um quarto
58
+ three_fourths: três quartos
59
+ one_fifth: um quinto
60
+ two_fifths: dois quintos
61
+ three_fifths: três quintos
62
+ four_fifths: quatro quintos
63
+ one_sixth: um sexto
64
+ five_sixths: cinco sextos
65
+ one_eighth: um oitavo
66
+ three_eighths: três oitavos
67
+ five_eighths: cinco oitavos
68
+ seven_eighths: sete oitavos
data/stringex.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "stringex"
8
- s.version = "2.0.2"
8
+ s.version = "2.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Russell Norris"]
12
- s.date = "2013-06-03"
12
+ s.date = "2013-06-17"
13
13
  s.description = "Some [hopefully] useful extensions to Ruby's String class. Stringex is made up of three libraries: ActsAsUrl [permalink solution with better character translation], Unidecoder [Unicode to ASCII transliteration], and StringExtensions [miscellaneous helper methods for the String class]."
14
14
  s.email = "rsl@luckysneaks.com"
15
15
  s.extra_rdoc_files = [
@@ -228,6 +228,7 @@ Gem::Specification.new do |s|
228
228
  "lib/stringex/version.rb",
229
229
  "locales/da.yml",
230
230
  "locales/en.yml",
231
+ "locales/pt-BR.yml",
231
232
  "stringex.gemspec",
232
233
  "test/acts_as_url/adapter/active_record.rb",
233
234
  "test/acts_as_url/adapter/data_mapper.rb",
@@ -188,6 +188,23 @@ class ActsAsUrlIntegrationTest < Test::Unit::TestCase
188
188
  end
189
189
  end
190
190
 
191
+ def test_should_mass_initialize_empty_string_urls
192
+ @doc = Document.create(:title => "Initial")
193
+ @other_doc = Document.create(:title => "Subsequent")
194
+ adapter_specific_update @doc, :url => ''
195
+ adapter_specific_update @other_doc, :url => ''
196
+ # Just making sure this got unset before the real test
197
+ assert_equal '', @doc.url
198
+ assert_equal '', @other_doc.url
199
+
200
+ Document.initialize_urls
201
+
202
+ @doc.reload
203
+ @other_doc.reload
204
+ assert_equal "initial", @doc.url
205
+ assert_equal "subsequent", @other_doc.url
206
+ end
207
+
191
208
  def test_should_allow_using_custom_method_for_generating_url
192
209
  Document.class_eval do
193
210
  acts_as_url :non_attribute_method
@@ -291,4 +308,22 @@ class ActsAsUrlIntegrationTest < Test::Unit::TestCase
291
308
  @doc_2 = AnotherSTIChildDocument.create(:title => "Unique")
292
309
  assert_equal "unique-1", @doc_2.url
293
310
  end
311
+
312
+ def test_should_strip_slashes_by_default
313
+ Document.class_eval do
314
+ acts_as_url :title
315
+ end
316
+
317
+ @doc = Document.create(:title => "a b/c d")
318
+ assert_equal "a-b-slash-c-d", @doc.url
319
+ end
320
+
321
+ def test_should_allow_slashes_to_be_allowed
322
+ Document.class_eval do
323
+ acts_as_url :title, :allow_slash => true
324
+ end
325
+
326
+ @doc = Document.create(:title => "a b/c d")
327
+ assert_equal "a-b/c-d", @doc.url
328
+ end
294
329
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stringex
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Russell Norris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-03 00:00:00.000000000 Z
11
+ date: 2013-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -386,6 +386,7 @@ files:
386
386
  - lib/stringex/version.rb
387
387
  - locales/da.yml
388
388
  - locales/en.yml
389
+ - locales/pt-BR.yml
389
390
  - stringex.gemspec
390
391
  - test/acts_as_url/adapter/active_record.rb
391
392
  - test/acts_as_url/adapter/data_mapper.rb