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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dbea6bdd5b9f7d7494b0d5f01ae6c2d96ea71148
4
- data.tar.gz: a0ab30808e48caa6b4abbd9fed281a271014da6d
3
+ metadata.gz: 339dec176cb7f910f4a76ef4d4ee7c9045290303
4
+ data.tar.gz: 414d5c5d5befa1894beeb772274977758798cea8
5
5
  SHA512:
6
- metadata.gz: 0b988426d9015db7afe1a2ebd7c3a88992a3bcd259a54450a7046bffdde10211ec211d2c71bba120d8ba07c1aab7ee3d7e56578a39453fea801b942921866329
7
- data.tar.gz: 2dc4c7bce8019a3b753206333f7960019257dfb8d8a29b01df22aeaecb4cb3f03c2a27e8edadbc7eaaf587befceee6c70ef81428c0f5f13aadd6f70107c8ede4
6
+ metadata.gz: db15484b5cec99715f23c35431a3aaa1e2f859d09093860bc00d57395e541542694bf1422d19193d520b245ca5732a375da81efe19cf4da3f6ddb5918bda6636
7
+ data.tar.gz: 9262f1a2299054ef678005c7a1f3541f2ca7c62b8af8960a64b878ab16315a9c18c2e81c342bf52699077c583f0000ce20e3c27089669591b828c127182bdac9
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/README.md CHANGED
@@ -1,13 +1,14 @@
1
1
  # RandomOrgHttpApi
2
+ [![Gem Version](https://badge.fury.io/rb/random_org_http_api.svg)](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 of numbers
9
- * generation of numbers
10
- * generation of numbers
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/[my-github-username]/random_org_http_api/fork )
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
@@ -1,2 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new('spec')
6
+
7
+ task :default => :spec
@@ -15,15 +15,15 @@ module RandomOrgHttpApi
15
15
 
16
16
  # Query templates
17
17
  # Integer
18
- INTEGER_QUERY_PARAMS = [:num, :min, :max, :col, :base, :format, :rnd]
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
- STRING_QUERY_PARAMS = [:num, :len, :digits, :upperalpha, :loweralpha, :unique, :format, :rnd]
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
- SEQUENCE_QUERY_PARAMS = [:min, :max, :col, :format, :rnd]
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
- request('integer', params)
7
+ integers_query = query('integer', params)
8
+ request(DOMAIN, integers_query)
8
9
  end
9
10
 
10
11
  def generate_strings(params = {})
11
- request('string', params)
12
+ strings_query = query('string', params)
13
+ request(DOMAIN, strings_query)
12
14
  end
13
15
 
14
16
  def generate_sequence(params = {})
15
- request('sequence', params)
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(object_type, params)
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
- all_params = permit_params(DEFAULT_QUERY_PARAMS, params, INTEGER_QUERY_PARAMS)
26
- query = generate_query(all_params, INTEGER_QUERY_TEMPLATE)
45
+ right_params = permit_params(all_params, INTEGER_QUERY_KEYS)
46
+ insert_params(right_params, INTEGER_QUERY_TEMPLATE)
27
47
  when 'string' then
28
- all_params = permit_params(DEFAULT_QUERY_PARAMS, params, STRING_QUERY_PARAMS)
29
- query = generate_query(all_params, STRING_QUERY_TEMPLATE)
48
+ right_params = permit_params(all_params, STRING_QUERY_KEYS)
49
+ insert_params(right_params, STRING_QUERY_TEMPLATE)
30
50
  when 'sequence' then
31
- all_params = permit_params(DEFAULT_QUERY_PARAMS, params, SEQUENCE_QUERY_PARAMS)
32
- query = generate_query(all_params, SEQUENCE_QUERY_TEMPLATE)
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(default_params, params, required_params )
43
- @params = default_params.merge(params)
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
- def generate_query(params, template)
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
@@ -1,3 +1,3 @@
1
1
  module RandomOrgHttpApi
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
23
24
  end
@@ -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
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'random_org_http_api'
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.1
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-23 00:00:00.000000000 Z
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