Реальная история.
Хорошая работа, не пробовал сам, вот что я использую до сих пор в приложении Rails.
Не может быть потрудился упаковки его в драгоценный камень прямо сейчас, хотя.
Bitcoin клиента, autostrips подчёркивания для более красивого кода
модуль Bitcoin
класс Client
Защита инициализации
файл_конфигурации = File.open (File.join (Rails.root, "конфиг", "bitcoin.yml"))
конфигурации = YAML :: нагрузки (config_file) [Rails.env] .symbolize_keys
@client = JsonWrapper.new (конфигурации [: URL],
конфиг [: имя пользователя],
конфиг [: пароль]
)
конец
Защиту method_missing (метод * арг)
@ Client.request ({
: Метод => method.to_s.gsub (/ \ _ /, ""),
: Титулы => арг
}
)
конец
конец
конец
модуль Bitcoin
модуль Util
Защиту self.valid_bitcoin_address? (адрес)
# Мы не хотим, ведущие / конечные пробелы загрязнять адреса
(Адрес == address.strip) и Биткойн :: Client.new.validate_address (адрес) [ 'IsValid']
конец
Защиту self.my_bitcoin_address? (адрес)
Bitcoin :: Client.new.validate_address (адрес) [ 'ismine']
конец
Защиту self.get_account (адрес)
Bitcoin :: Client.new.get_account (адрес)
конец
конец
конец
мой JSON обертка
требует «чистой / HTTP»
требует «адресация / URI»
требуется «» JSON
модуль Bitcoin
класс JsonWrapper
Защиту инициализации (URL, имя пользователя, пароль)
@address = Адресный :: URI.parse (URL)
@username = имя пользователя
@password = пароль
конец
Запрос четкости (PARAMS)
Результат = ноль
full_params = params.merge ({
: Jsonrpc => "2,0",
: ID => (RAND * 10 ** 12) .to_i.to_s
})
request_body = full_params.to_json
Net :: HTTP.start (@ address.host, @ address.port) делать | связь |
почта = Net :: HTTP :: Post.new (@ address.path)
post.body = request_body
post.basic_auth (@username, @password)
Результат = connection.request (пост)
Результат = JSON.parse (result.body)
конец
если ошибка = результат ["ошибка"]
повышение "#{ошибка["сообщение"]}, Запрос был # {request_body}"
конец
Результат = Результат ["результат"]
результат
конец
конец
конец
Валидатор для правильного адреса Bitcoin (проверить: Foo,: bitcoin_address => правда)
класс BitcoinAddressValidator < ActiveModel :: EachValidator
Защиту validate_each (запись, поле, значение)
если (не value.blank? или Bitcoin :: Util.valid_bitcoin_address? (значение))
record.errors [поле] << "является недействительным"
конец
конец
конец