fugle 0.1.0 → 0.2.0

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
  SHA256:
3
- metadata.gz: 3093fa3bd3690c82d23d454fb627e35d88e506c331619ffdb627d3be972ffa28
4
- data.tar.gz: c191afb77360a1e6b4092cb8365aba13c56304d2f32268a2ef726a1a17887f0f
3
+ metadata.gz: 38224ead4ecd1869213f6e2cf2cd00d6a5e33d7f584e30249460190444c27ae6
4
+ data.tar.gz: c05472cac52a28462a822d53f3e15469b1c915ef166da87fea4706a3516f2a4c
5
5
  SHA512:
6
- metadata.gz: 70c5b42f25a641c974216b3149ca08c9862731033ff4b3e17c76e35d225ecd32f5533a8cbb23095eb398ae7f587716ecf97c5f217194744c25ce7302ab8ab7ea
7
- data.tar.gz: 6890d1bebcaceb04a7795c80780a42185f484f3a75733aa5512d24038875d6369ee37cc6a79a638de690f6e57f34b9f10aaadcb163c168a7c986857c4b926fa0
6
+ metadata.gz: cc789caddaf605f7b7b3a54920506a84524ee15c4b9195b10ea6f5dfd0ce7c2fc3a2ec49295000e90ce6c7295205e52de844253b671ec89502f48a3cb9cd7044
7
+ data.tar.gz: d38c4b97870f958eb70845f62a6a0b0d97f6b0e6c70f97dcdc00c2ba028aee9b63d27ddc243e34a4542cd1180dc1c977264d832e404c0e5865b1d17658499d21
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ Gemfile.lock
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'net/http'
4
4
  require 'json'
5
+ require 'fugle/http/error'
5
6
 
6
7
  module Fugle
7
8
  module HTTP
@@ -29,14 +30,26 @@ module Fugle
29
30
  return super if @api.nil?
30
31
  return self unless @api.is_a?(Class)
31
32
 
32
- uri = @api.uri(*args)
33
- res = Response.new(@api, JSON.parse(Net::HTTP.get(uri)))
33
+ res = fetch(@api.uri(*args))
34
34
  yield res.body if block_given?
35
35
  res
36
36
  end
37
37
 
38
38
  private
39
39
 
40
+ # @since 0.1.0
41
+ # @api private
42
+ def fetch(uri)
43
+ use_ssl = uri.scheme == 'https'
44
+ res = Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
45
+ http.request Net::HTTP::Get.new(uri)
46
+ end
47
+ body = JSON.parse(res.body)
48
+ return Response.new(@api, body) if res.is_a?(Net::HTTPSuccess)
49
+
50
+ Error.new(@api, body)
51
+ end
52
+
40
53
  # @since 0.1.0
41
54
  # @api private
42
55
  def find(name)
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module Fugle
6
+ module HTTP
7
+ # @since 0.1.0
8
+ # @api private
9
+ class Error
10
+ extend Forwardable
11
+
12
+ delegate %i[code message] => :body
13
+
14
+ # @since 0.1.0
15
+ # @api private
16
+ attr_reader :info, :body
17
+
18
+ # @since 0.1.0
19
+ # @api private
20
+ def initialize(api, body)
21
+ @api = api
22
+ @version = body['apiVersion']
23
+ @body = Body.new(body['error'])
24
+ end
25
+
26
+ # Convert to Hash
27
+ #
28
+ # @return [Hash] the response as hash
29
+ #
30
+ # @since 0.1.0
31
+ # @api private
32
+ def to_h
33
+ {
34
+ version: @version,
35
+ body: @body
36
+ }
37
+ end
38
+
39
+ # Convert to JSON
40
+ #
41
+ # @return [String] the json string
42
+ #
43
+ # @since 0.1.0
44
+ # @api private
45
+ def to_json(*args)
46
+ to_h.to_json(*args)
47
+ end
48
+
49
+ # @since 0.1.0
50
+ # @api private
51
+ class Body
52
+ # @since 0.1.0
53
+ # @api private
54
+ attr_reader :code, :message
55
+
56
+ # @since 0.1.0
57
+ # @api private
58
+ def initialize(error)
59
+ @code = error['code']
60
+ @message = error['message']
61
+ end
62
+
63
+ # Convert to Hash
64
+ #
65
+ # @return [Hash] the response as hash
66
+ #
67
+ # @since 0.1.0
68
+ # @api private
69
+ def to_h
70
+ {
71
+ code: @code,
72
+ message: @message
73
+ }
74
+ end
75
+
76
+ # Convert to JSON
77
+ #
78
+ # @return [String] the json string
79
+ #
80
+ # @since 0.1.0
81
+ # @api private
82
+ def to_json(*args)
83
+ to_h.to_json(*args)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -19,8 +19,35 @@ module Fugle
19
19
  @mode = attributes['mode']
20
20
  @timezone = attributes['timeZone']
21
21
  @country_code = attributes['countryCode']
22
- @update_at = DateTime.parse(attributes['lastUpdatedAt'])
22
+ @updated_at = DateTime.parse(attributes['lastUpdatedAt'])
23
23
  @date = Date.parse(attributes['date'])
24
24
  end
25
+
26
+ # Convert to Hash
27
+ #
28
+ # @return [Hash] the response as hash
29
+ #
30
+ # @since 0.1.0
31
+ # @api private
32
+ def to_h
33
+ {
34
+ symbol: @symbol,
35
+ mode: @mode,
36
+ timezone: @timezone,
37
+ country_code: @country_code,
38
+ date: @date,
39
+ updated_at: @updated_at
40
+ }
41
+ end
42
+
43
+ # Convert to JSON
44
+ #
45
+ # @return [String] the json string
46
+ #
47
+ # @since 0.1.0
48
+ # @api private
49
+ def to_json(*args)
50
+ to_h.to_json(*args)
51
+ end
25
52
  end
26
53
  end
@@ -29,6 +29,16 @@ module Fugle
29
29
  @items.each(&block)
30
30
  end
31
31
 
32
+ # Convert to JSON
33
+ #
34
+ # @return [String] the json string
35
+ #
36
+ # @since 0.1.0
37
+ # @api private
38
+ def to_json(*args)
39
+ to_a.to_json(*args)
40
+ end
41
+
32
42
  # @since 0.1.0
33
43
  # @api private
34
44
  class Item
@@ -44,6 +54,34 @@ module Fugle
44
54
  instance_variable_set("@#{name}", value)
45
55
  end
46
56
  end
57
+
58
+ # Convert to Hash
59
+ #
60
+ # @return [Hash] the response as hash
61
+ #
62
+ # @since 0.1.0
63
+ # @api private
64
+ def to_h
65
+ {
66
+ open: @open,
67
+ high: @high,
68
+ low: @low,
69
+ close: @close,
70
+ unit: @unit,
71
+ volume: @volume,
72
+ time: @time
73
+ }
74
+ end
75
+
76
+ # Convert to JSON
77
+ #
78
+ # @return [String] the json string
79
+ #
80
+ # @since 0.1.0
81
+ # @api private
82
+ def to_json(*args)
83
+ to_h.to_json(*args)
84
+ end
47
85
  end
48
86
  end
49
87
  end
@@ -51,6 +51,41 @@ module Fugle
51
51
  end
52
52
  end
53
53
 
54
+ # Convert to Hash
55
+ #
56
+ # @return [Hash] the response as hash
57
+ #
58
+ # @since 0.1.0
59
+ # @api private
60
+ # rubocop:disable Metrics/MethodLength
61
+ def to_h
62
+ {
63
+ name: @name,
64
+ industry: @industry,
65
+ type: @type,
66
+ price: @price,
67
+ is_index: index?,
68
+ is_terminated: terminated?,
69
+ is_suspended: suspended?,
70
+ is_warrant: warrant?,
71
+ can_day_buy_sell: day_buy_sell?,
72
+ can_day_sell_buy: day_sell_buy?,
73
+ can_short_margin: short_margin?,
74
+ can_short_lend: short_lend?
75
+ }
76
+ end
77
+ # rubocop:enable Metrics/MethodLength
78
+
79
+ # Convert to JSON
80
+ #
81
+ # @return [String] the json string
82
+ #
83
+ # @since 0.1.0
84
+ # @api private
85
+ def to_json(*args)
86
+ to_h.to_json(*args)
87
+ end
88
+
54
89
  # @since 0.1.0
55
90
  # @api private
56
91
  class Price
@@ -66,6 +101,31 @@ module Fugle
66
101
  @low_limit = data['priceLowLimit']
67
102
  @currency = data['currency']
68
103
  end
104
+
105
+ # Convert to Hash
106
+ #
107
+ # @return [Hash] the response as hash
108
+ #
109
+ # @since 0.1.0
110
+ # @api private
111
+ def to_h
112
+ {
113
+ reference: @reference,
114
+ high_limit: @high_limit,
115
+ low_limit: @low_limit,
116
+ currency: @currency
117
+ }
118
+ end
119
+
120
+ # Convert to JSON
121
+ #
122
+ # @return [String] the json string
123
+ #
124
+ # @since 0.1.0
125
+ # @api private
126
+ def to_json(*args)
127
+ to_h.to_json(*args)
128
+ end
69
129
  end
70
130
  end
71
131
  end
@@ -45,6 +45,32 @@ module Fugle
45
45
  end
46
46
  end
47
47
 
48
+ # Convert to Hash
49
+ #
50
+ # @return [Hash] the response as hash
51
+ #
52
+ # @since 0.1.0
53
+ # @api private
54
+ def to_h
55
+ {
56
+ total: @total,
57
+ trial: @trial,
58
+ trade: @trade,
59
+ price: @price,
60
+ order: @order
61
+ }
62
+ end
63
+
64
+ # Convert to JSON
65
+ #
66
+ # @return [String] the json string
67
+ #
68
+ # @since 0.1.0
69
+ # @api private
70
+ def to_json(*args)
71
+ to_h.to_json(*args)
72
+ end
73
+
48
74
  # @since 0.1.0
49
75
  # @api private
50
76
  class Price
@@ -59,6 +85,30 @@ module Fugle
59
85
  @low = Trade.new(data['priceLow'])
60
86
  @open = Trade.new(data['priceOpen'])
61
87
  end
88
+
89
+ # Convert to Hash
90
+ #
91
+ # @return [Hash] the response as hash
92
+ #
93
+ # @since 0.1.0
94
+ # @api private
95
+ def to_h
96
+ {
97
+ high: @high,
98
+ low: @low,
99
+ open: @open
100
+ }
101
+ end
102
+
103
+ # Convert to JSON
104
+ #
105
+ # @return [String] the json string
106
+ #
107
+ # @since 0.1.0
108
+ # @api private
109
+ def to_json(*args)
110
+ to_h.to_json(*args)
111
+ end
62
112
  end
63
113
 
64
114
  # @since 0.1.0
@@ -71,10 +121,34 @@ module Fugle
71
121
  # @since 0.1.0
72
122
  # @api private
73
123
  def initialize(data)
74
- @update_at = DateTime.parse(data['at'])
124
+ @updated_at = DateTime.parse(data['at'])
75
125
  @best_bids = data['bestBids'].map { |item| Trade.new(item) }
76
126
  @best_asks = data['bestAsks'].map { |item| Trade.new(item) }
77
127
  end
128
+
129
+ # Convert to Hash
130
+ #
131
+ # @return [Hash] the response as hash
132
+ #
133
+ # @since 0.1.0
134
+ # @api private
135
+ def to_h
136
+ {
137
+ updated_at: @updated_at,
138
+ best_bids: @best_bids,
139
+ best_asks: @best_asks
140
+ }
141
+ end
142
+
143
+ # Convert to JSON
144
+ #
145
+ # @return [String] the json string
146
+ #
147
+ # @since 0.1.0
148
+ # @api private
149
+ def to_json(*args)
150
+ to_h.to_json(*args)
151
+ end
78
152
  end
79
153
  end
80
154
  end
@@ -26,6 +26,16 @@ module Fugle
26
26
  def each(&block)
27
27
  @items.each(&block)
28
28
  end
29
+
30
+ # Convert to JSON
31
+ #
32
+ # @return [String] the json string
33
+ #
34
+ # @since 0.1.0
35
+ # @api private
36
+ def to_json(*args)
37
+ to_a.to_json(*args)
38
+ end
29
39
  end
30
40
  end
31
41
  end
@@ -21,5 +21,29 @@ module Fugle
21
21
  @info = Information.new(attributes.dig('data', 'info'))
22
22
  @body = body.new(attributes.dig('data', body.data_name))
23
23
  end
24
+
25
+ # Convert to Hash
26
+ #
27
+ # @return [Hash] the response as hash
28
+ #
29
+ # @since 0.1.0
30
+ # @api private
31
+ def to_h
32
+ {
33
+ version: @version,
34
+ info: @info,
35
+ body: @body
36
+ }
37
+ end
38
+
39
+ # Convert to JSON
40
+ #
41
+ # @return [String] the json string
42
+ #
43
+ # @since 0.1.0
44
+ # @api private
45
+ def to_json(*args)
46
+ to_h.to_json(*args)
47
+ end
24
48
  end
25
49
  end
data/lib/fugle/trade.rb CHANGED
@@ -8,7 +8,7 @@ module Fugle
8
8
  class Trade
9
9
  # @since 0.1.0
10
10
  # @api private
11
- attr_reader :price, :unit, :order, :volume, :serial
11
+ attr_reader :price, :unit, :order, :volume, :serial, :updated_at
12
12
 
13
13
  # @since 0.1.0
14
14
  # @api private
@@ -18,7 +18,34 @@ module Fugle
18
18
  @order = item['order']
19
19
  @volume = item['volume']
20
20
  @serial = item['serial']
21
- @at = DateTime.parse(item['at']) if item['at']
21
+ @updated_at = DateTime.parse(item['at']) if item['at']
22
+ end
23
+
24
+ # Convert to Hash
25
+ #
26
+ # @return [Hash] the response as hash
27
+ #
28
+ # @since 0.1.0
29
+ # @api private
30
+ def to_h
31
+ {
32
+ price: @price,
33
+ unit: @uint,
34
+ volume: @volume,
35
+ order: @order,
36
+ serial: @serial,
37
+ updated_at: @updated_at
38
+ }
39
+ end
40
+
41
+ # Convert to JSON
42
+ #
43
+ # @return [String] the json string
44
+ #
45
+ # @since 0.1.0
46
+ # @api private
47
+ def to_json(*args)
48
+ to_h.to_json(*args)
22
49
  end
23
50
  end
24
51
  end
data/lib/fugle/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fugle
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fugle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 蒼時弦也
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-04 00:00:00.000000000 Z
11
+ date: 2019-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,7 +107,6 @@ files:
107
107
  - ".travis.yml"
108
108
  - CODE_OF_CONDUCT.md
109
109
  - Gemfile
110
- - Gemfile.lock
111
110
  - README.md
112
111
  - Rakefile
113
112
  - bin/console
@@ -118,6 +117,7 @@ files:
118
117
  - lib/fugle/http.rb
119
118
  - lib/fugle/http/api.rb
120
119
  - lib/fugle/http/client.rb
120
+ - lib/fugle/http/error.rb
121
121
  - lib/fugle/http/parameters.rb
122
122
  - lib/fugle/http/query.rb
123
123
  - lib/fugle/information.rb
data/Gemfile.lock DELETED
@@ -1,68 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- fugle (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- ast (2.4.0)
10
- bundler-audit (0.6.1)
11
- bundler (>= 1.2.0, < 3)
12
- thor (~> 0.18)
13
- childprocess (3.0.0)
14
- coderay (1.1.2)
15
- diff-lcs (1.3)
16
- iniparse (1.4.4)
17
- jaro_winkler (1.5.3)
18
- method_source (0.9.2)
19
- overcommit (0.51.0)
20
- childprocess (>= 0.6.3, < 4)
21
- iniparse (~> 1.4)
22
- parallel (1.18.0)
23
- parser (2.6.5.0)
24
- ast (~> 2.4.0)
25
- pry (0.12.2)
26
- coderay (~> 1.1.0)
27
- method_source (~> 0.9.0)
28
- rainbow (3.0.0)
29
- rake (10.5.0)
30
- rspec (3.9.0)
31
- rspec-core (~> 3.9.0)
32
- rspec-expectations (~> 3.9.0)
33
- rspec-mocks (~> 3.9.0)
34
- rspec-core (3.9.0)
35
- rspec-support (~> 3.9.0)
36
- rspec-expectations (3.9.0)
37
- diff-lcs (>= 1.2.0, < 2.0)
38
- rspec-support (~> 3.9.0)
39
- rspec-mocks (3.9.0)
40
- diff-lcs (>= 1.2.0, < 2.0)
41
- rspec-support (~> 3.9.0)
42
- rspec-support (3.9.0)
43
- rubocop (0.76.0)
44
- jaro_winkler (~> 1.5.1)
45
- parallel (~> 1.10)
46
- parser (>= 2.6)
47
- rainbow (>= 2.2.2, < 4.0)
48
- ruby-progressbar (~> 1.7)
49
- unicode-display_width (>= 1.4.0, < 1.7)
50
- ruby-progressbar (1.10.1)
51
- thor (0.20.3)
52
- unicode-display_width (1.6.0)
53
-
54
- PLATFORMS
55
- ruby
56
-
57
- DEPENDENCIES
58
- bundler (~> 1.17)
59
- bundler-audit (~> 0.6.1)
60
- fugle!
61
- overcommit (~> 0.51.0)
62
- pry
63
- rake (~> 10.0)
64
- rspec (~> 3.0)
65
- rubocop (~> 0.76.0)
66
-
67
- BUNDLED WITH
68
- 1.17.2