dentaku_zevo 3.5.2

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 (123) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.pryrc +2 -0
  4. data/.rubocop.yml +114 -0
  5. data/.travis.yml +10 -0
  6. data/CHANGELOG.md +281 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE +21 -0
  9. data/README.md +342 -0
  10. data/Rakefile +31 -0
  11. data/dentaku.gemspec +32 -0
  12. data/lib/dentaku/ast/access.rb +47 -0
  13. data/lib/dentaku/ast/arithmetic.rb +241 -0
  14. data/lib/dentaku/ast/array.rb +41 -0
  15. data/lib/dentaku/ast/bitwise.rb +42 -0
  16. data/lib/dentaku/ast/case/case_conditional.rb +38 -0
  17. data/lib/dentaku/ast/case/case_else.rb +35 -0
  18. data/lib/dentaku/ast/case/case_switch_variable.rb +35 -0
  19. data/lib/dentaku/ast/case/case_then.rb +35 -0
  20. data/lib/dentaku/ast/case/case_when.rb +39 -0
  21. data/lib/dentaku/ast/case.rb +81 -0
  22. data/lib/dentaku/ast/combinators.rb +50 -0
  23. data/lib/dentaku/ast/comparators.rb +89 -0
  24. data/lib/dentaku/ast/datetime.rb +8 -0
  25. data/lib/dentaku/ast/function.rb +56 -0
  26. data/lib/dentaku/ast/function_registry.rb +98 -0
  27. data/lib/dentaku/ast/functions/all.rb +23 -0
  28. data/lib/dentaku/ast/functions/and.rb +25 -0
  29. data/lib/dentaku/ast/functions/any.rb +23 -0
  30. data/lib/dentaku/ast/functions/avg.rb +13 -0
  31. data/lib/dentaku/ast/functions/count.rb +26 -0
  32. data/lib/dentaku/ast/functions/duration.rb +51 -0
  33. data/lib/dentaku/ast/functions/enum.rb +37 -0
  34. data/lib/dentaku/ast/functions/filter.rb +23 -0
  35. data/lib/dentaku/ast/functions/if.rb +51 -0
  36. data/lib/dentaku/ast/functions/map.rb +23 -0
  37. data/lib/dentaku/ast/functions/max.rb +5 -0
  38. data/lib/dentaku/ast/functions/min.rb +5 -0
  39. data/lib/dentaku/ast/functions/mul.rb +12 -0
  40. data/lib/dentaku/ast/functions/not.rb +5 -0
  41. data/lib/dentaku/ast/functions/or.rb +25 -0
  42. data/lib/dentaku/ast/functions/pluck.rb +30 -0
  43. data/lib/dentaku/ast/functions/round.rb +5 -0
  44. data/lib/dentaku/ast/functions/rounddown.rb +8 -0
  45. data/lib/dentaku/ast/functions/roundup.rb +8 -0
  46. data/lib/dentaku/ast/functions/ruby_math.rb +55 -0
  47. data/lib/dentaku/ast/functions/string_functions.rb +212 -0
  48. data/lib/dentaku/ast/functions/sum.rb +12 -0
  49. data/lib/dentaku/ast/functions/switch.rb +8 -0
  50. data/lib/dentaku/ast/functions/xor.rb +44 -0
  51. data/lib/dentaku/ast/grouping.rb +23 -0
  52. data/lib/dentaku/ast/identifier.rb +52 -0
  53. data/lib/dentaku/ast/literal.rb +30 -0
  54. data/lib/dentaku/ast/logical.rb +8 -0
  55. data/lib/dentaku/ast/negation.rb +54 -0
  56. data/lib/dentaku/ast/nil.rb +13 -0
  57. data/lib/dentaku/ast/node.rb +28 -0
  58. data/lib/dentaku/ast/numeric.rb +8 -0
  59. data/lib/dentaku/ast/operation.rb +39 -0
  60. data/lib/dentaku/ast/string.rb +15 -0
  61. data/lib/dentaku/ast.rb +39 -0
  62. data/lib/dentaku/bulk_expression_solver.rb +128 -0
  63. data/lib/dentaku/calculator.rb +169 -0
  64. data/lib/dentaku/date_arithmetic.rb +45 -0
  65. data/lib/dentaku/dependency_resolver.rb +24 -0
  66. data/lib/dentaku/exceptions.rb +102 -0
  67. data/lib/dentaku/flat_hash.rb +38 -0
  68. data/lib/dentaku/parser.rb +349 -0
  69. data/lib/dentaku/print_visitor.rb +101 -0
  70. data/lib/dentaku/string_casing.rb +7 -0
  71. data/lib/dentaku/token.rb +36 -0
  72. data/lib/dentaku/token_matcher.rb +138 -0
  73. data/lib/dentaku/token_matchers.rb +29 -0
  74. data/lib/dentaku/token_scanner.rb +183 -0
  75. data/lib/dentaku/tokenizer.rb +110 -0
  76. data/lib/dentaku/version.rb +3 -0
  77. data/lib/dentaku/visitor/infix.rb +82 -0
  78. data/lib/dentaku.rb +69 -0
  79. data/spec/ast/addition_spec.rb +62 -0
  80. data/spec/ast/all_spec.rb +25 -0
  81. data/spec/ast/and_function_spec.rb +35 -0
  82. data/spec/ast/and_spec.rb +32 -0
  83. data/spec/ast/any_spec.rb +23 -0
  84. data/spec/ast/arithmetic_spec.rb +91 -0
  85. data/spec/ast/avg_spec.rb +37 -0
  86. data/spec/ast/case_spec.rb +84 -0
  87. data/spec/ast/comparator_spec.rb +87 -0
  88. data/spec/ast/count_spec.rb +40 -0
  89. data/spec/ast/division_spec.rb +35 -0
  90. data/spec/ast/filter_spec.rb +25 -0
  91. data/spec/ast/function_spec.rb +69 -0
  92. data/spec/ast/map_spec.rb +27 -0
  93. data/spec/ast/max_spec.rb +33 -0
  94. data/spec/ast/min_spec.rb +33 -0
  95. data/spec/ast/mul_spec.rb +43 -0
  96. data/spec/ast/negation_spec.rb +48 -0
  97. data/spec/ast/node_spec.rb +43 -0
  98. data/spec/ast/numeric_spec.rb +16 -0
  99. data/spec/ast/or_spec.rb +35 -0
  100. data/spec/ast/pluck_spec.rb +32 -0
  101. data/spec/ast/round_spec.rb +35 -0
  102. data/spec/ast/rounddown_spec.rb +35 -0
  103. data/spec/ast/roundup_spec.rb +35 -0
  104. data/spec/ast/string_functions_spec.rb +217 -0
  105. data/spec/ast/sum_spec.rb +43 -0
  106. data/spec/ast/switch_spec.rb +30 -0
  107. data/spec/ast/xor_spec.rb +35 -0
  108. data/spec/benchmark.rb +70 -0
  109. data/spec/bulk_expression_solver_spec.rb +201 -0
  110. data/spec/calculator_spec.rb +898 -0
  111. data/spec/dentaku_spec.rb +52 -0
  112. data/spec/exceptions_spec.rb +9 -0
  113. data/spec/external_function_spec.rb +106 -0
  114. data/spec/parser_spec.rb +166 -0
  115. data/spec/print_visitor_spec.rb +66 -0
  116. data/spec/spec_helper.rb +71 -0
  117. data/spec/token_matcher_spec.rb +134 -0
  118. data/spec/token_scanner_spec.rb +49 -0
  119. data/spec/token_spec.rb +16 -0
  120. data/spec/tokenizer_spec.rb +359 -0
  121. data/spec/visitor/infix_spec.rb +31 -0
  122. data/spec/visitor_spec.rb +138 -0
  123. metadata +335 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d7c9f8852e6d9afdac9c55605bade0c06e0eab6f4e6abd86fcabe64ed839b6b1
4
+ data.tar.gz: 3ebbbf999b825dcd7fba39045756bb52745588e6b4c1148eb232ea2a28270f39
5
+ SHA512:
6
+ metadata.gz: 614f78757cef069932968d4a37a13ba1360875a34bea99df90ae2808ffe776180b976e54bf4ec6d84aa347a8731ec212c49476e800dc1a372d16645f7b7f3421
7
+ data.tar.gz: 8f86743fbd6f6363fa14dd30886e37446d791212a8b9d28bda0f7c79a3c16fa8e5453a762e99d00b9704c9f45591dc52926afccd73c9e0906b8bcd633434c412
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ *.gem
2
+ .bundle
3
+ .rbenv-version
4
+ Gemfile.lock
5
+ bin/*
6
+ pkg/*
7
+ vendor/*
8
+
9
+ /.ruby-gemset
10
+ /.ruby-version
11
+ /.rspec
12
+
13
+ .byebug_history
14
+ coverage
data/.pryrc ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler"
2
+ Bundler.require
data/.rubocop.yml ADDED
@@ -0,0 +1,114 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.6
3
+ # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
+ # to ignore them, so only the ones explicitly set in this file are enabled.
5
+ DisabledByDefault: true
6
+
7
+ # Prefer &&/|| over and/or.
8
+ Style/AndOr:
9
+ Enabled: true
10
+
11
+ # Align `when` with `case`.
12
+ Layout/CaseIndentation:
13
+ Enabled: true
14
+
15
+ # Align comments with method definitions.
16
+ Layout/CommentIndentation:
17
+ Enabled: true
18
+
19
+ # No extra empty lines.
20
+ Layout/EmptyLines:
21
+ Enabled: true
22
+
23
+ # In a regular class definition, no empty lines around the body.
24
+ Layout/EmptyLinesAroundClassBody:
25
+ Enabled: true
26
+
27
+ # In a regular method definition, no empty lines around the body.
28
+ Layout/EmptyLinesAroundMethodBody:
29
+ Enabled: true
30
+
31
+ # In a regular module definition, no empty lines around the body.
32
+ Layout/EmptyLinesAroundModuleBody:
33
+ Enabled: true
34
+
35
+ # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
36
+ Style/HashSyntax:
37
+ Enabled: true
38
+
39
+ # Method definitions after `private` or `protected` isolated calls need one
40
+ # extra level of indentation.
41
+ Layout/IndentationConsistency:
42
+ Enabled: false
43
+
44
+ # Two spaces, no tabs (for indentation).
45
+ Layout/IndentationWidth:
46
+ Enabled: true
47
+
48
+ Layout/SpaceAfterColon:
49
+ Enabled: true
50
+
51
+ Layout/SpaceAfterComma:
52
+ Enabled: true
53
+
54
+ Layout/SpaceAroundEqualsInParameterDefault:
55
+ Enabled: true
56
+
57
+ Layout/SpaceAroundKeyword:
58
+ Enabled: true
59
+
60
+ Layout/SpaceAroundOperators:
61
+ Enabled: true
62
+
63
+ Layout/SpaceBeforeFirstArg:
64
+ Enabled: true
65
+
66
+ # Defining a method with parameters needs parentheses.
67
+ Style/MethodDefParentheses:
68
+ Enabled: true
69
+
70
+ # Use `foo {}` not `foo{}`.
71
+ Layout/SpaceBeforeBlockBraces:
72
+ Enabled: true
73
+
74
+ # Use `foo { bar }` not `foo {bar}`.
75
+ Layout/SpaceInsideBlockBraces:
76
+ Enabled: true
77
+
78
+ # Use `{a: 1}` not `{ a:1 }`.
79
+ Layout/SpaceInsideHashLiteralBraces:
80
+ Enabled: false
81
+
82
+ Layout/SpaceInsideParens:
83
+ Enabled: true
84
+
85
+ # Check quotes usage according to lint rule below.
86
+ Style/StringLiterals:
87
+ Enabled: false
88
+ EnforcedStyle: double_quotes
89
+
90
+ # Detect hard tabs, no hard tabs.
91
+ Layout/IndentationStyle:
92
+ Enabled: true
93
+
94
+ # Blank lines should not have any spaces.
95
+ Layout/TrailingEmptyLines:
96
+ Enabled: true
97
+
98
+ # No trailing whitespace.
99
+ Layout/TrailingWhitespace:
100
+ Enabled: true
101
+
102
+ # Use quotes for string literals when they are enough.
103
+ Style/RedundantPercentQ:
104
+ Enabled: true
105
+
106
+ # Align `end` with the matching keyword or starting expression except for
107
+ # assignments, where it should be aligned with the LHS.
108
+ Layout/EndAlignment:
109
+ Enabled: true
110
+ EnforcedStyleAlignWith: variable
111
+
112
+ # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
113
+ Lint/RequireParentheses:
114
+ Enabled: true
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ sudo: false
3
+ rvm:
4
+ - 2.5.9
5
+ - 2.6.7
6
+ - 2.7.3
7
+ - 3.0.1
8
+ before_install:
9
+ - gem update bundler
10
+ - gem update --system
data/CHANGELOG.md ADDED
@@ -0,0 +1,281 @@
1
+ # Change Log
2
+
3
+ ## [v3.5.2]
4
+ - handle floating point multiply
5
+
6
+ ## [v3.5.1]
7
+ - add bitwise shift left and shift right operators
8
+ - improve numeric conversions
9
+ - improve parse exceptions
10
+ - improve bitwise exceptions
11
+ - include variable name in bulk expression exceptions
12
+
13
+ ## [v3.5.0]
14
+ - fix bug with function argument count
15
+ - add XOR operator
16
+ - make function args publicly accessible
17
+ - better argument handling for collection functions
18
+ - better dependency reporting for collection functions
19
+ - allow ruby math-backed functions to be serialized
20
+ - improve scientific notation handling
21
+ - improve comparator argument errors
22
+ - respect case sensitivity in nested case statments
23
+ - add visitor pattern
24
+
25
+ ## [v3.4.2]
26
+ - add FILTER function
27
+ - add concurrent-ruby dependency to make global calculator object thread safe
28
+ - add Ruby 3 support
29
+ - allow formulas to access intermediate context values
30
+ - fix incorrect Ruby Math function return type
31
+ - fix context mutation bug
32
+ - fix dependency resolution bug
33
+
34
+ ## [v3.4.1] 2020-12-12
35
+ - prevent extra evaluations in bulk expression solver
36
+
37
+ ## [v3.4.0] 2020-12-07
38
+ - allow access to intermediate values of flattened hashes
39
+ - catch invalid array syntax in the parse phase
40
+ - drop support for Ruby < 2.5, add support for Ruby 2.7
41
+ - add support for subtracting date literals
42
+ - improve error handling
43
+ - improve math function implementation
44
+ - add caching for calculated variable values
45
+ - allow custom unbound variable handling block at Dentaku module level
46
+ - add enum functions `ANY`, `ALL`, `MAP` and `PLUCK`
47
+ - allow self-referential formulas in bulk expression solver
48
+ - misc internal fixes and enhancements
49
+
50
+ ## [v3.3.4] 2019-11-21
51
+ - bugfix release
52
+
53
+ ## [v3.3.3] 2019-11-20
54
+ - date / duration addition and subtraction
55
+ - validate arity for custom functions with variable arity
56
+ - make AST serializable with Marshal.dump
57
+ - performance optimization for arithmetic node validation
58
+ - support lazy evaluation for expensive values
59
+ - short-circuit IF function
60
+ - better error when empty string is used in arithmetic operation
61
+
62
+ ## [v3.3.2] 2019-06-10
63
+ - add ability to pre-load AST cache
64
+ - fix negation node bug
65
+
66
+ ## [v3.3.1] 2019-03-26
67
+ - better errors for parse failures and exceptions in internal functions
68
+ - fix Ruby 2.6.0 deprecation warnings
69
+ - fix issue with functions in nested case statements
70
+
71
+ ## [v3.3.0] 2018-12-04
72
+ - add array literal syntax
73
+ - return correct type from string function AST nodes
74
+
75
+ ## [v3.2.1] 2018-10-24
76
+ - make `evaluate` rescue more exceptions
77
+
78
+ ## [v3.2.0] 2018-03-14
79
+ - add `COUNT` and `AVG` functions
80
+ - add unicode support 😎
81
+ - fix CASE parsing bug
82
+ - allow dependency filtering based on context
83
+ - add variadic MUL function
84
+ - performance optimization
85
+
86
+ ## [v3.1.0] 2018-01-10
87
+ - allow decimals with no leading zero
88
+ - nested hash and array support in bulk expression solver
89
+ - add a variadic SUM function
90
+ - support array arguments to min, max, sum, and Math functions
91
+ - add case-sensitive variable support
92
+ - allow opt-out of nested data for performance boost
93
+
94
+ ## [v3.0.0] 2017-10-11
95
+ - add && and || as aliases for AND and OR
96
+ - add hexadecimal literal support
97
+ - add the SWITCH function
98
+ - add AND and OR functions
99
+ - add array access
100
+ - make UnboundVariableError show all missing values
101
+ - cast inputs to numeric function to numeric
102
+ - fix issue with zero-arity functions used as function args
103
+ - fix division when context values contain one or more strings
104
+ - drop Ruby 1.9 support
105
+
106
+ ## [v2.0.11] 2017-05-08
107
+ - fix dependency checking for logical AST nodes
108
+ - make `CONCAT` variadic
109
+ - fix casting strings to numeric in negation operations
110
+ - add date/time support
111
+ - add `&` (bitwise and) and `|` (bitwise or) operators
112
+ - fix incompatibility with 'mathn' module
113
+ - add `CONTAINS` string function
114
+ - allow storage of nested hashes in calculator memory
115
+ - allow duck type arithmetic
116
+ - fix error handling code to work with Ruby 2.4.0
117
+ - allow calculators to store own registry of functions
118
+ - add timezone support to time literals
119
+ - optimizations
120
+
121
+ ## [v2.0.10] 2016-12-30
122
+ - fix string function initialization bug
123
+ - fix issues with CASE statements
124
+ - allow injecting AST cache
125
+
126
+ ## [v2.0.9] 2016-09-19
127
+ - namespace tokenization errors
128
+ - automatically coerce arguments to string functions as strings
129
+ - selectively disable or clear AST cache
130
+
131
+ ## [v2.0.8] 2016-05-10
132
+ - numeric input validations
133
+ - fail with gem-specific error for invalid arithmetic operands
134
+ - add `LEFT`, `RIGHT`, `MID`, `LEN`, `FIND`, `SUBSTITUTE`, and `CONCAT` string functions
135
+
136
+ ## [v2.0.7] 2016-02-25
137
+ - fail with gem-specific error for parsing issues
138
+ - support NULL literals and nil variables
139
+ - keep reference to variable that caused failure when bulk-solving
140
+
141
+ ## [v2.0.6] 2016-01-26
142
+ - support array parameters for external functions
143
+ - support case statements
144
+ - support precision for `ROUNDUP` and `ROUNDDOWN` functions
145
+ - prevent errors from corrupting calculator memory
146
+
147
+ ## [v2.0.5] 2015-09-03
148
+ - fix bug with detecting unbound nodes
149
+ - silence warnings
150
+ - allow registration of custom token scanners
151
+
152
+ ## [v2.0.4] 2015-09-03
153
+ - fix BigDecimal conversion bug
154
+ - add caching for bulk expression solving dependency order
155
+ - allow for custom configuration for token scanners
156
+
157
+ ## [v2.0.3] 2015-08-25
158
+ - bug fixes
159
+ - performance enhancements
160
+ - code cleanup
161
+
162
+ ## [v2.0.1] 2015-08-15
163
+ - add support for boolean literals
164
+ - implement basic parse-time type checking
165
+
166
+ ## [v2.0.0] 2015-08-07
167
+ - shunting-yard parser for performance enhancement and AST generation
168
+ - AST caching for performance enhancement
169
+ - support comments in formulas
170
+ - support all functions from the Ruby Math module
171
+
172
+ ## [v1.2.6] 2015-05-30
173
+ - support custom error handlers for systems of formulas
174
+
175
+ ## [v1.2.5] 2015-05-23
176
+ - fix memory leak
177
+
178
+ ## [v1.2.2] 2014-12-19
179
+ - performance enhancements
180
+ - unary minus bug fixes
181
+ - preserve provided hash keys for systems of formulas
182
+
183
+ ## [v1.2.0] 2014-10-21
184
+ - add dependency resolution to automatically solve systems of formulas
185
+
186
+ ## [v1.1.0] 2014-07-30
187
+ - add strict evaluation mode to raise `UnboundVariableError` if not all variable values are provided
188
+ - return division results as `BigDecimal` values
189
+
190
+ ## [v1.0.0] 2014-03-06
191
+ - cleanup and 1.0 release
192
+
193
+ ## [v0.2.14] 2014-01-24
194
+ - add modulo operator
195
+ - add unary percentage operator
196
+ - support registration of custom functions at runtime
197
+
198
+ ## [v0.2.10] 2012-12-10
199
+ - return integer result for exact division, decimal otherwise
200
+
201
+ ## [v0.2.9] 2012-10-17
202
+ - add `ROUNDUP` / `ROUNDDOWN` functions
203
+
204
+ ## [v0.2.8] 2012-09-30
205
+ - make function name matching case-insensitive
206
+
207
+ ## [v0.2.7] 2012-09-26
208
+ - support passing arbitrary expressions as function arguments
209
+
210
+ ## [v0.2.6] 2012-09-19
211
+ - add `NOT` function
212
+
213
+ ## [v0.2.5] 2012-06-20
214
+ - add exponent operator
215
+ - add support for digits in variable identifiers
216
+
217
+ ## [v0.2.4] 2012-02-29
218
+ - add support for `min < x < max` syntax for inequality ranges
219
+
220
+ ## [v0.2.2] 2012-02-22
221
+ - support `ROUND` to arbitrary decimal place on older Rubies
222
+ - ensure case is preserved for string values
223
+
224
+ ## [v0.2.1] 2012-02-12
225
+ - add `ROUND` function
226
+
227
+ ## [v0.1.3] 2012-01-31
228
+ - add support for string datatype
229
+
230
+ ## [v0.1.1] 2012-01-24
231
+ - change from square bracket to parentheses for top-level evaluation
232
+ - add `IF` function
233
+
234
+ ## [v0.1.0] 2012-01-20
235
+ - initial release
236
+
237
+ [Unreleased]: https://github.com/rubysolo/dentaku/compare/v3.5.1...HEAD
238
+ [v3.5.1]: https://github.com/rubysolo/dentaku/compare/v3.5.0...v3.5.1
239
+ [v3.5.0]: https://github.com/rubysolo/dentaku/compare/v3.4.2...v3.5.0
240
+ [v3.4.2]: https://github.com/rubysolo/dentaku/compare/v3.4.1...v3.4.2
241
+ [v3.4.1]: https://github.com/rubysolo/dentaku/compare/v3.4.0...v3.4.1
242
+ [v3.4.0]: https://github.com/rubysolo/dentaku/compare/v3.3.4...v3.4.0
243
+ [v3.3.4]: https://github.com/rubysolo/dentaku/compare/v3.3.3...v3.3.4
244
+ [v3.3.3]: https://github.com/rubysolo/dentaku/compare/v3.3.2...v3.3.3
245
+ [v3.3.2]: https://github.com/rubysolo/dentaku/compare/v3.3.1...v3.3.2
246
+ [v3.3.1]: https://github.com/rubysolo/dentaku/compare/v3.3.0...v3.3.1
247
+ [v3.3.0]: https://github.com/rubysolo/dentaku/compare/v3.2.1...v3.3.0
248
+ [v3.2.1]: https://github.com/rubysolo/dentaku/compare/v3.2.0...v3.2.1
249
+ [v3.2.0]: https://github.com/rubysolo/dentaku/compare/v3.1.0...v3.2.0
250
+ [v3.1.0]: https://github.com/rubysolo/dentaku/compare/v3.0.0...v3.1.0
251
+ [v3.0.0]: https://github.com/rubysolo/dentaku/compare/v2.0.11...v3.0.0
252
+ [v2.0.11]: https://github.com/rubysolo/dentaku/compare/v2.0.10...v2.0.11
253
+ [v2.0.10]: https://github.com/rubysolo/dentaku/compare/v2.0.9...v2.0.10
254
+ [v2.0.9]: https://github.com/rubysolo/dentaku/compare/v2.0.8...v2.0.9
255
+ [v2.0.8]: https://github.com/rubysolo/dentaku/compare/v2.0.7...v2.0.8
256
+ [v2.0.7]: https://github.com/rubysolo/dentaku/compare/v2.0.6...v2.0.7
257
+ [v2.0.6]: https://github.com/rubysolo/dentaku/compare/v2.0.5...v2.0.6
258
+ [v2.0.5]: https://github.com/rubysolo/dentaku/compare/v2.0.4...v2.0.5
259
+ [v2.0.4]: https://github.com/rubysolo/dentaku/compare/v2.0.3...v2.0.4
260
+ [v2.0.3]: https://github.com/rubysolo/dentaku/compare/v2.0.1...v2.0.3
261
+ [v2.0.1]: https://github.com/rubysolo/dentaku/compare/v2.0.0...v2.0.1
262
+ [v2.0.0]: https://github.com/rubysolo/dentaku/compare/v1.2.6...v2.0.0
263
+ [v1.2.6]: https://github.com/rubysolo/dentaku/compare/v1.2.5...v1.2.6
264
+ [v1.2.5]: https://github.com/rubysolo/dentaku/compare/v1.2.2...v1.2.5
265
+ [v1.2.2]: https://github.com/rubysolo/dentaku/compare/v1.2.0...v1.2.2
266
+ [v1.2.0]: https://github.com/rubysolo/dentaku/compare/v1.1.0...v1.2.0
267
+ [v1.1.0]: https://github.com/rubysolo/dentaku/compare/v1.0.0...v1.1.0
268
+ [v1.0.0]: https://github.com/rubysolo/dentaku/compare/v0.2.14...v1.0.0
269
+ [v0.2.14]: https://github.com/rubysolo/dentaku/compare/v0.2.10...v0.2.14
270
+ [v0.2.10]: https://github.com/rubysolo/dentaku/compare/v0.2.9...v0.2.10
271
+ [v0.2.9]: https://github.com/rubysolo/dentaku/compare/v0.2.8...v0.2.9
272
+ [v0.2.8]: https://github.com/rubysolo/dentaku/compare/v0.2.7...v0.2.8
273
+ [v0.2.7]: https://github.com/rubysolo/dentaku/compare/v0.2.6...v0.2.7
274
+ [v0.2.6]: https://github.com/rubysolo/dentaku/compare/v0.2.5...v0.2.6
275
+ [v0.2.5]: https://github.com/rubysolo/dentaku/compare/v0.2.4...v0.2.5
276
+ [v0.2.4]: https://github.com/rubysolo/dentaku/compare/v0.2.2...v0.2.4
277
+ [v0.2.2]: https://github.com/rubysolo/dentaku/compare/v0.2.1...v0.2.2
278
+ [v0.2.1]: https://github.com/rubysolo/dentaku/compare/v0.1.3...v0.2.1
279
+ [v0.1.3]: https://github.com/rubysolo/dentaku/compare/v0.1.1...v0.1.3
280
+ [v0.1.1]: https://github.com/rubysolo/dentaku/compare/v0.1.0...v0.1.1
281
+ [v0.1.0]: https://github.com/rubysolo/dentaku/commit/68724fd9c8fa637baf7b9d5515df0caa31e226bd
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in dentaku.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2012 Solomon White
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.