ruby_list_comprehension 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruby_list_comprehension.rb +29 -14
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23c22664dc16e1c6983947ecc19359e6e0c1dc7327ea8850ad1aae4e53d5e61a
4
- data.tar.gz: eb6a66b46874120f6e6f442fce33197a5a81ecd3ec1e60737b0b09d91f1a92f9
3
+ metadata.gz: 25d56bf9d1cd2645750c99f4f46678893ba00e6d4075712a5ac7b845aa479412
4
+ data.tar.gz: f30a9fbd24e4595c1bde00bb344d9482f499e8ae87cb6e04035ef5123c94b8aa
5
5
  SHA512:
6
- metadata.gz: 78bb02e901b5caf0d51b97ad6cd0ed6a313947e20a9421e42ecce95c251b22e7495343cf58909038d6acd1f7d689aef2f49ee481d1eef2d98091be49f9a64024
7
- data.tar.gz: f062f75e7dcdb9f567c2d32894897f3e257fd18f33b495cc879c9e4dcec2d613650ada4f06639bbe468860ad7e6b7c38919ec89c195c49c4fcfc814822025e79
6
+ metadata.gz: 90526fa524e2b0377da07dd436f6011fa2d38e1363639caf19d58ed8afb36c04501708058d3ab6feb86f4c8452af9d281d07a3cbd122eba6c51855e6e2c22461
7
+ data.tar.gz: 210c7af5d5a6355c7a38a9276e802c689561f299fed9ed23c24bbfe37c6b5c5b35bd27f9e4c7afc3f575cd0473d9f3b4e03ed444cad09ed0cd52a37b68b27ee2
@@ -1,14 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'readline'
4
+
3
5
  class ListComprehension
4
- attr_accessor :cache, :caching, :mappable, :filterable, :iterable, :var, :list
5
- attr_reader :c, :version, :op, :cache_count
6
+ attr_accessor :cache, :caching, :mappable, :filterable, :iterable, :var, :list, :location, :line
7
+ attr_reader :c, :version, :op, :cache_count, :filename
6
8
 
7
9
  def [](list_comp)
8
- c[list_comp]
10
+ if @filename == 'pry' || @filename == 'irb'
11
+ @line = Readline::HISTORY.to_a.uniq[-1].strip
12
+ start = @line.index('l[') + 2
13
+ ending = @line[start..-1].index('end') + 5
14
+ @line = @line[start...ending]
15
+ else
16
+ @location = caller_locations.last.to_s.scan(/\d+/).last.to_i
17
+ file = File.open($PROGRAM_NAME)
18
+ file_data = file.readlines.map(&:chomp)
19
+ file.close
20
+ @line = file_data[@location - 1].strip
21
+ start = @line.index('l[')
22
+ ending = @line[start..-1].index('end')
23
+ @line = @line[start+2...ending + 6].chop
24
+ end
25
+ # p @line
26
+ c[@line]
9
27
  end
10
28
 
11
29
  def initialize
30
+ @filename = $PROGRAM_NAME
12
31
  @cache = {}
13
32
  @count = 0
14
33
  @op = {}
@@ -37,15 +56,13 @@ class ListComprehension
37
56
  @var = arr[1]
38
57
 
39
58
  # replace initial semicolon with do if needed for parser
40
- if arr[3..-1].any?{|x|x.include?(';')} && !arr.include?('do')
59
+ if arr[3..-1].any? { |x| x.include?(';') } && !arr.include?('do')
41
60
  arr = list.to_s.sub(';', ' do ').split
42
61
  end
43
- arr.insert(-2, 'do') if arr.none?{|x|x.include?('do')} && arr.none?{|x|x.include?('do')}
44
- # p arr
62
+ arr.insert(-2, 'do') if arr.none? { |x| x.include?('do') } && arr.none? { |x| x.include?('do') }
45
63
 
46
64
  # pre-eval to check for invalid syntax
47
65
  begin
48
- # p arr.join(' ')
49
66
  res = instance_eval(arr.join(' '))
50
67
  return [] if res.nil?
51
68
  rescue SyntaxError => se
@@ -55,13 +72,12 @@ class ListComprehension
55
72
  # check for hash to parse csv's
56
73
  iterable = arr[3]
57
74
  return [{}] if iterable == '{}'
75
+
58
76
  m_data = copy1[3...copy1.rindex('do')].match(/({.+[=>:].+})/)
59
77
  if m_data
60
78
  first_hash = m_data[0].split(';')[0]
61
79
  if @list.index(first_hash) == 9
62
- if instance_eval(first_hash).is_a? Hash
63
- iterable = first_hash
64
- end
80
+ iterable = first_hash if instance_eval(first_hash).is_a? Hash
65
81
  end
66
82
  end
67
83
  @iterable = instance_eval(iterable)
@@ -70,7 +86,6 @@ class ListComprehension
70
86
  map_condition = arr[arr.index('do') + 1...(arr.index('if') || arr.index('end'))]
71
87
  @filterable = if_condition.join(' ')
72
88
  @mappable = map_condition.join(' ')
73
- # p @mappable
74
89
  ### list_comprehension identity currently uses for(each) as if normal ruby
75
90
  # p @filterable
76
91
  # p @mappable
@@ -82,13 +97,13 @@ class ListComprehension
82
97
  if @mappable == @var
83
98
  @op[@count] = 'filter'
84
99
  @count += 1
85
- return @iterable.filter { |x| instance_eval(@filterable.gsub(@var, x.to_s))}
100
+ return @iterable.filter { |x| instance_eval(@filterable.gsub(@var, x.to_s)) }
86
101
  end
87
102
 
88
103
  if @filterable == 'true' || @filterable == @var
89
104
  @op[@count] = 'map'
90
105
  @count += 1
91
- return @iterable.map { |x| instance_eval(@mappable.gsub(@var, x.to_s))}
106
+ return @iterable.map { |x| instance_eval(@mappable.gsub(@var, x.to_s)) }
92
107
  end
93
108
 
94
109
  filter_map_condition_args = "#@mappable if #@filterable"
@@ -98,7 +113,7 @@ class ListComprehension
98
113
  @count += 1
99
114
  return @iterable.filter_map { |x| instance_eval(filter_map_condition_args.gsub(@var, x.to_s)) }
100
115
  else
101
- @op[@count] = 'map&compact'
116
+ @op[@count] ="map&compact"
102
117
  @count += 1
103
118
  @iterable.map { |x| instance_eval(filter_map_condition_args.gsub!(@var, x.to_s)) }.compact!
104
119
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_list_comprehension
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Michael