danica 2.7.2 → 2.7.7
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.
- checksums.yaml +5 -5
- data/.circleci/config.yml +71 -0
- data/.gitignore +6 -1
- data/.rubocop.yml +18 -0
- data/.rubocop_todo.yml +123 -0
- data/Dockerfile +22 -0
- data/Gemfile +2 -1
- data/README.md +9 -1
- data/Rakefile +4 -0
- data/config/check_specs.yml +13 -0
- data/config/rubycritc.rb +12 -0
- data/config/yardstick.rb +13 -0
- data/config/yardstick.yml +33 -0
- data/danica.gemspec +19 -10
- data/docker-compose.yml +14 -9
- data/lib/danica.rb +2 -1
- data/lib/danica/base_operations.rb +3 -0
- data/lib/danica/builder.rb +2 -0
- data/lib/danica/common.rb +8 -4
- data/lib/danica/dsl.rb +8 -6
- data/lib/danica/dsl/builder.rb +4 -1
- data/lib/danica/equation.rb +3 -3
- data/lib/danica/equation/builder.rb +2 -0
- data/lib/danica/exception.rb +3 -2
- data/lib/danica/expressable.rb +14 -8
- data/lib/danica/expression.rb +4 -2
- data/lib/danica/expression/gauss.rb +5 -5
- data/lib/danica/formatted.rb +27 -8
- data/lib/danica/function.rb +5 -3
- data/lib/danica/function/name.rb +2 -0
- data/lib/danica/operator.rb +13 -9
- data/lib/danica/operator/addition.rb +4 -3
- data/lib/danica/operator/chained.rb +4 -3
- data/lib/danica/operator/cos.rb +2 -1
- data/lib/danica/operator/division.rb +2 -1
- data/lib/danica/operator/exponential.rb +2 -1
- data/lib/danica/operator/functional.rb +3 -2
- data/lib/danica/operator/multiplication.rb +4 -2
- data/lib/danica/operator/power.rb +4 -3
- data/lib/danica/operator/sin.rb +2 -1
- data/lib/danica/operator/squared_root.rb +2 -1
- data/lib/danica/variables_holder.rb +7 -4
- data/lib/danica/variables_holder/alias_builder.rb +4 -4
- data/lib/danica/variables_holder/calculator.rb +2 -0
- data/lib/danica/variables_holder/store.rb +3 -2
- data/lib/danica/variables_holder/variables_builder.rb +2 -1
- data/lib/danica/version.rb +3 -1
- data/lib/danica/wrapper.rb +14 -9
- data/lib/danica/wrapper/constant.rb +10 -14
- data/lib/danica/wrapper/container.rb +3 -3
- data/lib/danica/wrapper/group.rb +3 -2
- data/lib/danica/wrapper/negative.rb +3 -1
- data/lib/danica/wrapper/number.rb +6 -3
- data/lib/danica/wrapper/plus_minus.rb +3 -1
- data/lib/danica/wrapper/variable.rb +13 -8
- data/scripts/check_readme.sh +6 -0
- data/scripts/rubycritic.sh +10 -0
- data/spec/integration/global/danica/formatted_spec.rb +87 -0
- data/spec/integration/global/danica/operator/addition_spec.rb +32 -0
- data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb} +12 -9
- data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
- data/spec/integration/{negative_spec.rb → global/danica/wrapper/negative_spec.rb} +9 -8
- data/spec/integration/{plus_minus_spec.rb → global/danica/wrapper/plus_minus_spec.rb} +5 -4
- data/spec/integration/readme/constant_spec.rb +4 -1
- data/spec/integration/readme/danica/formatted_spec.rb +24 -0
- data/spec/integration/readme/danica_spec.rb +20 -4
- data/spec/integration/readme/equation_spec.rb +4 -2
- data/spec/integration/readme/expression_spec.rb +11 -8
- data/spec/integration/readme/function_spec.rb +11 -7
- data/spec/integration/readme/number_spec.rb +9 -8
- data/spec/integration/readme/operator_spec.rb +3 -1
- data/spec/integration/readme/variables_spec.rb +8 -6
- data/spec/lib/danica/common_spec.rb +71 -10
- data/spec/lib/danica/dsl_spec.rb +21 -18
- data/spec/lib/danica/equation_spec.rb +10 -8
- data/spec/lib/danica/expressable_spec.rb +5 -2
- data/spec/lib/danica/expression/gauss_spec.rb +6 -3
- data/spec/lib/danica/expression_spec.rb +48 -26
- data/spec/lib/danica/formatted_spec.rb +34 -13
- data/spec/lib/danica/function/name_spec.rb +3 -1
- data/spec/lib/danica/function_spec.rb +14 -10
- data/spec/lib/danica/operator/addition_spec.rb +16 -15
- data/spec/lib/danica/operator/cos_spec.rb +9 -8
- data/spec/lib/danica/operator/division_spec.rb +18 -17
- data/spec/lib/danica/operator/exponential_spec.rb +9 -8
- data/spec/lib/danica/operator/multiplication_spec.rb +16 -15
- data/spec/lib/danica/operator/power_spec.rb +17 -16
- data/spec/lib/danica/operator/sin_spec.rb +9 -8
- data/spec/lib/danica/operator/squared_root_spec.rb +9 -8
- data/spec/lib/danica/operator_spec.rb +13 -4
- data/spec/lib/danica/variables_holder/store_spec.rb +19 -13
- data/spec/lib/danica/variables_holder_spec.rb +76 -59
- data/spec/lib/danica/wrapper/constant_spec.rb +9 -2
- data/spec/lib/danica/wrapper/group_spec.rb +4 -1
- data/spec/lib/danica/wrapper/negative_spec.rb +4 -1
- data/spec/lib/danica/wrapper/number_spec.rb +8 -3
- data/spec/lib/danica/wrapper/plus_minus_spec.rb +4 -1
- data/spec/lib/danica/wrapper/variable_spec.rb +6 -3
- data/spec/lib/danica/wrapper_spec.rb +14 -12
- data/spec/lib/danica_spec.rb +6 -5
- data/spec/spec_helper.rb +3 -2
- data/spec/support/models/expression/baskara.rb +3 -3
- data/spec/support/models/expression/parabole.rb +2 -0
- data/spec/support/models/expression/quadratic_sum.rb +3 -1
- data/spec/support/models/expression/spatial.rb +2 -1
- data/spec/support/models/function/my_function.rb +3 -1
- data/spec/support/models/function/parabole.rb +1 -1
- data/spec/support/models/function/quadratic_sum.rb +2 -0
- data/spec/support/models/function/spatial.rb +2 -0
- data/spec/support/models/operator/inverse.rb +3 -1
- data/spec/support/models/operator/my_operator.rb +3 -1
- data/spec/support/models/variables_holder/dummy.rb +3 -1
- data/spec/support/shared_contexts/common.rb +4 -2
- data/spec/support/shared_examples/base_operations.rb +7 -4
- data/spec/support/shared_examples/common.rb +3 -1
- data/spec/support/shared_examples/operator/chained.rb +12 -6
- data/spec/support/shared_examples/operator/dual_term.rb +9 -8
- data/spec/support/shared_examples/operator/single_input.rb +7 -2
- data/spec/support/shared_examples/variable.rb +8 -4
- metadata +158 -36
- data/spec/integration/addition_spec.rb +0 -28
- data/spec/integration/formatted_spec.rb +0 -75
- data/spec/integration/readme/formatting_spec.rb +0 -34
data/lib/danica.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
module BaseOperations
|
3
5
|
def +(other)
|
@@ -28,6 +30,7 @@ module Danica
|
|
28
30
|
|
29
31
|
def formatted_operation(other, value)
|
30
32
|
return other.repack(value) if other.is_a?(Danica::Formatted)
|
33
|
+
|
31
34
|
value
|
32
35
|
end
|
33
36
|
end
|
data/lib/danica/builder.rb
CHANGED
data/lib/danica/common.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
|
-
module Common
|
4
|
+
module Common
|
5
|
+
extend ::ActiveSupport::Concern
|
3
6
|
included do
|
4
7
|
include Wrapper
|
5
8
|
include DSL
|
@@ -42,16 +45,16 @@ module Danica
|
|
42
45
|
when :f
|
43
46
|
to_f
|
44
47
|
else
|
45
|
-
raise Exception::FormattedNotFound
|
48
|
+
raise Exception::FormattedNotFound
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
49
52
|
def tex(**options)
|
50
|
-
formatted(:tex, options)
|
53
|
+
formatted(format: :tex, **options)
|
51
54
|
end
|
52
55
|
|
53
56
|
def gnu(**options)
|
54
|
-
formatted(:gnu, options)
|
57
|
+
formatted(format: :gnu, **options)
|
55
58
|
end
|
56
59
|
|
57
60
|
def formatted(*args)
|
@@ -72,6 +75,7 @@ module Danica
|
|
72
75
|
|
73
76
|
def wrap_as_group(value)
|
74
77
|
return value if is_grouped? || value.priority >= priority
|
78
|
+
|
75
79
|
group(value)
|
76
80
|
end
|
77
81
|
end
|
data/lib/danica/dsl.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
module DSL
|
3
5
|
autoload :Builder, 'danica/dsl/builder'
|
4
6
|
|
5
7
|
class << self
|
6
|
-
def register_operator(method, clazz=nil)
|
8
|
+
def register_operator(method, clazz = nil)
|
7
9
|
register(method, clazz, 'Danica::Operator')
|
8
10
|
end
|
9
11
|
|
10
|
-
def register_wrapper(method, clazz=nil)
|
12
|
+
def register_wrapper(method, clazz = nil)
|
11
13
|
register(method, clazz, 'Danica::Wrapper')
|
12
14
|
end
|
13
15
|
|
14
|
-
def register(method, clazz=nil, base=nil)
|
16
|
+
def register(method, clazz = nil, base = nil)
|
15
17
|
Builder.new(method, clazz, base).build
|
16
18
|
end
|
17
19
|
|
@@ -39,14 +41,14 @@ module Danica
|
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
|
-
%i
|
44
|
+
%i[
|
43
45
|
addition multiplication division sin cos power
|
44
46
|
squared_root exponential
|
45
|
-
|
47
|
+
].each do |method|
|
46
48
|
DSL.register_operator(method)
|
47
49
|
end
|
48
50
|
|
49
|
-
%i
|
51
|
+
%i[number group negative plus_minus variable constant].each do |method|
|
50
52
|
DSL.register_wrapper(method)
|
51
53
|
end
|
52
54
|
|
data/lib/danica/dsl/builder.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
module DSL
|
3
5
|
class Builder
|
4
6
|
attr_reader :method, :claz, :base
|
5
7
|
|
6
|
-
def initialize(method, claz=nil, base=nil)
|
8
|
+
def initialize(method, claz = nil, base = nil)
|
7
9
|
@method = method
|
8
10
|
@claz = claz
|
9
11
|
@base = base
|
@@ -22,6 +24,7 @@ module Danica
|
|
22
24
|
def build_clazz
|
23
25
|
return clazz_from_method unless claz
|
24
26
|
return claz if claz.is_a? Class
|
27
|
+
|
25
28
|
clazz_from_string
|
26
29
|
end
|
27
30
|
|
data/lib/danica/equation.rb
CHANGED
data/lib/danica/exception.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Danica::Exception < RuntimeError
|
2
4
|
class NotDefined < self; end
|
3
5
|
class FormattedNotFound < self; end
|
4
6
|
class NotImplemented < self; end
|
@@ -14,4 +16,3 @@ class Danica::Exception < ::Exception
|
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
17
|
-
|
data/lib/danica/expressable.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
|
-
module Expressable
|
4
|
+
module Expressable
|
5
|
+
extend ::ActiveSupport::Concern
|
3
6
|
include VariablesHolder
|
4
7
|
|
5
8
|
class_methods do
|
6
9
|
def built_with(block_name)
|
7
|
-
|
10
|
+
delegate :to, :to_f, to: block_name
|
8
11
|
|
9
|
-
|
12
|
+
define_singleton_method(:build) do |*vars, &block|
|
10
13
|
Class.new(self) do
|
11
14
|
variables(*vars)
|
12
15
|
|
13
16
|
private
|
14
17
|
|
15
|
-
module_eval
|
16
|
-
|
17
|
-
|
18
|
+
module_eval do
|
19
|
+
define_method block_name do
|
20
|
+
instance_variable_get("@#{block_name}") ||
|
21
|
+
block && instance_variable_set("@#{block_name}", instance_eval(&block))
|
22
|
+
end
|
23
|
+
end
|
18
24
|
end
|
19
25
|
end
|
20
26
|
|
21
|
-
|
27
|
+
define_singleton_method(:create) do |*vars, &block|
|
22
28
|
build(*vars, &block).new
|
23
29
|
end
|
24
30
|
end
|
@@ -30,7 +36,7 @@ module Danica
|
|
30
36
|
attributes = { variables: args.flatten }.merge(options)
|
31
37
|
|
32
38
|
attributes.each do |key, value|
|
33
|
-
|
39
|
+
public_send("#{key}=", value)
|
34
40
|
end
|
35
41
|
end
|
36
42
|
end
|
data/lib/danica/expression.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Expression
|
5
|
+
autoload :Gauss, 'danica/expression/gauss'
|
6
|
+
|
3
7
|
include Common
|
4
8
|
include DSL
|
5
9
|
include BaseOperations
|
6
10
|
include Expressable
|
7
11
|
|
8
|
-
autoload :Gauss, 'danica/expression/gauss'
|
9
|
-
|
10
12
|
delegate :is_grouped?, :priority, to: :expression_block
|
11
13
|
|
12
14
|
built_with(:expression_block)
|
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Expression::Gauss < Expression.build(:x, average: { latex: '\mu', gnuplot: :u }, variance_root: { latex: '\sigma', gnuplot: :v }) { num(1) / denominator * exponential(exp) }
|
3
|
-
|
4
5
|
private
|
5
6
|
|
6
7
|
def denominator
|
@@ -9,14 +10,13 @@ module Danica
|
|
9
10
|
|
10
11
|
def exp
|
11
12
|
- (
|
12
|
-
((x - average)
|
13
|
+
((x - average)**2) /
|
13
14
|
(num(2) * variance)
|
14
|
-
|
15
|
+
)
|
15
16
|
end
|
16
17
|
|
17
18
|
def variance
|
18
|
-
@variance ||= variance_root
|
19
|
+
@variance ||= variance_root**2
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
22
|
-
|
data/lib/danica/formatted.rb
CHANGED
@@ -1,34 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Danica::Formatted
|
2
|
-
attr_reader :content, :
|
4
|
+
attr_reader :content, :options
|
3
5
|
|
4
|
-
def initialize(content,
|
6
|
+
def initialize(content, **options)
|
5
7
|
@content = content
|
6
|
-
@
|
7
|
-
@decimals = decimals
|
8
|
+
@options = options
|
8
9
|
end
|
9
10
|
|
10
11
|
def to_s
|
11
|
-
content.to(format,
|
12
|
+
content.to(format, options)
|
12
13
|
end
|
13
14
|
|
14
15
|
def ==(other)
|
15
16
|
return false unless other.class == self.class
|
16
|
-
|
17
|
-
|
17
|
+
|
18
|
+
other.content == content &&
|
19
|
+
other.format == format
|
20
|
+
end
|
21
|
+
|
22
|
+
def format
|
23
|
+
options[:format]
|
18
24
|
end
|
19
25
|
|
20
26
|
def repack(object)
|
21
27
|
self.class.new(
|
22
28
|
object,
|
23
|
-
|
29
|
+
options
|
24
30
|
)
|
25
31
|
end
|
26
32
|
|
33
|
+
def to_tex(**opts)
|
34
|
+
to(:tex, **opts)
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_gnu(**opts)
|
38
|
+
to(:gnu, **opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
def to(format, **opts)
|
42
|
+
content.to(format, options.merge(opts))
|
43
|
+
end
|
44
|
+
|
27
45
|
private
|
28
46
|
|
29
47
|
def method_missing(method, *args)
|
30
48
|
value = content.public_send(method, *args)
|
31
49
|
return value unless value.is_a?(Danica::Common)
|
50
|
+
|
32
51
|
repack(value)
|
33
52
|
end
|
34
53
|
end
|
data/lib/danica/function.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Function
|
5
|
+
autoload :Name, 'danica/function/name'
|
6
|
+
|
3
7
|
include VariablesHolder
|
4
8
|
include DSL
|
5
9
|
include Expressable
|
6
10
|
|
7
|
-
|
8
|
-
attr_accessor :name
|
11
|
+
attr_writer :name
|
9
12
|
|
10
13
|
built_with(:function_block)
|
11
14
|
|
@@ -24,4 +27,3 @@ module Danica
|
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
27
|
-
|
data/lib/danica/function/name.rb
CHANGED
data/lib/danica/operator.rb
CHANGED
@@ -1,15 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Operator
|
3
5
|
include VariablesHolder
|
4
|
-
include BaseOperations
|
5
|
-
|
6
|
-
default_value :priority, 4
|
7
|
-
default_value :is_grouped?, false
|
8
|
-
|
9
|
-
def ==(other)
|
10
|
-
return false unless other.class == self.class
|
11
|
-
variables == other.variables
|
12
|
-
end
|
13
6
|
|
14
7
|
autoload :Functional, 'danica/operator/functional'
|
15
8
|
autoload :Chained, 'danica/operator/chained'
|
@@ -21,5 +14,16 @@ module Danica
|
|
21
14
|
autoload :Sin, 'danica/operator/sin'
|
22
15
|
autoload :SquaredRoot, 'danica/operator/squared_root'
|
23
16
|
autoload :Exponential, 'danica/operator/exponential'
|
17
|
+
|
18
|
+
include BaseOperations
|
19
|
+
|
20
|
+
default_value :priority, 4
|
21
|
+
default_value :is_grouped?, false
|
22
|
+
|
23
|
+
def ==(other)
|
24
|
+
return false unless other.class == self.class
|
25
|
+
|
26
|
+
variables == other.variables
|
27
|
+
end
|
24
28
|
end
|
25
29
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Operator::Addition < Operator::Chained
|
3
5
|
default_value :priority, 1
|
@@ -6,8 +8,8 @@ module Danica
|
|
6
8
|
|
7
9
|
default_value :symbol, :+
|
8
10
|
|
9
|
-
def chain_operation(
|
10
|
-
|
11
|
+
def chain_operation(first, second)
|
12
|
+
first + second
|
11
13
|
end
|
12
14
|
|
13
15
|
def join_proc(symbol)
|
@@ -17,4 +19,3 @@ module Danica
|
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
20
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Operator
|
3
5
|
class Chained < Operator
|
@@ -46,11 +48,10 @@ module Danica
|
|
46
48
|
end
|
47
49
|
|
48
50
|
def chain(numbers)
|
49
|
-
numbers.inject do |a,b|
|
50
|
-
chain_operation(a,b)
|
51
|
+
numbers.inject do |a, b|
|
52
|
+
chain_operation(a, b)
|
51
53
|
end.to_f
|
52
54
|
end
|
53
55
|
end
|
54
56
|
end
|
55
57
|
end
|
56
|
-
|
data/lib/danica/operator/cos.rb
CHANGED