<commit_before>SpreeStoreCredits
=================

A Spree store credit implementation that applies store credit as a payment method.

Takes into account purchasing through the API, with the default to use all available store credit.

Store credit can be granted in admin, and is frozen after first usage. Store credit behaves like a credit card in that once an amount is authorized, it cannot be used elsewhere.

Store credit can be stored in multiple buckets (e.g. expiring and non-expiring) because those are taxed differently and implementors might want to prioritize use / refund different types.

Credit Types
------------

Out of the box, there are Expiring and Non-expiring store credits, with the Expiring type having top priority of being used in a purchase.

To add new ones, add a migration with a priority value set, and on purchase it will take the credits from lowest numerical priority to highest. You will also need to overwrite `Spree::StoreCredit#associate_credit_type`

Configure the gem with non-expiring categorizations in an initializer:

```ruby
Spree::StoreCredits::Configuration.set_configs(non_expiring_credit_types: ['Example'])
```


Installation
------------

Add spree_store_credits to your Gemfile:

```ruby
gem 'spree_store_credits'
```

Bundle your dependencies and run the installation generator:

```shell
bundle
bundle exec rails g spree_store_credits:install
```

Testing
-------

First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`.

```shell<commit_msg>Need to use the git repo not the old gem.<commit_after>SpreeStoreCredits
=================

A Spree store credit implementation that applies store credit as a payment method.

Takes into account purchasing through the API, with the default to use all available store credit.

Store credit can be granted in admin, and is frozen after first usage. Store credit behaves like a credit card in that once an amount is authorized, it cannot be used elsewhere.

Store credit can be stored in multiple buckets (e.g. expiring and non-expiring) because those are taxed differently and implementors might want to prioritize use / refund different types.

Credit Types
------------

Out of the box, there are Expiring and Non-expiring store credits, with the Expiring type having top priority of being used in a purchase.

To add new ones, add a migration with a priority value set, and on purchase it will take the credits from lowest numerical priority to highest. You will also need to overwrite `Spree::StoreCredit#associate_credit_type`

Configure the gem with non-expiring categorizations in an initializer:

```ruby
Spree::StoreCredits::Configuration.set_configs(non_expiring_credit_types: ['Example'])
```


Installation
------------

Add spree_store_credits to your Gemfile:

```ruby
gem 'spree_store_credits', github: 'spree-contrib/spree_store_credit_payment_method'
```

Bundle your dependencies and run the installation generator:

```shell
bundle
bundle exec rails g spree_store_credits:install
```

Testing
-------

First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`.

```shell
{'fraction_non_alphanumeric': 0.07806470762837638, 'fraction_numerical': 0.0, 'mean_word_length': 4.588723051409619, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6656946', 'n_tokens_mistral': 881, 'n_tokens_neox': 836, 'n_words': 454}