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.
Files changed (123) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +71 -0
  3. data/.gitignore +6 -1
  4. data/.rubocop.yml +18 -0
  5. data/.rubocop_todo.yml +123 -0
  6. data/Dockerfile +22 -0
  7. data/Gemfile +2 -1
  8. data/README.md +9 -1
  9. data/Rakefile +4 -0
  10. data/config/check_specs.yml +13 -0
  11. data/config/rubycritc.rb +12 -0
  12. data/config/yardstick.rb +13 -0
  13. data/config/yardstick.yml +33 -0
  14. data/danica.gemspec +19 -10
  15. data/docker-compose.yml +14 -9
  16. data/lib/danica.rb +2 -1
  17. data/lib/danica/base_operations.rb +3 -0
  18. data/lib/danica/builder.rb +2 -0
  19. data/lib/danica/common.rb +8 -4
  20. data/lib/danica/dsl.rb +8 -6
  21. data/lib/danica/dsl/builder.rb +4 -1
  22. data/lib/danica/equation.rb +3 -3
  23. data/lib/danica/equation/builder.rb +2 -0
  24. data/lib/danica/exception.rb +3 -2
  25. data/lib/danica/expressable.rb +14 -8
  26. data/lib/danica/expression.rb +4 -2
  27. data/lib/danica/expression/gauss.rb +5 -5
  28. data/lib/danica/formatted.rb +27 -8
  29. data/lib/danica/function.rb +5 -3
  30. data/lib/danica/function/name.rb +2 -0
  31. data/lib/danica/operator.rb +13 -9
  32. data/lib/danica/operator/addition.rb +4 -3
  33. data/lib/danica/operator/chained.rb +4 -3
  34. data/lib/danica/operator/cos.rb +2 -1
  35. data/lib/danica/operator/division.rb +2 -1
  36. data/lib/danica/operator/exponential.rb +2 -1
  37. data/lib/danica/operator/functional.rb +3 -2
  38. data/lib/danica/operator/multiplication.rb +4 -2
  39. data/lib/danica/operator/power.rb +4 -3
  40. data/lib/danica/operator/sin.rb +2 -1
  41. data/lib/danica/operator/squared_root.rb +2 -1
  42. data/lib/danica/variables_holder.rb +7 -4
  43. data/lib/danica/variables_holder/alias_builder.rb +4 -4
  44. data/lib/danica/variables_holder/calculator.rb +2 -0
  45. data/lib/danica/variables_holder/store.rb +3 -2
  46. data/lib/danica/variables_holder/variables_builder.rb +2 -1
  47. data/lib/danica/version.rb +3 -1
  48. data/lib/danica/wrapper.rb +14 -9
  49. data/lib/danica/wrapper/constant.rb +10 -14
  50. data/lib/danica/wrapper/container.rb +3 -3
  51. data/lib/danica/wrapper/group.rb +3 -2
  52. data/lib/danica/wrapper/negative.rb +3 -1
  53. data/lib/danica/wrapper/number.rb +6 -3
  54. data/lib/danica/wrapper/plus_minus.rb +3 -1
  55. data/lib/danica/wrapper/variable.rb +13 -8
  56. data/scripts/check_readme.sh +6 -0
  57. data/scripts/rubycritic.sh +10 -0
  58. data/spec/integration/global/danica/formatted_spec.rb +87 -0
  59. data/spec/integration/global/danica/operator/addition_spec.rb +32 -0
  60. data/spec/integration/{multiplication_spec.rb → global/danica/operator/multiplication_spec.rb} +12 -9
  61. data/spec/integration/{power_spec.rb → global/danica/operator/power_spec.rb} +4 -2
  62. data/spec/integration/{negative_spec.rb → global/danica/wrapper/negative_spec.rb} +9 -8
  63. data/spec/integration/{plus_minus_spec.rb → global/danica/wrapper/plus_minus_spec.rb} +5 -4
  64. data/spec/integration/readme/constant_spec.rb +4 -1
  65. data/spec/integration/readme/danica/formatted_spec.rb +24 -0
  66. data/spec/integration/readme/danica_spec.rb +20 -4
  67. data/spec/integration/readme/equation_spec.rb +4 -2
  68. data/spec/integration/readme/expression_spec.rb +11 -8
  69. data/spec/integration/readme/function_spec.rb +11 -7
  70. data/spec/integration/readme/number_spec.rb +9 -8
  71. data/spec/integration/readme/operator_spec.rb +3 -1
  72. data/spec/integration/readme/variables_spec.rb +8 -6
  73. data/spec/lib/danica/common_spec.rb +71 -10
  74. data/spec/lib/danica/dsl_spec.rb +21 -18
  75. data/spec/lib/danica/equation_spec.rb +10 -8
  76. data/spec/lib/danica/expressable_spec.rb +5 -2
  77. data/spec/lib/danica/expression/gauss_spec.rb +6 -3
  78. data/spec/lib/danica/expression_spec.rb +48 -26
  79. data/spec/lib/danica/formatted_spec.rb +34 -13
  80. data/spec/lib/danica/function/name_spec.rb +3 -1
  81. data/spec/lib/danica/function_spec.rb +14 -10
  82. data/spec/lib/danica/operator/addition_spec.rb +16 -15
  83. data/spec/lib/danica/operator/cos_spec.rb +9 -8
  84. data/spec/lib/danica/operator/division_spec.rb +18 -17
  85. data/spec/lib/danica/operator/exponential_spec.rb +9 -8
  86. data/spec/lib/danica/operator/multiplication_spec.rb +16 -15
  87. data/spec/lib/danica/operator/power_spec.rb +17 -16
  88. data/spec/lib/danica/operator/sin_spec.rb +9 -8
  89. data/spec/lib/danica/operator/squared_root_spec.rb +9 -8
  90. data/spec/lib/danica/operator_spec.rb +13 -4
  91. data/spec/lib/danica/variables_holder/store_spec.rb +19 -13
  92. data/spec/lib/danica/variables_holder_spec.rb +76 -59
  93. data/spec/lib/danica/wrapper/constant_spec.rb +9 -2
  94. data/spec/lib/danica/wrapper/group_spec.rb +4 -1
  95. data/spec/lib/danica/wrapper/negative_spec.rb +4 -1
  96. data/spec/lib/danica/wrapper/number_spec.rb +8 -3
  97. data/spec/lib/danica/wrapper/plus_minus_spec.rb +4 -1
  98. data/spec/lib/danica/wrapper/variable_spec.rb +6 -3
  99. data/spec/lib/danica/wrapper_spec.rb +14 -12
  100. data/spec/lib/danica_spec.rb +6 -5
  101. data/spec/spec_helper.rb +3 -2
  102. data/spec/support/models/expression/baskara.rb +3 -3
  103. data/spec/support/models/expression/parabole.rb +2 -0
  104. data/spec/support/models/expression/quadratic_sum.rb +3 -1
  105. data/spec/support/models/expression/spatial.rb +2 -1
  106. data/spec/support/models/function/my_function.rb +3 -1
  107. data/spec/support/models/function/parabole.rb +1 -1
  108. data/spec/support/models/function/quadratic_sum.rb +2 -0
  109. data/spec/support/models/function/spatial.rb +2 -0
  110. data/spec/support/models/operator/inverse.rb +3 -1
  111. data/spec/support/models/operator/my_operator.rb +3 -1
  112. data/spec/support/models/variables_holder/dummy.rb +3 -1
  113. data/spec/support/shared_contexts/common.rb +4 -2
  114. data/spec/support/shared_examples/base_operations.rb +7 -4
  115. data/spec/support/shared_examples/common.rb +3 -1
  116. data/spec/support/shared_examples/operator/chained.rb +12 -6
  117. data/spec/support/shared_examples/operator/dual_term.rb +9 -8
  118. data/spec/support/shared_examples/operator/single_input.rb +7 -2
  119. data/spec/support/shared_examples/variable.rb +8 -4
  120. metadata +158 -36
  121. data/spec/integration/addition_spec.rb +0 -28
  122. data/spec/integration/formatted_spec.rb +0 -75
  123. data/spec/integration/readme/formatting_spec.rb +0 -34
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danica
2
4
  class Operator::Exponential < Operator::Functional.build(operator: :exp, tex: 'e^{:value:}')
3
5
  end
4
6
  end
5
-
@@ -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(%Q(
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(a, b)
11
- a * b
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 ** exponent.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
- "#{ wrap_as_group(base).to_gnu(options)}**(#{exponent.to_gnu(options)})"
17
+ "#{wrap_as_group(base).to_gnu(options)}**(#{exponent.to_gnu(options)})"
16
18
  end
17
19
  end
18
20
  end
19
-
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danica
2
4
  class Operator::Sin < Operator::Functional.build(operator: :sin)
3
5
  end
4
6
  end
5
-
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danica
2
4
  class Operator::SquaredRoot < Operator::Functional.build(operator: :sqrt, tex: '\sqrt{:value:}')
3
5
  end
4
6
  end
5
-
@@ -1,18 +1,21 @@
1
- module Danica
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?, true
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([ destiny ], clazz).build
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
  module VariablesHolder
3
5
  class Calculator
@@ -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( (container.content.name || key).to_sym => container )
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
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danica::VariablesHolder
2
4
  class VariablesBuilder
3
5
  include Danica::DSL
@@ -41,4 +43,3 @@ module Danica::VariablesHolder
41
43
  end
42
44
  end
43
45
  end
44
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danica
2
- VERSION = '2.7.2'
4
+ VERSION = '2.7.7'
3
5
  end
@@ -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(gnuplot latex value)
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(value latex gnuplot)).merge(attrs)
17
+ attrs = args.as_hash(%i[value latex gnuplot]).merge(attrs)
16
18
 
17
19
  attrs.each do |key, value|
18
- self.send("#{key}=", value)
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
- def value=(value)
42
- @value = value
43
- end
44
+ attr_writer :value
44
45
 
45
- def latex=(latex)
46
- @latex = latex
47
- end
46
+ attr_writer :latex
48
47
 
49
- def gnuplot=(gnuplot)
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
-
@@ -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(_, decimals: nil, **__)
18
+ def to(_format, decimals: nil, **_options)
17
19
  return value.to_i.to_s if value.to_i == value
18
- return ("%.#{decimals}f" % value).to_f.to_s if decimals
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 :value, :name, :latex, :gnuplot
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(name value latex gnuplot)).merge(attrs)
17
+ attrs = args.as_hash(%i[name value latex gnuplot]).merge(attrs)
15
18
 
16
19
  attrs.each do |key, value|
17
- self.public_send("#{key}=", value)
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
- return other.value == value &&
28
- other.name == name &&
29
- other.latex == latex &&
30
- other.gnuplot == gnuplot
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
-