storenvy-api 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ pkg
2
+ .DS_Store
3
+ .idea/
4
+
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ storenvy-api-ruby
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-1.9.3-p429
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in storenvy-api.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,65 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ storenvy-api (0.0.1)
5
+ activesupport
6
+ faraday
7
+ faraday_middleware
8
+ oauth2
9
+ oj
10
+ rash
11
+ typhoeus
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ activesupport (4.0.0)
17
+ i18n (~> 0.6, >= 0.6.4)
18
+ minitest (~> 4.2)
19
+ multi_json (~> 1.3)
20
+ thread_safe (~> 0.1)
21
+ tzinfo (~> 0.3.37)
22
+ atomic (1.1.9)
23
+ ethon (0.5.12)
24
+ ffi (>= 1.3.0)
25
+ mime-types (~> 1.18)
26
+ faraday (0.8.7)
27
+ multipart-post (~> 1.1)
28
+ faraday_middleware (0.9.0)
29
+ faraday (>= 0.7.4, < 0.9)
30
+ ffi (1.9.0)
31
+ hashie (2.0.5)
32
+ httpauth (0.2.0)
33
+ i18n (0.6.4)
34
+ jwt (0.1.8)
35
+ multi_json (>= 1.5)
36
+ mime-types (1.23)
37
+ minitest (4.7.5)
38
+ multi_json (1.7.7)
39
+ multi_xml (0.5.4)
40
+ multipart-post (1.2.0)
41
+ oauth2 (0.9.1)
42
+ faraday (~> 0.8)
43
+ httpauth (~> 0.1)
44
+ jwt (~> 0.1.4)
45
+ multi_json (~> 1.0)
46
+ multi_xml (~> 0.5)
47
+ rack (~> 1.2)
48
+ oj (2.1.2)
49
+ rack (1.5.2)
50
+ rake (10.0.4)
51
+ rash (0.4.0)
52
+ hashie (~> 2.0.0)
53
+ thread_safe (0.1.0)
54
+ atomic
55
+ typhoeus (0.6.3)
56
+ ethon (~> 0.5.11)
57
+ tzinfo (0.3.37)
58
+
59
+ PLATFORMS
60
+ ruby
61
+
62
+ DEPENDENCIES
63
+ bundler (~> 1.3)
64
+ rake
65
+ storenvy-api!
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Omri Cohen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # Storenvy::Api::Ruby
2
+
3
+
4
+ ## Installation
5
+
6
+ Add this line to your application's Gemfile:
7
+
8
+ gem 'storenvy-api-ruby'
9
+
10
+ And then execute:
11
+
12
+ $ bundle
13
+
14
+ Or install it yourself as:
15
+
16
+ $ gem install storenvy-api-ruby
17
+
18
+ ## Usage
19
+
20
+ This is the flow you need to follow in order to communicate with Storenvy API.
21
+
22
+ The first thing you wanna do, is to have Storenvy store owners authorize your application.
23
+
24
+ ```ruby
25
+
26
+ require 'oauth2'
27
+
28
+
29
+ oauth_client = OAuth2::Client.new "app_key",
30
+ "secret",
31
+ {:site => "https://www.storenvy.com/oauth"}
32
+
33
+ authorize_uri = oauth_client.authorize_url :redirect_uri => "redirect_url", #must be consistent with the one defined in Storenvy API
34
+ :response_type => "code",
35
+ :scope => "user store_read store_write",
36
+ :client_id => oauth_client.client_credentials.client_params['client_id']
37
+
38
+ ```
39
+
40
+
41
+ The users will be then redirected to the redirect_uri with the oauth2 code, you will need to convert the code to access_token for the future requests we are about to make.
42
+
43
+ ```ruby
44
+
45
+ oauth_client = OAuth2::Client.new "app_key",
46
+ "secret",
47
+ {:site => "https://api.storenvy.com/oauth"}
48
+
49
+ access_token = oauth_client.auth_code.get_token params[:code], {:redirect_uri => redirect_uri}
50
+ shop_token = access_token.token
51
+
52
+ ```
53
+
54
+ That's it, from now on, we will assume you have an access_token for the store your application is going to be integrated in.
55
+
56
+ What we will do now, is to make some calls to the API. As mentioned before, each such call should get access_token as one of the parameters. Lets get all the shop products.
57
+
58
+
59
+ ```ruby
60
+
61
+ products = []
62
+ pagination_argument = nil
63
+ begin
64
+ hsh = {:access_token => self.shop_token}
65
+ hsh[pagination_argument[0].to_sym] = pagination_argument[1] if pagination_argument
66
+
67
+ tmp_products = Storenvy.get_products hsh
68
+ products += tmp_products.body.data.products
69
+
70
+ pagination_argument = tmp_products.body.pagination.next_url.match(/newer_than_id=[0-9]+/).to_s.split("=") if tmp_products.body.pagination.next_url
71
+ end while tmp_products.body.data.products.count > 0
72
+
73
+ ```
74
+
75
+ That's it for now. We would love if you contribute more examples, as well as more functionality to this humble wrapper of us.
76
+
77
+ We would also love it if some can help us write some tests.
78
+
79
+
80
+
81
+ ## Contributing
82
+
83
+ 1. Fork it
84
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
85
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
86
+ 4. Push to the branch (`git push origin my-new-feature`)
87
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/storenvy.rb ADDED
@@ -0,0 +1,58 @@
1
+ require 'storenvy/version'
2
+ require 'storenvy/client'
3
+
4
+ module Storenvy
5
+ class << self
6
+ # @!attribute url
7
+ # @return [String] the base url of the Storenvy Api
8
+ attr_accessor :url
9
+
10
+ # @!attribute parallel_requests
11
+ # @return [Integer String] defines the maximum parallel request for the gem to preform
12
+ attr_accessor :parallel_requests
13
+
14
+ # @!attribute app_key
15
+ # @return [String] the app key that is registered with Storenvy
16
+ attr_accessor :app_key
17
+
18
+ # @!attribute secret
19
+ # @return [String] the secret that is registered with Storenvy
20
+ attr_accessor :secret
21
+
22
+ # Configuration interface of the gem
23
+ #
24
+ # @yield [self] to accept configuration settings
25
+ def configure
26
+ yield self
27
+ true
28
+ end
29
+
30
+ #
31
+ # Makes sure that the method missing is checked with the Storenvy::Client instance
32
+ #
33
+ # @param method_name [String] the name of the method we want to run
34
+ # @param include_private [Boolean] defines wether to check for private functions as well
35
+ def respond_to_missing?(method_name, include_private=false)
36
+ client.respond_to?(method_name, include_private)
37
+ end
38
+
39
+ #
40
+ # @return an instance of Storenvy::Client
41
+ #
42
+ def client
43
+ @client ||= Storenvy::Client.new()
44
+ end
45
+
46
+ private
47
+
48
+ #
49
+ # executes any function on the Storenvy::Client instance
50
+ #
51
+ # @param args [*] any argument that we want to pass to the client function
52
+ # @param block [Block] any block that is passed to the client function
53
+ def method_missing(method_name, *args, &block)
54
+ return super unless client.respond_to?(method_name)
55
+ client.send(method_name, *args, &block)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,25 @@
1
+ module Storenvy
2
+ module Order
3
+
4
+ #def update_account(params)
5
+ # request = {
6
+ # account: {
7
+ # minisite_website_name: params[:minisite_website_name],
8
+ # minisite_website: params[:minisite_website],
9
+ # minisite_subdomain: params[:minisite_subdomain],
10
+ # minisite_cname: params[:minisite_cname],
11
+ # minisite_subdomain_active: params[:minisite_subdomain_active]
12
+ # },
13
+ # utoken: params[:utoken]
14
+ # }
15
+ # app_key = params[:app_key]
16
+ # put("/apps/#{app_key}", request)
17
+ #end
18
+
19
+ def get_orders(params)
20
+ get("/v1/orders", params)
21
+ end
22
+
23
+ end
24
+ end
25
+
@@ -0,0 +1,24 @@
1
+ module Storenvy
2
+ module Product
3
+ def get_products(params)
4
+ get("/v1/products", params)
5
+ end
6
+
7
+ def create_product(params)
8
+ post("/v1/products", params)
9
+ end
10
+
11
+ def get_product(product_id, params)
12
+ get("/v1/products/#{product_id}", params)
13
+ end
14
+
15
+ def update_product(product_id, params)
16
+ put("/v1/products/#{product_id}", params)
17
+ end
18
+
19
+ def delete_product(product_id, params)
20
+ delete("/v1/products/#{product_id}", params)
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,13 @@
1
+ module Storenvy
2
+ module Store
3
+ def current_store(params)
4
+ get("/v1/store", params)
5
+ end
6
+
7
+ def update_store(params)
8
+ put("/v1/store", params)
9
+ end
10
+
11
+ end
12
+ end
13
+
@@ -0,0 +1,12 @@
1
+ module Storenvy
2
+ module Template
3
+ def get_templates(params)
4
+ get("/v1/store/templates", params)
5
+ end
6
+
7
+ def update_template(id, params)
8
+ put("/v1/store/templates/#{id}", params)
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,8 @@
1
+ module Storenvy
2
+ module User
3
+ def current_user(params)
4
+ get("/v1/me", params)
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,150 @@
1
+ require 'active_support/notifications'
2
+ require 'faraday'
3
+ require 'typhoeus'
4
+ require 'typhoeus/adapters/faraday'
5
+ require 'faraday_middleware'
6
+ require 'storenvy/core/response_parser'
7
+ require 'storenvy/version'
8
+ require 'storenvy/api/order'
9
+ require 'storenvy/api/store'
10
+ require 'storenvy/api/template'
11
+ require 'storenvy/api/user'
12
+ require 'storenvy/api/product'
13
+
14
+
15
+ module Storenvy
16
+ class Client
17
+ include Storenvy::Order
18
+ include Storenvy::Store
19
+ include Storenvy::Template
20
+ include Storenvy::User
21
+ include Storenvy::Product
22
+
23
+ attr_accessor :access_token
24
+
25
+ #
26
+ # Creates a new instance of Storenvy::Client
27
+ #
28
+ # @param url [String] The url to Storenvy api (https://api.storenvy.com)
29
+ # @param parallel_requests [Integer String] The maximum parallel request to do (5)
30
+ def initialize(url = 'https://api.storenvy.com', parallel_requests = 5)
31
+ @url = url
32
+ @parallel_requests = parallel_requests
33
+ end
34
+
35
+ #
36
+ # Does a GET request to the url with the params
37
+ #
38
+ # @param url [String] the relative path in the Storenvy API
39
+ # @param params [Hash] the url params that should be passed in the request
40
+ def get(url, params = {})
41
+ params = params.inject({}){|memo,(k,v)| memo[k.to_s] = v; memo}
42
+ params[:access_token] = @access_token if @access_token
43
+ preform(url, :get, params: params) do
44
+ return connection.get(url, params)
45
+ end
46
+ end
47
+
48
+ #
49
+ # Does a POST request to the url with the params
50
+ #
51
+ # @param url [String] the relative path in the Storenvy API
52
+ # @param params [Hash] the body of the request
53
+ def post(url, params)
54
+ params = convert_hash_keys(params)
55
+ params[:access_token] = @access_token if @access_token
56
+ preform(url, :post, params: params) do
57
+ return connection.post(url, params)
58
+ end
59
+ end
60
+
61
+ #
62
+ # Does a PUT request to the url with the params
63
+ #
64
+ # @param url [String] the relative path in the Storenvy API
65
+ # @param params [Hash] the body of the request
66
+ def put(url, params)
67
+ params = convert_hash_keys(params)
68
+ params[:access_token] = @access_token if @access_token
69
+ preform(url, :put, params: params) do
70
+ return connection.put(url, params)
71
+ end
72
+ end
73
+
74
+ #
75
+ # Does a DELETE request to the url with the params
76
+ #
77
+ # @param url [String] the relative path in the Storenvy API
78
+ def delete(url, params)
79
+ params = convert_hash_keys(params)
80
+ params[:access_token] = @access_token if @access_token
81
+ preform(url, :delete) do
82
+ return connection.delete(url)
83
+ end
84
+ end
85
+
86
+ #
87
+ # Does a parallel request to the api for all of the requests in the block
88
+ #
89
+ # @example block
90
+ # Storenvy.in_parallel do
91
+ # Storenvy.create_review(review_params)
92
+ # Storenvy.update_account(account_params)
93
+ # end
94
+ def in_parallel
95
+ connection.in_parallel do
96
+ yield
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ #
103
+ # Preforms an HTTP request and notifies the ActiveSupport::Notifications
104
+ #
105
+ # @private
106
+ # @param url [String] the url to which preform the request
107
+ # @param type [String]
108
+ def preform(url, type, params = {}, &block)
109
+ ActiveSupport::Notifications.instrument 'Storenvy', request: type, url: url, params: params do
110
+ if connection.in_parallel?
111
+ block.call
112
+ else
113
+ block.call.body
114
+ end
115
+ end
116
+ end
117
+
118
+ #
119
+ # @return an instance of Faraday initialized with all that this gem needs
120
+ def connection
121
+ @connection ||= Faraday.new(url: @url, parallel_manager: Typhoeus::Hydra.new(max_concurrency: @parallel_requests), headers: {:storenvy_api_connector => 'Ruby'+ Storenvy::VERSION}) do |conn|
122
+
123
+ conn.use Storenvy::ResponseParser
124
+
125
+ # Set the response to be rashified
126
+ conn.response :rashify
127
+
128
+ # Setting request and response to use JSON/XML
129
+ conn.request :oj
130
+ conn.response :oj
131
+
132
+ # Set to use instrumentals to get time logs
133
+ conn.use :instrumentation
134
+
135
+ conn.adapter :typhoeus
136
+ end
137
+ end
138
+ private
139
+ def convert_hash_keys(value)
140
+ case value
141
+ when Array
142
+ value.map { |v| convert_hash_keys(v) }
143
+ when Hash
144
+ Hash[value.map { |k, v| [k.to_s, convert_hash_keys(v)] }]
145
+ else
146
+ value
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,84 @@
1
+ require 'typhoeus/adapters/faraday'
2
+ require 'faraday_middleware/response_middleware'
3
+
4
+ module Storenvy
5
+ class ResponseParser < Faraday::Response::Middleware
6
+ def call(env)
7
+ # "env" contains the request
8
+ @app.call(env).on_complete do
9
+ body = false
10
+ if env[:status] == 200
11
+ body = env[:response].body.response || env[:response].body
12
+ elsif env[:response] && env[:response].body && env[:response].body.status
13
+ body = env[:response].body.status
14
+ end
15
+ env[:body] = body
16
+ end
17
+ end
18
+ end
19
+
20
+ #
21
+ # Response middleware that decodes the response body from JSON.
22
+ #
23
+ class ParseOj < FaradayMiddleware::ResponseMiddleware
24
+ dependency do
25
+ require 'oj' unless defined?(::Oj)
26
+ end
27
+
28
+ define_parser do |body|
29
+ ::Oj.load(body, mode: :compat) unless body.strip.empty?
30
+ end
31
+ end
32
+
33
+ # Request middleware that encodes the body as JSON.
34
+ #
35
+ # Processes only requests with matching Content-type or those without a type.
36
+ # If a request doesn't have a type but has a body, it sets the Content-type
37
+ # to JSON MIME-type.
38
+ #
39
+ # Doesn't try to encode bodies that already are in string form.
40
+ class EncodeOj < Faraday::Middleware
41
+ CONTENT_TYPE = 'Content-Type'.freeze
42
+ MIME_TYPE = 'application/json'.freeze
43
+
44
+ dependency do
45
+ require 'oj' unless defined?(::Oj)
46
+ end
47
+
48
+ def call(env)
49
+ match_content_type(env) do |data|
50
+ env[:body] = encode data
51
+ end
52
+ @app.call env
53
+ end
54
+
55
+ def encode(data)
56
+ ::Oj.dump data
57
+ end
58
+
59
+ def match_content_type(env)
60
+ if process_request?(env)
61
+ env[:request_headers][CONTENT_TYPE] ||= MIME_TYPE
62
+ yield env[:body] unless env[:body].respond_to?(:to_str)
63
+ end
64
+ end
65
+
66
+ def process_request?(env)
67
+ type = request_type(env)
68
+ has_body?(env) and (type.empty? or type == MIME_TYPE)
69
+ end
70
+
71
+ def has_body?(env)
72
+ body = env[:body] and !(body.respond_to?(:to_str) and body.empty?)
73
+ end
74
+
75
+ def request_type(env)
76
+ type = env[:request_headers][CONTENT_TYPE].to_s
77
+ type = type.split(';', 2).first if type.index(';')
78
+ type
79
+ end
80
+ end
81
+ end
82
+
83
+ Faraday.register_middleware :response, oj: Storenvy::ParseOj
84
+ Faraday.register_middleware :request, oj: Storenvy::EncodeOj
@@ -0,0 +1,3 @@
1
+ module Storenvy
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'storenvy/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "storenvy-api"
8
+ spec.version = Storenvy::VERSION
9
+ spec.authors = ["Omri Cohen"]
10
+ spec.email = ["omri@yotpo.com"]
11
+ spec.description = %q{Ruby wrapper for Sotrenvy API - written by Yotpo}
12
+ spec.summary = %q{Ruby wrapper for Sotrenvy API - written by Yotpo}
13
+ spec.homepage = "https://developers.storenvy.com/docs"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+
24
+ spec.add_dependency "oauth2"
25
+ spec.add_dependency 'faraday'
26
+ spec.add_dependency 'typhoeus'
27
+ spec.add_dependency 'faraday_middleware'
28
+ spec.add_dependency 'rash'
29
+ spec.add_dependency 'oj'
30
+ spec.add_dependency 'activesupport'
31
+ end
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: storenvy-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Omri Cohen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: oauth2
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: faraday
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: typhoeus
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: faraday_middleware
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rash
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: oj
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: activesupport
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: Ruby wrapper for Sotrenvy API - written by Yotpo
159
+ email:
160
+ - omri@yotpo.com
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - .gitignore
166
+ - .ruby-gemset
167
+ - .ruby-version
168
+ - Gemfile
169
+ - Gemfile.lock
170
+ - LICENSE.txt
171
+ - README.md
172
+ - Rakefile
173
+ - lib/storenvy.rb
174
+ - lib/storenvy/api/order.rb
175
+ - lib/storenvy/api/product.rb
176
+ - lib/storenvy/api/store.rb
177
+ - lib/storenvy/api/template.rb
178
+ - lib/storenvy/api/user.rb
179
+ - lib/storenvy/client.rb
180
+ - lib/storenvy/core/response_parser.rb
181
+ - lib/storenvy/version.rb
182
+ - storenvy-api.gemspec
183
+ homepage: https://developers.storenvy.com/docs
184
+ licenses:
185
+ - MIT
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ none: false
192
+ requirements:
193
+ - - ! '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ segments:
197
+ - 0
198
+ hash: 439492878140209227
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
+ none: false
201
+ requirements:
202
+ - - ! '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ segments:
206
+ - 0
207
+ hash: 439492878140209227
208
+ requirements: []
209
+ rubyforge_project:
210
+ rubygems_version: 1.8.25
211
+ signing_key:
212
+ specification_version: 3
213
+ summary: Ruby wrapper for Sotrenvy API - written by Yotpo
214
+ test_files: []