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
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Operator::Functional < Operator
|
3
5
|
variables :value
|
@@ -9,7 +11,7 @@ module Danica
|
|
9
11
|
gnu = text if gnu.nil?
|
10
12
|
|
11
13
|
Class.new(self) do
|
12
|
-
module_eval(%
|
14
|
+
module_eval(%(
|
13
15
|
def to_f
|
14
16
|
Math.#{operator}(value.to_f)
|
15
17
|
end
|
@@ -26,4 +28,3 @@ module Danica
|
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
29
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Operator::Multiplication < Operator::Chained
|
3
5
|
default_value :priority, 3
|
@@ -7,8 +9,8 @@ module Danica
|
|
7
9
|
default_value :tex_symbol, '\cdot'
|
8
10
|
default_value :gnu_symbol, :*
|
9
11
|
|
10
|
-
def chain_operation(
|
11
|
-
|
12
|
+
def chain_operation(first, second)
|
13
|
+
first * second
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Operator::Power < Operator
|
3
5
|
variables :base, :exponent
|
4
6
|
default_value :is_grouped?, false
|
5
7
|
|
6
8
|
def to_f
|
7
|
-
base.to_f
|
9
|
+
base.to_f**exponent.to_f
|
8
10
|
end
|
9
11
|
|
10
12
|
def to_tex(**options)
|
@@ -12,8 +14,7 @@ module Danica
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def to_gnu(**options)
|
15
|
-
"#{
|
17
|
+
"#{wrap_as_group(base).to_gnu(options)}**(#{exponent.to_gnu(options)})"
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
19
|
-
|
data/lib/danica/operator/sin.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
1
|
-
|
2
|
-
module VariablesHolder extend ::ActiveSupport::Concern
|
3
|
-
include Common
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
3
|
+
module Danica
|
4
|
+
module VariablesHolder
|
5
5
|
autoload :VariablesBuilder, 'danica/variables_holder/variables_builder'
|
6
6
|
autoload :AliasBuilder, 'danica/variables_holder/alias_builder'
|
7
7
|
autoload :Calculator, 'danica/variables_holder/calculator'
|
8
8
|
autoload :Store, 'danica/variables_holder/store'
|
9
9
|
|
10
|
+
extend ::ActiveSupport::Concern
|
11
|
+
include Common
|
12
|
+
|
10
13
|
delegate :containers_hash, :containers, :variables,
|
11
14
|
:variables_hash, :variables_value_hash,
|
12
15
|
:extract_variables, to: :store
|
13
16
|
|
14
17
|
included do
|
15
|
-
default_value :variable_holder?,
|
18
|
+
default_value :variable_holder?, true
|
16
19
|
end
|
17
20
|
|
18
21
|
class_methods do
|
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica::VariablesHolder
|
2
4
|
class AliasBuilder
|
3
|
-
|
4
5
|
attr_reader :clazz, :origin, :destiny
|
5
6
|
|
6
7
|
def initialize(origin, destiny, clazz)
|
@@ -11,10 +12,9 @@ module Danica::VariablesHolder
|
|
11
12
|
|
12
13
|
def build
|
13
14
|
clazz.variables_hash.change_keys! { |k| k == origin ? destiny : k }
|
14
|
-
VariablesBuilder.new([
|
15
|
+
VariablesBuilder.new([destiny], clazz).build
|
15
16
|
clazz.send(:alias_method, "#{origin}=", "#{destiny}=")
|
16
17
|
clazz.send(:alias_method, origin, destiny)
|
17
|
-
end
|
18
|
+
end
|
18
19
|
end
|
19
20
|
end
|
20
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class VariablesHolder::Store
|
3
5
|
attr_reader :default_variables_hash, :variables_names
|
@@ -37,7 +39,7 @@ module Danica
|
|
37
39
|
|
38
40
|
def named_variables_hash
|
39
41
|
variable_variables.inject({}) do |hash, (key, container)|
|
40
|
-
hash.merge(
|
42
|
+
hash.merge((container.content.name || key).to_sym => container)
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -64,4 +66,3 @@ module Danica
|
|
64
66
|
end
|
65
67
|
end
|
66
68
|
end
|
67
|
-
|
data/lib/danica/version.rb
CHANGED
data/lib/danica/wrapper.rb
CHANGED
@@ -1,5 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
module Wrapper
|
5
|
+
autoload :Number, 'danica/wrapper/number'
|
6
|
+
autoload :Group, 'danica/wrapper/group'
|
7
|
+
autoload :Negative, 'danica/wrapper/negative'
|
8
|
+
autoload :PlusMinus, 'danica/wrapper/plus_minus'
|
9
|
+
autoload :Constant, 'danica/wrapper/constant'
|
10
|
+
autoload :Variable, 'danica/wrapper/variable'
|
11
|
+
autoload :Container, 'danica/wrapper/container'
|
12
|
+
|
3
13
|
def wrap_value(value)
|
4
14
|
Wrapper.wrap_value(value)
|
5
15
|
end
|
@@ -16,26 +26,21 @@ module Danica
|
|
16
26
|
Variable.new(name: value)
|
17
27
|
else
|
18
28
|
raise Exception::InvalidInput, value unless value.is_a?(Danica::Common)
|
29
|
+
|
19
30
|
value
|
20
31
|
end
|
21
32
|
end
|
22
33
|
|
23
34
|
def self.wrap_numeric(number)
|
24
35
|
return Negative.new(Number.new(-number)) if number < 0
|
36
|
+
|
25
37
|
Number.new(number)
|
26
38
|
end
|
27
39
|
|
28
40
|
def self.wrap_hash(hash)
|
29
|
-
return Constant.new(hash) if hash.keys.map(&:to_sym).sort == %i
|
41
|
+
return Constant.new(hash) if hash.keys.map(&:to_sym).sort == %i[gnuplot latex value]
|
42
|
+
|
30
43
|
Variable.new(hash)
|
31
44
|
end
|
32
|
-
|
33
|
-
autoload :Number, 'danica/wrapper/number'
|
34
|
-
autoload :Group, 'danica/wrapper/group'
|
35
|
-
autoload :Negative, 'danica/wrapper/negative'
|
36
|
-
autoload :PlusMinus, 'danica/wrapper/plus_minus'
|
37
|
-
autoload :Constant, 'danica/wrapper/constant'
|
38
|
-
autoload :Variable, 'danica/wrapper/variable'
|
39
|
-
autoload :Container, 'danica/wrapper/container'
|
40
45
|
end
|
41
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Constant
|
3
5
|
include BaseOperations
|
@@ -12,10 +14,10 @@ module Danica
|
|
12
14
|
|
13
15
|
def initialize(*args)
|
14
16
|
attrs = args.extract_options!
|
15
|
-
attrs = args.as_hash(%i
|
17
|
+
attrs = args.as_hash(%i[value latex gnuplot]).merge(attrs)
|
16
18
|
|
17
19
|
attrs.each do |key, value|
|
18
|
-
|
20
|
+
send("#{key}=", value)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -25,33 +27,27 @@ module Danica
|
|
25
27
|
|
26
28
|
def ==(other)
|
27
29
|
return false unless other.class == self.class
|
30
|
+
|
28
31
|
gnuplot == other.gnuplot && latex == other.latex && value == other.value
|
29
32
|
end
|
30
33
|
|
31
|
-
def to_tex(**
|
34
|
+
def to_tex(**_options)
|
32
35
|
latex.to_s
|
33
36
|
end
|
34
37
|
|
35
|
-
def to_gnu(**
|
38
|
+
def to_gnu(**_options)
|
36
39
|
gnuplot.to_s
|
37
40
|
end
|
38
41
|
|
39
42
|
private
|
40
43
|
|
41
|
-
|
42
|
-
@value = value
|
43
|
-
end
|
44
|
+
attr_writer :value
|
44
45
|
|
45
|
-
|
46
|
-
@latex = latex
|
47
|
-
end
|
46
|
+
attr_writer :latex
|
48
47
|
|
49
|
-
|
50
|
-
@gnuplot = gnuplot
|
51
|
-
end
|
48
|
+
attr_writer :gnuplot
|
52
49
|
end
|
53
50
|
|
54
51
|
E = Wrapper::Constant.new(Math::E, :e, 'exp(1)')
|
55
52
|
PI = Wrapper::Constant.new(Math::PI, '\pi', :pi)
|
56
53
|
end
|
57
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Container
|
3
5
|
include Common
|
@@ -15,10 +17,8 @@ module Danica
|
|
15
17
|
|
16
18
|
def ==(other)
|
17
19
|
return content == other unless other.is_a?(self.class)
|
20
|
+
|
18
21
|
content == other.content
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
data/lib/danica/wrapper/group.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Group
|
3
5
|
include Common
|
@@ -24,9 +26,8 @@ module Danica
|
|
24
26
|
|
25
27
|
def ==(other)
|
26
28
|
return value == other unless other.is_a?(self.class)
|
29
|
+
|
27
30
|
value == other.value
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
31
|
-
|
32
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Negative
|
3
5
|
include BaseOperations
|
@@ -25,8 +27,8 @@ module Danica
|
|
25
27
|
|
26
28
|
def ==(other)
|
27
29
|
return false unless other.class == self.class
|
30
|
+
|
28
31
|
value == other.value
|
29
32
|
end
|
30
33
|
end
|
31
34
|
end
|
32
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Number
|
3
5
|
include BaseOperations
|
@@ -13,9 +15,10 @@ module Danica
|
|
13
15
|
@value = value
|
14
16
|
end
|
15
17
|
|
16
|
-
def to(
|
18
|
+
def to(_format, decimals: nil, **_options)
|
17
19
|
return value.to_i.to_s if value.to_i == value
|
18
|
-
return ("%.#{decimals}f"
|
20
|
+
return format("%.#{decimals}f", value).to_f.to_s if decimals
|
21
|
+
|
19
22
|
value.to_s
|
20
23
|
end
|
21
24
|
|
@@ -29,8 +32,8 @@ module Danica
|
|
29
32
|
|
30
33
|
def ==(other)
|
31
34
|
return false unless other.class == self.class
|
35
|
+
|
32
36
|
value == other.value
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
36
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::PlusMinus
|
3
5
|
include BaseOperations
|
@@ -29,8 +31,8 @@ module Danica
|
|
29
31
|
|
30
32
|
def ==(other)
|
31
33
|
return false unless other.class == self.class
|
34
|
+
|
32
35
|
value == other.value
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
36
|
-
|
@@ -1,9 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Danica
|
2
4
|
class Wrapper::Variable
|
3
5
|
include BaseOperations
|
4
6
|
include Common
|
5
7
|
|
6
|
-
attr_accessor :
|
8
|
+
attr_accessor :name, :latex, :gnuplot
|
9
|
+
attr_reader :value
|
7
10
|
|
8
11
|
default_value :priority, 10
|
9
12
|
default_value :is_grouped?, false
|
@@ -11,10 +14,10 @@ module Danica
|
|
11
14
|
|
12
15
|
def initialize(*args)
|
13
16
|
attrs = args.extract_options!
|
14
|
-
attrs = args.as_hash(%i
|
17
|
+
attrs = args.as_hash(%i[name value latex gnuplot]).merge(attrs)
|
15
18
|
|
16
19
|
attrs.each do |key, value|
|
17
|
-
|
20
|
+
public_send("#{key}=", value)
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
@@ -24,19 +27,22 @@ module Danica
|
|
24
27
|
|
25
28
|
def ==(other)
|
26
29
|
return false unless other.class == self.class
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
|
31
|
+
other.value == value &&
|
32
|
+
other.name == name &&
|
33
|
+
other.latex == latex &&
|
34
|
+
other.gnuplot == gnuplot
|
31
35
|
end
|
32
36
|
|
33
37
|
def to_tex(**options)
|
34
38
|
return value.to_tex(options) if value
|
39
|
+
|
35
40
|
(latex || name).to_s
|
36
41
|
end
|
37
42
|
|
38
43
|
def to_gnu(**options)
|
39
44
|
return value.to_gnu(options) if value
|
45
|
+
|
40
46
|
(gnuplot || name).to_s
|
41
47
|
end
|
42
48
|
|
@@ -45,4 +51,3 @@ module Danica
|
|
45
51
|
end
|
46
52
|
end
|
47
53
|
end
|
48
|
-
|