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



44
45
46
47
48
49
# File 'lib/fitting/storage/white_list.rb', line 44

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



121
122
123
124
125
126
# File 'lib/fitting/storage/white_list.rb', line 121

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



112
113
114
115
116
117
118
119
# File 'lib/fitting/storage/white_list.rb', line 112

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



107
108
109
110
# File 'lib/fitting/storage/white_list.rb', line 107

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

#new_transformationObject



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/fitting/storage/white_list.rb', line 82

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



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/fitting/storage/white_list.rb', line 94

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



128
129
130
131
132
133
134
# File 'lib/fitting/storage/white_list.rb', line 128

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



136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/fitting/storage/white_list.rb', line 136

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



51
52
53
54
55
# File 'lib/fitting/storage/white_list.rb', line 51

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

#request_hash(request) ⇒ Object



74
75
76
77
78
79
80
# File 'lib/fitting/storage/white_list.rb', line 74

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

#requests(resource, all_requests) ⇒ Object



57
58
59
60
61
62
63
64
# File 'lib/fitting/storage/white_list.rb', line 57

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



35
36
37
38
39
40
41
42
# File 'lib/fitting/storage/white_list.rb', line 35

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
# 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 = {}
  @white_list.merge!(new_transformation) if @include_resources
  @white_list.merge!(postnew_transformation) if @include_actions
  @white_list
end

#transformationObject



66
67
68
69
70
71
72
# File 'lib/fitting/storage/white_list.rb', line 66

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



26
27
28
29
30
31
32
33
# File 'lib/fitting/storage/white_list.rb', line 26

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