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

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

17.02.2016, 13:44. Показов 1847. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru