goldshark_gem 0.1.1 → 0.1.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.
data/Gemfile CHANGED
@@ -2,11 +2,12 @@ source 'http://gemcutter.org'
2
2
 
3
3
  gem 'bundler'
4
4
  gem 'rake'
5
-
5
+ gem "activesupport", "3.2.8", :require => "active_support"
6
+ gem 'libxml-ruby'
6
7
  group :test do
7
8
  gem 'minitest'
8
9
  gem 'ZenTest'
9
- gem 'turn'
10
+ gem 'webmock'
11
+ gem 'turn'
10
12
  gem 'vcr'
11
- gem 'fakeweb'
12
13
  end
data/Gemfile.lock CHANGED
@@ -2,22 +2,34 @@ GEM
2
2
  remote: http://gemcutter.org/
3
3
  specs:
4
4
  ZenTest (4.8.2)
5
+ activesupport (3.2.8)
6
+ i18n (~> 0.6)
7
+ multi_json (~> 1.0)
8
+ addressable (2.3.2)
5
9
  ansi (1.4.3)
6
- fakeweb (1.3.0)
10
+ crack (0.3.1)
11
+ i18n (0.6.1)
12
+ libxml-ruby (2.3.3)
7
13
  minitest (3.4.0)
14
+ multi_json (1.3.6)
8
15
  rake (0.9.2.2)
9
16
  turn (0.9.6)
10
17
  ansi
11
18
  vcr (2.2.5)
19
+ webmock (1.8.11)
20
+ addressable (>= 2.2.7)
21
+ crack (>= 0.1.7)
12
22
 
13
23
  PLATFORMS
14
24
  ruby
15
25
 
16
26
  DEPENDENCIES
17
27
  ZenTest
28
+ activesupport (= 3.2.8)
18
29
  bundler
19
- fakeweb
30
+ libxml-ruby
20
31
  minitest
21
32
  rake
22
33
  turn
23
34
  vcr
35
+ webmock
data/README.md ADDED
@@ -0,0 +1,162 @@
1
+ Goldshark Gem
2
+ ===
3
+ ---
4
+ To Install
5
+ ---
6
+
7
+ gem install goldshark\_gem
8
+
9
+ ###Put in Rails Gemfile
10
+
11
+ gem 'goldshark_gem'
12
+
13
+ ###Usage
14
+
15
+ gs = GS::Tool.new(localization)
16
+ texts = GS::Text.new(localization)
17
+
18
+ localization is the parameter key you will need to define in the YAML file. The config file has to be named 'tool\_config.yml' and placed in the config folder of the Rails app.
19
+
20
+ **localization = 'en\_us' or 'fridge\_finder' or whatever you want it to be.**
21
+
22
+ ###YAML file Sample (tool\_config.yml)
23
+
24
+ en_us:
25
+ tool_guid: '12343252'
26
+ locale: 'en'
27
+ api_root: 'http://gst.api.igodigital.com/v2_2' # this option is optional it gsaults to v2_2
28
+
29
+ fridge_finder:
30
+ tool_guid: '3255423'
31
+ locale: 'en'
32
+ api_root: 'http://gst.api.igodigital.com/v2_2' # this option is optional it gsaults to v2_2
33
+
34
+ ###Without YAML config file
35
+
36
+ If the tool\_config.yml file is missing or you are not developing in the Rails enveironment. An empty object can be created and the variables can be defined like so:
37
+
38
+ gs = GS::Tool.new
39
+ gs.tool_guid('132424324')
40
+ gs.session_id('92034802')
41
+ gs.locale('en')
42
+ gs.url('http://gst.api.igodigital.com/v2_2')
43
+
44
+ texts = GS::Text.new
45
+ texts.tool_guid('132424324')
46
+ texts.locale('en')
47
+
48
+ ###Retrieve the 'gs' object variables
49
+
50
+ gs.tool_guid or texts.tool_guid
51
+ => '1233242'
52
+
53
+ gs.session_id
54
+ => '322342'
55
+
56
+ gs.locale or texts.locale
57
+ => 'en'
58
+
59
+ gs.url
60
+ => 'http://gst.api.igodigital.com/v2_2'
61
+
62
+
63
+ **All calls return hashes with symbolized keys and all product calls return a constant structure for the product object**
64
+
65
+ ###Load and Search a text
66
+ After the text object is initialized. The find method returns the value as a string. (The text type is always defined unlike the text name so I picked that param to make the call).
67
+
68
+ texts.load_texts
69
+
70
+ text.find(text_type)
71
+
72
+ ###Example:
73
+
74
+ text.find('buy_now')
75
+ => 'Buy Now'
76
+
77
+ ###Grab the tool object with session id if defined, without session id if not defined
78
+
79
+ gs.get_tool
80
+
81
+ The following accepts an **array of tool step option ids** and returns the results tool object.
82
+
83
+ gs.get_results(tool_step_option_ids)
84
+
85
+ ###Get Products by skus or product ids
86
+
87
+ The following call accepts one skus or a string of comma separated values of skus and returns a products array.
88
+
89
+ gs.get_products_by_skus(skus)
90
+
91
+ The following call accepts one retailer\_product\_id or a string of comma separated values of retailer\_product\_ids and returns a products array.
92
+
93
+ gs.get_products_by_product_ids(product_ids)
94
+
95
+ ###Get Attributes and Product links
96
+ The following call accepts an attribute name and returns an array of the requested attribute for all products.
97
+
98
+ gs.get_attribute_by_name(attribute_name)
99
+
100
+ The following call will return all products linked to the retailer\_product\_id listed.
101
+
102
+ gs.get_product_links(retailer_product_id)
103
+
104
+ ###Interact with User Data
105
+ The following will return the user data of the gs.session\_id. The user\_id param is optional.
106
+
107
+ gs.get_user_data(user_id)
108
+
109
+ The following call accepts session\_data (it can be anything you want to save). And it save it to the user data.
110
+
111
+ gs.save_user_data(session_data, user_id)
112
+
113
+ ###Reporting calls
114
+
115
+ The following call records recommendation based on the gs.session\_id. You will need to pass the group id and the retailer product list (not optional).
116
+
117
+ gs.recs(group_id, retailer_product_list)
118
+
119
+ The following call will record the event passed on the gs.session\_id.
120
+
121
+ gs.record_events(event_name)
122
+
123
+ The following call will record microconversion based on the gs.session\_id and the retailer product id passed (param not optional).
124
+ gs.micro_convert(retailer_product_id)
125
+
126
+ ###PG CI interaction
127
+
128
+ Since we often need to pull CI buy now info for PG products. The GS::Ci module will allow you to pass a sku and an rgid value (usually provided
129
+ by the vendor to retreive an array of vendors, vendor logo images and buy now links to build the buy now button for a
130
+ specific product.
131
+
132
+ ci = GS::Ci.new
133
+ buy_now_array = ci.buy_now(pg_product_id, rgid)
134
+
135
+ The previous call will return:
136
+
137
+ [
138
+ {
139
+ :id=>"Product Id",
140
+ :logo=>"Retailer Logo Image",
141
+ :name=>"Retailer Name",
142
+ :buy_now_link=>"Buy now Button",
143
+ :product_name=>"Product Name",
144
+ :price=>"Price",
145
+ :product_image=>"Product Image",
146
+ :available=>"Y or N"
147
+ }
148
+ ]
149
+
150
+
151
+
152
+ ---
153
+
154
+ ####Contributing to goldshark\_gem
155
+
156
+ Gabriele Roselli
157
+
158
+ Copyright
159
+
160
+ Copyright (c) 2012 iGoDigital. See LICENSE.txt for
161
+ further details.
162
+
@@ -7,5 +7,11 @@ Gem::Specification.new do |s|
7
7
  s.summary = %q{A gem to interact with iGodigital GoldShark API}
8
8
  s.description = %q{A gem to interact with iGodigital GoldShark API}
9
9
  s.files = `git ls-files`.split($\)
10
- s.version = '0.1.1'
10
+ s.extra_rdoc_files = [
11
+ "README.md"
12
+ ]
13
+ s.add_dependency 'activesupport', "~> 3.2.8"
14
+ s.add_dependency 'libxml-ruby'
15
+ s.require_paths = ["lib"]
16
+ s.version = '0.1.2'
11
17
  end
data/lib/goldshark_gem.rb CHANGED
@@ -1,247 +1,11 @@
1
+ require 'rubygems'
1
2
  require 'net/http'
2
3
  require 'net/https'
3
4
  require 'uri'
4
5
  require 'json'
5
6
  require 'yaml'
7
+ require 'active_support/all'
8
+ require 'xml/libxml'
6
9
 
7
- module GS
8
- class Tool
9
- def initialize(localization = nil)
10
- unless localization.nil?
11
- config_file = Rails.root.join("config", "tool_config.yml").to_s
12
- tool_info = YAML::load(File.read(config_file))
13
- @tool_guid = tool_info[localization]['tool_guid']
14
- @locale = tool_info[localization]['locale']
15
- end
16
- @url = tool_info['api_root'] rescue nil
17
- if @url.nil?
18
- @url = 'http://gst.api.igodigital.com/v2_2'
19
- end
20
- end
21
-
22
- def session_id(sid = nil)
23
- if sid.nil?
24
- @session_id
25
- else
26
- @session_id = sid
27
- end
28
- end
29
-
30
- def tool_guid(tool_guid = nil)
31
- if tool_guid.nil?
32
- @tool_guid
33
- else
34
- @tool_guid = tool_guid
35
- end
36
- end
37
-
38
- def locale(locale = nil)
39
- if locale.nil?
40
- @locale
41
- else
42
- @locale = locale
43
- end
44
- end
45
-
46
- def url(url = nil)
47
- if url.nil?
48
- @url
49
- else
50
- @url = url
51
- end
52
- end
53
-
54
- def get_tool
55
- unless @session_id.nil?
56
- uri = URI.parse("#{@url}/#{@tool_guid}/tool.json?locale=#{@locale}&sid=#{@session_id}")
57
- else
58
- uri = URI.parse("#{@url}/#{@tool_guid}/tool.json?locale=#{@locale}")
59
- end
60
- return get_call(uri)
61
- end
62
-
63
- def get_settings(setting_name = nil)
64
- if setting_name.nil?
65
- uri = URI.parse("#{@url}/#{@tool_guid}/settings.json")
66
- else
67
- uri = URI.parse("#{@url}/#{@tool_guid}/settings.json?name=#{setting_name}")
68
- end
69
- return get_call(uri)
70
- end
71
-
72
- def get_results(tool_step_option_ids = nil, completed = "true")
73
- tool = get_tool
74
- unless tool_step_option_ids.nil?
75
- tool[:steps] = update_tool_options(tool, tool_step_option_ids)
76
- end
77
- tool[:steps].each{|step| step.reject!{|key, value| ![:tool_step_id, :selected_options, :selected_filter_options].include?(key)}}
78
- if @session_id.nil?
79
- uri = URI.parse("#{@url}/#{@tool_guid}/tool.json?locale=#{@locale}&sid=#{@session_id}&completed=#{completed}")
80
- else
81
- uri = URI.parse("#{@url}/#{@tool_guid}/tool.json?locale=#{@locale}&completed=#{completed}")
82
- end
83
- http = Net::HTTP.new(uri.host, uri.port)
84
- request = Net::HTTP::Put.new(uri.request_uri)
85
- request.body = tool.to_json
86
- response = http.request(request)
87
- return JSON.parse(response.body, {symbolize_names: true})
88
- end
89
-
90
- def get_products_by_skus(skus)
91
- uri = URI.parse("#{@url}/#{@tool_guid}/products.json?sku_list=#{skus}")
92
- products = get_call(uri)
93
- return products.collect{|p| p[:product]}
94
- end
95
-
96
- def get_products_by_product_ids(product_ids)
97
- uri = URI.parse("#{@url}/#{@tool_guid}/products.json?product_list=#{product_ids}")
98
- products = get_call(uri)
99
- return products.collect{|p| p[:product]}
100
- end
101
-
102
- def get_attribute_by_name(attribute_name)
103
- uri = URI.parse("#{@url}/#{@tool_guid}/product_attributes.json?attribute_name=#{attribute_name}")
104
- return get_call(uri)
105
- end
106
-
107
- def get_product_links(retailer_product_id)
108
- uri = URI.parse("#{@url}/#{@tool_guid}/product_links/#{retailer_product_id}.json")
109
- return get_call(uri)
110
- end
111
-
112
- def get_user_data(user_id = nil)
113
- if !@session_id.nil? && !user_id.nil?
114
- uri = URI.parse("#{@url}/#{@tool_guid}/user_data.json?sid=#{@session_id}&user_id=#{user_id}")
115
- response = get_call(uri)
116
- elsif @session_id.nil? && !user_id.nil?
117
- uri = URI.parse("#{@url}/#{@tool_guid}/user_data.json?user_id=#{user_id}")
118
- response = get_call(uri).last
119
- elsif !@session_id.nil? && user_id.nil?
120
- uri = URI.parse("#{@url}/#{@tool_guid}/user_data.json?sid=#{@session_id}")
121
- response = get_call(uri)
122
- end
123
- return response
124
- end
125
-
126
- def save_user_data(session_data, user_id = nil)
127
- unless session_data.empty?
128
- if user_id.nil?
129
- uri = URI.parse("#{@url}/#{@tool_guid}/user_data.json?sid=#{@session_id}")
130
- else
131
- uri = URI.parse("#{@url}/#{@tool_guid}/user_data.json?sid=#{@session_id}&user_id=#{user_id}")
132
- end
133
- http = Net::HTTP.new(uri.host, uri.port)
134
- request = Net::HTTP::Put.new(uri.request_uri)
135
- request.body = session_data.to_json
136
- response = http.request(request)
137
- end
138
- end
139
-
140
- def recs(group_id, retailer_product_list)
141
- uri = URI.parse("#{@url}/#{@tool_guid}/recommend.json?group_id=#{group_id}&retailer_product_list=#{retailer_product_list}")
142
- return get_call(uri)
143
- end
144
-
145
- def record_events(event_name)
146
- if @session_id.nil?
147
- uri = URI.parse("#{@url}/#{@tool_guid}/record_event/#{event_name}.json")
148
- else
149
- uri = URI.parse("#{@url}/#{@tool_guid}/record_event/#{event_name}.json?sid=#{@session_id}")
150
- end
151
- return get_call(uri)
152
- end
153
-
154
- def micro_convert(retailer_product_id)
155
- uri = URI.parse("#{@url}/#{@tool_guid}/micro_conversions.json?sid=#{@session_id}&retailer_product_id=#{retailer_product_id}")
156
- return get_call(uri)
157
- end
158
-
159
- def get_call(uri)
160
- http = Net::HTTP.new(uri.host, uri.port)
161
- request = Net::HTTP::Get.new(uri.request_uri)
162
- response = http.request(request)
163
- return JSON.parse(response.body, {symbolize_names: true})
164
- end
165
-
166
- def update_tool_options(tool, tool_step_option_ids)
167
- tool[:steps].each do |step|
168
- current_step_options = []
169
- unless step[:options].nil?
170
- step[:options].each do |option|
171
- if Array(tool_step_option_ids).include?(option[:tool_step_option_id])
172
- current_step_options << option[:tool_step_option_id]
173
- end
174
- end
175
- end
176
- unless current_step_options.empty?
177
- step[:selected_options] = current_step_options.join(',')
178
- end
179
- end
180
- end
181
- end
182
-
183
- class Text
184
- def initialize(localization = nil)
185
- unless localization.nil?
186
- config_file = Rails.root.join("config", "tool_config.yml").to_s
187
- tool_info = YAML::load(File.read(config_file))
188
- @tool_guid = tool_info[localization]['tool_guid']
189
- @locale = tool_info[localization]['locale']
190
- end
191
- @url = tool_info['api_root'] rescue nil
192
- if @url.nil?
193
- @url = 'http://gst.api.igodigital.com/v2_2'
194
- end
195
- end
196
-
197
- def locale(locale = nil)
198
- if locale.nil?
199
- @locale
200
- else
201
- @locale = locale
202
- end
203
- end
204
-
205
- def tool_guid(tool_guid = nil)
206
- if tool_guid.nil?
207
- @tool_guid
208
- else
209
- @tool_guid = tool_guid
210
- end
211
- end
212
-
213
- def url(url = nil)
214
- if url.nil?
215
- @url
216
- else
217
- @url = url
218
- end
219
- end
220
-
221
- def texts(texts = [])
222
- if texts.empty?
223
- @texts
224
- else
225
- @texts = texts
226
- end
227
- end
228
-
229
- def load_text
230
- uri = URI.parse("#{@url}/#{@tool_guid}/text.json?locale=#{@locale}")
231
- http = Net::HTTP.new(uri.host, uri.port)
232
- request = Net::HTTP::Get.new(uri.request_uri)
233
- response = http.request(request)
234
- @texts = JSON.parse(response.body, {symbolize_names: true})
235
- return @texts
236
- end
237
-
238
- def find(param)
239
- @texts.each do |x|
240
- if x[:text_type] == param
241
- return x[:text_value]
242
- end
243
- end
244
- return nil
245
- end
246
- end
247
- end
10
+ require "#{File.dirname(__FILE__)}/goldshark_gem"
11
+ Dir["#{File.dirname(__FILE__)}/goldshark_gem/*.rb"].each { |file| require file.gsub(".rb", "")}