cheddar 0.0.3 → 0.0.4

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/cheddar.rb +80 -49
  3. metadata +9 -11
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 46e6d76d91fcc1401a912c50c6a01a0cb1d2d2b9
4
+ data.tar.gz: bcbbd764a9fc97eec108dffbbd8bed5417121315
5
+ SHA512:
6
+ metadata.gz: 2a11b959c6cd0c0abeb0173c73632845b0921515eee0e5c7277da4b7763227cf9175928ddfcf1975b312a27906eef50a3e59cff41d510761757dd106543d156a
7
+ data.tar.gz: d9a3f93df28e8ac9cc7ee1879a9c5bccaf6255eb043777833a649d5066db87afb048a40bc682fbd12b467f573a1616533e71b73a24a4c1c9ff141e8f548f583c
@@ -1,60 +1,91 @@
1
- class String
2
- def human_to_number(slang_enabled=false)
3
- mapping = {hundred: 100, thousand: 1000}
4
- %w(m b tr quadr quint sext sept oct non dec undec duodec tredec quattuordec quindec sexdec septemdec octodec novemdec vigint).inject(1000) do |m,p|
5
- mapping["#{p}illion"] = 1000 * m
6
- end
1
+ class Cheddar
2
+
3
+ attr_accessor :enabled_dialects
4
+
5
+ def initialize
6
+ @mapping = {}
7
+ @enabled_dialects = []
8
+ end
9
+
10
+ def available_dialects
11
+ @mapping.keys
12
+ end
7
13
 
8
- if slang_enabled ||
9
- (defined? String::SLANG_ENABLED &&
10
- String::SLANG_ENABLED)
11
- slang = {
12
- bacon: 1,
13
- benjamin: 100,
14
- 'big ones' => 1000,
15
- bills: 1,
16
- bread: 1,
17
- buck: 1,
18
- cabbage: 1,
19
- cash: 1,
20
- cheddar: 1,
21
- cheese: 1,
22
- clams: 1,
23
- 'c-note' => 100,
24
- 'dead presidents' => 1,
25
- dolla: 1,
26
- dollar: 1,
27
- 'double sawbuck' => 20,
28
- dough: 1,
29
- fin: 5,
30
- green: 1,
31
- greenback: 1,
32
- jackson: 100,
33
- kale: 1,
34
- large: 1000,
35
- lettuce: 1,
36
- 'long green' => 1,
37
- loot: 1,
38
- moolah: 1,
39
- paper: 1,
40
- potato: 1,
41
- potatoes: 1,
42
- sawbuck: 10,
43
- scratch: 1,
44
- scrip: 1,
45
- twankie: 100
46
- }
47
- mapping.merge! slang
14
+ def cheddarize
15
+ String.send(:define_method, :human_to_number) do
16
+ Cheddar.parse(self)
48
17
  end
18
+ end
49
19
 
50
- str = self.downcase
20
+ def define(word, number)
21
+ @mapping[@current_dialect] ||= {}
22
+ @mapping[@current_dialect][word] = number
23
+ end
24
+
25
+ def dialect(dia)
26
+ @current_dialect = dia
27
+ yield self.class.instance if block_given?
28
+ @mapping[dia]
29
+ end
30
+
31
+ def parse(string)
32
+ str = string.downcase
51
33
 
52
- mapping.each do |num_name, value|
53
- str.gsub!(num_name.to_s, "* #{value}")
34
+ @enabled_dialects.each do |d|
35
+ @mapping[d].each do |num_name, value|
36
+ unless num_name.is_a? Regexp
37
+ str.gsub!(Regexp.new("(^|\s)#{num_name.to_s}($|\s)"), "* #{value}")
38
+ else
39
+ str.gsub!(num_name, "* #{value}")
40
+ end
41
+ end
54
42
  end
55
43
 
56
44
  str.gsub!(/[^\d\*\.]/, '')
57
45
 
58
46
  eval(str)
59
47
  end
48
+
49
+ def self.cheddarize
50
+ self.instance.cheddarize
51
+ end
52
+
53
+ def self.config
54
+ yield self.instance if block_given?
55
+ self.instance
56
+ end
57
+
58
+ def self.instance
59
+ @instance ||= new
60
+ end
61
+
62
+ def self.parse(string)
63
+ self.instance.parse(string)
64
+ end
65
+ end
66
+
67
+ Cheddar.config do |c|
68
+
69
+ c.dialect(:en_us) do |d|
70
+ d.define :hundred, 100
71
+ d.define :thousand, 1000
72
+ %w(m b tr quadr quint sext sept oct non dec undec duodec tredec quattuordec quindec sexdec septemdec octodec novemdec vigint).inject(1000) do |m,p|
73
+ d.define "#{p}illion", 1000 * m
74
+ end
75
+ end
76
+
77
+ c.dialect(:slang_us) do |d|
78
+ %w(bacon bills bread buck cabbage cash cheddar cheese clams dolla dollar dough green greenback kale lettuce loot moolah paper potato potatoes scratch scrip).each { |p| d.define p, 1 }
79
+ %w(benjamin c-note jackson twankie).each { |p| d.define p, 100 }
80
+ d.define 'dead presidents', 1
81
+ d.define 'long green', 1
82
+ d.define 'fin', 5
83
+ d.define 'sawbuck', 10
84
+ d.define 'double sawbuck', 20
85
+ d.define 'large', 1000
86
+ d.define 'big ones', 1000
87
+ end
88
+
89
+ c.enabled_dialects = [:en_us, :slang_us]
90
+
60
91
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheddar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Kenny Parnell
@@ -10,37 +9,36 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2012-02-06 00:00:00.000000000 Z
12
+ date: 2012-03-29 00:00:00.000000000 Z
14
13
  dependencies: []
15
- description: Much longer explanation of the example!
14
+ description: Convert human readable strings to numbers. Also handles gangster terminology.
16
15
  email: k.parnell@gmail.com
17
16
  executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
20
  - lib/cheddar.rb
22
- homepage: http://github.com/kparnell/cheddar
21
+ homepage: http://github.com/kennyp/cheddar
23
22
  licenses: []
23
+ metadata: {}
24
24
  post_install_message:
25
25
  rdoc_options: []
26
26
  require_paths:
27
27
  - lib
28
28
  required_ruby_version: !ruby/object:Gem::Requirement
29
- none: false
30
29
  requirements:
31
- - - ! '>='
30
+ - - ">="
32
31
  - !ruby/object:Gem::Version
33
32
  version: '0'
34
33
  required_rubygems_version: !ruby/object:Gem::Requirement
35
- none: false
36
34
  requirements:
37
- - - ! '>='
35
+ - - ">="
38
36
  - !ruby/object:Gem::Version
39
37
  version: '0'
40
38
  requirements: []
41
39
  rubyforge_project:
42
- rubygems_version: 1.8.11
40
+ rubygems_version: 2.2.2
43
41
  signing_key:
44
- specification_version: 3
42
+ specification_version: 4
45
43
  summary: Little library to convert human readable strings to numbers.
46
44
  test_files: []