spree_granify 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +13 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +108 -0
- data/Rakefile +15 -0
- data/app/models/order_decorator.rb +35 -0
- data/bin/console +14 -0
- data/bin/rails.rb +12 -0
- data/bin/setup +7 -0
- data/lib/spree_granify.rb +7 -0
- data/lib/spree_granify/engine.rb +22 -0
- data/lib/spree_granify/version.rb +3 -0
- data/lib/spree_granify/view_helpers.rb +20 -0
- data/script/rails +7 -0
- data/spec/helpers/view_helpers_spec.rb +31 -0
- data/spec/models/oreder_spec.rb +30 -0
- data/spec/spec_helper.rb +64 -0
- data/spree_granify.gemspec +38 -0
- data/vendor/assets/javascripts/granify_snippet_initializer.js +1 -0
- metadata +241 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1b2054c412a139fdb863b2449ff36848de24fc85
|
4
|
+
data.tar.gz: a2823489edb569bea05290b089ecdc3ca24cf877
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c3ab564ca1933738c5e29b28d787386f80bf05721d8c42ceda5b278c4681f2568a383bf3b0d508ae466678bf903e1d3cd40415d277def0bfdd1ef928976031f2
|
7
|
+
data.tar.gz: 6da08396186871d640e7b195606dfb875b58311e91367c51fa6177ffcf725e0fbec380d95ef5ffb6294d4e14d8a4f42fb59dbe7a2476ba9aa0cfced17ab7810b
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 JetRuby Agency
|
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.md
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
# SpreeGranify
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/spree_granify`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'spree_granify'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install spree_granify
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
# Snippet initialization
|
24
|
+
|
25
|
+
Insert ```<%= initial_granify_script('vendor/assets/javascripts/granify_snippet_initializer.js', site_id) %>``` into the <head> section of your site, It must appear on every page.
|
26
|
+
Paste instead site_id uniq id of your site which you get from Granfiy after registration. Also you can change path to file with snippet code (by default it stored in ```'vendor/assets/javascripts/granify_snippet_initializer.js' ```)
|
27
|
+
|
28
|
+
# Track Page Views
|
29
|
+
|
30
|
+
Use ```<%= track_page_views(page) %>``` to tell Granify about the page the shopper is currently on. Add helper to <body> section of your views on every page.
|
31
|
+
The page parameter is a String that indicates the type of page the shopper is currently on. Allowed values are:
|
32
|
+
|
33
|
+
Accepted Values | Description
|
34
|
+
---- | ----------------------
|
35
|
+
"home" | Website homepage.
|
36
|
+
"product" | Product detail pages.
|
37
|
+
"collection" | Pages which display a collection, catalog or list of products.
|
38
|
+
"cart" | The page that displays current cart contents.
|
39
|
+
"checkout" | A page in the checkout process.
|
40
|
+
"receipt" | Page shown after completing an order.
|
41
|
+
"search" | Search results pages, ex: "Results for iPhone case".
|
42
|
+
"blog" | Any pages/posts relating to your blog.
|
43
|
+
"other" | Any other pages (FAQs, About Us, etc).
|
44
|
+
|
45
|
+
# Track Cart Details
|
46
|
+
|
47
|
+
Use ```<%= track_cart_details(order) %>``` to tell Granify what items the shopper currently has in their cart (instance of Order class). This code should appear on your cart page or every time the cart changes.
|
48
|
+
The items parameter is an Array that represents the contents of the cart. Each item in the array must have the following attributes:
|
49
|
+
|
50
|
+
Variable name | Data Type | Description
|
51
|
+
------------- | ------------- | -------------
|
52
|
+
id | String | Product ID or SKU
|
53
|
+
quantity | Integer | Quantity of this product in the cart
|
54
|
+
price | Float | Unit price of the product
|
55
|
+
title | String | Name or title of the product
|
56
|
+
|
57
|
+
Do you have an AJAX cart system?
|
58
|
+
|
59
|
+
You’ll need to call Granify.trackCart(cartObj) every time the cart contents changes. This includes adding items to the cart, removing items, or changing quantities. Our recommended approach is to do this inside an event handler that’s called whenever your cart changes.
|
60
|
+
|
61
|
+
Example
|
62
|
+
|
63
|
+
```
|
64
|
+
Granify.trackCart({
|
65
|
+
items: [
|
66
|
+
{
|
67
|
+
id: "1",
|
68
|
+
quantity: 1,
|
69
|
+
price: 100.00,
|
70
|
+
title: "My Product Title"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
id: "2",
|
74
|
+
quantity: 1,
|
75
|
+
price: 50.00,
|
76
|
+
title: "Another Product Title"
|
77
|
+
}]
|
78
|
+
});
|
79
|
+
|
80
|
+
```
|
81
|
+
# Track Order Details
|
82
|
+
|
83
|
+
Use ```<%= track_complete_order(complete_order) %>``` to notify Granify about completed purchases. Place this code on the page displayed after the order has been finalized & paid (ex: the receipt page).
|
84
|
+
Depending on the available order information you may choose to send only the required parameters or additional data.
|
85
|
+
|
86
|
+
Variable name | Data Type | Description
|
87
|
+
------------- | ------------- | -------------
|
88
|
+
currency | String | Currency of the price values
|
89
|
+
subtotal_price | Float | Total value of the items in the order after discounts but before shipping or taxes.
|
90
|
+
order_number | String | Your unique identifier for this order
|
91
|
+
total_line_items_price | Float | (Recommended) Total value of all items in the cart before any discounts, taxes and shipping
|
92
|
+
total_tax | Float | (Recommended) Total value of any taxes applied to this order
|
93
|
+
total_shipping | Float | (Recommended) Total value of any shipping taxes applied to this order
|
94
|
+
total_price | Float | (Recommended) Total price after discounts including shipping and possibly taxes
|
95
|
+
|
96
|
+
##Testing
|
97
|
+
|
98
|
+
Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.
|
99
|
+
|
100
|
+
```shell
|
101
|
+
bundle
|
102
|
+
bundle exec rake test_app
|
103
|
+
bundle exec rspec spec
|
104
|
+
```
|
105
|
+
|
106
|
+
## License
|
107
|
+
|
108
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'spree/testing_support/extension_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
8
|
+
|
9
|
+
task :default => :spec
|
10
|
+
|
11
|
+
desc 'Generates a dummy app for testing'
|
12
|
+
task :test_app do
|
13
|
+
ENV['LIB_NAME'] = 'spree_granify'
|
14
|
+
Rake::Task['extension:test_app'].invoke
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Spree::Order.class_eval do
|
2
|
+
def serialize_cart_to_granify_format
|
3
|
+
return [] if line_items.empty?
|
4
|
+
|
5
|
+
order_items_array = []
|
6
|
+
|
7
|
+
line_items.each do |item|
|
8
|
+
|
9
|
+
if item.variant.present? && item.variant.option_values[0].present?
|
10
|
+
title = "#{item.name} #{item.variant.option_values[0].presentation}"
|
11
|
+
else
|
12
|
+
title = item.name
|
13
|
+
end
|
14
|
+
|
15
|
+
order_items_array << { id: item.sku,
|
16
|
+
quantity: item.quantity,
|
17
|
+
price: item.price.to_f,
|
18
|
+
title: title }
|
19
|
+
end
|
20
|
+
|
21
|
+
order_items_array.to_json.html_safe
|
22
|
+
end
|
23
|
+
|
24
|
+
def serialize_order_to_granify_format
|
25
|
+
{
|
26
|
+
'currency' => self.currency,
|
27
|
+
'subtotal_price' => self.item_total.to_f,
|
28
|
+
'order_number' => self.number,
|
29
|
+
'total_line_items_price' => self.item_total.to_f,
|
30
|
+
'total_tax' => (self.included_tax_total.to_f + self.additional_tax_total.to_f),
|
31
|
+
'total_shipping' => self.ship_total.to_f,
|
32
|
+
'total_price' => self.total.to_f
|
33
|
+
}.to_json.html_safe
|
34
|
+
end
|
35
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'spree_granify'
|
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/rails.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
|
3
|
+
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/spree_granify/engine', __FILE__)
|
6
|
+
|
7
|
+
# Set up gems listed in the Gemfile.
|
8
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
9
|
+
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
10
|
+
|
11
|
+
require 'rails/all'
|
12
|
+
require 'rails/engine/commands'
|
data/bin/setup
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module SpreeGranify
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
require 'spree/core'
|
4
|
+
isolate_namespace Spree
|
5
|
+
engine_name 'spree_granify'
|
6
|
+
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
8
|
+
|
9
|
+
# use rspec for tests
|
10
|
+
config.generators do |g|
|
11
|
+
g.test_framework :rspec
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.activate
|
15
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
16
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
config.to_prepare &method(:activate).to_proc
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module SpreeGranify
|
2
|
+
module ViewHelpers
|
3
|
+
def initial_granify_script(file, site_id)
|
4
|
+
data = ("var GRANIFY_SITE_ID = #{site_id};" + File.read(Rails.root.join(file)))
|
5
|
+
javascript_tag(data).html_safe
|
6
|
+
end
|
7
|
+
|
8
|
+
def track_page_views(page)
|
9
|
+
javascript_tag("Granify.trackPageView({page_type: '#{page}'});").html_safe
|
10
|
+
end
|
11
|
+
|
12
|
+
def track_cart_details(cart_order)
|
13
|
+
javascript_tag("Granify.trackCart({items: #{cart_order.serialize_cart_to_granify_format}});").html_safe
|
14
|
+
end
|
15
|
+
|
16
|
+
def track_complete_order(complete_order)
|
17
|
+
javascript_tag("Granify.trackOrder(#{complete_order.serialize_order_to_granify_format});").html_safe
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/script/rails
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
2
|
+
|
3
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
4
|
+
ENGINE_PATH = File.expand_path('../../lib/spree_abandoned_cart/engine', __FILE__)
|
5
|
+
|
6
|
+
require 'rails/all'
|
7
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'spree_granify/view_helpers'
|
3
|
+
|
4
|
+
describe SpreeGranify::ViewHelpers, type: :helper do
|
5
|
+
describe 'Granify snippet main actions' do
|
6
|
+
let(:page) { 'home' }
|
7
|
+
let(:site_id) { 1234 }
|
8
|
+
let(:path_to_snippet) { 'vendor/assets/javascripts/granify_snippet_initializer.js' }
|
9
|
+
let(:initial_script) { javascript_tag("var GRANIFY_SITE_ID = #{site_id};").html_safe }
|
10
|
+
let(:order) { create :order_with_line_items }
|
11
|
+
let(:wrapped_order) { order.serialize_cart_to_granify_format }
|
12
|
+
let(:wrapped_complete_order) { order.serialize_order_to_granify_format }
|
13
|
+
|
14
|
+
it 'initialization of granify snippet' do
|
15
|
+
allow(helper).to receive(:initial_granify_script).with(path_to_snippet, site_id).and_return(initial_script)
|
16
|
+
expect(helper.initial_granify_script(path_to_snippet, site_id)).to eq initial_script
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should track page views' do
|
20
|
+
expect(helper.track_page_views(page)).to eq javascript_tag("Granify.trackPageView({page_type: '#{page}'});").html_safe
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should track cart details' do
|
24
|
+
expect(helper.track_cart_details(order)).to eq javascript_tag("Granify.trackCart({items: #{wrapped_order}});").html_safe
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should track complete order' do
|
28
|
+
expect(helper.track_complete_order(order)).to eq javascript_tag("Granify.trackOrder(#{wrapped_complete_order});").html_safe
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Spree::Order, type: :model do
|
4
|
+
describe 'Instance methods' do
|
5
|
+
let(:order) { create :order_with_line_items }
|
6
|
+
let(:line_item) { order.line_items.first}
|
7
|
+
let(:cart_wrapped) {[{ id: line_item.sku,
|
8
|
+
quantity: line_item.quantity,
|
9
|
+
price: line_item.price.to_f,
|
10
|
+
title: line_item.name }].to_json.html_safe}
|
11
|
+
let(:complete_order_wrapped) {
|
12
|
+
{
|
13
|
+
'currency' => order.currency,
|
14
|
+
'subtotal_price' => order.item_total.to_f,
|
15
|
+
'order_number' => order.number,
|
16
|
+
'total_line_items_price' => order.item_total.to_f,
|
17
|
+
'total_tax' => (order.included_tax_total.to_f + order.additional_tax_total.to_f),
|
18
|
+
'total_shipping' => order.ship_total.to_f,
|
19
|
+
'total_price' => order.total.to_f
|
20
|
+
}.to_json.html_safe}
|
21
|
+
|
22
|
+
it 'should wrap cart to granify format' do
|
23
|
+
expect(order.serialize_cart_to_granify_format).to eq cart_wrapped
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should wrap complete order to granify format' do
|
27
|
+
expect(order.serialize_order_to_granify_format).to eq complete_order_wrapped
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
3
|
+
|
4
|
+
require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
5
|
+
|
6
|
+
require 'rspec/rails'
|
7
|
+
require 'database_cleaner'
|
8
|
+
require 'ffaker'
|
9
|
+
|
10
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
11
|
+
# in spec/support/ and its subdirectories.
|
12
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
|
13
|
+
|
14
|
+
# Requires factories defined in spree_core
|
15
|
+
require 'spree/testing_support/factories'
|
16
|
+
require 'spree/testing_support/controller_requests'
|
17
|
+
require 'spree/testing_support/authorization_helpers'
|
18
|
+
require 'spree/testing_support/url_helpers'
|
19
|
+
|
20
|
+
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.include FactoryGirl::Syntax::Methods
|
23
|
+
|
24
|
+
# == URL Helpers
|
25
|
+
#
|
26
|
+
# Allows access to Spree's routes in specs:
|
27
|
+
#
|
28
|
+
# visit spree.admin_path
|
29
|
+
# current_path.should eql(spree.products_path)
|
30
|
+
config.include Spree::TestingSupport::UrlHelpers
|
31
|
+
|
32
|
+
config.include Rails.application.routes.url_helpers
|
33
|
+
|
34
|
+
# == Mock Framework
|
35
|
+
#
|
36
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
37
|
+
#
|
38
|
+
# config.mock_with :mocha
|
39
|
+
# config.mock_with :flexmock
|
40
|
+
# config.mock_with :rr
|
41
|
+
config.mock_with :rspec
|
42
|
+
config.color = true
|
43
|
+
|
44
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
45
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
46
|
+
|
47
|
+
# Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
|
48
|
+
# to cleanup after each test instead. Without transactional fixtures set to false the records created
|
49
|
+
# to setup a test will be unavailable to the browser, which runs under a seperate server instance.
|
50
|
+
config.use_transactional_fixtures = false
|
51
|
+
|
52
|
+
# Ensure Suite is set to use transactions for speed.
|
53
|
+
config.before :suite do
|
54
|
+
DatabaseCleaner.strategy = :transaction
|
55
|
+
DatabaseCleaner.clean_with :truncation
|
56
|
+
end
|
57
|
+
|
58
|
+
# After each spec clean the database.
|
59
|
+
config.after :each do
|
60
|
+
DatabaseCleaner.clean
|
61
|
+
end
|
62
|
+
|
63
|
+
config.fail_fast = ENV['FAIL_FAST'] || false
|
64
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'spree_granify/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'spree_granify'
|
8
|
+
spec.platform = Gem::Platform::RUBY
|
9
|
+
spec.version = SpreeGranify::VERSION
|
10
|
+
spec.authors = ['anatolii-volodko']
|
11
|
+
spec.summary = 'Integration your Spree Commerce app with Granify'
|
12
|
+
spec.description = 'Integration your e-commerce app with Granify (Automatic Revenue Optimization Platform for Ecommerce). Can be used not only with Spree Commerce based apps'
|
13
|
+
spec.email = 'info@jetruby.com'
|
14
|
+
spec.homepage = 'http://jetruby.com/'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
spec.required_ruby_version = '>= 1.9.3'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0")
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
+
spec.require_paths = ['lib', 'vendor']
|
22
|
+
|
23
|
+
spec.add_dependency 'spree_core', '~> 3.1.0'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'factory_girl', '~> 4.2'
|
28
|
+
spec.add_development_dependency 'database_cleaner'
|
29
|
+
spec.add_development_dependency 'sqlite3'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'capybara', '~> 2.1'
|
32
|
+
spec.add_development_dependency 'coffee-rails'
|
33
|
+
spec.add_development_dependency 'ffaker', '~> 2.2'
|
34
|
+
spec.add_development_dependency 'rspec-rails', '~> 3.3'
|
35
|
+
spec.add_development_dependency 'selenium-webdriver'
|
36
|
+
spec.add_development_dependency 'sass-rails'
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(e,t,n){var r,i,s,o,u;u=false;try{o=new RegExp("(?:^|\\W)_gr_test_url=([^;]*)");s=document.cookie.match(o);if(s){if(s[1]==="1")u=true}else{r=Math.random();if(r>.95)u=true;i=new Date(+(new Date)+1e3*60*60*24*2);document.cookie="_gr_test_url="+ +u+";expires="+i.toGMTString()+";path=/"}}catch(a){}if(u)e.replace("javascript.js","javascript.next.js");try{o=new RegExp("(?:^|\\W)_gr_ep=([^;]*)");s=document.cookie.match(o);if(!s){document.cookie="_gr_ep_sent=;expires=Thu, 01-Jan-1970 00:00:01 GMT;path=/";document.cookie="_gr_er_sent=;expires=Thu, 01-Jan-1970 00:00:01 GMT;path=/";if(!window.location.origin){if(window.location.port)port=":"+window.location.port;else port="";window.location.origin=window.location.protocol+"//"+window.location.hostname+port}path=window.location.toString().replace(window.location.origin,"");referrer=document.referrer;i=new Date(+(new Date)+1e3*60*30);document.cookie="_gr_ep="+path+";expires="+i.toGMTString()+";path=/";document.cookie="_gr_er="+referrer+";expires="+i.toGMTString()+";path=/"}}catch(a){}a=new Date;a=""+a.getUTCFullYear()+(a.getUTCMonth()+1)+a.getUTCDate();e=e+"?id="+t+"&v="+a;window.Granify=n;n._stack=[];n.init=function(e,t,r){function i(e,t){e[t]=function(){Granify._stack.push([t].concat(Array.prototype.slice.call(arguments,0)))}}var s=n;h=["on","identify","addTag","trackPageView","trackCart","trackOrder"];for(a=0;a<h.length;a++)i(s,h[a])};n.init();var f,l,c,p=document.createElement("iframe");p.src="javascript:false";p.title="";p.role="presentation";(p.frameElement||p).style.cssText="width: 0 !important; height: 0 !important; border: 0 !important; overflow: hidden !important; position: absolute !important; top: -1000px !important; left: -1000px !important;";c=document.getElementsByTagName("script");c=c[c.length-1];c.parentNode.insertBefore(p,c);try{l=p.contentWindow.document}catch(a){f=document.domain;p.src="javascript:var d=document.open();d.domain='"+f+"';void(0);";l=p.contentWindow.document}l.open()._l=function(){var t=this.createElement("script");if(f)this.domain=f;t.id="js-iframe-async";t.src=e;this.body.appendChild(t)};l.write('<body onload="document._l();">');l.close()})("//cdn.granify.com/assets/javascript.js",GRANIFY_SITE_ID,[])
|
metadata
ADDED
@@ -0,0 +1,241 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spree_granify
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- anatolii-volodko
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: spree_core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: factory_girl
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: database_cleaner
|
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: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: capybara
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: coffee-rails
|
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
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ffaker
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.2'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.2'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rspec-rails
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.3'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.3'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: selenium-webdriver
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: sass-rails
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
description: Integration your e-commerce app with Granify (Automatic Revenue Optimization
|
182
|
+
Platform for Ecommerce). Can be used not only with Spree Commerce based apps
|
183
|
+
email: info@jetruby.com
|
184
|
+
executables:
|
185
|
+
- console
|
186
|
+
- rails.rb
|
187
|
+
- setup
|
188
|
+
extensions: []
|
189
|
+
extra_rdoc_files: []
|
190
|
+
files:
|
191
|
+
- ".gitignore"
|
192
|
+
- ".rspec"
|
193
|
+
- ".travis.yml"
|
194
|
+
- Gemfile
|
195
|
+
- LICENSE.txt
|
196
|
+
- README.md
|
197
|
+
- Rakefile
|
198
|
+
- app/models/order_decorator.rb
|
199
|
+
- bin/console
|
200
|
+
- bin/rails.rb
|
201
|
+
- bin/setup
|
202
|
+
- lib/spree_granify.rb
|
203
|
+
- lib/spree_granify/engine.rb
|
204
|
+
- lib/spree_granify/version.rb
|
205
|
+
- lib/spree_granify/view_helpers.rb
|
206
|
+
- script/rails
|
207
|
+
- spec/helpers/view_helpers_spec.rb
|
208
|
+
- spec/models/oreder_spec.rb
|
209
|
+
- spec/spec_helper.rb
|
210
|
+
- spree_granify.gemspec
|
211
|
+
- vendor/assets/javascripts/granify_snippet_initializer.js
|
212
|
+
homepage: http://jetruby.com/
|
213
|
+
licenses:
|
214
|
+
- MIT
|
215
|
+
metadata: {}
|
216
|
+
post_install_message:
|
217
|
+
rdoc_options: []
|
218
|
+
require_paths:
|
219
|
+
- lib
|
220
|
+
- vendor
|
221
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
222
|
+
requirements:
|
223
|
+
- - ">="
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
version: 1.9.3
|
226
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
|
+
requirements:
|
228
|
+
- - ">="
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: '0'
|
231
|
+
requirements: []
|
232
|
+
rubyforge_project:
|
233
|
+
rubygems_version: 2.4.5
|
234
|
+
signing_key:
|
235
|
+
specification_version: 4
|
236
|
+
summary: Integration your Spree Commerce app with Granify
|
237
|
+
test_files:
|
238
|
+
- spec/helpers/view_helpers_spec.rb
|
239
|
+
- spec/models/oreder_spec.rb
|
240
|
+
- spec/spec_helper.rb
|
241
|
+
has_rdoc:
|