stockboy 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18c67d713e1473f435d7bcc26378aa766d9f6243
4
- data.tar.gz: 0d82139b4018daeb8ce12a139e5bc7f8c808d679
3
+ metadata.gz: 025d746c97ca5ded5e263969f5faf3fa215dbaa6
4
+ data.tar.gz: febec727068f490b15846a93912d625f91ad048b
5
5
  SHA512:
6
- metadata.gz: f63f685efb55c6eda528d3bd630c481e68d6961a36c83e0b8e5e72ecf09deddd9027e1143ee33ca5ae63094a026c3ea7c1748900b8ea446e308d980c7111c94d
7
- data.tar.gz: bc63a44fc29399fa614afc15bf3bf282b9587bfc3a552f344411eb262fcd4701d243324d20a7d9d13b71d534baeb531b3cb93358c743a31ece6971717a644bc9
6
+ metadata.gz: 8fa25cb4d7326baaa6de53c0b4160663a5f0523e5dc7a6132904e6f11bac32d72b69d7328c7a563129b17b37440756d704be45d5f7cfe3b57673f32bdb25e1cd
7
+ data.tar.gz: 9dd0a0bd18b9b5b198f8aff1a90e649a3ffc8acb4b62b7aa4fd305908de6e8a3826f439ea4894a82f195692e14578513c84ced4942a5818b57eade3afd1f1687
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.0 / 2014-02-06
4
+
5
+ * [FEATURE] Support HTTP basic authentication (@markedmondson)
6
+ * [ENHANCEMENT] Accept any duck-typed hash-like input when building a record
7
+
3
8
  ## 0.5.7 / 2013-12-13
4
9
 
5
10
  * [BUGFIX] Fix IMAP search with missing search defaults
@@ -17,7 +17,7 @@ module Stockboy
17
17
  #
18
18
  def initialize(attrs, map)
19
19
  @map = map
20
- @table = use_frozen_keys(attrs, map)
20
+ @table = reuse_frozen_hash_keys(attrs, map)
21
21
  @tr_table = Hash.new
22
22
  freeze
23
23
  end
@@ -114,11 +114,24 @@ module Stockboy
114
114
  @tr_table[col.to] = translated.public_send(col.to)
115
115
  end
116
116
 
117
+ # Clean output values that are a subclass of a standard type
118
+ #
117
119
  def sanitize(value)
118
- value.is_a?(String) ? value.to_s : value
120
+ case value
121
+ when String # e.g. Nori::StringWithAttributes
122
+ value.to_s
123
+ else
124
+ value
125
+ end
119
126
  end
120
127
 
121
- def use_frozen_keys(attrs, map)
128
+ # Optimization to reuse the same hash key string instances
129
+ #
130
+ # The need for this is fixed for CSV in: https://bugs.ruby-lang.org/issues/9143
131
+ # (ruby >= 2.1) and can be managed by applying str.freeze in other readers.
132
+ #
133
+ def reuse_frozen_hash_keys(attrs, map)
134
+ return attrs unless attrs.is_a? Hash
122
135
  attrs.reduce(Hash.new) do |new_hash, (field, value)|
123
136
  key = map.attribute_from(field).from
124
137
  new_hash[key] = value
@@ -42,9 +42,27 @@ module Stockboy::Providers
42
42
  #
43
43
  dsl_attr :method, attr_writer: false
44
44
 
45
+ # User name for basic auth connection credentials
46
+ #
47
+ # @!attribute [rw] username
48
+ # @return [String]
49
+ # @example
50
+ # username "arthur"
51
+ #
52
+ dsl_attr :username
53
+
54
+ # Password for basic auth connection credentials
55
+ #
56
+ # @!attribute [rw] password
57
+ # @return [String]
58
+ # @example
59
+ # password "424242"
60
+ #
61
+ dsl_attr :password
62
+
45
63
  def uri
46
64
  return nil if @uri.nil? || @uri.empty?
47
- URI(@uri).tap { |u| u.query = URI.encode_www_form(@query) }
65
+ URI(@uri).tap { |u| u.query = URI.encode_www_form(@query) if @query }
48
66
  end
49
67
 
50
68
  def uri=(uri)
@@ -84,15 +102,25 @@ module Stockboy::Providers
84
102
  @uri = uri
85
103
  end
86
104
 
105
+ def username=(username)
106
+ @username = username
107
+ end
108
+
109
+ def password=(password)
110
+ @password = password
111
+ end
112
+
87
113
  # @!endgroup
88
114
 
89
115
  # Initialize an HTTP provider
90
116
  #
91
117
  def initialize(opts={}, &block)
92
118
  super(opts, &block)
93
- self.uri = opts[:uri]
94
- self.method = opts[:method] || :get
95
- self.query = opts[:query] || Hash.new
119
+ self.uri = opts[:uri]
120
+ self.method = opts[:method] || :get
121
+ self.query = opts[:query] || Hash.new
122
+ self.username = opts[:username]
123
+ self.password = opts[:password]
96
124
  DSL.new(self).instance_eval(&block) if block_given?
97
125
  end
98
126
 
@@ -111,6 +139,7 @@ module Stockboy::Providers
111
139
  def fetch_data
112
140
  request = HTTPI::Request.new
113
141
  request.url = uri
142
+ request.auth.basic(username, password) if username && password
114
143
  response = HTTPI.send(method, request)
115
144
  if response.error?
116
145
  errors.add :response, "HTTP respone error: #{response.code}"
@@ -1,3 +1,3 @@
1
1
  module Stockboy
2
- VERSION = "0.5.7"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -33,6 +33,14 @@ module Stockboy
33
33
  provider.method.should == :post
34
34
  end
35
35
 
36
+ it "should assign basic auth parameters" do
37
+ provider.username = "username"
38
+ provider.password = "password"
39
+
40
+ provider.username.should == "username"
41
+ provider.password.should == "password"
42
+ end
43
+
36
44
  describe ".new" do
37
45
  its(:errors) { should be_empty }
38
46
 
@@ -78,6 +86,16 @@ module Stockboy
78
86
 
79
87
  provider.data.should == '{"success":true}'
80
88
  end
89
+
90
+ it "should setup basic auth if a username and password are supplied" do
91
+ provider.username = "username"
92
+ provider.password = "password"
93
+
94
+ allow(HTTPI).to receive(:request) { response }
95
+ expect_any_instance_of(HTTPI::Auth::Config).to receive(:basic).with("username", "password")
96
+
97
+ provider.data.should == '{"success":true}'
98
+ end
81
99
  end
82
100
 
83
101
  describe "#client" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stockboy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Vit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-13 00:00:00.000000000 Z
11
+ date: 2014-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -249,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
249
  version: '0'
250
250
  requirements: []
251
251
  rubyforge_project: stockboy
252
- rubygems_version: 2.0.14
252
+ rubygems_version: 2.2.1
253
253
  signing_key:
254
254
  specification_version: 4
255
255
  summary: Multi-source data normalization library