cheddar 0.0.5 → 0.0.6

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 +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: