hesabu 0.1.13 → 0.1.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43989f35e5c55382b8985d4bfeff88611eee628e4b24c5c69eea352b7629bdf2
4
- data.tar.gz: 81d5ec393af329699291858a0f076bb39e8e70a9d0066d994bc8b4ef2c53bb08
3
+ metadata.gz: 9372fc461d5c52778243585448ddde3c5f5e51e8305bd0f9611e44f925703368
4
+ data.tar.gz: c1134317005e8f75b3ce98e020131cb81300748ab1246e075e0b495c62f3e6f7
5
5
  SHA512:
6
- metadata.gz: 31c6b5bfcea143935d986e39a37867f4e880b745be84a7aeaf63b60300d2df1f5cbd1cfd67b62d51880e2fa2c0e3ad49bd4b80487911c480577508e75bdd21cb
7
- data.tar.gz: 475030ad36e33ea939cfade9d9080a1bd40a538aeea3558090aa64441a262b3abffe18a86c7f31ca1a23af7135c58737ed1445bdbc7878980c29a27a8eed8835
6
+ metadata.gz: 4f777c09c72a305645acccf4c376484bfb4c958392b1528f629221adca39b2df8d2703fa0b0890f41b7aa9446a5cacb83a8d06f7d40050295846c50b3bb371cc
7
+ data.tar.gz: 923eefff5ceb4a10f7ec54514d05b444fd30d4a9b353d6c7eb70eda2b8823882149369fab831a2b6a4ae5b40852a5fe46bb1d75c1bdaa87da71ddac89973dd82
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hesabu (0.1.12)
4
+ hesabu (0.1.14)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -11,30 +11,36 @@ GEM
11
11
  ast (2.4.0)
12
12
  byebug (10.0.2)
13
13
  diff-lcs (1.3)
14
- docile (1.3.0)
14
+ docile (1.3.1)
15
15
  erubis (2.7.0)
16
- faraday (0.14.0)
16
+ faraday (0.15.4)
17
17
  multipart-post (>= 1.2, < 3)
18
- flay (2.10.0)
18
+ flay (2.12.0)
19
19
  erubis (~> 2.7.0)
20
20
  path_expander (~> 1.0)
21
21
  ruby_parser (~> 3.0)
22
22
  sexp_processor (~> 4.0)
23
- gitlab (4.3.0)
24
- httparty
25
- terminal-table
26
- httparty (0.16.2)
23
+ gitlab (4.8.0)
24
+ httparty (>= 0.14.0)
25
+ terminal-table (>= 1.5.1)
26
+ httparty (0.16.3)
27
+ mime-types (~> 3.0)
27
28
  multi_xml (>= 0.5.2)
29
+ jaro_winkler (1.5.2)
28
30
  json (2.1.0)
31
+ mime-types (3.2.2)
32
+ mime-types-data (~> 3.2015)
33
+ mime-types-data (3.2018.0812)
29
34
  multi_xml (0.6.0)
30
35
  multipart-post (2.0.0)
31
- octokit (4.8.0)
36
+ octokit (4.13.0)
32
37
  sawyer (~> 0.8.0, >= 0.5.3)
33
- parallel (1.12.1)
34
- parser (2.5.1.0)
38
+ oj (3.7.8)
39
+ parallel (1.13.0)
40
+ parser (2.6.0.0)
35
41
  ast (~> 2.4.0)
36
- path_expander (1.0.2)
37
- powerpack (0.1.1)
42
+ path_expander (1.0.3)
43
+ powerpack (0.1.2)
38
44
  pronto (0.9.5)
39
45
  gitlab (~> 4.0, >= 4.0.0)
40
46
  httparty (>= 0.13.7)
@@ -45,45 +51,46 @@ GEM
45
51
  pronto-flay (0.9.0)
46
52
  flay (~> 2.8)
47
53
  pronto (~> 0.9.0)
48
- pronto-rubocop (0.9.0)
54
+ pronto-rubocop (0.9.1)
49
55
  pronto (~> 0.9.0)
50
- rubocop (~> 0.38, >= 0.35.0)
51
- pronto-simplecov (0.1.0)
56
+ rubocop (~> 0.50, >= 0.49.1)
57
+ pronto-simplecov (0.1.1)
52
58
  pronto (~> 0.9.0)
53
59
  simplecov
54
- public_suffix (3.0.2)
60
+ public_suffix (3.0.3)
55
61
  rainbow (2.2.2)
56
62
  rake
57
63
  rake (10.5.0)
58
- rspec (3.7.0)
59
- rspec-core (~> 3.7.0)
60
- rspec-expectations (~> 3.7.0)
61
- rspec-mocks (~> 3.7.0)
62
- rspec-core (3.7.1)
63
- rspec-support (~> 3.7.0)
64
- rspec-expectations (3.7.0)
64
+ rspec (3.8.0)
65
+ rspec-core (~> 3.8.0)
66
+ rspec-expectations (~> 3.8.0)
67
+ rspec-mocks (~> 3.8.0)
68
+ rspec-core (3.8.0)
69
+ rspec-support (~> 3.8.0)
70
+ rspec-expectations (3.8.2)
65
71
  diff-lcs (>= 1.2.0, < 2.0)
66
- rspec-support (~> 3.7.0)
67
- rspec-mocks (3.7.0)
72
+ rspec-support (~> 3.8.0)
73
+ rspec-mocks (3.8.0)
68
74
  diff-lcs (>= 1.2.0, < 2.0)
69
- rspec-support (~> 3.7.0)
70
- rspec-support (3.7.1)
71
- rubocop (0.55.0)
75
+ rspec-support (~> 3.8.0)
76
+ rspec-support (3.8.0)
77
+ rubocop (0.63.1)
78
+ jaro_winkler (~> 1.5.1)
72
79
  parallel (~> 1.10)
73
- parser (>= 2.5)
80
+ parser (>= 2.5, != 2.5.1.1)
74
81
  powerpack (~> 0.1)
75
82
  rainbow (>= 2.2.2, < 4.0)
76
83
  ruby-progressbar (~> 1.7)
77
- unicode-display_width (~> 1.0, >= 1.0.1)
84
+ unicode-display_width (~> 1.4.0)
78
85
  ruby-prof (0.17.0)
79
- ruby-progressbar (1.9.0)
80
- ruby_parser (3.11.0)
86
+ ruby-progressbar (1.10.0)
87
+ ruby_parser (3.12.0)
81
88
  sexp_processor (~> 4.9)
82
- rugged (0.27.0)
89
+ rugged (0.27.7)
83
90
  sawyer (0.8.1)
84
91
  addressable (>= 2.3.5, < 2.6)
85
92
  faraday (~> 0.8, < 1.0)
86
- sexp_processor (4.10.1)
93
+ sexp_processor (4.11.0)
87
94
  simplecov (0.16.1)
88
95
  docile (~> 1.1)
89
96
  json (>= 1.8, < 3)
@@ -92,7 +99,7 @@ GEM
92
99
  terminal-table (1.8.0)
93
100
  unicode-display_width (~> 1.1, >= 1.1.1)
94
101
  thor (0.19.4)
95
- unicode-display_width (1.3.2)
102
+ unicode-display_width (1.4.1)
96
103
 
97
104
  PLATFORMS
98
105
  ruby
@@ -101,6 +108,7 @@ DEPENDENCIES
101
108
  bundler (~> 1.16)
102
109
  byebug
103
110
  hesabu!
111
+ oj
104
112
  pronto
105
113
  pronto-flay
106
114
  pronto-rubocop
@@ -111,4 +119,4 @@ DEPENDENCIES
111
119
  simplecov
112
120
 
113
121
  BUNDLED WITH
114
- 1.16.4
122
+ 1.17.1
Binary file
@@ -28,10 +28,11 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
 
30
30
  spec.add_development_dependency "byebug"
31
+ spec.add_development_dependency "oj"
31
32
  spec.add_development_dependency "pronto"
32
33
  spec.add_development_dependency "pronto-flay"
33
34
  spec.add_development_dependency "pronto-rubocop"
34
35
  spec.add_development_dependency "pronto-simplecov"
35
- spec.add_development_dependency "simplecov"
36
36
  spec.add_development_dependency "ruby-prof"
37
+ spec.add_development_dependency "simplecov"
37
38
  end
@@ -1,11 +1,12 @@
1
- require "hesabu/version"
1
+ require_relative "./hesabu/version"
2
2
 
3
3
  require_relative "./hesabu/errors"
4
4
  require_relative "./hesabu/types/numeric"
5
5
 
6
- require_relative "./hesabu/equation_cleaner"
6
+ require_relative "./hesabu/multi_json"
7
7
  require_relative "./hesabu/solver"
8
8
 
9
+
9
10
  module Hesabu
10
11
  HESABUCLI = File.expand_path("../bin/hesabucli", File.dirname(__FILE__))
11
12
  puts "************** HESABU cli location : " + HESABUCLI
@@ -0,0 +1,65 @@
1
+ module Hesabu
2
+ # A wrapper to support both `oj` and normal `json`
3
+ #
4
+ # `oj` has some characteristics which make a very good candidate to
5
+ # be the preferred JSON parser for Hesabu. Mainly, it's fast, and it
6
+ # stays fast for large payloads.
7
+ #
8
+ # This module will check if `oj` is available and otherwise fall
9
+ # back to the regular JSON from the standard lib
10
+ #
11
+ # Hesabu::MultiJSON::generate(object) # Generate JSON
12
+ # Hesabu::MultiJSON::parse(string) # Parse JSON
13
+ module MultiJSON
14
+ # Takes a ruby object and transforms it to JSON.
15
+ def self.generate(object)
16
+ _fast_to_json(object)
17
+ rescue NameError
18
+ define_fast_json(Hesabu::MultiJSON, "to_json")
19
+ _fast_to_json(object)
20
+ end
21
+
22
+ # Takes a string (hopefully containing JSON) and parses it to Ruby
23
+ def self.parse(string)
24
+ _fast_from_json(string)
25
+ rescue NameError
26
+ define_fast_json(Hesabu::MultiJSON, "from_json")
27
+ _fast_from_json(string)
28
+ end
29
+
30
+ def self.to_json_method
31
+ body = begin
32
+ require "oj"
33
+ %(::Oj.dump(object, mode: :compat, time_format: :ruby, use_to_json: true))
34
+ rescue LoadError
35
+ %(JSON.fast_generate(object, create_additions: false, quirks_mode: true))
36
+ end
37
+ <<~METHOD
38
+ def _fast_to_json(object)
39
+ #{body}
40
+ end
41
+ METHOD
42
+ end
43
+
44
+ def self.from_json_method
45
+ body = begin
46
+ require "oj"
47
+ %(::Oj.load(string, mode: :compat, time_format: :ruby, use_to_json: true))
48
+ rescue LoadError
49
+ %(JSON.parse(string, create_additions: false))
50
+ end
51
+ <<~METHOD
52
+ def _fast_from_json(string)
53
+ #{body}
54
+ end
55
+ METHOD
56
+ end
57
+
58
+ def self.define_fast_json(receiver, name)
59
+ cl = caller_locations(1..1).first
60
+ method_body = public_send("#{name}_method")
61
+ warn "Defining #{receiver}._fast_#{name} as #{method_body.inspect}"
62
+ receiver.instance_eval method_body, cl.absolute_path, cl.lineno
63
+ end
64
+ end
65
+ end
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  module Hesabu
4
2
  class Solver
5
3
  def initialize
@@ -10,18 +8,18 @@ module Hesabu
10
8
  if raw_expression.nil? || name.nil?
11
9
  raise Hesabu::ArgumentError, "name or expression can't be nil : '#{name}', '#{raw_expression}'"
12
10
  end
13
- @equations[name] = EquationCleaner.clean(raw_expression.to_s)
11
+ @equations[name] = raw_expression.to_s
14
12
  end
15
13
 
16
14
  def solve!
17
15
  return {} if @equations.empty?
18
16
  result = nil
19
17
  IO.popen(HESABUCLI, mode = "r+") do |io|
20
- io.write @equations.to_json
18
+ io.write Hesabu::MultiJSON.generate(@equations)
21
19
  io.close_write # let the process know you've given it all the data
22
20
  result = io.read
23
21
  end
24
- solution = JSON.parse(result)
22
+ solution = Hesabu::MultiJSON.parse(result)
25
23
  exit_status = $CHILD_STATUS.exitstatus
26
24
 
27
25
  log_everything(exit_status, result) if ENV["HESABU_DEBUG"] || exit_status != 0
@@ -1,3 +1,3 @@
1
1
  module Hesabu
2
- VERSION = "0.1.13".freeze
2
+ VERSION = "0.1.14".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hesabu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stéphan Mestach
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-21 00:00:00.000000000 Z
11
+ date: 2019-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: oj
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pronto
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -123,7 +137,7 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: simplecov
140
+ name: ruby-prof
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
@@ -137,7 +151,7 @@ dependencies:
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: ruby-prof
154
+ name: simplecov
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - ">="
@@ -175,8 +189,8 @@ files:
175
189
  - bin/setup
176
190
  - hesabu.gemspec
177
191
  - lib/hesabu.rb
178
- - lib/hesabu/equation_cleaner.rb
179
192
  - lib/hesabu/errors.rb
193
+ - lib/hesabu/multi_json.rb
180
194
  - lib/hesabu/solver.rb
181
195
  - lib/hesabu/types/numeric.rb
182
196
  - lib/hesabu/version.rb
@@ -1,13 +0,0 @@
1
-
2
- module Hesabu
3
- class EquationCleaner
4
- def self.clean(eq)
5
- return eq if !eq.include?("AND") && !eq.include?("=") && !eq.include?("OR")
6
- clean_eq = eq.gsub(" AND ", " && ")
7
- clean_eq = clean_eq.gsub(" OR ", " || ")
8
- clean_eq.split(/(<=|>=|!=|==|=|\*|\s)/m)
9
- .map { |a| a == "=" ? "==" : a }
10
- .join("")
11
- end
12
- end
13
- end