var_block 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b7f65d9d4b76429f4383e7ce8a339313079a411
4
- data.tar.gz: b0c3d95ba354f2509b1813ce7b03fc94ac59e532
3
+ metadata.gz: afff54f8fbdfa78d3381656b74cf55b61f2ad445
4
+ data.tar.gz: 44b695d5b423ec1df2cd73baa42d0663fb0c37b2
5
5
  SHA512:
6
- metadata.gz: 2c47f79aa0e325ed9ebc7c7640949c59ace9703e950d0223d88b391d7e51a880b1f24fc70db0467dee511804a53db75f4de66a22b0ffda9fdd649446f80ce244
7
- data.tar.gz: d6d8c21d04898c9101ca79447bbcad99ac524ef63f7cb42efa20d3175da8424c0eba07b6b43a5a444d2e802c060296e44b6b2bec23ad20a46ec6abb0af37da8a
6
+ metadata.gz: d16746b95437c2442412ec55c08969933f7b28890b56ed07baccdceb79e37bbd494bef279a065b7c8a9e0e8d36a35ad3527ee41e5363f5d570be41da1eda4574
7
+ data.tar.gz: 05d5f2049ea6f75902825a17eca1a7f5d56e11d1e85bdd139c7257d53e5e930318ccebc8f477aefce83e523653309e7b3236428008ac7c57baa210d27948feb3
@@ -0,0 +1,39 @@
1
+ module VarBlock
2
+ module GetvarHandlers
3
+ class << self
4
+ def handle_var_array(value, context)
5
+ merged_values = []
6
+
7
+ value.each do |v|
8
+ merged_values = merged_values + handle_proc(v, context)
9
+ end
10
+
11
+ merged_values
12
+ end
13
+
14
+ def handle_proc(value, context)
15
+ context.instance_exec &value
16
+ end
17
+
18
+ def handle_default(value, context)
19
+ value
20
+ end
21
+
22
+ def handle_options(value, context, options)
23
+ return_value = value
24
+
25
+ options.each do |option|
26
+ case option
27
+ when :truthy?
28
+ ArgumentError.new("value should be an Array, but is found to be a #{value.class}") unless value.is_a? Array
29
+ return_value = !return_value.any?{|v| !!!v }
30
+ else
31
+ raise ArgumentError.new("#{option} not supported!")
32
+ end
33
+ end
34
+
35
+ return_value
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,17 +2,35 @@ module VarBlock
2
2
  module Globals
3
3
  def self.included(base)
4
4
  # fail if there is already same-name methods to prevent breaking dependencies
5
+ # thanks to Jack, https://stackoverflow.com/questions/44156150/how-to-raise-error-when-including-a-module-that-already-has-same-name-methods
5
6
  overrides = instance_methods.select { |method| base.instance_method(method).owner != self }
6
7
  raise "#{self.name} overrides #{overrides.join(', ')}" if overrides.any?
7
8
 
8
9
  base.extend self
9
10
  end
10
11
 
11
- def getvar(triggered_variables, index)
12
- instance_exec &triggered_variables[index]
12
+ def getvar(var_hash, index, *options)
13
+ raise ArgumentError.new('1st argument should be a VarHash object!') unless var_hash.is_a? VarHash
14
+
15
+ value = var_hash[index]
16
+
17
+ case value
18
+ when VarArray
19
+ return_value = VarBlock::GetvarHandlers.handle_var_array(value, self)
20
+ when Proc
21
+ return_value = VarBlock::GetvarHandlers.handle_proc(value, self)
22
+ else
23
+ return_value = VarBlock::GetvarHandlers.handle_default(value, self)
24
+ end
25
+
26
+ unless options.empty?
27
+ return_value = VarBlock::GetvarHandlers.handle_options(return_value, self, options)
28
+ end
29
+
30
+ return_value
13
31
  end
14
32
 
15
- def with(variables, var_hash: nil)
33
+ def with(var_hash = nil, **variables)
16
34
  var_hash = VarHash.new(var_hash: var_hash)
17
35
 
18
36
  variables.each do |key, value|
@@ -22,4 +40,6 @@ module VarBlock
22
40
  yield var_hash
23
41
  end
24
42
  end
43
+
44
+ private
25
45
  end
@@ -0,0 +1,2 @@
1
+ class VarBlock::VarArray < Array
2
+ end
@@ -1,6 +1,6 @@
1
1
  module VarBlock
2
2
  class VarHash < Hash
3
- include Globals
3
+ include VarBlock::Globals
4
4
 
5
5
  def initialize(var_hash: nil)
6
6
  if var_hash
@@ -10,8 +10,17 @@ module VarBlock
10
10
  self
11
11
  end
12
12
 
13
- def with(variables)
14
- super(variables, var_hash: self)
13
+ def with(variables = {})
14
+ super(self, variables)
15
+ end
16
+
17
+ def merge(variables)
18
+ variables.each do |key, value|
19
+ current_value = self[key]
20
+
21
+ self[key] = VarArray.new([current_value]) unless current_value.is_a? VarArray
22
+ self[key].push(value)
23
+ end
15
24
  end
16
25
  end
17
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: var_block
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jules Roman B. Polidario
@@ -18,7 +18,9 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/var_block.rb
21
+ - lib/var_block/getvar_handlers.rb
21
22
  - lib/var_block/globals.rb
23
+ - lib/var_block/var_array.rb
22
24
  - lib/var_block/var_hash.rb
23
25
  homepage: http://rubygems.org/gems/var_block
24
26
  licenses: