Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bitbucket/page.rb')
-rw-r--r--lib/bitbucket/page.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/bitbucket/page.rb b/lib/bitbucket/page.rb
new file mode 100644
index 00000000000..ad9a2baba36
--- /dev/null
+++ b/lib/bitbucket/page.rb
@@ -0,0 +1,36 @@
+module Bitbucket
+ class Page
+ attr_reader :attrs, :items
+
+ def initialize(raw, type)
+ @attrs = parse_attrs(raw)
+ @items = parse_values(raw, representation_class(type))
+ end
+
+ def next?
+ attrs.fetch(:next, false)
+ end
+
+ def next
+ attrs.fetch(:next)
+ end
+
+ private
+
+ def parse_attrs(raw)
+ attrs = %w(size page pagelen next previous)
+ attrs.map { |attr| { attr.to_sym => raw[attr] } }.reduce(&:merge)
+ end
+
+ def parse_values(raw, representation_class)
+ return [] if raw['values'].nil? || !raw['values'].is_a?(Array)
+
+ raw['values'].map { |hash| representation_class.new(hash) }
+ end
+
+ def representation_class(type)
+ class_name = "Bitbucket::Representation::#{type.to_s.camelize}"
+ class_name.constantize
+ end
+ end
+end