storenvy-api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []