Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 7

На собеседовании попросили сделать код ревью

17.02.2016, 13:44. Показов 1864. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На собеседовании задали вопрос:

Как такой код можно улучшить, оригинал кода удалось сохранить)))

Прошу прокомментировать что можно улучшить и почему?

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ShopifyAPIClient
  attr_reader :shop_id
  SECRET_API_KEY = "asdasdasQWRESFSDFVSDFASDFSADFASDF123123ASDASD$%$%"
   
  def set_shop_id(shop_Id)
    @shop_id = shop_Id
  end
  
  def orders
    params = Hash.new
    params[:basic_auth] = {username: SECRET_API_KEY, password: ''}
    orders_json = some_http_library.get("https://www.shopify.this.is.a.sample.com/#{shop_id}/orders", params)
    return JSON.parse(orders_json)
  end
  
  def products
    params = Hash.new
    params[:basic_auth] = {username: SECRET_API_KEY, password: ''}
    products_json = some_http_library.get("https://www.shopify.this.is.a.sample.com/#{shop_id}/products", params)
    return JSON.parse(products_json)
  end
  
  def product(id)
    params = Hash.new
    params[:basic_auth] = {username: SECRET_API_KEY, password: ''}
    product_json = some_http_library.get("https://www.shopify.this.is.a.sample.com/#{shop_id}/products/#{id}", params)
    return JSON.parse(product_json)
  end
end
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2016, 13:44
Ответы с готовыми решениями:

На собеседовании попросили сделать код ревью
На собеседовании задали вопрос как такой код можно улучшить, оригинал кода удалось сохранить))) Прошу прокомментировать что можно...

На собеседовании попросили сделать код ревью
На собеседовании задали вопрос как такой код можно улучшить, оригинал кода удалось сохранить))) Прошу прокомментировать что можно...

Прошу сделать код ревью с конструктивной критикой
Добрый день! Прошу покритиковать код. https://www43.zippyshare.com/v/OoX5wDpx/file.html

6
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
17.02.2016, 16:07
AntonPydz, сразу на три вакансии собеседовались?
Очевидно же, повторяемость кода.
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class ShopifyAPIClient
  attr_accessor :shop_id
  attr_accessor :shop_url
 
  def self.api_method(*method_names)
    return if method_names.empty?
 
    method_names.each do |method_name|
      define_method(method_name) do |*args|
        addr = ''
        addr << shop_url
        addr << shop_id.to_s << '/' << method_name.to_s
        addr << '/' << args[0].to_s unless args.empty?
        return addr
      end
    end
  end
 
  api_method :orders, :products
  api_method :product, :one_more_method
end
 
client = ShopifyAPIClient.new
client.shop_url = 'https://www.shopify.this.is.a.sample.com/'
client.shop_id = 5
 
puts client.orders
#=> [url]https://www.shopify.this.is.a.sample.com/5/orders[/url]
 
puts client.products
#=> [url]https://www.shopify.this.is.a.sample.com/5/products[/url]
 
client.shop_id = 3
client.shop_url = 'https://www.shopify.this.is.another.sample.com/'
 
puts client.product 15
#=> [url]https://www.shopify.this.is.another.sample.com/3/product/15[/url]
 
puts client.one_more_method
#=> [url]https://www.shopify.this.is.another.sample.com/3/one_more_method[/url]
0
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 7
17.02.2016, 20:53  [ТС]
Нет на одну, Но вопросы были на трех языках - как-то так, основной как предполагалось в вакансии будет ruby
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
17.02.2016, 21:55
Цитата Сообщение от AntonPydz Посмотреть сообщение
Прошу прокомментировать что можно улучшить и почему?
У вас самих-то, что вообще никаких мысле нет? Совсем пусто?
0
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 7
18.02.2016, 11:49  [ТС]
Отличный ответ, всем буду рекомендовать вас как лучшего специалиста в области

Пометил как лучший ответ)))
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
18.02.2016, 22:37
j2FunOnly, ради интереса, а почему так, а не через method_missing, например? Ведь выглядит попроще, имхо (разве что за необходимостью самому бросать исключение, но это же мелочь..)
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ShopifyAPIClient
  attr_accessor :shop_id
  attr_accessor :shop_url
 
  def initialize()
    @allowed_methods = [:orders, :products, :product, :one_more_method]
  end
 
  def method_missing(name, *args)
    raise NoMethodError, "undefined method `#{name}' for #{self}" unless @allowed_methods.include? name
    
    "#{shop_url}#{shop_id}/#{name}" + (args.empty? ? '' : "/#{args[0]}")
  end
 
end

Не по теме:

если что, я руби знаю постольку-поскольку, да и многое позабыл, т.к. давно уже не юзал.. Так что не сочтите за наглость просьбу ответить на этот, возможно, глупый вопрос..

0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
19.02.2016, 10:25
Цитата Сообщение от KOPOJI Посмотреть сообщение
разве что за необходимостью самому бросать исключение, но это же мелочь..
Скромно замечу, я бы не стал так делать, т. к. BasicObject#method_missing сам хорошо работает, да и мало-ли что там происходит внутри:
Ruby
1
  super unless @allowed_methods.include? name
Безусловно, method_missing очень хороший трюк. И использовать его надо осторожно. Надо переопределять respond_to_missing?, есть мнение что трудно дебажится такой код. Опять же страдает читаемость кода, что тоже не маловажно.
IMHO, мне было бы такой код читать проще, и искать реализацию в method_missing я бы стал в последнюю очередь:
Кликните здесь для просмотра всего текста
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# spec/shopify_spec.rb
require 'spec_helper'
require 'shopify_api_client'
 
RSpec.describe ShopifyAPIClient do
  describe 'makes api v1 requests' do
    client = ShopifyAPIClient.new
    client.shop_id = 1
    client.shop_url = 'https://shopify.api.com/'
    it { expect(client.products).to eq('https://shopify.api.com/1/products') }
    it { expect(client.product(5)).to eq('https://shopify.api.com/1/product/5') }
  end
end
 
# lib/shopify_api_client.rb
require_relative 'api_v1'
 
class ShopifyAPIClient
  include API_v1
 
  attr_accessor :shop_id, :shop_url
 
  api_v1_request :orders, :products, :product
end
 
# lib/api_v1.rb
module API_v1
  def self.included(klass)
    klass.extend ClassMethods
  end
 
  module ClassMethods
    def api_v1_request(*method_names)
      return if method_names.empty? # надо бы выкидывать с исключением
 
      method_names.each do |method_name|
        define_method(method_name) do |*args|
          request = ''
          request << shop_url
          request << shop_id.to_s
          request << '/' << method_name.to_s
          request << '/' << args[0].to_s unless args.empty?
          return request
        end
      end
    end
  end
end

Так что не сочтите за наглость просьбу ответить на этот, возможно, глупый вопрос
Очень лестно, но я всего лишь прочитал пару книжек на досуге. Вот и весь мой опыт
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2016, 10:25
Помогаю со студенческими работами здесь

Код-ревью
Всем здрасте, можете посмотреть на мою программку и рассказать как можно сделать лучше и легче? import random leftz =...

Код ревью
Добрый день. Сделал ajax в ajax и вижу дубляж кода, но не знаю как от него избавиться. Правила форума 5. Запреты и ограничения. ...

Код ревью
Всем привет. Сверстал лендинг. Выставляю код чтобы узнать мнение общественности правильно ли сверстано семантически. Что скажите об...

Код ревью
В общем препод дал open source проект и дал задание сделать ревью кода какого - то класса... Вот только с java и ООП нашей группе предстоит...

Код ревью
Доброго времени суток, написал простейшее приложение-калькулятор. Написал ей максимально тупо, просто набор вызывающихся функций. Хотел бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru