https://github.com/rails/jbuilder  的set!方法重构接口,

因为grape没法使用 jBuilder 的缓存,所以直接用 Rails 写 API

(1)多个图片

images: {
poster: {
url: "http://r4.ykimg.com/0510000057CD17166714C04FDC0628CE",
md5: "ee63b0a11cb1e39331d5ce11d38fceec"
},
right_top_corner: {
url: "http://r1.ykimg.com/0510000057CEA19C6714C063660BEB44",
md5: "e50d520de494538d4633086d46845a81"
}
},

原来的方法为

 json.images do
component.pictures.each do |p|
if p.name == 'poster'
json.poster do
json.url "http://r#{rand(4) + 1}.xxx.com/#{p.url}"
json.md5 p.md5
end
end
if p.name == 'icon'
json.icon do
json.url "http://r#{rand(4) + 1}.xxx.com/#{p.url}"
json.md5 p.md5
end
end
if p.name == 'background'
json.background do
json.url "http://r#{rand(4) + 1}.xxx.com/#{p.url}"
json.md5 p.md5
end
end
end
end

精简后为

  json.images do
component.pictures.each do |p|
json.set! p.name do
json.set! :url, "http://r#{rand(4) + 1}.ykimg.com/#{p.url}"
json.set! :md5, p.md5
end
end
end

(2)hints 是一个 hash,遍历 Hash 的文档http://ruby-doc.org/core-2.3.1/Hash.html#method-i-each

hint: {
left: "left",
right: ""
},

精简前

  json.hint do
if component.hints.key?("left")
json.left component.hints["left"]
end
if component.hints.key?("center")
json.center component.hints["center"]
end
if component.hints.key?("right")
json.right component.hints["right"]
end
end

精简后

  json.hint do
component.hints.each do |key,value|
json.set! key, value
end
end

jbuilder的set!方法重构接口的更多相关文章

  1. C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-

    1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...

  2. GoLang之方法与接口

    GoLang之方法与接口 Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承.虚函数.构造函数和析构函数.隐藏的this指针等. 方法 Go 语言中同时有函数和方法.方法就是一个包含了接受者的函数 ...

  3. 使用 highchart 绘制柱状图的通用方法与接口

    本文给出使用 highchart 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用. 一.  数据结构与基本接口   一般绘制图形, 会涉及到较复杂的数据结构, 比如使 ...

  4. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明

    1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...

  5. 初识 go 语言:方法,接口及并发

    目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接 ...

  6. Mock Server 实现post方法的接口(三)

    Mock Server 实现post方法的接口(三) 1.mock server实现的接口,当request中未设置"method"时,会自动将所有method试一次,所以一定要指 ...

  7. mock server 实现get方法的接口(二)

    mock server 实现get方法的接口(二) 下面是实现查询品牌的接口demo: 1.当response数据量小的时候,可以直接使用json, mock会自动设置headers为applicat ...

  8. Go 语言中的方法,接口和嵌入类型

    https://studygolang.com/articles/1113 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会 ...

  9. Go 入门 - 方法和接口

    方法和接口 方法的接受者 Go中没有类,取而代之的是在结构体上定义的方法 为了将方法(函数)绑定在某一类结构体上,我们在定义函数(方法)时引入"接受者"的概念. 方法接受者在它自己 ...

随机推荐

  1. JS-流程控制汇集

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>流 ...

  2. dotnetbar入门

    1.下载dotnetbar组件 2.工具箱引用 3.项目引用 4.开始工作 //此处Form完整的名称是System.Windows.Forms.Form,表示FrmMain窗体类是继承于System ...

  3. Yocto开发笔记之《Tip-应用程序无法在目标机运行》(QQ交流群:519230208)

    官方app编译环境编译的应用程序可以在开发板自带的系统中运行,自己编译并烧写了系统,却提示: root@imx6ulevk:/root# ./VTTerminal -sh: ./VTTerminal: ...

  4. 获取jsp页面的宽和高

    var winWidth; var winHeight; function getResult() { if(window.innerWidth) { winWidth=window.innerWid ...

  5. Java 性能优化技巧集锦

    摘要: =================================== 可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常 ...

  6. linq lamda

    var query6 = CustomerList.SelectMany(c => c.Orders);var query6= from c in CustomerList            ...

  7. Understanding Convolutions

    http://colah.github.io/posts/2014-07-Understanding-Convolutions/ Posted on July 13, 2014 neural netw ...

  8. Python in Unity

    http://stackoverflow.com/questions/11766181/ironpython-in-unity3d

  9. swiper 增加同页面增加2个滚动

    js代码 <script type="text/javascript"> var mySwiper = new Swiper('.slide_a',{ noSwipin ...

  10. RHEL-界面中文乱码问题

    一.虚拟机里的rhel更换为中文简体后,中文字符变为小方块 二.解决方法: 安装中文支持的软件包 fonts-chinese-3.02-12.el5.noarch.rpm fonts-ISO8859- ...