shopifydev 0.0.1

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 (42) hide show
  1. data/.gitignore +17 -0
  2. data/.pryrc +3 -0
  3. data/.root.shopifydev.yaml.sample +21 -0
  4. data/.ruby-version +1 -0
  5. data/.shopifydev.yaml.sample +7 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/NEXTSTEPS.md +33 -0
  9. data/README.md +78 -0
  10. data/Rakefile +1 -0
  11. data/bin/shopify_console +15 -0
  12. data/bin/shopifydev +100 -0
  13. data/lib/rails/generators/shopifydev/shops_generator.rb +11 -0
  14. data/lib/rails/generators/shopifydev/templates/shops.rake +5 -0
  15. data/lib/rails/tasks/shops.rake +7 -0
  16. data/lib/shopifydev/asset.rb +58 -0
  17. data/lib/shopifydev/commands.rb +83 -0
  18. data/lib/shopifydev/config.rb +9 -0
  19. data/lib/shopifydev/generators/shop.rb +29 -0
  20. data/lib/shopifydev/generators/templates/Gemfile +10 -0
  21. data/lib/shopifydev/generators/templates/gitignore +1 -0
  22. data/lib/shopifydev/generators/templates/rvmrc +1 -0
  23. data/lib/shopifydev/generators/templates/shopify-tmbundle +21 -0
  24. data/lib/shopifydev/pry/commands.rb +194 -0
  25. data/lib/shopifydev/railtie.rb +11 -0
  26. data/lib/shopifydev/shop.rb +38 -0
  27. data/lib/shopifydev/template.rb +73 -0
  28. data/lib/shopifydev/version.rb +3 -0
  29. data/lib/shopifydev.rb +10 -0
  30. data/shopifydev.gemspec +35 -0
  31. data/spec/shopifydev/config_spec.rb +5 -0
  32. data/spec/shopifydev/generators/shopifydev/shopifydev_generator_spec.rb +5 -0
  33. data/spec/shopifydev/pry/commands_spec.rb +5 -0
  34. data/spec/shopifydev/railtie_spec.rb +5 -0
  35. data/templates/customers/order.liquid +109 -0
  36. data/templates/customers/register.liquid +42 -0
  37. data/templates/page.support.liquid +78 -0
  38. data/templates/page.verbose.liquid +18 -0
  39. data/templates/product.liquid +284 -0
  40. data/templates/search.liquid +63 -0
  41. data/test_driver.rb +31 -0
  42. metadata +275 -0
@@ -0,0 +1,284 @@
1
+ {% include 'breadcrumbs' %}
2
+
3
+ <div id="product" class="content {{ product.handle }}{% if product.images.size == 1 %} one_image{% endif %} clearfix">
4
+
5
+ <div class="wrapper">
6
+ <div id="product-image">
7
+ {% if product.images.size > 1 %}
8
+ <div id="product-image-icons">
9
+ {% for image in product.images %}
10
+ <!-- CC attribution
11
+ magnifying-glass.ico
12
+ http://www.wpzoom.com
13
+ Designed by David Ferreira.
14
+ -->
15
+ <div class="image">
16
+ <a href="{{ image.src | product_img_url: 'original' }}" class="cloud-zoom-gallery" rel="useZoom: 'placeholder', smallImage: '{{ image.src | product_img_url: 'grande' }}', tint: '#ffffff'">
17
+ <img src="{{ image.src | product_img_url: 'small' }}" alt="{{ image.alt | escape }}" />
18
+ </a>
19
+ </div>
20
+ {% endfor %}
21
+ </div><!-- /.thumbs -->
22
+ {% endif %}
23
+ <div id="product-image-large">
24
+ <div class="image">
25
+ <a href="{{ product.featured_image.src | product_img_url: 'original' }}" class="cloud-zoom" rel="position: 'inside', showTitle: 'false'" id="placeholder">
26
+ <img src="{{ product.featured_image.src | product_img_url: 'grande' }}" alt="{{ product.featured_image.alt | escape }}" />
27
+ </a>
28
+ </div>
29
+
30
+ </div> <!-- /.featured -->
31
+ <div id="product-image-zoom">Hover over image to zoom</div>
32
+ </div> <!-- /.images -->
33
+
34
+ <div id="product-content">
35
+ {% if collection %}
36
+ <div class="more-info clearfix">
37
+ {% if collection.previous_product %}
38
+ <div class="fl">
39
+ <a href="{{ collection.previous_product }}" class="previous_product"><span class="upper">Previous</span> <span class="lower">Product</span></a>
40
+ </div>
41
+ {% endif %}
42
+ {% if collection.next_product %}
43
+ <div class="fr">
44
+ <a href="{{ collection.next_product }}" class="next_product"><span class="upper">Next</span> <span class="lower">Product</span></a>
45
+ </div>
46
+ {% endif %}
47
+ </div>
48
+ {% endif %}
49
+
50
+ <div id="product-full-description">
51
+ <div id="product-category">{{ collection.title | split: ' -- ' | last }}</div>
52
+ <h2 class="title">{{ product.title }}</h2>
53
+ {% if product.price_min < product.compare_at_price_min %}
54
+ <div id="product-price">{{ product.price_min | money }}</div>
55
+ <div id="product-price-old"><strike>{{ product.compare_at_price_min | money }}</strike></div>
56
+ {% else %}
57
+ <div id="product-price">{{ product.price_min | money }}</div>
58
+ {% endif %}
59
+
60
+ {% if settings.product_description_position == "top" %}
61
+
62
+ {% include 'shipping-and-return-tabs' %}
63
+
64
+ {% endif %}
65
+
66
+ <form id="add-item-form" action="/cart/add" method="post" class="variants clearfix">
67
+ {% if product.options.size > 1 %}
68
+ <div class="select clearfix">
69
+
70
+ <div id="product-color">
71
+ <div id="variant_details"></div>
72
+ <h4 style="color:#333">Please choose a color:</h4>
73
+ {% include 'swatches' %}
74
+ </div>
75
+
76
+ <div id="product-size" class="product-info">
77
+ <select id="product-select" name='id'>
78
+ {% for variant in product.variants %}
79
+ <option value="{{ variant.id }}">{{ variant.title }} - {{ variant.price | money }}</option>
80
+ {% endfor %}
81
+ </select>
82
+ </div>
83
+ </div>
84
+ {% elsif product.options.size == 1 and product.variants.size > 1 %}
85
+ <div class="select clearfix">
86
+ <label>{{ product.options[0] }}</label>
87
+ <select id="product-select" name='id'>
88
+ {% for variant in product.variants %}
89
+ <option value="{{ variant.id }}">{{ variant.title }} - {{ variant.price | money }}</option>
90
+ {% endfor %}
91
+ </select>
92
+ </div>
93
+ {% else %}
94
+ <input type="hidden" name="id" value="{{ product.variants.first.id }}" />
95
+ {% endif %}
96
+
97
+ <div id="product-quantity">
98
+ <label for="quantity"><h5 style="float:left">Quantity:</h5></label>
99
+ <input min="1" type="number" id="quantity" name="quantity" value="1" />
100
+ </div>
101
+
102
+
103
+ {% if product.available %}
104
+ <div class="purchase clearfix">
105
+ <span><input type="image" src="{{ 'cart.png' | asset_url }}" name="add" id="add-to-cart" value="Add to Cart" class="cart cufon" /></span>
106
+ </div>
107
+ {% else %}
108
+ <div class="purchase clearfix">
109
+ <span><input type="submit" name="add" id="add-to-cart" value="Sold Out" class="cart cufon disabled" disabled="disabled" /></span>
110
+ </div>
111
+ {% endif %}
112
+
113
+ </form>
114
+
115
+ <hr />
116
+
117
+ {% if settings.product_description_position == "bottom" %}
118
+
119
+ {% include 'shipping-and-return-tabs' %}
120
+
121
+ <div id="social-media">
122
+ {% include 'pinterest' %}
123
+ {% include 'like' %}
124
+ {% include 'amazon-wish-list' %}
125
+ </div>
126
+ {% endif %}
127
+
128
+ </div>
129
+ </div>
130
+
131
+ {% comment %} Related Products {% endcomment %}
132
+ {% include 'related-products' %}
133
+
134
+ </div>
135
+
136
+ </div> <!-- /#product -->
137
+
138
+ <script type="text/javascript">
139
+
140
+ // <![CDATA[
141
+ var selectCallback = function(variant, selector) {
142
+
143
+ // #variant_details is in snippets/shipping-and-return-tabs
144
+ var description = jQuery('#variant_details')
145
+
146
+ // if we have product variants with details
147
+ {% if product.metafields.variants.variant_details %}
148
+
149
+ // make an array of the details
150
+ var metafields = {{ product.metafields.variants.variant_details | json }}.split(':')
151
+
152
+ // match the details against the selected variant
153
+ var match = true
154
+ for (i = 0; i < variant.options.length; i++) {
155
+
156
+ if (variant.options[i].toLowerCase().trim() === metafields[i].trim()) {
157
+ // NOP
158
+ } else {
159
+ match = false;
160
+ }
161
+ } // post: if a metafield matched the current variant exactly, match is true
162
+
163
+ // if it was a complete match, then post the last detail
164
+ if (match === true) {
165
+ description.text(metafields.pop().trim())
166
+ description.addClass('active')
167
+ } else {
168
+ description.text('')
169
+ description.removeClass('active')
170
+ }
171
+ {% endif %}
172
+
173
+ if (variant && variant.available == true) {
174
+ // selected a valid variant
175
+ jQuery('#add-to-cart').removeClass('disabled').removeAttr('disabled').val('Add to Cart'); // remove unavailable class from add-to-cart button, and re-enable button
176
+ if(variant.price < variant.compare_at_price){
177
+ jQuery('#price-preview').html('<span class="money">'
178
+ + Shopify.formatMoney(variant.price, "{{ shop.money_format }}")
179
+ + '</span>'
180
+ + ' was <span class="money">'
181
+ + Shopify.formatMoney(variant.compare_at_price, "{{ shop.money_format }}")
182
+ + "</span>");
183
+ } else {
184
+ jQuery('#price-preview').html('<span class="money">' + Shopify.formatMoney(variant.price, "{{ shop.money_format }}") + '</span>');
185
+ }
186
+
187
+ } else {
188
+ // variant doesn't exist
189
+ var message = variant ? "Sold Out" : "Unavailable";
190
+ jQuery('#add-to-cart').addClass('disabled').attr('disabled', 'disabled').val('Sold Out'); // set add-to-cart button to unavailable class and disable button
191
+ jQuery('#product .variants .price').text(message); // update price-field message
192
+ }
193
+ };
194
+
195
+ function remove(s, t) {
196
+ /*
197
+ ** Remove all occurrences of a token in a string
198
+ ** s string to be processed
199
+ ** t token to be removed
200
+ ** returns new string
201
+ */
202
+ i = s.indexOf(t);
203
+ r = "";
204
+ if (i == -1) return s;
205
+ r += s.substring(0,i) + remove(s.substring(i + t.length), t);
206
+ return r;
207
+ }
208
+
209
+ // initialize multi selector for product
210
+ jQuery(function() {
211
+ /* NOTE we are not using recently-viewed, so I am removing the related code
212
+ if(jQuery.cookie("viewed-products") != null){ // if cookie exists...
213
+ var products = jQuery.cookie("viewed-products");
214
+ var productHandles = products.split(" ");
215
+ var matches = 0;
216
+ var limit = 4;
217
+ for(var i = (productHandles.length - 1); i >= 0; i--) {
218
+ if(productHandles[i] != "{{ product.handle }}" && productHandles[i] != "" && (matches < limit)){
219
+ Shopify.getProduct(productHandles[i]);
220
+ matches++;
221
+ }
222
+ }
223
+
224
+ if(products.indexOf("{{ product.handle }}") == -1){ // add current product to list if it isn't already there
225
+ products += " {{ product.handle }}";
226
+ jQuery.cookie("viewed-products", products, {path: "/"});
227
+ } else { // if it is already there, push it to the end of the string
228
+ var newstring = remove(products, '{{ product.handle }}');
229
+ newstring += " {{ product.handle }}";
230
+ jQuery.cookie("viewed-products", newstring.replace(/ /g,' '), {path: "/"});
231
+ }
232
+ } else { // create cookie if it doesn't already exist
233
+ jQuery.cookie("viewed-products", "{{ product.handle }}", {path: "/"});
234
+ } */
235
+
236
+ // create the multi-selector
237
+ {% if product.variants.size > 1 or product.options.size > 1 %}
238
+ new Shopify.OptionSelectors("product-select", { product: {{ product | json }}, onVariantSelected: selectCallback });
239
+
240
+ // wrap the labels for Cufon styling
241
+ var labels = jQuery('#product-size .selector-wrapper label')
242
+ labels.wrapInner('<h4 class="selector-label" />')
243
+
244
+ // add classes to each option for chaining
245
+ {% for variant in product.variants %}
246
+
247
+ var colour = '{{ variant.option1 }}'
248
+ var size = '{{ variant.option2 }}'
249
+
250
+ jQuery('#product-select-option-1'
251
+ + ' option[value="' + size + '"]').addClass(colour)
252
+
253
+ {% endfor %}
254
+
255
+ // choose a default value for each selector in the cluster
256
+ {% assign found_one_in_stock = false %}
257
+ {% for variant in product.variants %}
258
+ {% if variant.available and found_one_in_stock == false %}
259
+
260
+ // for the first variant that is in stock
261
+ {% assign found_one_in_stock = true %}
262
+ {% for option in product.options %}
263
+ jQuery('#product-select-option-' + {{ forloop.index0 }}).val({{ variant.options[forloop.index0] | json }}).trigger('change');
264
+
265
+ {% endfor %}
266
+ {% endif %}
267
+ {% endfor %}
268
+
269
+ {% endif %}
270
+
271
+ $("#product-select-option-1").chained("#product-select-option-0"); /* or $("#series").chainedTo("#mark"); */
272
+
273
+ });
274
+
275
+ /* NOTE we are not using recently-viewed so I am removing the related code
276
+ Shopify.onProduct = function(product) {
277
+ jQuery("#recently-viewed").css('display', 'block');
278
+ jQuery("#recently-viewed .products").append('<div class="product"><div class="image"><a href="' + product.url + '"><img src="' + Shopify.resizeImage(product.featured_image, 'large') + '" alt="' + product.title + '" /></a></div><div class="details clearfix"><a href="' + product.url + '"><span class="title">' + product.title + '</span></a></div></div>');
279
+ jQuery("#recently-viewed .products .product:nth-child(4)").addClass("last");
280
+ jQuery("#content-slide .product .details, #content-table .product .details").css({opacity:0.0});
281
+ }; */
282
+ // ]]>
283
+ </script>
284
+
@@ -0,0 +1,63 @@
1
+ <div id="search" class="clearfix">
2
+ {% if search.performed %}
3
+ <div class="main">
4
+ {% paginate search.results by settings.pagination_limit %}
5
+ <div class="more-info clearfix">
6
+ <div class="fl">
7
+ <span class="upper">Search Results</span>
8
+ <span class="lower">{{ search.results_count }} {{ search.results_count | pluralize: 'Match', 'Matches' }} </span>
9
+ </div>
10
+ <div class="fr">
11
+ <span class="upper">&nbsp;</span>
12
+ <span class="lower">{% include 'pagination' %}</span>
13
+ </div>
14
+ </div>
15
+ {% if search.terms == "" %}
16
+ <p>Your search query was empty.</p>
17
+ {% else %}
18
+ {% if search.results == empty %}
19
+ <div class="empty">
20
+ Your search for "{{search.terms | escape}}" did not yield any results
21
+ </div>
22
+ {% else %}
23
+
24
+ <div class="results">
25
+ {% for item in search.results %}
26
+ <div class="item clearfix">
27
+ <div class="thumbnail">
28
+ <a href="{{ item.url }}">{{ item.featured_image.src | product_img_url: 'thumb' | img_tag: item.featured_image.alt }}</a>
29
+ </div>
30
+ <div class="content">
31
+ <h4>{{ item.title | link_to: item.url }}</h4>
32
+ {{ item.content | strip_html | truncatewords: 40 | highlight: search.terms }}
33
+ </div>
34
+ </div> <!-- /.item -->
35
+ {% endfor %}
36
+ </div> <!-- /.results -->
37
+
38
+ {% endif %}
39
+ {% endif %}
40
+
41
+ <div class="more-info clearfix">
42
+ <div class="fr">
43
+ <span class="upper">&nbsp;</span>
44
+ <span class="lower">{% include 'pagination' %}</span>
45
+ </div>
46
+ </div>
47
+
48
+ {% endpaginate %}
49
+ </div> <!-- /.main -->
50
+ {% include "sidebar" %}
51
+
52
+ {% else %}
53
+
54
+ <div id="not_found">
55
+ <h2>Search our shop</h2>
56
+ <form id="search_form" class="searchform" name="search" action="/search">
57
+ <input type="text" class="replace" name="q" value="Search..." />
58
+ </form>
59
+ </div> <!-- /#not_found -->
60
+
61
+ {% endif %}
62
+ </div> <!-- /#search -->
63
+ {% include 'featured-products' %}
data/test_driver.rb ADDED
@@ -0,0 +1,31 @@
1
+ require_relative "lib/shopifydev.rb"
2
+ require "shopify_api"
3
+
4
+ class TestDriver
5
+ attr_accessor :devshop
6
+
7
+ def initialize
8
+ @devshop = Shopifydev::Shop.new(credentials)
9
+ end
10
+
11
+ def credentials
12
+ unless @credentials
13
+ @credentials = YAML::load(
14
+ File.open(
15
+ File.join(File.dirname(__FILE__), '.shopifydev.yaml')))
16
+ end
17
+
18
+ @credentials
19
+ end
20
+
21
+ end
22
+
23
+ if __FILE__ == $PROGRAM_NAME
24
+ test_shop = TestDriver.new
25
+ test_shop.devshop.template.download
26
+
27
+ # upload a new asset by file name
28
+ test_shop.devshop.asset('assets/example.css').upload
29
+ test_shop.devshop.asset('assets/example.png').upload
30
+ end
31
+
metadata ADDED
@@ -0,0 +1,275 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shopifydev
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Johnston
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: shopify_api
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: ruby-filemagic
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.4.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.4.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: gli
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.5.2
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: 2.5.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: oj
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: dalli
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: shydra
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: pry
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: activesupport
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: term-ansicolor
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
+ - !ruby/object:Gem::Dependency
159
+ name: railties
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: rake
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ description: Tools for using SCM with shopify.
191
+ email:
192
+ - lastobelus@mac.com
193
+ executables:
194
+ - shopify_console
195
+ - shopifydev
196
+ extensions: []
197
+ extra_rdoc_files: []
198
+ files:
199
+ - .gitignore
200
+ - .pryrc
201
+ - .root.shopifydev.yaml.sample
202
+ - .ruby-version
203
+ - .shopifydev.yaml.sample
204
+ - Gemfile
205
+ - LICENSE.txt
206
+ - NEXTSTEPS.md
207
+ - README.md
208
+ - Rakefile
209
+ - bin/shopify_console
210
+ - bin/shopifydev
211
+ - lib/rails/generators/shopifydev/shops_generator.rb
212
+ - lib/rails/generators/shopifydev/templates/shops.rake
213
+ - lib/rails/tasks/shops.rake
214
+ - lib/shopifydev.rb
215
+ - lib/shopifydev/asset.rb
216
+ - lib/shopifydev/commands.rb
217
+ - lib/shopifydev/config.rb
218
+ - lib/shopifydev/generators/shop.rb
219
+ - lib/shopifydev/generators/templates/Gemfile
220
+ - lib/shopifydev/generators/templates/gitignore
221
+ - lib/shopifydev/generators/templates/rvmrc
222
+ - lib/shopifydev/generators/templates/shopify-tmbundle
223
+ - lib/shopifydev/pry/commands.rb
224
+ - lib/shopifydev/railtie.rb
225
+ - lib/shopifydev/shop.rb
226
+ - lib/shopifydev/template.rb
227
+ - lib/shopifydev/version.rb
228
+ - shopifydev.gemspec
229
+ - spec/shopifydev/config_spec.rb
230
+ - spec/shopifydev/generators/shopifydev/shopifydev_generator_spec.rb
231
+ - spec/shopifydev/pry/commands_spec.rb
232
+ - spec/shopifydev/railtie_spec.rb
233
+ - templates/customers/order.liquid
234
+ - templates/customers/register.liquid
235
+ - templates/page.support.liquid
236
+ - templates/page.verbose.liquid
237
+ - templates/product.liquid
238
+ - templates/search.liquid
239
+ - test_driver.rb
240
+ homepage: ''
241
+ licenses: []
242
+ post_install_message:
243
+ rdoc_options: []
244
+ require_paths:
245
+ - lib
246
+ required_ruby_version: !ruby/object:Gem::Requirement
247
+ none: false
248
+ requirements:
249
+ - - ! '>='
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ segments:
253
+ - 0
254
+ hash: -1632061386653175643
255
+ required_rubygems_version: !ruby/object:Gem::Requirement
256
+ none: false
257
+ requirements:
258
+ - - ! '>='
259
+ - !ruby/object:Gem::Version
260
+ version: '0'
261
+ segments:
262
+ - 0
263
+ hash: -1632061386653175643
264
+ requirements: []
265
+ rubyforge_project:
266
+ rubygems_version: 1.8.25
267
+ signing_key:
268
+ specification_version: 3
269
+ summary: Abstract out and port to ruby the functionality of the shopify textmate bundle
270
+ for use in other editors.
271
+ test_files:
272
+ - spec/shopifydev/config_spec.rb
273
+ - spec/shopifydev/generators/shopifydev/shopifydev_generator_spec.rb
274
+ - spec/shopifydev/pry/commands_spec.rb
275
+ - spec/shopifydev/railtie_spec.rb