Parse API and Show Output in Rails View

时间:2017-10-30 15:33:44

标签: ruby-on-rails json ruby

So, I wrote a program that sends a get request to HappyFox (a support ticket web app) and I get a JSON file, Tickets.json. I also wrote methods that parse the JSON and return a hash with information that I want, i.e tickets with and without a response.

How do I integrate this with my Rails app? I want my HappyFox View (in rails) to show the output of those methods, and give the user the ability to refresh the info whenever they want.

Ruby Code:

 require 'httparty'

def happy_fox_call()

  auth = { :username => 'REDACTED',
           :password => 'REDACTED' }
  @tickets = HTTParty.get("http://avatarfleet.happyfox.com/api/1.1/json/tickets/?size=50&page=1",
                          :basic_auth => auth)
  tickets = File.new("Tickets.json", "w")
  tickets.puts @tickets
  tickets.close
end

puts "Calling API, please wait..."
happy_fox_call()
puts "Complete!"


require 'json'
$data = File.read('/home/joe/API/Tickets.json')
$tickets = JSON.parse($data)
$users = $tickets["data"][3]["name"]

Count each status in ONE method

def count_each_status(*statuses)
  status_counters = Hash.new(0)
  $tickets["data"].each do |tix|
    if statuses.include?(tix["status"]["name"])
      #puts status_counters # this is cool! Run this
      status_counters[tix["status"]["name"]] += 1
    end
  end
  return status_counters
end


Count tickets with and without a response

def count_unresponded(tickets)
  true_counter = 0
  false_counter = 0
  $tickets["data"].each do |tix|
    if tix["unresponded"] == false
      false_counter += 1
    else true_counter += 1
    end
  end
  puts "There are #{true_counter} tickets without a response"
  puts "There are #{false_counter} ticket with a response"
end

Make a function that creates a count of tickets by user

  def user_count(users)
    user_count = Hash.new(0)
    $tickets["data"].each do |users|
          user_count[users["user"]["name"]] += 1
      end
      return user_count
  end



puts count_each_status("Closed", "On Hold", "Open", "Unanswered", 
                       "New", "Customer Review")

puts count_unresponded($data)

puts user_count($tickets)

Thank you in advance!

1 个答案:

答案 0 :(得分:0)

您可以在lib目录中创建一个处理API调用/ JSON解析的新模块,并将该文件包含在您想要与之交互的控制器中。从那里分配变量并根据需要动态显示变量应该非常直观。

https://www.benfranklinlabs.com/where-to-put-rails-modules/