Guest User

Untitled

a guest
May 27th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.49 KB | None | 0 0
  1. config.ru
  2. ---------
  3.  
  4. require 'bundler'
  5. Bundler.setup
  6.  
  7. require 'sinatra'
  8. require 'main'
  9. require 'rack/hoptoad'
  10. require 'sequel'
  11. require 'json'
  12. require 'logger'
  13.  
  14. use Rack::Hoptoad, 'b6f45e9ce320d8c9d0adf4538317a07a'
  15. disable :run, :reload
  16.  
  17. run Sinatra::Application
  18.  
  19.  
  20.  
  21. main.rb
  22. -------
  23.  
  24. helpers do
  25. def get_locale_id(db)
  26. locale = extract_locale_from_accept_language_header
  27. locale_id = db[:languages].select(:id).filter(:locale => locale).first
  28.  
  29. if !locale_id
  30. locale_id = db[:languages].select(:id).filter(:locale => "en").first
  31. end
  32.  
  33. locale_id[:id].to_i
  34. end
  35.  
  36. def get_client_id(db)
  37. client_id = db[:clients].select(:id).filter(:name => params[:client]).first
  38.  
  39. if client_id
  40. client_id[:id].to_i
  41. else
  42. return -1
  43. end
  44. end
  45.  
  46. def get_environment_id(db, client_id)
  47. environment_id = db[:environments].select(:id).filter(:client_id => client_id, :name => params[:environment]).first
  48.  
  49. if environment_id
  50. environment_id[:id].to_i
  51. else
  52. return -1
  53. end
  54. end
  55.  
  56. def get_last_modify(db, environment_id)
  57. environment = db[:environments].select(:updated_at).filter(:id => environment_id).first
  58. if environment
  59. puts environment[:updated_at]
  60. environment[:updated_at].to_i.to_s
  61. else
  62. ""
  63. end
  64. end
  65.  
  66. def extract_locale_from_accept_language_header
  67. request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
  68. end
  69.  
  70. def connect_to_db
  71. database = "cms_#{settings.environment.to_s}"
  72. Sequel.connect(:adapter => 'mysql', :host => 'localhost', :database => database, :user => 'root', :password => '')
  73. end
  74.  
  75. def get_all_keys(db, language_id)
  76. keys = db[:translation_keys].join_table(:inner, :key_values, {:translation_key_id => :id})
  77. keys = keys.join_table(:inner, :translation_values, {:id => :translation_value_id})
  78. keys = keys.filter(:language_id => language_id)
  79. keys = keys.filter(:client_id => params[:client])
  80. keys = keys.filter(:environment_id => params[:environment])
  81. end
  82.  
  83. def get_all_keys(db, language_id, client_id, environment_id)
  84. keys = db[:translation_keys].join_table(:inner, :key_values, {:translation_key_id => :id})
  85. keys = keys.join_table(:inner, :translation_values, {:id => :translation_value_id})
  86. #keys = keys.join_table(:inner, :value_environments, {:translation_value_id => :id})
  87. #keys = keys.join_table(:inner, :environments, {:id => :environment_id})
  88. keys = keys.filter(:language_id => language_id)
  89. keys = keys.filter(:translation_keys__client_id => client_id)
  90. keys = keys.filter(:key_values__environment_id => environment_id)
  91. end
  92.  
  93. def get_tags_sub_query(db, params)
  94. taggings = db[:taggings]
  95. sub_query = taggings.join(:tags, :id => :tag_id).filter({:taggable_type => 'TranslationKey'}).select(:taggable_id)
  96. sub_query = sub_query.filter( :name.like(*params) )
  97. end
  98.  
  99. def replace_blobs_with_strings(hash)
  100. result = {}
  101. hash.each_pair{|k,v| result[k.to_s] = v.to_s}
  102. result
  103. end
  104.  
  105. def add_slash_to_values(hash)
  106. result = {}
  107. hash.each_pair{|k,v| result[k] = '/' + v}
  108. result
  109. end
  110.  
  111. def add_client_to_values(hash, client_name)
  112. result = {}
  113. hash.each_pair{|k,v| result["#{k}_environment_uri"] = "/#{client_name}/" + v}
  114. result
  115. end
  116. end
  117.  
  118. get '/' do
  119. {"clients_uri" => "/clients"}.to_json
  120. end
  121.  
  122. get '/clients' do
  123. db = connect_to_db
  124.  
  125. result = ""
  126. hash = db[:clients].select(:description, :name).to_hash(:description, :name)
  127. if hash
  128. result = replace_blobs_with_strings(hash)
  129. result = add_slash_to_values(result)
  130. end
  131.  
  132. if !result.empty?
  133. result.to_json
  134. else
  135. status 404
  136. end
  137. end
  138.  
  139. get '/:client' do
  140. db = connect_to_db
  141. client_name = params[:client]
  142. client_id = db[:clients].select(:id).filter(:name => client_name)
  143.  
  144. result = ""
  145. hash = db[:environments].select(:name).filter(:client_id => client_id).to_hash(:name, :name)
  146. if hash
  147. result = replace_blobs_with_strings(hash)
  148. result = add_client_to_values(hash, client_name)
  149. end
  150.  
  151. if !result.empty?
  152. result.to_json
  153. else
  154. status 404
  155. end
  156. end
  157.  
  158. #/ext/qa or /ext/qa?key=key1
  159. get '/:client/:environment' do
  160. if params['key']
  161. db = connect_to_db
  162. language_id = get_locale_id(db)
  163. client_id = get_client_id(db)
  164. environment_id = get_environment_id(db, client_id)
  165.  
  166. result = ""
  167. if client_id != -1 and environment_id != -1
  168. keys = get_all_keys(db, language_id, client_id, environment_id)
  169. result = keys.select(:translation_keys__name, :text).filter(:translation_keys__name => params['key']).all
  170. end
  171.  
  172. if !result.empty?
  173. result[0][:text].to_s
  174. else
  175. status 404
  176. end
  177. else # /ext/qa
  178. db = connect_to_db
  179. client_name = params[:client]
  180. environment_name = params[:environment]
  181.  
  182. client = db[:clients].select(:id).filter(:name => client_name).first
  183. client_id = client[:id] if client
  184.  
  185. environment = db[:environments].select(:id).filter(:name => environment_name, :client_id => client_id).first
  186.  
  187. result = ""
  188. if client_id and environment
  189. last_modify_time = get_last_modify(db, environment[:id])
  190.  
  191. result = {"modification_time" => last_modify_time,
  192. "key_list_uri" => "/#{client_name}/#{environment_name}/all",
  193. "key_search_uri" => "/#{client_name}/#{environment_name}?key=key1"}
  194. end
  195.  
  196. if !result.empty?
  197. result.to_json
  198. else
  199. status 404
  200. end
  201. end
  202. end
  203.  
  204. #ext/qa/all or ext/qa/all?tags=tag1,tag2
  205. get '/:client/:environment/all' do
  206. if params['tags']
  207. db = connect_to_db
  208. language_id = get_locale_id(db)
  209. client_id = get_client_id(db)
  210. environment_id = get_environment_id(db, client_id)
  211.  
  212. result = ""
  213. if client_id != -1 and environment_id != -1
  214. keys = get_all_keys(db, language_id, client_id, environment_id)
  215. sub_query = get_tags_sub_query(db, params['tags'].split(','))
  216. keys = keys.filter(:translation_keys__id => sub_query)
  217. hash = keys.select(:translation_keys__name, :text).to_hash(:name, :text)
  218. result = replace_blobs_with_strings(hash)
  219. end
  220.  
  221. if !result.empty?
  222. result.to_json
  223. else
  224. status 404
  225. end
  226.  
  227. else # ext/qa/all
  228. db = connect_to_db
  229. language_id = get_locale_id(db)
  230. client_id = get_client_id(db)
  231. environment_id = get_environment_id(db, client_id)
  232.  
  233. result = ""
  234. if client_id != -1 and environment_id != -1
  235. keys = get_all_keys(db, language_id, client_id, environment_id)
  236. hash = keys.select(:translation_keys__name, :text).to_hash(:name, :text)
  237. result = replace_blobs_with_strings(hash)
  238. end
  239.  
  240. if !result.empty?
  241. result.to_json
  242. else
  243. status 404
  244. end
  245. end
  246. end
Add Comment
Please, Sign In to add comment