Class: Fitting::Storage::WhiteList

Inherits:
Object
  • Object
show all
Defined in:
lib/fitting/storage/white_list.rb

Instance Method Summary collapse

Constructor Details

#initialize(prefix, white_list, resource_white_list, include_resources, include_actions, resources) ⇒ WhiteList

Returns a new instance of WhiteList.



6
7
8
9
10
11
12
13
14
# File 'lib/fitting/storage/white_list.rb', line 6

def initialize(prefix, white_list, resource_white_list, include_resources, include_actions, resources)
  @prefix = prefix
  @white_list = white_list
  @resource_white_list = resource_white_list
  @include_resources = include_resources
  @include_actions = include_actions
  @resources = resources
  @warnings = []
end

Instance Method Details

#find_warnings(resource) ⇒ Object



48
49
50
51
52
53
# File 'lib/fitting/storage/white_list.rb', line 48

def find_warnings(resource)
  return nil if @resources[resource]
  @warnings.push(
    "FITTING WARNING: In the documentation there isn't resource from the resource_white_list #{resource}"
  )
end

#new_find_warnings(resource) ⇒ Object



125
126
127
128
129
130
# File 'lib/fitting/storage/white_list.rb', line 125

def new_find_warnings(resource)
  return nil if @new_resources[resource]
  @warnings.push(
    "FITTING WARNING: In the documentation there isn't resource from the resource_white_list #{resource}"
  )
end

#new_requests(resource, all_requests) ⇒ Object



116
117
118
119
120
121
122
123
# File 'lib/fitting/storage/white_list.rb', line 116

def new_requests(resource, all_requests)
  return all_requests unless resource

  resource.map do |request|
    all_requests.push(request_hash(request))
  end
  all_requests
end

#new_resource_selection(resource, all_requests) ⇒ Object



111
112
113
114
# File 'lib/fitting/storage/white_list.rb', line 111

def new_resource_selection(resource, all_requests)
  new_find_warnings(resource)
  new_requests(@new_resources[resource], all_requests)
end

#new_transformationObject



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/fitting/storage/white_list.rb', line 86

def new_transformation
  @new_resources = {}
  @resources.map do |key, value|
    @new_resources.merge!(Tomograph::Path.new(key).to_s => value)
  end
  result = new_without_group.group_by { |action| action[:path] }
  result.inject({}) do |res, group|
    methods = group.last.map { |gr| gr[:method] }
    res.merge(group.first => methods)
  end
end

#new_without_groupObject



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/fitting/storage/white_list.rb', line 98

def new_without_group
  return @newwithout_group_list if @newwithout_group_list
  @newwithout_group_list = @include_resources.inject([]) do |all_requests, resource|
    if resource[0] == '/'
      new_resource_selection(resource, all_requests)
    else
      new_resource_selection("/#{resource}", all_requests)
    end
  end.flatten.uniq
  puts_warnings
  @newwithout_group_list
end

#postnew_transformationObject



132
133
134
135
136
137
138
# File 'lib/fitting/storage/white_list.rb', line 132

def postnew_transformation
  result = postnew_without_group.group_by { |action| action[:path] }
  result.inject({}) do |res, group|
    methods = group.last.map { |gr| gr[:method] }
    res.merge(group.first => methods)
  end
end

#postnew_without_groupObject



140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/fitting/storage/white_list.rb', line 140

def postnew_without_group
  return @postnewwithout_group_list if @postnewwithout_group_list
  @postnewwithout_group_list = @include_actions.inject([]) do |all_requests, resource|
    method, path = resource.split(' ')
    if path[0] == '/'
      new_requests(["#{method} #{@prefix}#{path}"], all_requests)
    else
      new_requests(["#{method} #{@prefix}/#{path}"], all_requests)
    end
  end.flatten.uniq
  puts_warnings
  @postnewwithout_group_list
end

#puts_warningsObject



55
56
57
58
59
# File 'lib/fitting/storage/white_list.rb', line 55

def puts_warnings
  return nil if @warnings == []
  warnings_string = @warnings.join("\n")
  puts "\n#{warnings_string}"
end

#request_hash(request) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/fitting/storage/white_list.rb', line 78

def request_hash(request)
  array = request.split(' ')
  {
    method: array[0],
    path: Tomograph::Path.new(array[1]).to_s
  }
end

#requests(resource, all_requests) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/fitting/storage/white_list.rb', line 61

def requests(resource, all_requests)
  return all_requests unless resource

  resource.map do |request|
    all_requests.push(request_hash(request))
  end
  all_requests
end

#resource_selection(resource, all_requests) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/fitting/storage/white_list.rb', line 39

def resource_selection(resource, all_requests)
  if resource[1] == []
    find_warnings(resource[0])
    requests(@resources[resource[0]], all_requests)
  else
    requests(resource[1], all_requests)
  end
end

#to_aObject



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/fitting/storage/white_list.rb', line 16

def to_a
  return nil if @white_list == nil && @resource_white_list == nil && @include_resources == nil && @include_actions == nil
  return @white_list if @white_list
  return @white_list = transformation if @resource_white_list
  @white_list = {}
  if @include_resources
    @white_list.merge!(new_transformation)
  end
  if @include_actions
    @white_list.merge!(postnew_transformation)
  end
  @white_list
end

#transformationObject



70
71
72
73
74
75
76
# File 'lib/fitting/storage/white_list.rb', line 70

def transformation
  result = without_group.group_by { |action| action[:path] }
  result.inject({}) do |res, group|
    methods = group.last.map { |gr| gr[:method] }
    res.merge(group.first => methods)
  end
end

#without_groupObject



30
31
32
33
34
35
36
37
# File 'lib/fitting/storage/white_list.rb', line 30

def without_group
  return @without_group_list if @without_group_list
  @without_group_list = @resource_white_list.inject([]) do |all_requests, resource|
    resource_selection(resource, all_requests)
  end.flatten.uniq
  puts_warnings
  @without_group_list
end