delorean_lang 0.5.1 → 0.5.2

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 (41) hide show
  1. checksums.yaml +5 -5
  2. data/.gitlab-ci.yml +1 -2
  3. data/.rubocop.yml +45 -5
  4. data/.rubocop_todo.yml +1 -634
  5. data/Gemfile +3 -1
  6. data/README.md +22 -0
  7. data/Rakefile +3 -1
  8. data/delorean.gemspec +18 -17
  9. data/lib/delorean/abstract_container.rb +4 -2
  10. data/lib/delorean/base.rb +30 -27
  11. data/lib/delorean/cache.rb +2 -0
  12. data/lib/delorean/cache/adapters.rb +2 -0
  13. data/lib/delorean/cache/adapters/base.rb +2 -0
  14. data/lib/delorean/cache/adapters/ruby_cache.rb +5 -0
  15. data/lib/delorean/const.rb +5 -3
  16. data/lib/delorean/debug.rb +6 -5
  17. data/lib/delorean/delorean.rb +466 -147
  18. data/lib/delorean/delorean.treetop +13 -1
  19. data/lib/delorean/engine.rb +61 -50
  20. data/lib/delorean/error.rb +2 -1
  21. data/lib/delorean/model.rb +12 -9
  22. data/lib/delorean/nodes.rb +130 -67
  23. data/lib/delorean/ruby.rb +2 -0
  24. data/lib/delorean/ruby/whitelists.rb +2 -0
  25. data/lib/delorean/ruby/whitelists/base.rb +7 -3
  26. data/lib/delorean/ruby/whitelists/default.rb +6 -6
  27. data/lib/delorean/ruby/whitelists/empty.rb +3 -2
  28. data/lib/delorean/ruby/whitelists/matchers.rb +2 -0
  29. data/lib/delorean/ruby/whitelists/matchers/arguments.rb +2 -0
  30. data/lib/delorean/ruby/whitelists/matchers/method.rb +5 -2
  31. data/lib/delorean/ruby/whitelists/whitelist_error.rb +2 -0
  32. data/lib/delorean/version.rb +3 -1
  33. data/lib/delorean_lang.rb +3 -1
  34. data/spec/cache_spec.rb +4 -2
  35. data/spec/dev_spec.rb +68 -69
  36. data/spec/eval_spec.rb +824 -729
  37. data/spec/func_spec.rb +172 -176
  38. data/spec/parse_spec.rb +516 -522
  39. data/spec/ruby/whitelist_spec.rb +6 -3
  40. data/spec/spec_helper.rb +26 -23
  41. metadata +27 -27
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../spec_helper'
2
4
  require 'delorean/ruby/whitelists/empty'
3
5
 
4
- describe "Delorean Ruby whitelisting" do
6
+ describe 'Delorean Ruby whitelisting' do
5
7
  it 'allows to override whitelist with an empty one' do
6
8
  ::Delorean::Ruby.whitelist = whitelist
7
9
  expect(whitelist.matchers).to be_empty
@@ -12,7 +14,7 @@ describe "Delorean Ruby whitelisting" do
12
14
 
13
15
  let(:whitelist) { ::Delorean::Ruby::Whitelists::Empty.new }
14
16
 
15
- describe "methods" do
17
+ describe 'methods' do
16
18
  before do
17
19
  whitelist.add_method :testmethod do |method|
18
20
  method.called_on Dummy
@@ -47,7 +49,8 @@ describe "Delorean Ruby whitelisting" do
47
49
  end
48
50
 
49
51
  it 'raises error if arguments list is too long' do
50
- expect do matcher.match!(klass: Dummy, args: [1])
52
+ expect do
53
+ matcher.match!(klass: Dummy, args: [1])
51
54
  end.to raise_error('too many args to testmethod')
52
55
  end
53
56
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
5
 
@@ -8,10 +10,9 @@ require 'pry'
8
10
 
9
11
  # Requires supporting files with custom matchers and macros, etc,
10
12
  # in ./support/ and its subdirectories.
11
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
14
 
13
15
  RSpec.configure do |config|
14
-
15
16
  end
16
17
 
17
18
  def defn(*l)
@@ -21,7 +22,7 @@ end
21
22
  ######################################################################
22
23
  # ActiveRecord related
23
24
 
24
- ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
25
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
25
26
 
26
27
  ActiveRecord::Migration.create_table :dummies do |t|
27
28
  t.string :name
@@ -39,40 +40,38 @@ class Dummy < ActiveRecord::Base
39
40
  Dummy.new(name: name, number: number)
40
41
  end
41
42
 
42
- I_JUST_MET_YOU_SIG = [1, 2]
43
+ I_JUST_MET_YOU_SIG = [1, 2].freeze
43
44
 
44
45
  def self.call_me_maybe(*a)
45
46
  a.inject(0, :+)
46
47
  end
47
48
 
48
- CALL_ME_MAYBE_SIG = [0, Float::INFINITY]
49
+ CALL_ME_MAYBE_SIG = [0, Float::INFINITY].freeze
49
50
 
50
- def self.this_is_crazy
51
- end
51
+ def self.this_is_crazy; end
52
52
 
53
53
  def self.miss_you_so_bad
54
- d = Dummy.create(name: "hello", number: 123)
55
- res = Dummy.new(name: "jello", number: 456, dummy: d)
54
+ d = Dummy.create(name: 'hello', number: 123)
55
+ Dummy.new(name: 'jello', number: 456, dummy: d)
56
56
  end
57
57
 
58
- MISS_YOU_SO_BAD_SIG = [0, 0]
58
+ MISS_YOU_SO_BAD_SIG = [0, 0].freeze
59
59
 
60
60
  delorean_fn :all_of_me, sig: 0 do
61
- [ {"name" => "hello", "foo" => "bar"} ]
61
+ [{ 'name' => 'hello', 'foo' => 'bar' }]
62
62
  end
63
63
 
64
64
  def self.i_threw_a_hash_in_the_well
65
- {a: 123, "a" => 456, b: 789}
65
+ { a: 123, 'a' => 456, b: 789 }
66
66
  end
67
67
 
68
- I_THREW_A_HASH_IN_THE_WELL_SIG = [0, 0]
68
+ I_THREW_A_HASH_IN_THE_WELL_SIG = [0, 0].freeze
69
69
 
70
70
  def name2
71
71
  "#{name}-#{number.round(4)}"
72
72
  end
73
73
 
74
- delorean_fn :one_or_two, sig: [1, 2] do
75
- |*args|
74
+ delorean_fn :one_or_two, sig: [1, 2] do |*args|
76
75
  # FIXME: |a,b| will not work properly with delorean_fn
77
76
  a, b = args
78
77
 
@@ -85,33 +84,37 @@ class Dummy < ActiveRecord::Base
85
84
  end
86
85
 
87
86
  delorean_fn :returns_openstruct, sig: 0 do
88
- OpenStruct.new({"abc"=>"def"})
87
+ OpenStruct.new('abc' => 'def')
89
88
  end
90
89
 
91
90
  cached_delorean_fn :returns_cached_openstruct, sig: 2 do |first, last|
92
- OpenStruct.new({ first.to_s => last })
91
+ OpenStruct.new(first.to_s => last)
93
92
  end
94
93
  end
95
94
 
96
95
  class DummyChild < Dummy
97
96
  def self.hello
98
- DummyChild.new(name: "child", number: 99999)
97
+ DummyChild.new(name: 'child', number: 99_999)
99
98
  end
100
- HELLO_SIG = [0, 0]
99
+ HELLO_SIG = [0, 0].freeze
101
100
  end
102
101
 
103
102
  module M
104
103
  class LittleDummy
105
104
  include Delorean::Model
106
105
 
107
- delorean_fn(:heres_my_number, sig: [0, Float::INFINITY]) do
108
- |*a|
106
+ delorean_fn(:heres_my_number, sig: [0, Float::INFINITY]) do |*a|
109
107
  a.inject(0, :+)
110
108
  end
111
109
  def self.sup
112
110
  LittleDummy.new
113
111
  end
114
- SUP_SIG = [0, 0]
112
+ SUP_SIG = [0, 0].freeze
113
+ end
114
+
115
+ module N
116
+ class NestedDummy < ::M::LittleDummy
117
+ end
115
118
  end
116
119
  end
117
120
 
@@ -122,7 +125,7 @@ end
122
125
  ######################################################################
123
126
 
124
127
  class TestContainer < Delorean::AbstractContainer
125
- def initialize(scripts={})
128
+ def initialize(scripts = {})
126
129
  super()
127
130
  @scripts = scripts
128
131
  @engines = {}
metadata CHANGED
@@ -1,73 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delorean_lang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-24 00:00:00.000000000 Z
11
+ date: 2019-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: treetop
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.5'
19
+ version: '3.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.5'
26
+ version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activerecord
28
+ name: treetop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.2'
33
+ version: '1.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.2'
40
+ version: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '2.1'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '2.1'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: sqlite3
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3.10
61
+ version: '2.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.3.10
68
+ version: '2.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,19 +81,19 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rubocop
84
+ name: sqlite3
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.3.10
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.3.10
97
97
  description: A "compiler" for the Delorean programming language
98
98
  email:
99
99
  - arman.bostani@pnmac.com
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  requirements: []
165
165
  rubyforge_project:
166
- rubygems_version: 2.6.14
166
+ rubygems_version: 2.7.8
167
167
  signing_key:
168
168
  specification_version: 4
169
169
  summary: Delorean compiler