shop 0.1.5 → 0.1.6

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MDU4MTExZjE2OWRkZjYzNGEzMTUzYjdlZDQ1MzIxMjMzNzhhMmE4Ng==
4
+ NWI1Y2YyMzA2ODA5OGQwNWFlYWE4ZWU0MjlkODc1MjZiNTkxZDQ2Mg==
5
5
  data.tar.gz: !binary |-
6
- MTdlM2M0ZWJiZjg5ZGYyMDVmOGJmYmQ0MDUxZTRjZmZiOTVjZTZlNw==
6
+ NzgwNWNmYWQwZjJkNDNjZGVkMThhMGZiOGEwMDFlNThkMGFiYWU0ZA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NDQ1MjM2MmE5ZWRmNGZjZTYzNzUxODdhZWVjZDgwMzcxOTk2MGMyNzI5OTQ2
10
- NDQ4NzhiY2Y3OWQxMDgxNWU0YTY2ZjQ4ZDMwY2FlYTA2N2EyNDk1ZTVlM2Fk
11
- NTJjNWE1MmM0ZjUzMDhmMTIxMTNhZWVlZjA1NDQ3MTMxMmU4MGQ=
9
+ M2MxY2NhM2RmM2M5ZmVjNTU5ZmI1ZDU0ZWU4MzgwOTdjZjA2OTgzODFiODIx
10
+ Y2U1NjRlMWRjYmNjOTkxNjVhMmFiNTEzNzY3OThkY2QyMmYxNjM5YWFmMDRl
11
+ YmQ4YTVmM2RhYzk3ZTdlMjdjMjU1MDFkM2EwODdhYmJiMDhmODc=
12
12
  data.tar.gz: !binary |-
13
- Y2ViYjIyYWQzMTY0ZDRlZWYyMjgxMjBmM2Q4Yzk3ZTAyNzE0ZTU1Mjg1MzYz
14
- ZTAzZWE0MTQ2N2UyYTliY2IyNDIzZDM5ZTJlYWM1OGNkNWMzYWIyNGI5Mjc3
15
- YmUzZDhmNGJlYWMyYzdlMGI0MDQ0OGI2YTcwZjIzMzM3NTg4NDQ=
13
+ OTNlNzg5OGNlZjAwOTI0NGM1MTI1ZThkNzY2ZDQyNTk5MWJiYjgwZmFlNTEz
14
+ MGIyNGUxOWQ0OTk2ZmU2MGY2ZDg5ZjYxMGQzZDk3MWZjY2NmNzlkNmQ0YzVi
15
+ YTg0ODcwY2I1ZjIwMjRiMDUxYTFlYjE2ZjZkMTI1MGQwNjMxYzc=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shop (0.1.5)
4
+ shop (0.1.6)
5
5
  highline (~> 1.6.19)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -64,6 +64,17 @@ Creates overrides files for controllers and classes.
64
64
  # generate an override for the Product class
65
65
  shop override class Product
66
66
 
67
+ ### New Pages
68
+
69
+ You can generate new pages for PrestaShop easily with the `controller` command. This will create the controller, template, CSS and JS files you need to create a new page.
70
+
71
+ shop controller <page-name>
72
+
73
+ # example:
74
+ shop controller CustomPage
75
+
76
+ This task is adapted to work on PrestaShop 1.5 and 1.4.
77
+
67
78
  ### Modules
68
79
 
69
80
  **The modules related tasks will need the Shop project to be [initialized](https://github.com/romainberger/shop)**
@@ -142,7 +153,12 @@ You can get a list of the available commands with the help:
142
153
 
143
154
  ## Configuration
144
155
 
145
- You can use a configuration file to automate some values in the templates files created (modules and for the installation of PrestaShop). You can find or create this file in `~/.shop`.
156
+ You can use a configuration file to automate some values in the templates files created (modules and for the installation of PrestaShop).
157
+ You can edit this file with the command
158
+
159
+ shop edit
160
+
161
+ It will open the config file in your `$EDITOR`
146
162
 
147
163
  ## Compatibility
148
164
 
data/lib/shop/color.rb ADDED
@@ -0,0 +1,54 @@
1
+ # Shamelessly stolen from https://github.com/holman/boom
2
+
3
+ module Shop
4
+ # Color collects some methods for colorizing terminal output.
5
+ module Color
6
+ extend self
7
+
8
+ CODES = {
9
+ :reset => "\e[0m",
10
+ :cyan => "\e[36m",
11
+ :magenta => "\e[35m",
12
+ :red => "\e[31m",
13
+ :yellow => "\e[33m",
14
+ :green => "\e[32m"
15
+ }
16
+
17
+ # Tries to enable Windows support if on that platform.
18
+ #
19
+ # Returns nothing.
20
+ def self.included(other)
21
+ if RUBY_PLATFORM =~ /win32/ || RUBY_PLATFORM =~ /mingw32/
22
+ require 'Win32/Console/ANSI'
23
+ end
24
+ rescue LoadError
25
+ # Oh well, we tried.
26
+ end
27
+
28
+ # Wraps the given string in ANSI color codes
29
+ #
30
+ # string - The String to wrap.
31
+ # color_code - The String representing he ANSI color code
32
+ #
33
+ # Examples
34
+ #
35
+ # colorize("Boom!", :magenta)
36
+ # # => "\e[35mBoom!\e[0m"
37
+ #
38
+ # Returns the wrapped String unless the the platform is windows and
39
+ # does not have Win32::Console, in which case, returns the String.
40
+ def colorize(string, color_code)
41
+ if !defined?(Win32::Console) && !!(RUBY_PLATFORM =~ /win32/ || RUBY_PLATFORM =~ /mingw32/)
42
+ # looks like this person doesn't have Win32::Console and is on windows
43
+ # just return the uncolorized string
44
+ return string
45
+ end
46
+ "#{CODES[color_code] || color_code}#{string}#{CODES[:reset]}"
47
+ end
48
+
49
+ # Set up shortcut methods to all the codes define in CODES.
50
+ self.class_eval(CODES.keys.reject {|color| color == :reset }.map do |color|
51
+ "def #{color}(string); colorize(string, :#{color}); end"
52
+ end.join("\n"))
53
+ end
54
+ end
data/lib/shop/command.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  module Shop
4
4
  class Command
5
5
  class << self
6
+ include Shop::Color
6
7
 
7
8
  def template
8
9
  Template.new
@@ -13,11 +14,23 @@ module Shop
13
14
  if init?
14
15
  return File.read('.shop')
15
16
  else
16
- puts "Project not initialized. Please run `shop init <theme-name>`"
17
+ puts "#{red("Error")}: Project not initialized."
18
+ puts "Please run #{cyan("shop init <theme-name>")}"
17
19
  exit
18
20
  end
19
21
  end
20
22
 
23
+ # Returns the version of Prestashop installed
24
+ def psVersion
25
+ if !installed?
26
+ puts "PrestaShop does not seem to be installed"
27
+ exit
28
+ end
29
+
30
+ line = File.read("config/settings.inc.php")[/^\s*define\('_PS_VERSION_',\s*.*\)/]
31
+ line.match(/.*define\('_PS_VERSION_',\s*\s*['"](.*)['"]\)/)[1]
32
+ end
33
+
21
34
  def execute(*args)
22
35
  command = args.shift
23
36
  major = args.shift
@@ -33,15 +46,17 @@ module Shop
33
46
  return init(major) if command == 'init'
34
47
  return install if command == 'install'
35
48
  return shopModule(major, minor, extra) if command == 'module'
36
- return override(major, minor, extra) if command == 'override'
49
+ return override(major, major, extra) if command == 'override'
50
+ return controller(major) if command == 'controller'
37
51
  return clean(major) if command == 'clean'
38
52
  return jshint(major) if command == 'jshint'
39
53
  return makefile if command == 'makefile'
54
+ return edit if command == 'edit'
40
55
  return version if command == "-v"
41
56
  return version if command == "--version"
42
57
  return help if command == 'help'
43
58
 
44
- puts "\nCommand not found"
59
+ puts "\n#{red("Error")}: Command not found"
45
60
  return help
46
61
  end
47
62
 
@@ -79,12 +94,16 @@ module Shop
79
94
  done
80
95
  end
81
96
 
97
+ # Returns if the framework is already installed
98
+ def installed?
99
+ File.exists?('config/settings.inc.php')
100
+ end
101
+
82
102
  # Runs the Prestashop install CLI but with a nice prompt
83
103
  #
84
104
  # See http://doc.prestashop.com/display/PS15/Installing+PrestaShop+using+the+command+line
85
105
  def install
86
- # check if the framework is already installed
87
- if File.exists?('config/settings.inc.php')
106
+ if installed?
88
107
  puts "PrestaShop appears to be already installed"
89
108
  exit
90
109
  end
@@ -137,7 +156,7 @@ module Shop
137
156
  # Init the project
138
157
  def init(name)
139
158
  if name.nil?
140
- puts "Error: Please specify the name of the theme"
159
+ puts "#{red("Error:")} Please specify the name of the theme"
141
160
  return puts " $ shop init <theme-name>"
142
161
  end
143
162
 
@@ -170,7 +189,7 @@ module Shop
170
189
 
171
190
  filepath = "#{path}/#{extra}.tpl"
172
191
  if File.exists?(filepath)
173
- puts "File already exists"
192
+ puts "#{red("Error:")} File already exists"
174
193
  exit
175
194
  else
176
195
  File.open(filepath, "w") do; end
@@ -184,7 +203,7 @@ module Shop
184
203
  filepath = "#{path}/#{minor}.css"
185
204
 
186
205
  if File.exists?(filepath)
187
- puts "File already exists"
206
+ puts "#{red("Error:")} File already exists"
188
207
  exit
189
208
  elsif
190
209
  File.open(filepath, "w") do; end
@@ -248,13 +267,79 @@ module Shop
248
267
  content = "<?php\n\nclass #{name} extends #{name}Core {\n\n}\n"
249
268
 
250
269
  if !File.directory?('override')
251
- return puts "You need to be at the root of your Prestashop site"
270
+ return puts "#{red("Error:")} You need to be at the root of your Prestashop site"
252
271
  end
253
272
 
254
273
  File.open(path, 'w') do |f|
255
274
  f.write(content)
256
275
  end
257
276
 
277
+ clean("class")
278
+
279
+ done
280
+ end
281
+
282
+ # Creates a new page with controller and files associated
283
+ #
284
+ # @todo adapt this to work with PS 1.4 (needs a .php file in the root dir)
285
+ def controller(major)
286
+ if major.nil?
287
+ puts "#{red("Error")}: Please provide a name for the page"
288
+ exit
289
+ end
290
+ theme
291
+ version = psVersion
292
+ version = version[0, 3]
293
+
294
+ name = major.downcase
295
+ controller_name = "#{name.capitalize}Controller"
296
+ filename = "#{controller_name}.php"
297
+ if version.to_f >= 1.5
298
+ controller_path = "controllers/front/#{filename}"
299
+ elsif version == "1.4"
300
+ controller_path = "controllers/#{filename}"
301
+ end
302
+
303
+
304
+ if File.exists?(controller_path)
305
+ puts "#{red("Error")}: Controller already exists"
306
+ exit
307
+ end
308
+
309
+ # datas for templates
310
+ datas = {
311
+ 'controller_name' => controller_name,
312
+ 'name' => name.downcase
313
+ }
314
+
315
+ # For PS 1.4 creates a php file a the root
316
+ # and use the appropriate template
317
+ if version[0, 3] == "1.4"
318
+ content = template.template("page.php", datas)
319
+ File.open("#{name.downcase}.php", "w") do |f|
320
+ f.write(content)
321
+ end
322
+ controllerContent = template.template("controller-1.4.php", datas)
323
+ else
324
+ controllerContent = template.template("controller.php", datas)
325
+ end
326
+
327
+ File.open(controller_path, "w") do |f|
328
+ f.write(controllerContent)
329
+ end
330
+
331
+ files = [
332
+ "themes/#{theme}/#{name}.tpl",
333
+ "themes/#{theme}/css/#{name}.css",
334
+ "themes/#{theme}/js/#{name}.js"
335
+ ]
336
+
337
+ files.each do |f|
338
+ File.open(f, "w") do; end
339
+ end
340
+
341
+ clean("class")
342
+
258
343
  done
259
344
  end
260
345
 
@@ -269,6 +354,11 @@ module Shop
269
354
  File.delete(f)
270
355
  end
271
356
  elsif major == 'class'
357
+ version = psVersion
358
+ if version[0, 3] == "1.4"
359
+ return
360
+ end
361
+
272
362
  print "Cleaning class index... "
273
363
  index = "cache/class_index.php"
274
364
  if File.exists?(index)
@@ -321,7 +411,12 @@ module Shop
321
411
  end
322
412
 
323
413
  def done
324
- puts "✔ Done"
414
+ puts "#{green("✔ Done")}"
415
+ end
416
+
417
+ def edit
418
+ config = ShopConfig.new
419
+ puts config.edit
325
420
  end
326
421
 
327
422
  # Returns the version of Shop
@@ -343,6 +438,9 @@ module Shop
343
438
  shop module template <name> <hook> Creates a template for a given module / hook
344
439
  shop module css <name> Creates an override for a module css
345
440
 
441
+ shop controller <controller-name> Creates a new page with a controller and
442
+ assets needed
443
+
346
444
  shop override controller <name> Creates an override for a controller
347
445
  shop override controller <name> admin Creates an override for an admin controller
348
446
  shop override class <name> Creates an override for a class
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+
3
+ # Partly stolen from https://github.com/holman/boom
4
+
5
+ module Shop
6
+ class Platform
7
+ # Public: tests if currently running on darwin.
8
+ #
9
+ # Returns true if running on darwin (MacOS X), else false
10
+ def darwin?
11
+ !!(RUBY_PLATFORM =~ /darwin/)
12
+ end
13
+
14
+ # Public: tests if currently running on windows.
15
+ #
16
+ # Apparently Windows RUBY_PLATFORM can be 'win32' or 'mingw32'
17
+ #
18
+ # Returns true if running on windows (win32/mingw32), else false
19
+ def windows?
20
+ !!(RUBY_PLATFORM =~ /mswin|mingw/)
21
+ end
22
+
23
+ # Public: returns the command used to open a file or URL
24
+ # for the current platform.
25
+ #
26
+ # Currently only supports MacOS X and Linux with `xdg-open`.
27
+ #
28
+ # Returns a String with the bin
29
+ def open_command
30
+ if darwin?
31
+ 'open'
32
+ elsif windows?
33
+ 'start'
34
+ else
35
+ 'xdg-open'
36
+ end
37
+ end
38
+ end
39
+ end
@@ -33,12 +33,6 @@ module Shop
33
33
  get_config
34
34
  end
35
35
 
36
- # Set a value and save the config
37
- def set(key, value)
38
- config[key] = value
39
- save
40
- end
41
-
42
36
  def bootstrap
43
37
  return if File.exists?(CONFIG_FILE)
44
38
  path = template.template_path('shop')
@@ -50,9 +44,27 @@ module Shop
50
44
  return @config
51
45
  end
52
46
 
53
- # Save the config in the config file
54
- def save
55
- # @todo
47
+ # Public: opens the config file in an editor for you to edit. Uses the
48
+ # $EDITOR environment variable, or %EDITOR% on Windows for editing.
49
+ # This method is designed to handle multiple platforms.
50
+ # If $EDITOR is nil, try to open using the open_command.
51
+ #
52
+ # Stolen from https://github.com/holman/boom and adapted
53
+ #
54
+ # Returns a String with a helpful message.
55
+ def edit
56
+ platform = Platform.new
57
+ unless $EDITOR.nil?
58
+ unless platform.windows?
59
+ system("`echo $EDITOR` #{CONFIG_FILE} &")
60
+ else
61
+ system("start %EDITOR% #{CONFIG_FILE}")
62
+ end
63
+ else
64
+ system("#{platform.open_command} #{CONFIG_FILE}")
65
+ end
66
+
67
+ "Make your edits, and do be sure to save."
56
68
  end
57
69
  end
58
70
  end
data/lib/shop.rb CHANGED
@@ -9,9 +9,11 @@ require 'yaml'
9
9
  require 'highline/import'
10
10
 
11
11
  require 'shop/template'
12
+ require 'shop/color'
12
13
  require 'shop/command'
14
+ require 'shop/platform'
13
15
  require 'shop/shopconfig'
14
16
 
15
17
  module Shop
16
- VERSION = '0.1.5'
18
+ VERSION = '0.1.6'
17
19
  end
data/shop.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'shop'
16
- s.version = '0.1.5'
16
+ s.version = '0.1.6'
17
17
  s.date = '2013-09-23'
18
18
  s.rubyforge_project = 'shop'
19
19
 
@@ -70,8 +70,13 @@ Gem::Specification.new do |s|
70
70
  lib/shop/shopconfig.rb
71
71
  lib/shop/command.rb
72
72
  lib/shop/template.rb
73
+ lib/shop/color.rb
74
+ lib/shop/platform.rb
73
75
  templates/Makefile
74
76
  templates/module.php
77
+ templates/controller.php
78
+ templates/controller-1.4.php
79
+ templates/page.php
75
80
  templates/shop
76
81
  ]
77
82
  # = MANIFEST =
@@ -0,0 +1,18 @@
1
+ <?php
2
+
3
+ class {{controller_name}}Core extends FrontController {
4
+
5
+ public function setMedia() {
6
+ parent::setMedia();
7
+
8
+ Tools::addCSS(_THEME_CSS_DIR_.'{{name}}.css');
9
+ Tools::addJS(_THEME_JS_DIR_.'{{name}}.js');
10
+ }
11
+
12
+ public function displayContent() {
13
+ parent::displayContent();
14
+
15
+ self::$smarty->display(_PS_THEME_DIR_.'{{name}}.tpl');
16
+ }
17
+
18
+ }
@@ -0,0 +1,22 @@
1
+ <?php
2
+
3
+ class {{controller_name}}Core extends FrontController {
4
+
5
+ public function setMedia() {
6
+ parent::setMedia();
7
+
8
+ $this->addCSS(_THEME_CSS_DIR_.'{{name}}.css');
9
+ $this->addJS(_THEME_JS_DIR_.'{{name}}.js');
10
+ }
11
+
12
+ /**
13
+ * Assign template vars related to page content
14
+ * @see FrontController::initContent()
15
+ */
16
+ public function initContent() {
17
+ parent::initContent();
18
+
19
+ $this->setTemplate(_PS_THEME_DIR_.'{{name}}.tpl');
20
+ }
21
+
22
+ }
@@ -0,0 +1,4 @@
1
+ <?php
2
+
3
+ require(dirname(__FILE__).'/config/config.inc.php');
4
+ ControllerFactory::getController('{{controller_name}}')->run();
data/templates/shop CHANGED
@@ -12,3 +12,6 @@ install:
12
12
  lastname:
13
13
  password:
14
14
  email:
15
+
16
+ template:
17
+ path:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain Berger
@@ -44,8 +44,13 @@ files:
44
44
  - lib/shop/shopconfig.rb
45
45
  - lib/shop/command.rb
46
46
  - lib/shop/template.rb
47
+ - lib/shop/color.rb
48
+ - lib/shop/platform.rb
47
49
  - templates/Makefile
48
50
  - templates/module.php
51
+ - templates/controller.php
52
+ - templates/controller-1.4.php
53
+ - templates/page.php
49
54
  - templates/shop
50
55
  homepage: https://github.com/romainberger/shop
51
56
  licenses: