Class: UniversalGitClient::Normalizers::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/universal-git-client/normalizers/base.rb

Direct Known Subclasses

Bitbucket, BitbucketServer, Github, Gitlab

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(response, resource) ⇒ Base

Returns a new instance of Base.



14
15
16
17
# File 'lib/universal-git-client/normalizers/base.rb', line 14

def initialize(response, resource)
  @response = response
  @resource = resource
end

Instance Attribute Details

#resourceObject (readonly)

Returns the value of attribute resource.



12
13
14
# File 'lib/universal-git-client/normalizers/base.rb', line 12

def resource
  @resource
end

#responseObject (readonly)

Returns the value of attribute response.



12
13
14
# File 'lib/universal-git-client/normalizers/base.rb', line 12

def response
  @response
end

Instance Method Details

#body_as_objectObject



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/universal-git-client/normalizers/base.rb', line 31

def body_as_object
  @body_as_object ||= begin
    struct = JSON.parse(response.body, object_class: OpenStruct)
    if !struct.is_a?(Array) && struct.values
      # Bitbucket embeds collections inside values
      struct.values
    else
      struct
    end
  end
end

#current_page_indexObject



58
59
60
61
62
# File 'lib/universal-git-client/normalizers/base.rb', line 58

def current_page_index
  response.request.options[:query][:page].to_s
rescue StandardError
  nil
end

#first_page_indexObject



64
65
66
# File 'lib/universal-git-client/normalizers/base.rb', line 64

def first_page_index
  fetch_rel_value('first')
end

#last_page_indexObject



76
77
78
# File 'lib/universal-git-client/normalizers/base.rb', line 76

def last_page_index
  fetch_rel_value('last')
end

#next_page_indexObject



72
73
74
# File 'lib/universal-git-client/normalizers/base.rb', line 72

def next_page_index
  fetch_rel_value('next')
end

#normalizeObject



19
20
21
22
23
24
25
# File 'lib/universal-git-client/normalizers/base.rb', line 19

def normalize
  object = body_as_object
  serializer = serializer_for_resource
  serializer_options = {}
  serializer_options.deep_merge!(pagination_options) if object.is_a?(Array)
  serializer.new(object, serializer_options)
end

#pagination_optionsObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/universal-git-client/normalizers/base.rb', line 43

def pagination_options
  {
    meta: {
      pagination: {
        self: current_page_index,
        first: first_page_index,
        prev: prev_page_index,
        next: next_page_index,
        last: last_page_index,
        per_page: per_page_index
      }
    }
  }
end

#per_page_indexObject



80
81
82
83
84
# File 'lib/universal-git-client/normalizers/base.rb', line 80

def per_page_index
  response.request.options[:query][:per_page].to_s
rescue StandardError
  nil
end

#prev_page_indexObject



68
69
70
# File 'lib/universal-git-client/normalizers/base.rb', line 68

def prev_page_index
  fetch_rel_value('prev')
end

#serializer_for_resourceObject



27
28
29
# File 'lib/universal-git-client/normalizers/base.rb', line 27

def serializer_for_resource
  self.class.const_get("#{resource}Serializer")
end