xls_function 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/publish_gem.yml +25 -0
  3. data/.github/workflows/rspec.yml +30 -0
  4. data/.gitignore +13 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +41 -0
  7. data/CODE_OF_CONDUCT.md +74 -0
  8. data/Gemfile +8 -0
  9. data/LICENSE +201 -0
  10. data/README.md +48 -0
  11. data/Rakefile +6 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/xls_function/class_dictionary.rb +7 -0
  15. data/lib/xls_function/converter.rb +24 -0
  16. data/lib/xls_function/converters/date_converter.rb +30 -0
  17. data/lib/xls_function/converters/date_serial_converter.rb +17 -0
  18. data/lib/xls_function/converters/number_converter.rb +28 -0
  19. data/lib/xls_function/converters/time_converter.rb +158 -0
  20. data/lib/xls_function/converters/time_serial_converter.rb +97 -0
  21. data/lib/xls_function/default_logger.rb +7 -0
  22. data/lib/xls_function/error.rb +49 -0
  23. data/lib/xls_function/evaluators/arguments_definable.rb +39 -0
  24. data/lib/xls_function/evaluators/binary_operation_evaluator.rb +20 -0
  25. data/lib/xls_function/evaluators/binary_operations/add.rb +13 -0
  26. data/lib/xls_function/evaluators/binary_operations/concat.rb +13 -0
  27. data/lib/xls_function/evaluators/binary_operations/divide.rb +13 -0
  28. data/lib/xls_function/evaluators/binary_operations/equal.rb +13 -0
  29. data/lib/xls_function/evaluators/binary_operations/greater_than.rb +13 -0
  30. data/lib/xls_function/evaluators/binary_operations/greater_than_or_equal_to.rb +13 -0
  31. data/lib/xls_function/evaluators/binary_operations/less_than.rb +13 -0
  32. data/lib/xls_function/evaluators/binary_operations/less_than_or_equal_to.rb +13 -0
  33. data/lib/xls_function/evaluators/binary_operations/multiple.rb +13 -0
  34. data/lib/xls_function/evaluators/binary_operations/not_equal.rb +13 -0
  35. data/lib/xls_function/evaluators/binary_operations/power.rb +13 -0
  36. data/lib/xls_function/evaluators/binary_operations/subtract.rb +13 -0
  37. data/lib/xls_function/evaluators/class_dictionary.rb +30 -0
  38. data/lib/xls_function/evaluators/error_detector.rb +29 -0
  39. data/lib/xls_function/evaluators/evaluable.rb +37 -0
  40. data/lib/xls_function/evaluators/false_evaluator.rb +19 -0
  41. data/lib/xls_function/evaluators/function_evaluator.rb +133 -0
  42. data/lib/xls_function/evaluators/functions/and.rb +21 -0
  43. data/lib/xls_function/evaluators/functions/asc.rb +17 -0
  44. data/lib/xls_function/evaluators/functions/char.rb +19 -0
  45. data/lib/xls_function/evaluators/functions/clean.rb +22 -0
  46. data/lib/xls_function/evaluators/functions/code.rb +18 -0
  47. data/lib/xls_function/evaluators/functions/concat.rb +27 -0
  48. data/lib/xls_function/evaluators/functions/date.rb +57 -0
  49. data/lib/xls_function/evaluators/functions/date_value.rb +17 -0
  50. data/lib/xls_function/evaluators/functions/day.rb +15 -0
  51. data/lib/xls_function/evaluators/functions/dbcs.rb +18 -0
  52. data/lib/xls_function/evaluators/functions/e_date.rb +19 -0
  53. data/lib/xls_function/evaluators/functions/e_o_month.rb +20 -0
  54. data/lib/xls_function/evaluators/functions/exact.rb +16 -0
  55. data/lib/xls_function/evaluators/functions/find.rb +28 -0
  56. data/lib/xls_function/evaluators/functions/fixed.rb +46 -0
  57. data/lib/xls_function/evaluators/functions/hour.rb +15 -0
  58. data/lib/xls_function/evaluators/functions/if.rb +24 -0
  59. data/lib/xls_function/evaluators/functions/ifs.rb +20 -0
  60. data/lib/xls_function/evaluators/functions/int.rb +15 -0
  61. data/lib/xls_function/evaluators/functions/iserror.rb +20 -0
  62. data/lib/xls_function/evaluators/functions/isnumber.rb +15 -0
  63. data/lib/xls_function/evaluators/functions/lambda.rb +57 -0
  64. data/lib/xls_function/evaluators/functions/left.rb +16 -0
  65. data/lib/xls_function/evaluators/functions/len.rb +15 -0
  66. data/lib/xls_function/evaluators/functions/let.rb +24 -0
  67. data/lib/xls_function/evaluators/functions/lower.rb +15 -0
  68. data/lib/xls_function/evaluators/functions/mid.rb +23 -0
  69. data/lib/xls_function/evaluators/functions/minute.rb +15 -0
  70. data/lib/xls_function/evaluators/functions/month.rb +15 -0
  71. data/lib/xls_function/evaluators/functions/not.rb +15 -0
  72. data/lib/xls_function/evaluators/functions/now.rb +19 -0
  73. data/lib/xls_function/evaluators/functions/or.rb +21 -0
  74. data/lib/xls_function/evaluators/functions/power.rb +16 -0
  75. data/lib/xls_function/evaluators/functions/proper.rb +17 -0
  76. data/lib/xls_function/evaluators/functions/replace.rb +19 -0
  77. data/lib/xls_function/evaluators/functions/rept.rb +25 -0
  78. data/lib/xls_function/evaluators/functions/right.rb +16 -0
  79. data/lib/xls_function/evaluators/functions/round.rb +16 -0
  80. data/lib/xls_function/evaluators/functions/round_down.rb +16 -0
  81. data/lib/xls_function/evaluators/functions/round_up.rb +16 -0
  82. data/lib/xls_function/evaluators/functions/second.rb +15 -0
  83. data/lib/xls_function/evaluators/functions/sqrt.rb +17 -0
  84. data/lib/xls_function/evaluators/functions/substitute.rb +44 -0
  85. data/lib/xls_function/evaluators/functions/text.rb +17 -0
  86. data/lib/xls_function/evaluators/functions/time.rb +54 -0
  87. data/lib/xls_function/evaluators/functions/timevalue.rb +17 -0
  88. data/lib/xls_function/evaluators/functions/today.rb +19 -0
  89. data/lib/xls_function/evaluators/functions/trim.rb +16 -0
  90. data/lib/xls_function/evaluators/functions/trunc.rb +16 -0
  91. data/lib/xls_function/evaluators/functions/unichar.rb +19 -0
  92. data/lib/xls_function/evaluators/functions/unicode.rb +18 -0
  93. data/lib/xls_function/evaluators/functions/upper.rb +15 -0
  94. data/lib/xls_function/evaluators/functions/value.rb +26 -0
  95. data/lib/xls_function/evaluators/functions/year.rb +15 -0
  96. data/lib/xls_function/evaluators/number_evaluator.rb +18 -0
  97. data/lib/xls_function/evaluators/string_evaluator.rb +18 -0
  98. data/lib/xls_function/evaluators/true_evaluator.rb +19 -0
  99. data/lib/xls_function/evaluators/variant_evaluator.rb +24 -0
  100. data/lib/xls_function/extensions/array_extension.rb +22 -0
  101. data/lib/xls_function/extensions/big_decimal_extension.rb +15 -0
  102. data/lib/xls_function/extensions/date_extension.rb +11 -0
  103. data/lib/xls_function/extensions/hash_extension.rb +24 -0
  104. data/lib/xls_function/extensions/time_extension.rb +11 -0
  105. data/lib/xls_function/format_string/evaluators/elapsed_time_evaluator.rb +42 -0
  106. data/lib/xls_function/format_string/evaluators/number_evaluator.rb +243 -0
  107. data/lib/xls_function/format_string/evaluators/time_evaluator.rb +103 -0
  108. data/lib/xls_function/format_string/parse_rules/dates.rb +53 -0
  109. data/lib/xls_function/format_string/parse_rules/numbers.rb +31 -0
  110. data/lib/xls_function/format_string/parse_rules/texts.rb +25 -0
  111. data/lib/xls_function/format_string/parse_rules/times.rb +55 -0
  112. data/lib/xls_function/format_string/parser.rb +27 -0
  113. data/lib/xls_function/format_string/transform.rb +87 -0
  114. data/lib/xls_function/format_string/transform_rules/dates.rb +98 -0
  115. data/lib/xls_function/format_string/transform_rules/numbers.rb +59 -0
  116. data/lib/xls_function/format_string/transform_rules/texts.rb +25 -0
  117. data/lib/xls_function/format_string/transform_rules/times.rb +97 -0
  118. data/lib/xls_function/format_string.rb +24 -0
  119. data/lib/xls_function/i18n.rb +4 -0
  120. data/lib/xls_function/locales/en.yml +65 -0
  121. data/lib/xls_function/locales/ja.yml +65 -0
  122. data/lib/xls_function/parse_rules/binary_operation.rb +28 -0
  123. data/lib/xls_function/parse_rules/common.rb +34 -0
  124. data/lib/xls_function/parser.rb +12 -0
  125. data/lib/xls_function/transform.rb +58 -0
  126. data/lib/xls_function/transform_rules/binary_operation_transform.rb +16 -0
  127. data/lib/xls_function/transform_rules/boolean_transform.rb +12 -0
  128. data/lib/xls_function/transform_rules/function_call_transform.rb +16 -0
  129. data/lib/xls_function/transform_rules/number_transform.rb +11 -0
  130. data/lib/xls_function/transform_rules/string_transform.rb +17 -0
  131. data/lib/xls_function/transform_rules/variant_transform.rb +13 -0
  132. data/lib/xls_function/user_defined_function_factory.rb +59 -0
  133. data/lib/xls_function/version.rb +3 -0
  134. data/lib/xls_function.rb +82 -0
  135. data/xls_function.gemspec +30 -0
  136. metadata +221 -0
@@ -0,0 +1,34 @@
1
+ module XlsFunction
2
+ module ParseRules
3
+ module Common
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ rule(:space) { match('\s').repeat(1) }
7
+ rule(:space?) { space.maybe }
8
+
9
+ rule(:comma) { str(',') >> space? }
10
+
11
+ rule(:negative_sign) { str('-') }
12
+ rule(:number) { (negative_sign.maybe >> match['0-9\.'].repeat(1)).as(:number) >> space? }
13
+
14
+ rule(:true_expr) { (match['Tt'] >> match['Rr'] >> match['Uu'] >> match['Ee']).as(:true_expr) }
15
+ rule(:false_expr) { (match['Ff'] >> match['Aa'] >> match['Ll'] >> match['Ss'] >> match['Ee']).as(:false_expr) }
16
+ rule(:boolean) { true_expr | false_expr }
17
+
18
+ rule(:string) { str('"') >> match('[^"]').repeat.as(:string) >> str('"') >> space? }
19
+ rule(:variant) { match['a-zA-Z_'].repeat(1).as(:variant) >> space? }
20
+
21
+ rule(:lparen) { str('(') >> space? }
22
+ rule(:rparen) { str(')') >> space? }
23
+
24
+ rule(:identifier) { match['a-zA-Z'].repeat(1) }
25
+
26
+ rule(:arglist) { expression >> (comma >> expression).repeat }
27
+ rule(:function_call) { identifier.as(:identifier) >> lparen >> arglist.maybe.as(:arglist) >> rparen >> space? }
28
+
29
+ rule(:single_expression) { function_call | number | boolean | string | variant }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ require 'xls_function/parse_rules/common'
2
+ require 'xls_function/parse_rules/binary_operation'
3
+
4
+ module XlsFunction
5
+ class Parser < Parslet::Parser
6
+ include ::XlsFunction::ParseRules::Common
7
+ include ::XlsFunction::ParseRules::BinaryOperation
8
+
9
+ rule(:expression) { binary_operation | single_expression }
10
+ root(:expression)
11
+ end
12
+ end
@@ -0,0 +1,58 @@
1
+ require 'xls_function/evaluators/evaluable'
2
+ require 'xls_function/evaluators/arguments_definable'
3
+ require 'xls_function/evaluators/error_detector'
4
+ require 'xls_function/evaluators/class_dictionary'
5
+
6
+ require 'xls_function/evaluators/string_evaluator'
7
+ require 'xls_function/evaluators/variant_evaluator'
8
+ require 'xls_function/evaluators/number_evaluator'
9
+ require 'xls_function/evaluators/true_evaluator'
10
+ require 'xls_function/evaluators/false_evaluator'
11
+ require 'xls_function/evaluators/function_evaluator'
12
+ require 'xls_function/evaluators/binary_operation_evaluator'
13
+
14
+ require 'xls_function/transform_rules/string_transform'
15
+ require 'xls_function/transform_rules/variant_transform'
16
+ require 'xls_function/transform_rules/number_transform'
17
+ require 'xls_function/transform_rules/boolean_transform'
18
+ require 'xls_function/transform_rules/binary_operation_transform'
19
+ require 'xls_function/transform_rules/function_call_transform'
20
+
21
+ require 'xls_function/user_defined_function_factory'
22
+
23
+ module XlsFunction
24
+ class Transform < Parslet::Transform
25
+ include ::XlsFunction::TransformRules::StringTransform
26
+ include ::XlsFunction::TransformRules::VariantTransform
27
+ include ::XlsFunction::TransformRules::NumberTransform
28
+ include ::XlsFunction::TransformRules::BooleanTransform
29
+ include ::XlsFunction::TransformRules::FunctionCallTransform
30
+ include ::XlsFunction::TransformRules::BinaryOperationTransform
31
+
32
+ def apply(obj, context = {})
33
+ context ||= {}
34
+ context[:variants] ||= {}
35
+ context[:caches] ||= {}
36
+ super(obj, context)
37
+ end
38
+
39
+ class NotImplementedFunctionError < XlsFunction::EvaluationError
40
+ end
41
+
42
+ class VariantUndefinedError < XlsFunction::EvaluationError
43
+ end
44
+
45
+ class << self
46
+ private
47
+
48
+ def add_function(key, block_or_source, description: nil)
49
+ raise 'add_function: missing key' if key.nil?
50
+
51
+ fn = XlsFunction::UserDefinedFunctionFactory.create(block_or_source)
52
+
53
+ fn.description(description)
54
+ XlsFunction.class_dictionary[key] = fn
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,16 @@
1
+ module XlsFunction
2
+ module TransformRules
3
+ module BinaryOperationTransform
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ rule(left: subtree(:left), operator: simple(:operator), right: subtree(:right)) do |context|
7
+ ope = ::XlsFunction::Evaluators::BinaryOperationEvaluator.from_dictionary(context[:operator].to_s)
8
+ raise ::XlsFunction::Transform::NotImplementedFunctionError, "not supported operator #{context[:operator]}" unless ope
9
+
10
+ ope.create(context[:left], context[:right], context)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module XlsFunction
2
+ module TransformRules
3
+ module BooleanTransform
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ rule(true_expr: simple(:value)) { |context| ::XlsFunction::Evaluators::TrueEvaluator.new(context[:value], context) }
7
+ rule(false_expr: simple(:value)) { |context| ::XlsFunction::Evaluators::FalseEvaluator.new(context[:value], context) }
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module XlsFunction
2
+ module TransformRules
3
+ module FunctionCallTransform
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ rule(identifier: simple(:identifier), arglist: subtree(:arglist)) do |context|
7
+ func = ::XlsFunction::Evaluators::FunctionEvaluator.from_dictionary(context[:identifier].to_s.downcase.to_sym)
8
+ raise ::XlsFunction::Transform::NotImplementedFunctionError, "unsupported function #{context[:identifier]}" unless func
9
+
10
+ func.create(context)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module XlsFunction
2
+ module TransformRules
3
+ module NumberTransform
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ rule(number: simple(:number)) { |context| ::XlsFunction::Evaluators::NumberEvaluator.new(context[:number], context) }
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module XlsFunction
2
+ module TransformRules
3
+ module StringTransform
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ # empty string pattern
7
+ rule(string: []) do
8
+ ::XlsFunction::Evaluators::StringEvaluator.new('', {})
9
+ end
10
+ rule(string: simple(:string)) do |context|
11
+ ::XlsFunction::Evaluators::StringEvaluator.new(context[:string], context)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module XlsFunction
2
+ module TransformRules
3
+ module VariantTransform
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ rule(variant: simple(:name)) do |context|
7
+ ::XlsFunction::Evaluators::VariantEvaluator.new(context[:name], context)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,59 @@
1
+ module XlsFunction
2
+ module UserDefinedFunctionFactory
3
+ class << self
4
+ def create(block_or_source)
5
+ if block_or_source.respond_to?(:call)
6
+ create_from_proc(block_or_source)
7
+ else
8
+ create_from_source(block_or_source.to_s)
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def create_from_proc(block)
15
+ klass = Class.new(ProcFunction)
16
+
17
+ klass.define_singleton_method(:create) do |context|
18
+ klass.new(context, block)
19
+ end
20
+
21
+ klass
22
+ end
23
+
24
+ def create_from_source(source)
25
+ raise 'UserDefinedFunction: missing source' if source.nil?
26
+
27
+ fn = XlsFunction.evaluate(source)
28
+ raise 'UserDefinedFunction: use LAMBDA to add your function' unless fn < XlsFunction::Evaluators::Functions::Lambda::Function
29
+
30
+ fn
31
+ end
32
+ end
33
+
34
+ class ProcFunction < ::XlsFunction::Evaluators::FunctionEvaluator
35
+ attr_reader :custom_proc, :evaled_arglist
36
+
37
+ def initialize(context, custom_proc)
38
+ super(context)
39
+ @custom_proc = custom_proc
40
+ end
41
+
42
+ # @override
43
+ def eval_arglist
44
+ # There is no argument definition, so it evaluates as it is passed.
45
+ @evaled_arglist = arg_list.map do |arg|
46
+ value = evaluate_or_self(arg)
47
+ detect_error(value)
48
+ break if error?
49
+
50
+ value
51
+ end
52
+ end
53
+
54
+ def eval
55
+ custom_proc.call(*evaled_arglist)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ module XlsFunction
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,82 @@
1
+ require 'xls_function/version'
2
+ require 'parslet'
3
+ require 'wareki'
4
+
5
+ require 'bigdecimal'
6
+ require 'bigdecimal/util'
7
+ require 'date'
8
+ require 'time'
9
+
10
+ require 'xls_function/i18n'
11
+ require 'xls_function/error'
12
+ require 'xls_function/default_logger'
13
+ require 'xls_function/class_dictionary'
14
+
15
+ require 'xls_function/converter'
16
+
17
+ require 'xls_function/extensions/hash_extension'
18
+ require 'xls_function/extensions/array_extension'
19
+ require 'xls_function/extensions/big_decimal_extension'
20
+ require 'xls_function/extensions/date_extension'
21
+ require 'xls_function/extensions/time_extension'
22
+
23
+ require 'xls_function/format_string'
24
+ require 'xls_function/parser'
25
+ require 'xls_function/transform'
26
+
27
+ module XlsFunction
28
+ class Error < StandardError; end
29
+
30
+ class << self
31
+ def evaluate(source, **context)
32
+ parsed = parser.parse(source.to_s.strip)
33
+ transformed = transform.apply(parsed, context)
34
+ transformed.evaluate
35
+ end
36
+
37
+ def parser
38
+ return @parser_factory.call if @parser_factory
39
+
40
+ XlsFunction::Parser.new
41
+ end
42
+
43
+ def use_parser_factory(&block)
44
+ @parser_factory = block
45
+ end
46
+
47
+ def transform
48
+ return @transform_factory.call if @transform_factory
49
+
50
+ XlsFunction::Transform.new
51
+ end
52
+
53
+ def use_transform_factory(&block)
54
+ @transform_factory = block
55
+ end
56
+
57
+ attr_accessor :verbose
58
+
59
+ def logger
60
+ @logger ||= XlsFunction::DefaultLogger.new
61
+ end
62
+
63
+ def logger=(obj)
64
+ raise 'Logger must respond_to :write' unless obj.respond_to?(:write)
65
+
66
+ @logger = obj
67
+ end
68
+
69
+ def locale=(value)
70
+ I18n.locale = value
71
+ end
72
+
73
+ def current_locale
74
+ I18n.locale
75
+ end
76
+
77
+ def functions
78
+ dictionaries = class_dictionary.reject { |_, v| v < XlsFunction::Evaluators::BinaryOperationEvaluator }
79
+ dictionaries.to_h { |identifier, klass| [identifier.to_s.upcase, klass.to_h] }
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,30 @@
1
+ require_relative 'lib/xls_function/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'xls_function'
5
+ spec.version = XlsFunction::VERSION
6
+ spec.authors = ['Nakakuki Shingo']
7
+ spec.email = ['nakakuki.shingo@moneyforward.co.jp']
8
+
9
+ spec.summary = 'Excel-like Functions Evaluator'
10
+ spec.description = 'Excel-like Functions Evaluator'
11
+ spec.homepage = 'https://github.com/moneyforward/xls_function'
12
+ spec.license = 'Apache-2.0'
13
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
14
+
15
+ spec.metadata['homepage_uri'] = spec.homepage
16
+ spec.metadata['source_code_uri'] = 'https://github.com/moneyforward/xls_function'
17
+
18
+ # Specify which files should be added to the gem when it is released.
19
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ end
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_dependency 'i18n', '>= 1.10.0'
28
+ spec.add_dependency 'parslet', '>= 2.0.0'
29
+ spec.add_dependency 'wareki', '>= 1.1.0'
30
+ end
metadata ADDED
@@ -0,0 +1,221 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xls_function
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nakakuki Shingo
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-11-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i18n
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.10.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.10.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: parslet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: wareki
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.0
55
+ description: Excel-like Functions Evaluator
56
+ email:
57
+ - nakakuki.shingo@moneyforward.co.jp
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".github/workflows/publish_gem.yml"
63
+ - ".github/workflows/rspec.yml"
64
+ - ".gitignore"
65
+ - ".rspec"
66
+ - ".rubocop.yml"
67
+ - CODE_OF_CONDUCT.md
68
+ - Gemfile
69
+ - LICENSE
70
+ - README.md
71
+ - Rakefile
72
+ - bin/console
73
+ - bin/setup
74
+ - lib/xls_function.rb
75
+ - lib/xls_function/class_dictionary.rb
76
+ - lib/xls_function/converter.rb
77
+ - lib/xls_function/converters/date_converter.rb
78
+ - lib/xls_function/converters/date_serial_converter.rb
79
+ - lib/xls_function/converters/number_converter.rb
80
+ - lib/xls_function/converters/time_converter.rb
81
+ - lib/xls_function/converters/time_serial_converter.rb
82
+ - lib/xls_function/default_logger.rb
83
+ - lib/xls_function/error.rb
84
+ - lib/xls_function/evaluators/arguments_definable.rb
85
+ - lib/xls_function/evaluators/binary_operation_evaluator.rb
86
+ - lib/xls_function/evaluators/binary_operations/add.rb
87
+ - lib/xls_function/evaluators/binary_operations/concat.rb
88
+ - lib/xls_function/evaluators/binary_operations/divide.rb
89
+ - lib/xls_function/evaluators/binary_operations/equal.rb
90
+ - lib/xls_function/evaluators/binary_operations/greater_than.rb
91
+ - lib/xls_function/evaluators/binary_operations/greater_than_or_equal_to.rb
92
+ - lib/xls_function/evaluators/binary_operations/less_than.rb
93
+ - lib/xls_function/evaluators/binary_operations/less_than_or_equal_to.rb
94
+ - lib/xls_function/evaluators/binary_operations/multiple.rb
95
+ - lib/xls_function/evaluators/binary_operations/not_equal.rb
96
+ - lib/xls_function/evaluators/binary_operations/power.rb
97
+ - lib/xls_function/evaluators/binary_operations/subtract.rb
98
+ - lib/xls_function/evaluators/class_dictionary.rb
99
+ - lib/xls_function/evaluators/error_detector.rb
100
+ - lib/xls_function/evaluators/evaluable.rb
101
+ - lib/xls_function/evaluators/false_evaluator.rb
102
+ - lib/xls_function/evaluators/function_evaluator.rb
103
+ - lib/xls_function/evaluators/functions/and.rb
104
+ - lib/xls_function/evaluators/functions/asc.rb
105
+ - lib/xls_function/evaluators/functions/char.rb
106
+ - lib/xls_function/evaluators/functions/clean.rb
107
+ - lib/xls_function/evaluators/functions/code.rb
108
+ - lib/xls_function/evaluators/functions/concat.rb
109
+ - lib/xls_function/evaluators/functions/date.rb
110
+ - lib/xls_function/evaluators/functions/date_value.rb
111
+ - lib/xls_function/evaluators/functions/day.rb
112
+ - lib/xls_function/evaluators/functions/dbcs.rb
113
+ - lib/xls_function/evaluators/functions/e_date.rb
114
+ - lib/xls_function/evaluators/functions/e_o_month.rb
115
+ - lib/xls_function/evaluators/functions/exact.rb
116
+ - lib/xls_function/evaluators/functions/find.rb
117
+ - lib/xls_function/evaluators/functions/fixed.rb
118
+ - lib/xls_function/evaluators/functions/hour.rb
119
+ - lib/xls_function/evaluators/functions/if.rb
120
+ - lib/xls_function/evaluators/functions/ifs.rb
121
+ - lib/xls_function/evaluators/functions/int.rb
122
+ - lib/xls_function/evaluators/functions/iserror.rb
123
+ - lib/xls_function/evaluators/functions/isnumber.rb
124
+ - lib/xls_function/evaluators/functions/lambda.rb
125
+ - lib/xls_function/evaluators/functions/left.rb
126
+ - lib/xls_function/evaluators/functions/len.rb
127
+ - lib/xls_function/evaluators/functions/let.rb
128
+ - lib/xls_function/evaluators/functions/lower.rb
129
+ - lib/xls_function/evaluators/functions/mid.rb
130
+ - lib/xls_function/evaluators/functions/minute.rb
131
+ - lib/xls_function/evaluators/functions/month.rb
132
+ - lib/xls_function/evaluators/functions/not.rb
133
+ - lib/xls_function/evaluators/functions/now.rb
134
+ - lib/xls_function/evaluators/functions/or.rb
135
+ - lib/xls_function/evaluators/functions/power.rb
136
+ - lib/xls_function/evaluators/functions/proper.rb
137
+ - lib/xls_function/evaluators/functions/replace.rb
138
+ - lib/xls_function/evaluators/functions/rept.rb
139
+ - lib/xls_function/evaluators/functions/right.rb
140
+ - lib/xls_function/evaluators/functions/round.rb
141
+ - lib/xls_function/evaluators/functions/round_down.rb
142
+ - lib/xls_function/evaluators/functions/round_up.rb
143
+ - lib/xls_function/evaluators/functions/second.rb
144
+ - lib/xls_function/evaluators/functions/sqrt.rb
145
+ - lib/xls_function/evaluators/functions/substitute.rb
146
+ - lib/xls_function/evaluators/functions/text.rb
147
+ - lib/xls_function/evaluators/functions/time.rb
148
+ - lib/xls_function/evaluators/functions/timevalue.rb
149
+ - lib/xls_function/evaluators/functions/today.rb
150
+ - lib/xls_function/evaluators/functions/trim.rb
151
+ - lib/xls_function/evaluators/functions/trunc.rb
152
+ - lib/xls_function/evaluators/functions/unichar.rb
153
+ - lib/xls_function/evaluators/functions/unicode.rb
154
+ - lib/xls_function/evaluators/functions/upper.rb
155
+ - lib/xls_function/evaluators/functions/value.rb
156
+ - lib/xls_function/evaluators/functions/year.rb
157
+ - lib/xls_function/evaluators/number_evaluator.rb
158
+ - lib/xls_function/evaluators/string_evaluator.rb
159
+ - lib/xls_function/evaluators/true_evaluator.rb
160
+ - lib/xls_function/evaluators/variant_evaluator.rb
161
+ - lib/xls_function/extensions/array_extension.rb
162
+ - lib/xls_function/extensions/big_decimal_extension.rb
163
+ - lib/xls_function/extensions/date_extension.rb
164
+ - lib/xls_function/extensions/hash_extension.rb
165
+ - lib/xls_function/extensions/time_extension.rb
166
+ - lib/xls_function/format_string.rb
167
+ - lib/xls_function/format_string/evaluators/elapsed_time_evaluator.rb
168
+ - lib/xls_function/format_string/evaluators/number_evaluator.rb
169
+ - lib/xls_function/format_string/evaluators/time_evaluator.rb
170
+ - lib/xls_function/format_string/parse_rules/dates.rb
171
+ - lib/xls_function/format_string/parse_rules/numbers.rb
172
+ - lib/xls_function/format_string/parse_rules/texts.rb
173
+ - lib/xls_function/format_string/parse_rules/times.rb
174
+ - lib/xls_function/format_string/parser.rb
175
+ - lib/xls_function/format_string/transform.rb
176
+ - lib/xls_function/format_string/transform_rules/dates.rb
177
+ - lib/xls_function/format_string/transform_rules/numbers.rb
178
+ - lib/xls_function/format_string/transform_rules/texts.rb
179
+ - lib/xls_function/format_string/transform_rules/times.rb
180
+ - lib/xls_function/i18n.rb
181
+ - lib/xls_function/locales/en.yml
182
+ - lib/xls_function/locales/ja.yml
183
+ - lib/xls_function/parse_rules/binary_operation.rb
184
+ - lib/xls_function/parse_rules/common.rb
185
+ - lib/xls_function/parser.rb
186
+ - lib/xls_function/transform.rb
187
+ - lib/xls_function/transform_rules/binary_operation_transform.rb
188
+ - lib/xls_function/transform_rules/boolean_transform.rb
189
+ - lib/xls_function/transform_rules/function_call_transform.rb
190
+ - lib/xls_function/transform_rules/number_transform.rb
191
+ - lib/xls_function/transform_rules/string_transform.rb
192
+ - lib/xls_function/transform_rules/variant_transform.rb
193
+ - lib/xls_function/user_defined_function_factory.rb
194
+ - lib/xls_function/version.rb
195
+ - xls_function.gemspec
196
+ homepage: https://github.com/moneyforward/xls_function
197
+ licenses:
198
+ - Apache-2.0
199
+ metadata:
200
+ homepage_uri: https://github.com/moneyforward/xls_function
201
+ source_code_uri: https://github.com/moneyforward/xls_function
202
+ post_install_message:
203
+ rdoc_options: []
204
+ require_paths:
205
+ - lib
206
+ required_ruby_version: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: 2.7.0
211
+ required_rubygems_version: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ requirements: []
217
+ rubygems_version: 3.1.2
218
+ signing_key:
219
+ specification_version: 4
220
+ summary: Excel-like Functions Evaluator
221
+ test_files: []