grumlin 0.13.1 → 0.14.0

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: 990547dc4c35f0a964fa3deacd6f6b892e09d8b7afa5374ffff0f09b2190efcc
4
- data.tar.gz: a54714b9a34b81106bb928c54d5bc4ebab5414f2953baec0039286a4983c7247
3
+ metadata.gz: e353294814ba425473eb717892ea994d686dd25eec4db78cd0c15102f68a7e53
4
+ data.tar.gz: 672458be5666e00f34386e632a8a902e3271ad91160b1b2d4bd2235d3789abd9
5
5
  SHA512:
6
- metadata.gz: 75f1892b26628f1c276dd49e778e4d8b0a4371366f0d5d45432ec0fe08da66b8f83100977c12047024f55f4466bde4b6ee2273e3e9b0819d8455b49f0ed4a623
7
- data.tar.gz: f72fbfab3233caf9d705277c7f10cc706ffbafe8f0b483cd02e2b8e467f0d30f33f99f44aabd63aca47a0bf9dad4a31445dec3783e19fd5f217697122c08ea7a
6
+ metadata.gz: cc64a8dacf4dc2384e0d3da380cb0b62f534e603e49f67f537f0c1e46feb549c8098d8580c1d9d96edf0f3b145b777ae26206025086e52ee86ca37e526d53f8a
7
+ data.tar.gz: 4c2ae1909426dc7c89a41feecb2e7a917daa33f8adb7330229691fa7e49585b1b1e24fca7773026e998f7a738b701d8457e50fcaf8ca3c9e271a71b698ea26e6
@@ -22,7 +22,7 @@ jobs:
22
22
  runs-on: ubuntu-latest
23
23
  strategy:
24
24
  matrix:
25
- ruby: [2.6, 2.7, 3.0]
25
+ ruby: [2.7, 3.0]
26
26
  steps:
27
27
  - uses: actions/checkout@v2
28
28
 
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
- --format documentation
2
1
  --color
3
2
  --require spec_helper
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.6
2
+ TargetRubyVersion: 2.7
3
3
  NewCops: enable
4
4
  SuggestExtensions: false
5
5
 
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 2.6.6
1
+ ruby 2.7.5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.14.0] - 2021-12-07
2
+
3
+ - Add initial support for [configuration steps](https://tinkerpop.apache.org/docs/current/reference/#configuration-steps)
4
+ - Add the `withSideEffect` configuration step
5
+ - Fix passing keyword arguments to regular steps
6
+ - *Drop support for ruby 2.6*
7
+
1
8
  ## [0.13.0] - 2021-12-03
2
9
 
3
10
  - Add `Shortcuts` and `Repository`
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grumlin (0.13.1)
4
+ grumlin (0.14.0)
5
5
  async-pool (~> 0.3)
6
6
  async-websocket (~> 0.19)
7
7
  oj (~> 3.12)
@@ -60,8 +60,12 @@ GEM
60
60
  rexml
61
61
  kramdown-parser-gfm (1.1.0)
62
62
  kramdown (~> 2.0)
63
+ mini_portile2 (2.5.3)
63
64
  minitest (5.14.4)
64
65
  nio4r (2.5.8)
66
+ nokogiri (1.11.7)
67
+ mini_portile2 (~> 2.5.0)
68
+ racc (~> 1.4)
65
69
  nokogiri (1.11.7-x86_64-linux)
66
70
  racc (~> 1.4)
67
71
  oj (3.13.9)
@@ -154,6 +158,7 @@ GEM
154
158
  zeitwerk (2.4.2)
155
159
 
156
160
  PLATFORMS
161
+ ruby
157
162
  x86_64-linux
158
163
 
159
164
  DEPENDENCIES
data/grumlin.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.homepage = "https://github.com/zhulik/grumlin"
18
18
  spec.license = "MIT"
19
- spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
19
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
20
20
 
21
21
  spec.metadata["homepage_uri"] = spec.homepage
22
22
  spec.metadata["source_code_uri"] = "https://github.com/zhulik/grumlin"
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Grumlin
4
4
  class AnonymousStep
5
- attr_reader :name, :args, :previous_step
5
+ attr_reader :name, :previous_step, :configuration_steps
6
6
 
7
7
  # TODO: add other steps
8
8
  SUPPORTED_STEPS = %i[E V addE addV and as both bothE by coalesce count dedup drop elementMap emit fold from group
@@ -10,20 +10,22 @@ module Grumlin
10
10
  project property range repeat select sideEffect skip tail to unfold union until valueMap
11
11
  values where with].freeze
12
12
 
13
- def initialize(name, *args, previous_step: nil)
13
+ def initialize(name, *args, configuration_steps: [], previous_step: nil, **params)
14
14
  @name = name
15
15
  @previous_step = previous_step
16
16
  @args = args
17
+ @params = params
18
+ @configuration_steps = configuration_steps
17
19
  end
18
20
 
19
21
  SUPPORTED_STEPS.each do |step|
20
- define_method(step) do |*args|
21
- step(step, args)
22
+ define_method(step) do |*args, **params|
23
+ step(step, *args, **params)
22
24
  end
23
25
  end
24
26
 
25
- def step(name, args)
26
- self.class.new(name, *args, previous_step: self)
27
+ def step(name, *args, **params)
28
+ self.class.new(name, *args, previous_step: self, configuration_steps: configuration_steps, **params)
27
29
  end
28
30
 
29
31
  def inspect
@@ -35,5 +37,9 @@ module Grumlin
35
37
  def bytecode(no_return: false)
36
38
  @bytecode ||= Bytecode.new(self, no_return: no_return)
37
39
  end
40
+
41
+ def args
42
+ [*@args, @params.any? ? arg.params : nil].compact
43
+ end
38
44
  end
39
45
  end
@@ -20,7 +20,10 @@ module Grumlin
20
20
  end
21
21
 
22
22
  def inspect
23
- to_readable_bytecode.to_s
23
+ configuration_steps = @step.configuration_steps.map do |s|
24
+ serialize_arg(s, serialization_method: :to_readable_bytecode)
25
+ end
26
+ "#{configuration_steps.any? ? configuration_steps : nil}#{to_readable_bytecode}"
24
27
  end
25
28
  alias to_s inspect
26
29
 
@@ -29,13 +32,15 @@ module Grumlin
29
32
  end
30
33
 
31
34
  def value
32
- { step: (steps + (@no_return ? [NONE_STEP] : [])).map { |s| serialize_arg(s) } }
35
+ @value ||= { step: (steps + (@no_return ? [NONE_STEP] : [])).map { |s| serialize_arg(s) } }.tap do |v|
36
+ v.merge!(source: @step.configuration_steps.map { |s| serialize_arg(s) }) if @step.configuration_steps.any?
37
+ end
33
38
  end
34
39
 
35
40
  private
36
41
 
37
42
  # Serializes step or a step argument to either an executable query or a human readable string representation
38
- # depending on the `serialization_method` parameter. I should be either `:to_readable_bytecode` for human readable
43
+ # depending on the `serialization_method` parameter. It should be either `:to_readable_bytecode` for human readable
39
44
  # representation or `:to_bytecode` for query.
40
45
  def serialize_arg(arg, serialization_method: :to_bytecode)
41
46
  return arg.public_send(serialization_method) if arg.respond_to?(serialization_method)
@@ -9,8 +9,8 @@ module Grumlin
9
9
 
10
10
  class << self
11
11
  SUPPORTED_STEPS.each do |step|
12
- define_method step do |*args|
13
- AnonymousStep.new(step, *args)
12
+ define_method step do |*args, **params|
13
+ AnonymousStep.new(step, *args, **params)
14
14
  end
15
15
  end
16
16
  end
@@ -13,12 +13,12 @@ module Grumlin
13
13
  @parent = parent
14
14
  end
15
15
 
16
- def method_missing(name, *args)
17
- return @parent.public_send(name, *args) if %i[__ g].include?(name) && !@parent.nil?
16
+ def method_missing(name, *args, **params)
17
+ return @parent.public_send(name, *args, **params) if %i[__ g].include?(name) && !@parent.nil?
18
18
 
19
- return wrap_result(@object.public_send(name, *args)) if @object.respond_to?(name)
19
+ return wrap_result(@object.public_send(name, *args, **params)) if @object.respond_to?(name)
20
20
 
21
- return wrap_result(instance_exec(*args, &@shortcuts[name])) if @shortcuts.key?(name)
21
+ return wrap_result(instance_exec(*args, **params, &@shortcuts[name])) if @shortcuts.key?(name)
22
22
 
23
23
  super
24
24
  end
@@ -5,13 +5,13 @@ module Grumlin
5
5
  module Properties
6
6
  extend Grumlin::Shortcuts
7
7
 
8
- shortcut :props do |props = {}|
8
+ shortcut :props do |*_args, **props|
9
9
  props.reduce(self) do |tt, (prop, value)|
10
10
  tt.property(prop, value)
11
11
  end
12
12
  end
13
13
 
14
- shortcut :hasAll do |props = {}|
14
+ shortcut :hasAll do |*, **props|
15
15
  props.reduce(self) do |tt, (prop, value)|
16
16
  tt.has(prop, value)
17
17
  end
data/lib/grumlin/step.rb CHANGED
@@ -4,8 +4,8 @@ module Grumlin
4
4
  class Step < AnonymousStep
5
5
  attr_reader :client
6
6
 
7
- def initialize(pool, name, *args, previous_step: nil)
8
- super(name, *args, previous_step: previous_step)
7
+ def initialize(pool, name, *args, configuration_steps: [], previous_step: nil, **params)
8
+ super(name, *args, previous_step: previous_step, configuration_steps: configuration_steps, **params)
9
9
  @pool = pool
10
10
  end
11
11
 
@@ -36,8 +36,8 @@ module Grumlin
36
36
  end
37
37
  end
38
38
 
39
- def step(step_name, args)
40
- self.class.new(@pool, step_name, *args, previous_step: self)
39
+ def step(step_name, *args, **params)
40
+ self.class.new(@pool, step_name, *args, previous_step: self, configuration_steps: @configuration_steps, **params)
41
41
  end
42
42
  end
43
43
  end
@@ -5,13 +5,26 @@ module Grumlin
5
5
  # TODO: add other start steps
6
6
  SUPPORTED_STEPS = %i[E V addE addV].freeze
7
7
 
8
- def initialize(pool = Grumlin.default_pool)
8
+ CONFIGURATION_STEPS = %i[withSideEffect].freeze
9
+
10
+ attr_reader :configuration_steps
11
+
12
+ def initialize(pool = Grumlin.default_pool, configuration_steps: [])
9
13
  @pool = pool
14
+ @configuration_steps = configuration_steps
15
+ end
16
+
17
+ alias inspect to_s
18
+
19
+ CONFIGURATION_STEPS.each do |step|
20
+ define_method step do |*args, **params|
21
+ self.class.new(@pool, configuration_steps: @configuration_steps + [AnonymousStep.new(step, *args, **params)])
22
+ end
10
23
  end
11
24
 
12
25
  SUPPORTED_STEPS.each do |step|
13
- define_method step do |*args|
14
- Step.new(@pool, step, *args)
26
+ define_method step do |*args, **params|
27
+ Step.new(@pool, step, *args, configuration_steps: @configuration_steps, **params)
15
28
  end
16
29
  end
17
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Grumlin
4
- VERSION = "0.13.1"
4
+ VERSION = "0.14.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grumlin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Sinyavskiy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-06 00:00:00.000000000 Z
11
+ date: 2021-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-pool
@@ -141,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - ">="
143
143
  - !ruby/object:Gem::Version
144
- version: 2.6.0
144
+ version: 2.7.0
145
145
  required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  requirements:
147
147
  - - ">="