lib/datapimp/cli/support/data_sync.rb in datapimp-1.0.29 vs lib/datapimp/cli/support/data_sync.rb in datapimp-1.1.0
- old
+ new
@@ -17,6 +17,76 @@
end
else
puts spreadsheet.to_s
end
end
+
+ class Github
+ attr_reader :options, :repository
+
+ def initialize(repository, options)
+ @repository = repository
+ @options = options
+ end
+
+ def sync_issues
+ issues = client.issues(repository, filter: "all")
+ issues.map! do |issue|
+ %w(comments events labels).each do |rel|
+ issue[rel] = issue.rels[rel].get.data if relations.include?(rel)
+ end
+ issue
+ end
+ serve_output(issues)
+ end
+
+ def sync_issue_comments(issue_id)
+ comments = client.issue_comments(repository, issue_id)
+ serve_output(comments)
+ end
+
+ def sync_milestones
+ milestones = client.milestones(repository)
+ serve_output(milestones)
+ end
+
+ def sync_releases
+ releases = client.releases(repository)
+ serve_output(releases)
+ end
+
+ def sync_commits
+ commits = client.commits(repository)
+ serve_output(commits)
+ end
+
+ private
+
+ def client
+ @_client ||= Datapimp::Sync.github.api
+ end
+
+ def relations
+ @_relations ||= @options.relations.to_a
+ end
+
+ def serve_output(output)
+ if output.is_a?(Array)
+ output.map! do |o|
+ o.respond_to?(:to_attrs) ? o.send(:to_attrs) : o
+ end
+ end
+
+ if @options.format && @options.format == "json"
+ output = JSON.generate(output)
+ end
+
+ if @options.output
+ Pathname(options.output).open("w+") do |f|
+ f.write(output)
+ end
+ else
+ puts output.to_s
+ end
+ end
+ end
end