random_org_http_api 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/README.md +12 -4
- data/Rakefile +5 -0
- data/lib/random_org_http_api/configuration.rb +3 -3
- data/lib/random_org_http_api/generator.rb +41 -21
- data/lib/random_org_http_api/version.rb +1 -1
- data/random_org_http_api.gemspec +1 -0
- data/spec/random_org_http_api/generator_spec.rb +63 -0
- data/spec/spec_helper.rb +3 -0
- metadata +22 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 339dec176cb7f910f4a76ef4d4ee7c9045290303
|
4
|
+
data.tar.gz: 414d5c5d5befa1894beeb772274977758798cea8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db15484b5cec99715f23c35431a3aaa1e2f859d09093860bc00d57395e541542694bf1422d19193d520b245ca5732a375da81efe19cf4da3f6ddb5918bda6636
|
7
|
+
data.tar.gz: 9262f1a2299054ef678005c7a1f3541f2ca7c62b8af8960a64b878ab16315a9c18c2e81c342bf52699077c583f0000ce20e3c27089669591b828c127182bdac9
|
data/.rspec
ADDED
data/README.md
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# RandomOrgHttpApi
|
2
|
+
[](http://badge.fury.io/rb/random_org_http_api)
|
2
3
|
|
3
4
|
Realization of old [HTTP API](http://www.random.org/clients/http/) provided by the random.org service.
|
4
5
|
Not to confuse to new [JSON-RPC API](https://api.random.org/json-rpc/1/) which now is in beta release.
|
5
6
|
|
6
7
|
At present realized:
|
7
8
|
|
8
|
-
* generation
|
9
|
-
* generation
|
10
|
-
* generation
|
9
|
+
* numbers generation
|
10
|
+
* strings generation
|
11
|
+
* sequence generation
|
11
12
|
|
12
13
|
|
13
14
|
## Installation
|
@@ -39,6 +40,13 @@ Or install it yourself as:
|
|
39
40
|
g.generate_sequence(num: 5, len: 10, max: 10)
|
40
41
|
=> ["8", "9", "10", "3", "2", "7", "1", "5", "4", "6"]
|
41
42
|
|
43
|
+
Check your quota
|
44
|
+
|
45
|
+
g.quota
|
46
|
+
=> ["1000000"]
|
47
|
+
|
48
|
+
More information about quota [here](http://www.random.org/clients/http/)
|
49
|
+
|
42
50
|
## More available parameters for generate_* methods
|
43
51
|
|
44
52
|
### generate_integers
|
@@ -69,7 +77,7 @@ More information about available parameters on [http://www.random.org/clients/ht
|
|
69
77
|
|
70
78
|
## Contributing
|
71
79
|
|
72
|
-
1. Fork it ( https://github.com/
|
80
|
+
1. Fork it ( https://github.com/istickz/random_org_http_api/fork )
|
73
81
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
74
82
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
75
83
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
@@ -15,15 +15,15 @@ module RandomOrgHttpApi
|
|
15
15
|
|
16
16
|
# Query templates
|
17
17
|
# Integer
|
18
|
-
|
18
|
+
INTEGER_QUERY_KEYS = [:num, :min, :max, :col, :base, :format, :rnd]
|
19
19
|
INTEGER_QUERY_TEMPLATE = "/integers/?num=%{num}&min=%{min}&max=%{max}&col=%{col}&base=%{base}&format=%{format}&rnd=%{rnd}"
|
20
20
|
|
21
21
|
# String
|
22
|
-
|
22
|
+
STRING_QUERY_KEYS = [:num, :len, :digits, :upperalpha, :loweralpha, :unique, :format, :rnd]
|
23
23
|
STRING_QUERY_TEMPLATE = "/strings/?num=%{num}&len=%{len}&digits=%{digits}&upperalpha=%{upperalpha}&loweralpha=%{loweralpha}&unique=%{unique}&format=%{format}&rnd=%{rnd}"
|
24
24
|
|
25
25
|
# Sequence
|
26
|
-
|
26
|
+
SEQUENCE_QUERY_KEYS = [:min, :max, :col, :format, :rnd]
|
27
27
|
SEQUENCE_QUERY_TEMPLATE = "/sequences/?min=%{min}&max=%{max}&col=%{col}&format=%{format}&rnd=%{rnd}"
|
28
28
|
|
29
29
|
end
|
@@ -4,50 +4,70 @@ module RandomOrgHttpApi
|
|
4
4
|
include RandomOrgHttpApi::Configuration
|
5
5
|
|
6
6
|
def generate_integers(params = {})
|
7
|
-
|
7
|
+
integers_query = query('integer', params)
|
8
|
+
request(DOMAIN, integers_query)
|
8
9
|
end
|
9
10
|
|
10
11
|
def generate_strings(params = {})
|
11
|
-
|
12
|
+
strings_query = query('string', params)
|
13
|
+
request(DOMAIN, strings_query)
|
12
14
|
end
|
13
15
|
|
14
16
|
def generate_sequence(params = {})
|
15
|
-
|
17
|
+
sequence_query = query('sequence', params)
|
18
|
+
request(DOMAIN, sequence_query)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Quota Checker
|
22
|
+
def quota
|
23
|
+
quota_query = "/quota/?ip=#{ip}&format=plain"
|
24
|
+
request(DOMAIN, quota_query).first.to_i
|
16
25
|
end
|
17
26
|
|
18
27
|
private
|
19
28
|
|
20
29
|
# Метод запроса на сайт random.org
|
21
|
-
def request(
|
22
|
-
#
|
30
|
+
def request(domain, query)
|
31
|
+
# Создаем запрос
|
32
|
+
res = Net::HTTP.get_response(domain, query)
|
33
|
+
# Если все хорошо, то возвращаем форматированный ответ,
|
34
|
+
# если нет, то показываем ответ ошибки сервера.
|
35
|
+
res.is_a?(Net::HTTPSuccess) ? res.body.split : res.body.strip
|
36
|
+
end
|
37
|
+
|
38
|
+
# Метод для генерации запроса
|
39
|
+
def query(object_type, params)
|
40
|
+
# Совмещаем параметры по умолчанию с параметами, который передал пользователь
|
41
|
+
all_params = DEFAULT_QUERY_PARAMS.merge(params)
|
42
|
+
# В зависимости от типа объекта, который нужно сгенерировать, оставляем только нужные для него параметры.
|
23
43
|
case object_type
|
24
44
|
when 'integer' then
|
25
|
-
|
26
|
-
|
45
|
+
right_params = permit_params(all_params, INTEGER_QUERY_KEYS)
|
46
|
+
insert_params(right_params, INTEGER_QUERY_TEMPLATE)
|
27
47
|
when 'string' then
|
28
|
-
|
29
|
-
|
48
|
+
right_params = permit_params(all_params, STRING_QUERY_KEYS)
|
49
|
+
insert_params(right_params, STRING_QUERY_TEMPLATE)
|
30
50
|
when 'sequence' then
|
31
|
-
|
32
|
-
|
51
|
+
right_params = permit_params(all_params, SEQUENCE_QUERY_KEYS)
|
52
|
+
insert_params(right_params, SEQUENCE_QUERY_TEMPLATE)
|
33
53
|
end
|
34
|
-
# Создаем запрос
|
35
|
-
res = Net::HTTP.get_response(DOMAIN, query)
|
36
|
-
# Если все хорошо, то возвращаем форматированный ответ,
|
37
|
-
# если нет, то показываем ответ ошибки сервера.
|
38
|
-
res.is_a?(Net::HTTPSuccess) ? res.body.split : res.body.strip
|
39
54
|
end
|
40
55
|
|
41
56
|
# Метод оставляющий только нужные параметры.
|
42
|
-
def permit_params(
|
43
|
-
|
44
|
-
@params = @params.select {|k,v| required_params.include?(k) }
|
57
|
+
def permit_params(params, required_keys)
|
58
|
+
params.select { |k| required_keys.include?(k) }
|
45
59
|
end
|
46
60
|
|
47
|
-
# Метод подстановки параметров в темплейт.
|
48
|
-
|
61
|
+
# Метод подстановки параметров в темплейт.
|
62
|
+
# Параметры должны передаваться в хеше
|
63
|
+
def insert_params(params, template)
|
49
64
|
template % params
|
50
65
|
end
|
51
66
|
|
67
|
+
def ip
|
68
|
+
uri = URI('http://whatismyip.akamai.com')
|
69
|
+
Net::HTTP.get(uri)
|
70
|
+
end
|
71
|
+
|
52
72
|
end
|
53
73
|
end
|
data/random_org_http_api.gemspec
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
describe RandomOrgHttpApi::Generator do
|
3
|
+
|
4
|
+
before(:all) do
|
5
|
+
@generator = RandomOrgHttpApi::Generator.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#insert_params' do
|
9
|
+
it 'should do insert params in string' do
|
10
|
+
params = {name: 'World'}
|
11
|
+
string = 'Hello %{name}'
|
12
|
+
expect(@generator.send(:insert_params, params, string)).to eq('Hello World')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#permit_params' do
|
17
|
+
it 'should do permit only required params' do
|
18
|
+
params = {a: 'A', b: 'B', c: 'C'}
|
19
|
+
required_keys = [:a, :b]
|
20
|
+
expect(@generator.send(:permit_params, params, required_keys)).to eq({a: 'A', b: 'B'})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#query' do
|
25
|
+
it 'should do generate right query for integer' do
|
26
|
+
object_type = 'integer'
|
27
|
+
params = {num: 4, max: 100}
|
28
|
+
right_query = '/integers/?num=4&min=1&max=100&col=1&base=10&format=plain&rnd=new'
|
29
|
+
expect(@generator.send(:query, object_type, params)).to eq(right_query)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should do generate right query for string' do
|
33
|
+
object_type = 'string'
|
34
|
+
params = {min: 1, max: 10, num: 3, len: 5}
|
35
|
+
right_query = '/strings/?num=3&len=5&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new'
|
36
|
+
expect(@generator.send(:query, object_type, params)).to eq(right_query)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should do generate right query for sequence' do
|
40
|
+
object_type = 'sequence'
|
41
|
+
params = {num: 5, len: 10, max: 10}
|
42
|
+
right_query = '/sequences/?min=1&max=10&col=1&format=plain&rnd=new'
|
43
|
+
expect(@generator.send(:query, object_type, params)).to eq(right_query)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#request' do
|
48
|
+
domain = 'www.random.org'
|
49
|
+
|
50
|
+
it 'should do string with error message if request have bad response' do
|
51
|
+
bad_query = '/strings/?num=HelloWorld&len=5&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new'
|
52
|
+
expect(@generator.send(:request, domain, bad_query).class).to eq(String)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should do return array if request have good response' do
|
56
|
+
if @generator.quota > 0
|
57
|
+
good_query = '/strings/?num=3&len=5&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new'
|
58
|
+
expect(@generator.send(:request, domain, good_query).class).to eq(Array)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: random_org_http_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Temur Fatkulin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: At present realized generation for numbers, strings and sequences
|
42
56
|
email:
|
43
57
|
- temur.fatkulin@gmail.com
|
@@ -46,6 +60,7 @@ extensions: []
|
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
62
|
- ".gitignore"
|
63
|
+
- ".rspec"
|
49
64
|
- Gemfile
|
50
65
|
- LICENSE.txt
|
51
66
|
- README.md
|
@@ -55,6 +70,8 @@ files:
|
|
55
70
|
- lib/random_org_http_api/generator.rb
|
56
71
|
- lib/random_org_http_api/version.rb
|
57
72
|
- random_org_http_api.gemspec
|
73
|
+
- spec/random_org_http_api/generator_spec.rb
|
74
|
+
- spec/spec_helper.rb
|
58
75
|
homepage: https://github.com/istickz/random_org_http_api
|
59
76
|
licenses:
|
60
77
|
- MIT
|
@@ -79,4 +96,6 @@ rubygems_version: 2.2.2
|
|
79
96
|
signing_key:
|
80
97
|
specification_version: 4
|
81
98
|
summary: Realization of old HTTP API provided by the random.org service
|
82
|
-
test_files:
|
99
|
+
test_files:
|
100
|
+
- spec/random_org_http_api/generator_spec.rb
|
101
|
+
- spec/spec_helper.rb
|