lightspeed_pos 0.1.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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +69 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.markdown +98 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/lightspeed/account.rb +48 -0
- data/lib/lightspeed/account_resources.rb +103 -0
- data/lib/lightspeed/base.rb +17 -0
- data/lib/lightspeed/categories.rb +10 -0
- data/lib/lightspeed/category.rb +10 -0
- data/lib/lightspeed/client.rb +45 -0
- data/lib/lightspeed/errors.rb +8 -0
- data/lib/lightspeed/item.rb +26 -0
- data/lib/lightspeed/item_matrices.rb +10 -0
- data/lib/lightspeed/item_matrix.rb +17 -0
- data/lib/lightspeed/items.rb +12 -0
- data/lib/lightspeed/request.rb +55 -0
- data/lib/lightspeed/version.rb +3 -0
- data/lib/lightspeed_pos.rb +9 -0
- data/lightspeed_pos.gemspec +32 -0
- metadata +181 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f479289d48eb83582ea0f30e93bf82644e0a5cad
|
4
|
+
data.tar.gz: a0b8758eaeeaa5f7f6f044cc9bdd3689156f6d03
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: be2f7ba8a83b024b43def375f084ab63f695087651563e690f4ec235c453b1f19d54cf0e938f5fd31a04fb83e110d8c0fde4c5006bac7c405f6da6c987bc9891
|
7
|
+
data.tar.gz: e04d5d7c4dabf225688e79e5bf071cd86c371ec5dd2fffea4d88721970ceeb4558cf3b996a24b42ebaf3a3f9be15cd2d72ee3b5dec07011bfc38a4d37bbeaa41
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
AlignHash:
|
2
|
+
EnforcedLastArgumentHashStyle: always_ignore
|
3
|
+
|
4
|
+
AlignParameters:
|
5
|
+
Enabled: false
|
6
|
+
|
7
|
+
LineLength:
|
8
|
+
Max: 180
|
9
|
+
|
10
|
+
ClassLength:
|
11
|
+
Enabled: true
|
12
|
+
Severity: refactor
|
13
|
+
Max: 300
|
14
|
+
|
15
|
+
MethodLength:
|
16
|
+
Enabled: true
|
17
|
+
Max: 30
|
18
|
+
Severity: refactor
|
19
|
+
|
20
|
+
CyclomaticComplexity:
|
21
|
+
Max: 10
|
22
|
+
Severity: refactor
|
23
|
+
|
24
|
+
EndAlignment:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
StringLiterals:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Documentation:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
PercentLiteralDelimiters:
|
34
|
+
PreferredDelimiters:
|
35
|
+
'%w': '{}'
|
36
|
+
|
37
|
+
MethodDefParentheses:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
PredicateName:
|
41
|
+
NamePrefixBlacklist:
|
42
|
+
- is_
|
43
|
+
- have_
|
44
|
+
|
45
|
+
IndentHash:
|
46
|
+
EnforcedStyle: consistent
|
47
|
+
|
48
|
+
# breaks using if blocks with assignments
|
49
|
+
IndentationWidth:
|
50
|
+
Enabled: false
|
51
|
+
|
52
|
+
CaseIndentation:
|
53
|
+
IndentWhenRelativeTo: end
|
54
|
+
|
55
|
+
FormatString:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
ActionFilter:
|
59
|
+
Enabled: false
|
60
|
+
|
61
|
+
# different methods calls that do exactly the same thing are a smell, regardless of semantics
|
62
|
+
SignalException:
|
63
|
+
EnforcedStyle: only_raise
|
64
|
+
|
65
|
+
DoubleNegation:
|
66
|
+
Enabled: false
|
67
|
+
|
68
|
+
TrailingComma:
|
69
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Ryan Bigg
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# Lightspeed POS
|
2
|
+
|
3
|
+
[](https://travis-ci.org/radar/lightspeed-pos)
|
4
|
+
[](https://codeclimate.com/github/radar/lightspeed-pos)
|
5
|
+
|
6
|
+
|
7
|
+
An _unofficial_ gem for interacting with [Lightspeed's Point of Sale API](http://www.lightspeedpos.com/retail/help/developers/api/basics/). Works with API keys for the time being.
|
8
|
+
|
9
|
+
Most definitely not production ready yet, but you can help by submitting pull requests!
|
10
|
+
|
11
|
+
## Getting Started
|
12
|
+
|
13
|
+
First, intialize a new client:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
client = Lightspeed::Client.new(api_key: "YOUR_API_KEY_HERE")
|
17
|
+
```
|
18
|
+
|
19
|
+
**OR** you may also choose to pass through an OAuth access token if you have one:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
client = Lightspeed::Client.new(oauth_token: "YOUR_ACCESS_TOKEN_HERE")
|
23
|
+
```
|
24
|
+
|
25
|
+
Next, make a request for your accounts:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
accounts = client.accounts
|
29
|
+
```
|
30
|
+
|
31
|
+
Pick the account you want to use, and then start using it:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
account = accounts.first
|
35
|
+
account.items # This will return the first 100 items from the account
|
36
|
+
```
|
37
|
+
|
38
|
+
## Account Resources
|
39
|
+
|
40
|
+
Account resources share a common API. Account resources that are currently supported by this library are:
|
41
|
+
|
42
|
+
* Categories
|
43
|
+
* Items
|
44
|
+
|
45
|
+
To work with account resources, you first need to fetch an account. The examples below are for items, but will also work with other types listed above.
|
46
|
+
|
47
|
+
### List
|
48
|
+
|
49
|
+
You can fetch a list of items with this:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
account.items.all
|
53
|
+
```
|
54
|
+
|
55
|
+
### Show
|
56
|
+
|
57
|
+
You can fetch a particular item by its ID by doing this:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
account.items.find(1)
|
61
|
+
```
|
62
|
+
|
63
|
+
### Create
|
64
|
+
|
65
|
+
You can create a particular item by calling `create`:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
account.items.create({
|
69
|
+
description: "Onesie"
|
70
|
+
})
|
71
|
+
```
|
72
|
+
|
73
|
+
### Update
|
74
|
+
|
75
|
+
You can update a particular item by calling `update`, passing that item's ID and providing a list of attributes to update:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
account.items.update(1, {
|
79
|
+
description: "Onesie"
|
80
|
+
})
|
81
|
+
```
|
82
|
+
|
83
|
+
This method isn't available on items themselves because I couldn't work out how to share the account ID easily there.
|
84
|
+
|
85
|
+
### Destroy
|
86
|
+
|
87
|
+
You can destroy a particular item by calling `destroy` and passing that item's ID:
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
account.items.destroy(1)
|
91
|
+
```
|
92
|
+
|
93
|
+
For the `Items` resource, this is aliased to `archive`:
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
account.items.archive(1)
|
97
|
+
```
|
98
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "lightspeed/pos"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'lightspeed/base'
|
2
|
+
require 'lightspeed/categories'
|
3
|
+
require 'lightspeed/items'
|
4
|
+
require 'lightspeed/item_matrices'
|
5
|
+
|
6
|
+
module Lightspeed
|
7
|
+
class Account < Lightspeed::Base
|
8
|
+
attr_accessor :id, :name, :link
|
9
|
+
|
10
|
+
def client
|
11
|
+
owner
|
12
|
+
end
|
13
|
+
|
14
|
+
def items
|
15
|
+
item_proxy
|
16
|
+
end
|
17
|
+
|
18
|
+
def categories
|
19
|
+
category_proxy
|
20
|
+
end
|
21
|
+
|
22
|
+
def item_matrices
|
23
|
+
item_matrices_proxy
|
24
|
+
end
|
25
|
+
|
26
|
+
def instantiate(*args)
|
27
|
+
client.instantiate(self, *args)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def self.id_field
|
33
|
+
"accountID"
|
34
|
+
end
|
35
|
+
|
36
|
+
def item_proxy
|
37
|
+
@item_proxy ||= Lightspeed::Items.new(self)
|
38
|
+
end
|
39
|
+
|
40
|
+
def category_proxy
|
41
|
+
@category_proxy ||= Lightspeed::Categories.new(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
def item_matrices_proxy
|
45
|
+
@item_matrices_proxy ||= Lightspeed::ItemMatrices.new(self)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'active_support/core_ext/string'
|
2
|
+
|
3
|
+
module Lightspeed
|
4
|
+
class AccountResources
|
5
|
+
attr_accessor :account
|
6
|
+
|
7
|
+
def initialize(account)
|
8
|
+
@account = account
|
9
|
+
end
|
10
|
+
|
11
|
+
def all
|
12
|
+
response = get
|
13
|
+
account.instantiate(response[resource_name], Lightspeed.const_get(resource_name))
|
14
|
+
end
|
15
|
+
|
16
|
+
def find(id)
|
17
|
+
params = { "#{resource_name.camelize(:lower)}ID" => id }
|
18
|
+
response = get(params: params)
|
19
|
+
if response[resource_name]
|
20
|
+
resource_class.new(account, response[resource_name])
|
21
|
+
else
|
22
|
+
raise Lightspeed::Errors::NotFound, "Could not find a #{resource_name} by #{params.inspect}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def create(attributes = {})
|
27
|
+
craft_instance(post(body: attributes.to_json))
|
28
|
+
end
|
29
|
+
|
30
|
+
def update(id, attributes = {})
|
31
|
+
craft_instance(put(id, body: attributes.to_json))
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy(id)
|
35
|
+
craft_instance(delete(id))
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def craft_instance(response)
|
41
|
+
resource_class.new(client, response[resource_name])
|
42
|
+
end
|
43
|
+
|
44
|
+
def client
|
45
|
+
account.client
|
46
|
+
end
|
47
|
+
|
48
|
+
def resource_class
|
49
|
+
Lightspeed.const_get(resource_name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def resource_name
|
53
|
+
self.class.resource_name
|
54
|
+
end
|
55
|
+
|
56
|
+
def get(params: nil)
|
57
|
+
request = client.request(
|
58
|
+
method: :get,
|
59
|
+
path: collection_path,
|
60
|
+
params: params
|
61
|
+
)
|
62
|
+
request.perform
|
63
|
+
end
|
64
|
+
|
65
|
+
def post(body:)
|
66
|
+
request = client.request(
|
67
|
+
method: :post,
|
68
|
+
path: collection_path,
|
69
|
+
body: body
|
70
|
+
)
|
71
|
+
request.perform
|
72
|
+
end
|
73
|
+
|
74
|
+
def put(id, body:)
|
75
|
+
request = client.request(
|
76
|
+
method: :put,
|
77
|
+
path: item_path(id),
|
78
|
+
body: body,
|
79
|
+
)
|
80
|
+
request.perform
|
81
|
+
end
|
82
|
+
|
83
|
+
def delete(id)
|
84
|
+
request = client.request(
|
85
|
+
method: :delete,
|
86
|
+
path: item_path(id)
|
87
|
+
)
|
88
|
+
request.perform
|
89
|
+
end
|
90
|
+
|
91
|
+
def base_path
|
92
|
+
"/Account/#{account.id}/#{self.class.resource_name}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def collection_path
|
96
|
+
base_path + ".json"
|
97
|
+
end
|
98
|
+
|
99
|
+
def item_path(id)
|
100
|
+
base_path + "/#{id}.json"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Lightspeed
|
2
|
+
class Base
|
3
|
+
attr_accessor :id, :owner
|
4
|
+
|
5
|
+
def initialize(owner, data = {})
|
6
|
+
@owner = owner
|
7
|
+
self.id = data.delete(self.class.id_field)
|
8
|
+
data.each do |k, v|
|
9
|
+
send("#{k}=", v)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#<#{self.class.name} id=#{id}>"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'lightspeed/account'
|
2
|
+
require 'lightspeed/request'
|
3
|
+
|
4
|
+
module Lightspeed
|
5
|
+
class Client
|
6
|
+
attr_accessor :api_key, :oauth_token
|
7
|
+
|
8
|
+
def initialize(api_key: nil, oauth_token: nil)
|
9
|
+
@api_key = api_key
|
10
|
+
@oauth_token = oauth_token
|
11
|
+
end
|
12
|
+
|
13
|
+
def request(**args)
|
14
|
+
Lightspeed::Request.new(self, **args)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns a list of accounts that you have access to.
|
18
|
+
def accounts
|
19
|
+
request = request(method: :get, path: "/Account.json")
|
20
|
+
response = request.perform
|
21
|
+
instantiate(response["Account"], Lightspeed::Account)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Instantiates a bunch of records from Lightspeed into their proper classes.
|
25
|
+
def instantiate(owner = self, records, klass)
|
26
|
+
records = splat(records)
|
27
|
+
records.map do |record|
|
28
|
+
klass.new(owner, record)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# Converts a thing to an Array unless it is already.
|
35
|
+
# Unfortunately necessary because Lightspeed's API may return an object,
|
36
|
+
# or an array of objects.
|
37
|
+
#
|
38
|
+
# The compact is becuase it may return nothing at all.
|
39
|
+
# In the example of fetching categories resource where there are no categories,
|
40
|
+
# response["Category"] will not be present.
|
41
|
+
def splat(thing)
|
42
|
+
(thing.is_a?(Array) ? thing : [thing]).compact
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'lightspeed/base'
|
2
|
+
|
3
|
+
module Lightspeed
|
4
|
+
class Item < Lightspeed::Base
|
5
|
+
attr_accessor :systemSku, :defaultCost, :avgCost, :discountable, :tax,
|
6
|
+
:archived, :itemType, :description, :modelYear, :upc, :ean, :customSku,
|
7
|
+
:manufacturerSku, :createTime, :timeStamp,
|
8
|
+
|
9
|
+
# Association keys
|
10
|
+
:categoryID, :taxClassID, :departmentID, :itemMatrixID, :manufacturerID, :seasonID,
|
11
|
+
:defaultVendorID, :itemECommerceID,
|
12
|
+
|
13
|
+
# Embedded
|
14
|
+
:ItemMatrix, :ItemAttributes, :ItemShops, :Prices, :Note
|
15
|
+
|
16
|
+
def self.id_field
|
17
|
+
"itemID"
|
18
|
+
end
|
19
|
+
|
20
|
+
# FUNFACT: ItemMatrix data is returned during an `update` request,
|
21
|
+
# but not during a `find` request.
|
22
|
+
def item_matrix
|
23
|
+
@ItemMatrix ||= owner.item_matrices.find(itemMatrixID) # rubocop:disable VariableName
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Lightspeed
|
2
|
+
class ItemMatrix < Lightspeed::Base
|
3
|
+
attr_accessor :description, :tax, :defaultCost, :itemType, :modelYear, :archived,
|
4
|
+
:timeStamp
|
5
|
+
|
6
|
+
# Association keys
|
7
|
+
attr_accessor :itemAttributeSetID, :manufacturerID, :categoryID, :defaultVendorID,
|
8
|
+
:taxClassID, :seasonID, :departmentID, :itemECommerceID
|
9
|
+
|
10
|
+
# Embedded
|
11
|
+
attr_accessor :Prices
|
12
|
+
|
13
|
+
def self.id_field
|
14
|
+
"itemMatrixID"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Lightspeed
|
2
|
+
class Request
|
3
|
+
attr_accessor :raw_request
|
4
|
+
|
5
|
+
def self.base_url
|
6
|
+
"https://api.merchantos.com/API"
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(client, method:, path:, params: nil, body: nil)
|
10
|
+
@raw_request = Typhoeus::Request.new(
|
11
|
+
self.class.base_url + path,
|
12
|
+
method: method,
|
13
|
+
body: body,
|
14
|
+
params: params
|
15
|
+
)
|
16
|
+
|
17
|
+
if client.oauth_token
|
18
|
+
@raw_request.options[:headers].merge!(
|
19
|
+
"Authorization" => "OAuth #{client.oauth_token}"
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
@raw_request.options[:userpwd] = "#{client.api_key}:apikey" if client.api_key
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
response = raw_request.run
|
28
|
+
if response.code == 200
|
29
|
+
handle_success(response)
|
30
|
+
else
|
31
|
+
handle_error(response)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def handle_success(response)
|
38
|
+
JSON.parse(response.body)
|
39
|
+
end
|
40
|
+
|
41
|
+
def handle_error(response)
|
42
|
+
data = JSON.parse(response.body)
|
43
|
+
error = case response.code
|
44
|
+
when 400
|
45
|
+
Lightspeed::Errors::BadRequest
|
46
|
+
when 401
|
47
|
+
Lightspeed::Errors::Unauthorized
|
48
|
+
when 500
|
49
|
+
Lightspeed::Errors::InternalServerError
|
50
|
+
end
|
51
|
+
|
52
|
+
raise error.new(data["message"]) if error # rubocop:disable RaiseArgs
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'lightspeed/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "lightspeed_pos"
|
8
|
+
spec.version = Lightspeed::VERSION
|
9
|
+
spec.authors = ["Ryan Bigg"]
|
10
|
+
spec.email = ["git@ryanbigg.com"]
|
11
|
+
|
12
|
+
spec.summary = "A gem for interacting with Lightspeed's Point of Sale system"
|
13
|
+
spec.description = "A gem for interacting with Lightspeed's Point of Sale system"
|
14
|
+
spec.homepage = "https://github.com/radar/lightspeed_pos"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
spec.license = "MIT"
|
21
|
+
|
22
|
+
spec.add_dependency "typhoeus", "0.7.2"
|
23
|
+
spec.add_dependency "activesupport", "4.2.3"
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
26
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
27
|
+
spec.add_development_dependency "rspec", "3.2.0"
|
28
|
+
spec.add_development_dependency "webmock", "1.21.0"
|
29
|
+
spec.add_development_dependency "vcr", "2.9.3"
|
30
|
+
|
31
|
+
spec.add_development_dependency "pry"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lightspeed_pos
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Bigg
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: typhoeus
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.7.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.7.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.2.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.2.3
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.2.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.2.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.21.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.21.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.9.3
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 2.9.3
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: A gem for interacting with Lightspeed's Point of Sale system
|
126
|
+
email:
|
127
|
+
- git@ryanbigg.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rspec"
|
134
|
+
- ".rubocop.yml"
|
135
|
+
- ".travis.yml"
|
136
|
+
- Gemfile
|
137
|
+
- LICENSE
|
138
|
+
- README.markdown
|
139
|
+
- Rakefile
|
140
|
+
- bin/console
|
141
|
+
- bin/setup
|
142
|
+
- lib/lightspeed/account.rb
|
143
|
+
- lib/lightspeed/account_resources.rb
|
144
|
+
- lib/lightspeed/base.rb
|
145
|
+
- lib/lightspeed/categories.rb
|
146
|
+
- lib/lightspeed/category.rb
|
147
|
+
- lib/lightspeed/client.rb
|
148
|
+
- lib/lightspeed/errors.rb
|
149
|
+
- lib/lightspeed/item.rb
|
150
|
+
- lib/lightspeed/item_matrices.rb
|
151
|
+
- lib/lightspeed/item_matrix.rb
|
152
|
+
- lib/lightspeed/items.rb
|
153
|
+
- lib/lightspeed/request.rb
|
154
|
+
- lib/lightspeed/version.rb
|
155
|
+
- lib/lightspeed_pos.rb
|
156
|
+
- lightspeed_pos.gemspec
|
157
|
+
homepage: https://github.com/radar/lightspeed_pos
|
158
|
+
licenses:
|
159
|
+
- MIT
|
160
|
+
metadata: {}
|
161
|
+
post_install_message:
|
162
|
+
rdoc_options: []
|
163
|
+
require_paths:
|
164
|
+
- lib
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
requirements: []
|
176
|
+
rubyforge_project:
|
177
|
+
rubygems_version: 2.4.8
|
178
|
+
signing_key:
|
179
|
+
specification_version: 4
|
180
|
+
summary: A gem for interacting with Lightspeed's Point of Sale system
|
181
|
+
test_files: []
|