cheddar 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cheddar.rb +111 -23
  3. metadata +7 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15dc85d5c075af82c10d629eec87942083ed29db
4
- data.tar.gz: 0bc5241b7d3aadd2e297b6e549e280a925556355
3
+ metadata.gz: 7e8151013fa487bc106e835cac6b8ac23e4e13e9
4
+ data.tar.gz: f4de428cc0e68549f76f6e1a79a067f1311c64a8
5
5
  SHA512:
6
- metadata.gz: 5f8694ca7425d0c2afe3293ef7ffebdf612d3698f0bbc960359c021234117d11ab4a125e52dc488f987053ac6155b95fa178dd9088cb9f3778b1e1d88ee68a5b
7
- data.tar.gz: 801490639ce8ee9cdc7d58406c0e0ad0a48eb1ab1605e36eb45ecc5534cad42c5028c01815c4e5af7d6053d1259f4bd1c1eb9d3a176cf8833fd0d7c61aa50779
6
+ metadata.gz: 2c4e72de10182b35e8d05ca5135c1a1201d16d29bd35774842ddbb150b6de1ec140c0dd5dc5641fccc302b78d1ebeabcc62dcc10f58748a9035f9d1b7172d055
7
+ data.tar.gz: 757311abc64a95866954612f23eca49e1330829bea585ab9c7dda82e30efe87e73b81e2f03f49b5725523b67aa215f2b90d868253360577c598898727b61293a
@@ -1,66 +1,140 @@
1
+ #
2
+ # The +Cheddar+ class converts human input strings to numbers.
3
+ #
1
4
  class Cheddar
2
-
3
5
  attr_accessor :enabled_dialects
4
6
 
5
- def initialize
7
+ def initialize #:notnew: nothing special going on here
6
8
  @mapping = {}
7
9
  @enabled_dialects = []
8
10
  end
9
11
 
12
+ #
13
+ # Get the list of currently available dialects
14
+ #
10
15
  def available_dialects
11
- @mapping.keys
16
+ mapping.keys
12
17
  end
13
18
 
19
+ #
20
+ # Add human_to_number method to the String class
21
+ #
14
22
  def cheddarize
15
23
  String.send(:define_method, :human_to_number) do
16
24
  Cheddar.parse(self)
17
25
  end
18
26
  end
19
27
 
28
+ # Define a word to number mapping for the current dialect
29
+ #
30
+ # :call-seq:
31
+ # define(word, number) -> number
32
+ #
33
+ # ==== Parameters
34
+ #
35
+ # * +word+ - string to be mapped to number
36
+ # * +number+ - Number to return when an occurrence of string is found
37
+ #
20
38
  def define(word, number)
21
- @mapping[@current_dialect] ||= {}
22
- @mapping[@current_dialect][word] = number
39
+ mapping[current_dialect] ||= {}
40
+ mapping[current_dialect][word] = number
23
41
  end
24
42
 
43
+ # Set the current dialect being operated on when using the define method
44
+ # and optionally pass in a block to define the dialect
45
+ #
46
+ # :call-seq:
47
+ # dialect(dialect_name) -> {'word' => value...}
48
+ # dialect(dialect_name){ block } -> {'word' => value...}
49
+ #
50
+ # ==== Parameters
51
+ #
52
+ # * +dialect_name+ - symbol for dialect being worked on
53
+ #
54
+ # ==== Example
55
+ #
56
+ # ch = Cheddar.new
57
+ # ch.dialect(:example) do |d|
58
+ # d.define 'e', 20
59
+ # end
60
+ # ch.parse('1 e') #=> 20
61
+ #
25
62
  def dialect(dia)
26
- @current_dialect = dia
63
+ self.current_dialect = dia
27
64
  yield self.class.instance if block_given?
28
- @mapping[dia]
65
+ mapping[dia]
29
66
  end
30
67
 
68
+ #
69
+ # convert the given string to it's numeric equivalent
70
+ #
71
+ # ==== Parameters
72
+ #
73
+ # * +string+ - string to be parsed as a number
74
+ #
31
75
  def parse(string)
32
76
  str = string.downcase
33
77
 
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
78
+ enabled_dialects.each do |d|
79
+ mapping[d].each { |num_name, value| apply_mapping(num_name, value, str) }
42
80
  end
43
81
 
44
82
  str.gsub!(/[^\d\*\.]/, '')
45
83
 
46
- eval(str)
84
+ Kernel.eval(str)
47
85
  end
48
86
 
87
+ #
88
+ # Add human_to_number method to the String class using the Cheddar singleton
89
+ #
49
90
  def self.cheddarize
50
- self.instance.cheddarize
91
+ instance.cheddarize
51
92
  end
52
93
 
94
+ # Get/Configure the Cheddar instance
95
+ #
96
+ # :call-seq:
97
+ # Cheddar.config -> instance
98
+ # Cheddar.config { block } -> instance
99
+ #
100
+ # ==== Example
101
+ #
102
+ # Cheddar.config do |c|
103
+ # ch.dialect(:example) do |d|
104
+ # d.define 'e', 20
105
+ # end
106
+ # end
107
+ #
53
108
  def self.config
54
- yield self.instance if block_given?
55
- self.instance
109
+ yield instance if block_given?
110
+ instance
56
111
  end
57
112
 
113
+ #
114
+ # Get the singleton instance of cheddar applied by cheddarize
115
+ #
58
116
  def self.instance
59
117
  @instance ||= new
60
118
  end
61
119
 
120
+ #
121
+ # Parse using the singleton instance
122
+ #
62
123
  def self.parse(string)
63
- self.instance.parse(string)
124
+ instance.parse(string)
125
+ end
126
+
127
+ private
128
+
129
+ attr_reader :mapping
130
+ attr_accessor :current_dialect
131
+
132
+ def apply_mapping(num_name, value, str)
133
+ if num_name.is_a? Regexp
134
+ str.gsub!(num_name, "* #{value}")
135
+ else
136
+ str.gsub!(Regexp.new("(^|\s)#{num_name}($|\s)"), "* #{value}")
137
+ end
64
138
  end
65
139
  end
66
140
 
@@ -69,13 +143,16 @@ Cheddar.config do |c|
69
143
  c.dialect(:en_us) do |d|
70
144
  d.define :hundred, 100
71
145
  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|
146
+ %w(m b tr quadr quint sext sept oct non dec undec duodec tredec quattuordec
147
+ quindec sexdec septemdec octodec novemdec vigint).reduce(1000) do |m, p|
73
148
  d.define "#{p}illion", 1000 * m
74
149
  end
75
150
  end
76
151
 
77
152
  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 }
153
+ %w(bacon bills bread buck cabbage cash cheddar cheese clams dolla dollar
154
+ dough green greenback kale lettuce loot moolah paper potato
155
+ potatoes scratch scrip).each { |p| d.define p, 1 }
79
156
  %w(benjamin c-note jackson twankie).each { |p| d.define p, 100 }
80
157
  d.define 'dead presidents', 1
81
158
  d.define 'long green', 1
@@ -86,6 +163,17 @@ Cheddar.config do |c|
86
163
  d.define 'big ones', 1000
87
164
  end
88
165
 
89
- c.enabled_dialects = [:en_us, :slang_us]
166
+ c.dialect(:slang_gb) do |d|
167
+ %w(alan cherry maggie nicker nugget pound quid sov).each do |p|
168
+ d.define p, 1
169
+ end
170
+ %w(plenty purple score).each { |p| d.define p, 20 }
171
+ %w(bullseye mcgarret nifty pinky thrifty).each { |p| d.define p, 50 }
172
+ %w(cenny century longun oneer).each { |p| d.define p, 100 }
173
+ %w(bag gorilla grand large rio).each { |p| d.define p, 1000 }
174
+ d.define 'pony', 25
175
+ end
176
+
177
+ c.enabled_dialects = [:en_us, :slang_us, :slang_gb]
90
178
 
91
179
  end
metadata CHANGED
@@ -1,17 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheddar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenny Parnell
8
8
  - Jonathan Roes
9
+ - Alex Forbes-Reed
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-06-13 00:00:00.000000000 Z
13
+ date: 2014-10-15 00:00:00.000000000 Z
13
14
  dependencies: []
14
- description: Convert human readable strings to numbers. Also handles gangster terminology.
15
+ description: |2
16
+ Convert human readable strings to numbers.
17
+ Also handles gangster terminology.
15
18
  email: k.parnell@gmail.com
16
19
  executables: []
17
20
  extensions: []
@@ -43,3 +46,4 @@ signing_key:
43
46
  specification_version: 4
44
47
  summary: Little library to convert human readable strings to numbers.
45
48
  test_files: []
49
+ has_rdoc: