betsy 0.2.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +15 -0
  5. data/CHANGELOG.md +9 -0
  6. data/CODE_OF_CONDUCT.md +84 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +237 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +79 -0
  11. data/Rakefile +12 -0
  12. data/app/controllers/betsy/response_listener_controller.rb +5 -0
  13. data/app/views/betsy/response_listener/etsy_response_listener.html.erb +1 -0
  14. data/betsy-0.1.0.gem +0 -0
  15. data/betsy.gemspec +44 -0
  16. data/bin/console +15 -0
  17. data/bin/setup +8 -0
  18. data/config/routes.rb +3 -0
  19. data/lib/betsy/engine.rb +11 -0
  20. data/lib/betsy/error.rb +10 -0
  21. data/lib/betsy/ledger_entry.rb +20 -0
  22. data/lib/betsy/model.rb +73 -0
  23. data/lib/betsy/other.rb +13 -0
  24. data/lib/betsy/payment.rb +44 -0
  25. data/lib/betsy/review.rb +22 -0
  26. data/lib/betsy/seller_taxonomy.rb +36 -0
  27. data/lib/betsy/shop.rb +69 -0
  28. data/lib/betsy/shop_listing.rb +124 -0
  29. data/lib/betsy/shop_listing_file.rb +32 -0
  30. data/lib/betsy/shop_listing_image.rb +42 -0
  31. data/lib/betsy/shop_listing_inventory.rb +21 -0
  32. data/lib/betsy/shop_listing_offering.rb +17 -0
  33. data/lib/betsy/shop_listing_product.rb +17 -0
  34. data/lib/betsy/shop_listing_translation.rb +25 -0
  35. data/lib/betsy/shop_listing_variation_image.rb +19 -0
  36. data/lib/betsy/shop_production_partner.rb +15 -0
  37. data/lib/betsy/shop_receipt.rb +54 -0
  38. data/lib/betsy/shop_receipt_transaction.rb +43 -0
  39. data/lib/betsy/shop_section.rb +25 -0
  40. data/lib/betsy/shop_shipping_profile.rb +105 -0
  41. data/lib/betsy/user.rb +27 -0
  42. data/lib/betsy/user_address.rb +27 -0
  43. data/lib/betsy/version.rb +5 -0
  44. data/lib/betsy.rb +121 -0
  45. data/lib/generators/betsy/install_generator.rb +35 -0
  46. data/lib/generators/betsy/templates/betsy.rb +9 -0
  47. data/lib/generators/betsy/templates/create_etsy_accounts.rb +14 -0
  48. data/lib/generators/betsy/templates/etsy_account.rb +2 -0
  49. metadata +206 -0
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Betsy
4
+ class ShopSection
5
+ include Betsy::Model
6
+
7
+ attribute :shop_section_id
8
+ attribute :title
9
+ attribute :rank
10
+ attribute :user_id
11
+ attribute :active_listing_count
12
+
13
+ def self.create_shop_section(shop_id, options = {})
14
+ make_request(:post, "/v3/application/shops/#{shop_id}/sections", options)
15
+ end
16
+
17
+ def self.get_shop_sections(shop_id)
18
+ make_request(:get, "/v3/application/shops/#{shop_id}/sections")
19
+ end
20
+
21
+ def self.get_shop_section(shop_id, shop_section_id)
22
+ make_request(:get, "/v3/application/shops/#{shop_id}/sections/#{shop_section_id}")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Betsy
4
+ class ShopShippingProfile
5
+ include Betsy::Model
6
+
7
+ # Shipping Carriers
8
+ attribute :name
9
+ attribute :domestic_classes
10
+ attribute :international_classes
11
+
12
+ # Shop Shipping Profile
13
+ attribute :title
14
+ attribute :user_id
15
+ attribute :min_processing_days
16
+ attribute :max_processing_days
17
+ attribute :processing_days_display_label
18
+ attribute :origin_country_iso
19
+ attribute :is_deleted
20
+ attribute :shipping_profile_destinations
21
+ attribute :shipping_profile_upgrades
22
+ attribute :origin_postal_code
23
+ attribute :profile_type
24
+
25
+ # Shop Shipping Profile Destination
26
+ attribute :shipping_profile_destination_id
27
+ attribute :origin_country_iso
28
+ attribute :destination_country_iso
29
+ attribute :destination_region
30
+ attribute :primary_cost
31
+ attribute :secondary_cost
32
+
33
+ # Shop Shipping Profile Upgrade
34
+ attribute :upgrade_id
35
+ attribute :upgrade_name
36
+ attribute :type
37
+ attribute :rank
38
+ attribute :language
39
+ attribute :price
40
+ attribute :secondary_price
41
+
42
+ # Shared
43
+ attribute :shipping_carrier_id
44
+ attribute :shipping_profile_id
45
+ attribute :mail_class
46
+ attribute :min_delivery_days
47
+ attribute :max_delivery_days
48
+
49
+ def self.get_shipping_carriers(options = {})
50
+ make_request(:get, "/v3/application/shipping-carriers", options)
51
+ end
52
+
53
+ def self.create_shop_shipping_profile(shop_id, options = {})
54
+ make_request(:post, "/v3/application/shops/#{shop_id}/shipping-profiles", options)
55
+ end
56
+
57
+ def self.get_shop_shipping_profiles(shop_id, options = {})
58
+ make_request(:get, "/v3/application/shops/#{shop_id}/shipping-profiles", options)
59
+ end
60
+
61
+ def self.delete_shop_shipping_profile(shop_id, shipping_profile_id, options = {})
62
+ make_request(:delete, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}", options)
63
+ end
64
+
65
+ def self.get_shop_shipping_profile(shop_id, shipping_profile_id, options = {})
66
+ make_request(:get, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}", options)
67
+ end
68
+
69
+ def self.update_shop_shipping_profile(shop_id, shipping_profile_id, options = {})
70
+ make_request(:put, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}", options)
71
+ end
72
+
73
+ def self.create_shop_shipping_profile_destination(shop_id, shipping_profile_id, options = {})
74
+ make_request(:post, "/v3/application/shops/1/shipping-profiles/1/destinations", options)
75
+ end
76
+
77
+ def self.get_shop_shipping_profile_destinations_by_shipping_profile(shop_id, shipping_profile_id, options = {})
78
+ make_request(:get, "/v3/application/shops/1/shipping-profiles/1/destinations", options)
79
+ end
80
+
81
+ def self.delete_shop_shipping_profile_destination(shop_id, shipping_profile_id, shipping_profile_destination_id, options = {})
82
+ make_request(:delete, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}/destinations/#{shipping_profile_destination_id}", options)
83
+ end
84
+
85
+ def self.update_shop_shipping_profile_destination(shop_id, shipping_profile_id, shipping_profile_destination_id, options = {})
86
+ make_request(:put, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}/destinations/#{shipping_profile_destination_id}", options)
87
+ end
88
+
89
+ def self.create_shop_shipping_profile_upgrade(shop_id, shipping_profile_id, options = {})
90
+ make_request(:post, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}/upgrades", options)
91
+ end
92
+
93
+ def self.get_shop_shipping_profile_upgrades(shop_id, shipping_profile_id, options = {})
94
+ make_request(:get, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}/upgrades", options)
95
+ end
96
+
97
+ def self.delete_shop_shipping_profile_upgrade(shop_id, shipping_profile_id, upgrade_id, options = {})
98
+ make_request(:delete, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}/upgrades/#{upgrade_id}", options)
99
+ end
100
+
101
+ def self.update_shop_shipping_profile_upgrade(shop_id, shipping_profile_id, upgrade_id, options = {})
102
+ make_request(:put, "/v3/application/shops/#{shop_id}/shipping-profiles/#{shipping_profile_id}/upgrades/#{upgrade_id}", options)
103
+ end
104
+ end
105
+ end
data/lib/betsy/user.rb ADDED
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Betsy
4
+ class User
5
+ include Betsy::Model
6
+
7
+ attribute :user_id
8
+ attribute :login_name
9
+ attribute :primary_email
10
+ attribute :first_name
11
+ attribute :last_name
12
+ attribute :create_timestamp
13
+ attribute :referred_by_user_id
14
+ attribute :use_new_inventory_endpoints
15
+ attribute :is_seller
16
+ attribute :bio
17
+ attribute :gender
18
+ attribute :birth_month
19
+ attribute :birth_day
20
+ attribute :transaction_buy_count
21
+ attribute :transaction_sold_count
22
+
23
+ def self.get_user(user_id, options = {})
24
+ make_request(:get, "/v3/application/users/#{user_id}", options)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Betsy
4
+ class UserAddress
5
+ include Betsy::Model
6
+
7
+ attribute :user_address_id
8
+ attribute :user_id
9
+ attribute :name
10
+ attribute :first_line
11
+ attribute :second_line
12
+ attribute :city
13
+ attribute :state
14
+ attribute :zip
15
+ attribute :iso_country_code
16
+ attribute :country_name
17
+ attribute :is_default_shipping_address
18
+
19
+ # STILL IN DEVELOPMENT AS OF 9/16/2021
20
+ def self.get_user_address
21
+ end
22
+
23
+ def self.get_user_addresses(options = {})
24
+ make_request(:get, "/v3/application/user/addresses", options)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Betsy
4
+ VERSION = "0.2.0"
5
+ end
data/lib/betsy.rb ADDED
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
4
+ require "faraday"
5
+
6
+ require_relative "betsy/version"
7
+ require_relative "betsy/model"
8
+ require_relative "betsy/shop"
9
+ require_relative "betsy/seller_taxonomy"
10
+ require_relative "betsy/shop_listing"
11
+ require_relative "betsy/shop_listing_file"
12
+ require_relative "betsy/shop_listing_image"
13
+ require_relative "betsy/shop_listing_inventory"
14
+ require_relative "betsy/shop_listing_offering"
15
+ require_relative "betsy/shop_listing_product"
16
+ require_relative "betsy/shop_listing_translation"
17
+ require_relative "betsy/shop_listing_variation_image"
18
+ require_relative "betsy/other"
19
+ require_relative "betsy/ledger_entry"
20
+ require_relative "betsy/payment"
21
+ require_relative "betsy/shop_receipt"
22
+ require_relative "betsy/shop_receipt_transaction"
23
+ require_relative "betsy/review"
24
+ require_relative "betsy/shop_shipping_profile"
25
+ require_relative "betsy/shop_production_partner"
26
+ require_relative "betsy/shop_section"
27
+ require_relative "betsy/user"
28
+ require_relative "betsy/user_address"
29
+ require_relative "betsy/error"
30
+
31
+ module Betsy
32
+ # class Error < StandardError; end
33
+
34
+ mattr_accessor :api_key
35
+ mattr_accessor :redirect_uri_base
36
+
37
+ ALL_SCOPES = ["address_r",
38
+ "address_w",
39
+ "billing_r",
40
+ "cart_r",
41
+ "cart_w",
42
+ "email_r",
43
+ "favorites_r",
44
+ "favorites_w",
45
+ "feedback_r",
46
+ "listings_d",
47
+ "listings_r",
48
+ "listings_w",
49
+ "profile_r",
50
+ "profile_w",
51
+ "recommend_r",
52
+ "recommend_w",
53
+ "shops_r",
54
+ "shops_w",
55
+ "transactions_r",
56
+ "transactions_w"]
57
+
58
+ CODE_CHALLENGE_CHARACTERS = ("A".."Z").to_a + ("a".."z").to_a + ("0".."9").to_a + [".", "_", "~", "-"]
59
+
60
+ def self.authorization_url(scope: ALL_SCOPES)
61
+ if api_key.nil? && redirect_uri_base.nil?
62
+ raise "Betsy.api_key and Betsy.redirect_uri_base must be set"
63
+ elsif api_key.nil?
64
+ raise "Betsy.api_key must be set"
65
+ elsif redirect_uri_base.nil?
66
+ raise "Betsy.redirect_uri_base must be set"
67
+ end
68
+
69
+ redirect_uri = "#{redirect_uri_base}/etsy_response_listener"
70
+ scope = scope.join("%20")
71
+ state = generate_state
72
+ code_verifier = generate_code_verifier
73
+ code_challenge = Digest::SHA256.base64digest(code_verifier).tr("+/", "-_").tr("=", "")
74
+
75
+ EtsyAccount.create(state: state, code_verifier: code_verifier)
76
+
77
+ "https://www.etsy.com/oauth/connect" \
78
+ "?response_type=code" \
79
+ "&client_id=#{api_key}" \
80
+ "&redirect_uri=#{redirect_uri}" \
81
+ "&scope=#{scope}" \
82
+ "&state=#{state}" \
83
+ "&code_challenge=#{code_challenge}" \
84
+ "&code_challenge_method=S256"
85
+ end
86
+
87
+ def self.request_access_token(params)
88
+ etsy_account = EtsyAccount.find_by(state: params[:state])
89
+ if etsy_account.present?
90
+ options = {
91
+ grant_type: "authorization_code",
92
+ client_id: api_key,
93
+ redirect_uri: "#{redirect_uri_base}/etsy_response_listener",
94
+ code: params[:code],
95
+ code_verifier: etsy_account.code_verifier
96
+ }
97
+ response = JSON.parse(Faraday.post("https://api.etsy.com/v3/public/oauth/token", options).body)
98
+ etsy_account.access_token = response["access_token"]
99
+ etsy_account.refresh_token = response["refresh_token"]
100
+ etsy_account.expires_in = response["expires_in"]
101
+ etsy_account.last_token_refresh = DateTime.now
102
+ etsy_account.save
103
+ else
104
+ raise "The state provided to /etsy_response_listener was an invalid state, this could be a sign of a CSRF attack"
105
+ end
106
+ end
107
+
108
+ class << self
109
+ private
110
+
111
+ def generate_state
112
+ (25...50).map { ("a".."z").to_a[rand(26)] }.join
113
+ end
114
+
115
+ def generate_code_verifier
116
+ (43...128).map { CODE_CHALLENGE_CHARACTERS[rand(CODE_CHALLENGE_CHARACTERS.count)] }.join
117
+ end
118
+ end
119
+ end
120
+
121
+ require_relative "betsy/engine" if defined?(Rails)
@@ -0,0 +1,35 @@
1
+ require "rails/generators"
2
+ require "rails/generators/migration"
3
+
4
+ module Betsy
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+
9
+ desc "This creates all the initial files needed for the Betsy gem"
10
+
11
+ source_root File.expand_path("../templates", __FILE__)
12
+
13
+ def copy_betsy_model
14
+ template "etsy_account.rb", "app/models/etsy_account.rb"
15
+ end
16
+
17
+ def copy_betsy_migration
18
+ migration_template "create_etsy_accounts.rb", "db/migrate/create_etsy_accounts.rb", migration_version: migration_version
19
+ end
20
+
21
+ def copy_betsy_initalizer
22
+ template "betsy.rb", "config/initializers/betsy.rb"
23
+ end
24
+
25
+ def migration_version
26
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
27
+ end
28
+
29
+ def self.next_migration_number(path)
30
+ next_migration_number = current_migration_number(path) + 1
31
+ ActiveRecord::Migration.next_migration_number(next_migration_number)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,9 @@
1
+ # Etsy API Key (keystring), this is the API key that you will use to access Etsy
2
+ Betsy.api_key = "XXXXXXX"
3
+
4
+ # Betsy this is the base URL for your application.
5
+ # When in production it will be something like "http://www.someurl.com".
6
+ # When in development the best URL to use is "http://www.lvh.me:3000"
7
+ # since Etsy does not consider "localhost:3000" be a valid redirect URL.
8
+ # Notice: Do your url should not include "/etsy_response_listener".
9
+ Betsy.redirect_uri_base = "http://www.lvh.me:3000"
@@ -0,0 +1,14 @@
1
+ class CreateEtsyAccounts < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :etsy_accounts do |t|
4
+ t.string :access_token
5
+ t.string :refresh_token
6
+ t.integer :expires_in
7
+ t.string :state
8
+ t.string :code_verifier
9
+ t.datetime :last_token_refresh
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ class EtsyAccount < ApplicationRecord
2
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: betsy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Jace Bayless
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-09-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: standard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.7
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '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: 3.13.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.13.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: faraday
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.5.1
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.5.1
125
+ description: This gem allows users to simply interact with the Etsy V3 API.
126
+ email:
127
+ - jacebayless@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".travis.yml"
135
+ - CHANGELOG.md
136
+ - CODE_OF_CONDUCT.md
137
+ - Gemfile
138
+ - Gemfile.lock
139
+ - LICENSE.txt
140
+ - README.md
141
+ - Rakefile
142
+ - app/controllers/betsy/response_listener_controller.rb
143
+ - app/views/betsy/response_listener/etsy_response_listener.html.erb
144
+ - betsy-0.1.0.gem
145
+ - betsy.gemspec
146
+ - bin/console
147
+ - bin/setup
148
+ - config/routes.rb
149
+ - lib/betsy.rb
150
+ - lib/betsy/engine.rb
151
+ - lib/betsy/error.rb
152
+ - lib/betsy/ledger_entry.rb
153
+ - lib/betsy/model.rb
154
+ - lib/betsy/other.rb
155
+ - lib/betsy/payment.rb
156
+ - lib/betsy/review.rb
157
+ - lib/betsy/seller_taxonomy.rb
158
+ - lib/betsy/shop.rb
159
+ - lib/betsy/shop_listing.rb
160
+ - lib/betsy/shop_listing_file.rb
161
+ - lib/betsy/shop_listing_image.rb
162
+ - lib/betsy/shop_listing_inventory.rb
163
+ - lib/betsy/shop_listing_offering.rb
164
+ - lib/betsy/shop_listing_product.rb
165
+ - lib/betsy/shop_listing_translation.rb
166
+ - lib/betsy/shop_listing_variation_image.rb
167
+ - lib/betsy/shop_production_partner.rb
168
+ - lib/betsy/shop_receipt.rb
169
+ - lib/betsy/shop_receipt_transaction.rb
170
+ - lib/betsy/shop_section.rb
171
+ - lib/betsy/shop_shipping_profile.rb
172
+ - lib/betsy/user.rb
173
+ - lib/betsy/user_address.rb
174
+ - lib/betsy/version.rb
175
+ - lib/generators/betsy/install_generator.rb
176
+ - lib/generators/betsy/templates/betsy.rb
177
+ - lib/generators/betsy/templates/create_etsy_accounts.rb
178
+ - lib/generators/betsy/templates/etsy_account.rb
179
+ homepage: https://github.com/JaceBayless/betsy
180
+ licenses:
181
+ - MIT
182
+ metadata:
183
+ allowed_push_host: https://rubygems.org
184
+ homepage_uri: https://github.com/JaceBayless/betsy
185
+ source_code_uri: https://github.com/JaceBayless/betsy
186
+ changelog_uri: https://github.com/JaceBayless/betsy/blob/main/CHANGELOG.md
187
+ post_install_message:
188
+ rdoc_options: []
189
+ require_paths:
190
+ - lib
191
+ required_ruby_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 2.4.0
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ requirements: []
202
+ rubygems_version: 3.2.17
203
+ signing_key:
204
+ specification_version: 4
205
+ summary: A gem for the Etsy API V3
206
+ test_files: []