potassium 1.3.3 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +2 -0
  3. data/.rubocop.yml +3 -0
  4. data/.ruby_style.yml +2 -0
  5. data/CHANGELOG.md +12 -0
  6. data/README.md +16 -2
  7. data/lib/potassium/cli/commands/install.rb +56 -0
  8. data/lib/potassium/templates/application/assets/.rbenv-vars.example +1 -0
  9. data/lib/potassium/templates/application/helpers/gem-helpers.rb +12 -0
  10. data/lib/potassium/templates/application/helpers/recipe-helpers.rb +5 -0
  11. data/lib/potassium/templates/application/helpers/template-helpers.rb +8 -0
  12. data/lib/potassium/templates/application/helpers/variable-helpers.rb +8 -0
  13. data/lib/potassium/templates/application/recipe_generator.rb +14 -0
  14. data/lib/potassium/templates/application/recipe_template.rb +23 -0
  15. data/lib/potassium/templates/application/recipes/admin.rb +2 -2
  16. data/lib/potassium/templates/application/recipes/angular_admin.rb +1 -1
  17. data/lib/potassium/templates/application/recipes/asks/admin.rb +1 -1
  18. data/lib/potassium/templates/application/recipes/asks/{lang.rb → i18n.rb} +0 -0
  19. data/lib/potassium/templates/application/recipes/asks/paperclip.rb +2 -0
  20. data/lib/potassium/templates/application/recipes/checks/devise.rb +1 -0
  21. data/lib/potassium/templates/application/recipes/dependencies/admin.rb +3 -0
  22. data/lib/potassium/templates/application/recipes/paperclip.rb +20 -0
  23. data/lib/potassium/templates/application/recipes/rbenv.rb +20 -1
  24. data/lib/potassium/templates/application/template.rb +3 -1
  25. data/lib/potassium/version.rb +1 -1
  26. data/potassium.gemspec +1 -1
  27. metadata +27 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99f5c7b867a323dc6b449ca6cd2177d60911ce39
4
- data.tar.gz: 78c2dd74556ead64bb3d36238a6ce713a1fa0a23
3
+ metadata.gz: 6bc7c7e4daf4fbcae5761bb994cfabc9db7d8d64
4
+ data.tar.gz: 919510d523b761b9c74a6d1bbdb23be36fd563e3
5
5
  SHA512:
6
- metadata.gz: e0725c8167a8c15c8e4452ed16ba37c31b4d5f68d4a98c3c98189ef7d3335fd95d756e2b00f73ee6bad65a1eae6def77939c2f609e9eec3380bc6ca31ea031e1
7
- data.tar.gz: 1855575ac264d5982823081fb837517f048f5609893fef0da5d720682bfabdd20b9407c62524e07271cc98d3eab19bbba621734cebc0853eb7e644a0b1520221
6
+ metadata.gz: 6ef25b0c7d589ee4afd3819beb04ecbf043c0cdb99d1dfe37fc728e3739eb3f37deae49a8e87b4207cdc28e2be24699062dc9171a3f3d3b086944f4eaa44605b
7
+ data.tar.gz: 8a69de0aee82d9192eb69e18529c97256672ee873bb8708f486d784da47a81315754ea2323c4a7fad653aff696928d974409c106dbf9824e66f06445c6ab113d
data/.hound.yml ADDED
@@ -0,0 +1,2 @@
1
+ ruby:
2
+ config_file: .ruby_style.yml
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ inherit_from:
2
+ - ~/.rubocop.yml
3
+ - .ruby_style.yml
data/.ruby_style.yml ADDED
@@ -0,0 +1,2 @@
1
+ AllCops:
2
+ RunRailsCops: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ Features:
6
+
7
+ - Gets ruby version from http://ruby.platan.us/latest
8
+ - Adds the install command
9
+
3
10
  ## 1.3
4
11
 
5
12
  Features:
@@ -61,3 +68,8 @@ Features:
61
68
 
62
69
  Bugfixes:
63
70
  - Removed `default_command` call to fix --version usage.
71
+
72
+ ## 1.3.4
73
+
74
+ Bugfixes:
75
+ - Removed `rails` from the runtime dependencies due to terrible performance.
data/README.md CHANGED
@@ -4,18 +4,32 @@ A Rails application generator from [Platanus](https://github.com/platanus), insp
4
4
 
5
5
  ## Installation
6
6
 
7
- Just install it globally:
7
+ First, be sure to have Rails 4.2+ installed on your system.
8
+
9
+ Then, install Potassium globally:
8
10
 
9
11
  $ gem install potassium
10
12
 
11
13
  ## Usage
12
14
 
13
- Use the `potassium` command to create a new project:
15
+ ### Starting a new project from scratch
16
+
17
+ Use the `potassium create` command to create a new project:
14
18
 
15
19
  $ potassium create project-name
16
20
 
17
21
  It's important to note that it will perform a version check before running to ensure that you're using the latest potassium.
18
22
 
23
+ ### Adding recipes to an existing project
24
+
25
+ Use the `potassium install` command to add a recipe to a project:
26
+
27
+ $ potassium install i18n
28
+
29
+ You can run the command on its own to view all the available recipes and select one:
30
+
31
+ $ potassium install
32
+
19
33
  ## What's inside Potassium?
20
34
 
21
35
  Potassium Rails apps includes the following gems and technologies:
@@ -0,0 +1,56 @@
1
+ require 'levenshtein'
2
+ require 'inquirer'
3
+ require "potassium/templates/application/recipe_generator"
4
+
5
+ module Potassium::CLI
6
+ desc "Installs a new feature or library"
7
+ command :install do |c|
8
+ c.action do |global_options, options, args|
9
+ if args.first.nil?
10
+ index = Ask.list('Select a recipe to install', recipe_name_list)
11
+ ARGV << recipe_name_list[index]
12
+ Potassium::RecipeGenerator.start
13
+ else
14
+ if recipe_exists?(args)
15
+ Potassium::RecipeGenerator.start
16
+ else
17
+ puts "Oops! Sorry, that recipe doesn't exist. Were you looking for this?: #{guess_recipe_name(args)}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ def self.recipe_exists?(args)
24
+ recipe_name_list.include?(args.first)
25
+ end
26
+
27
+ def self.guess_recipe_name(args)
28
+ if recipe_exists?(args)
29
+ args.first
30
+ else
31
+ find_closest_recipe(recipe_name_list, args.first)
32
+ end
33
+ end
34
+
35
+ def self.recipe_name_list
36
+ @recipe_name_list ||= begin
37
+ source_root = File.expand_path('../../../templates/application/recipes', __FILE__)
38
+ files = Dir.entries(source_root).select { |e| e.end_with?('.rb') }
39
+ files.map { |e| e.gsub('.rb', '') }
40
+ end
41
+ end
42
+
43
+ def self.find_closest_recipe(recipe_list, possible_recipe)
44
+ return nil unless possible_recipe
45
+ highest_distance = 100
46
+ closest_match = nil
47
+ recipe_list.each do |recipe|
48
+ distance = Levenshtein.distance(recipe, possible_recipe)
49
+ if distance < highest_distance
50
+ highest_distance = distance
51
+ closest_match = recipe
52
+ end
53
+ end
54
+ closest_match
55
+ end
56
+ end
@@ -1,3 +1,4 @@
1
+ DB_HOST=
1
2
  DB_NAME=<%= get(:underscorized_app_name) %>
2
3
  DB_USER=root
3
4
  DB_PASSWORD=
@@ -1,4 +1,16 @@
1
1
  module GemHelpers
2
+
3
+ def gem_exists?(regex)
4
+ exists = false
5
+ File.open("Gemfile").each_line do |line|
6
+ if line =~ regex
7
+ exists = true
8
+ return
9
+ end
10
+ end
11
+ exists
12
+ end
13
+
2
14
  def gather_gem(name, *attributes)
3
15
  ensure_variable(:gems, {})
4
16
  current_gem_groups = get(:current_gem_groups) || [:base]
@@ -0,0 +1,5 @@
1
+ module RecipeHelpers
2
+ def export(file)
3
+ exported_recipes << File.basename(file, '.rb')
4
+ end
5
+ end
@@ -1,4 +1,12 @@
1
1
  module TemplateHelpers
2
+ def load_recipe(recipe)
3
+ return if exists?(recipe)
4
+ eval_file "recipes/checks/#{recipe}.rb" rescue Exception
5
+ eval_file "recipes/dependencies/#{recipe}.rb" rescue Exception
6
+ eval_file "recipes/asks/#{recipe}.rb" rescue Exception
7
+ eval_file "recipes/#{recipe}.rb"
8
+ end
9
+
2
10
  def eval_file(source)
3
11
  location = File.expand_path(find_in_source_paths(source))
4
12
  unique_name = SecureRandom.hex
@@ -4,6 +4,10 @@ module VariableHelpers
4
4
  @_data[key] = value
5
5
  end
6
6
 
7
+ def selected?(key, value = nil)
8
+ value ? equals?(key, value) : get(key)
9
+ end
10
+
7
11
  def get(key)
8
12
  @_data ||= {}
9
13
  @_data[key]
@@ -13,6 +17,10 @@ module VariableHelpers
13
17
  get(key) == value
14
18
  end
15
19
 
20
+ def exists?(key)
21
+ equals?("#{key}_exists".to_sym, true)
22
+ end
23
+
16
24
  private
17
25
 
18
26
  def ensure_variable(key, default_value)
@@ -0,0 +1,14 @@
1
+ require "rails/generators"
2
+ require "rails/generators/rails/app/app_generator"
3
+ require "inquirer"
4
+
5
+ module Potassium
6
+ class RecipeGenerator < Rails::Generators::NamedBase
7
+ def run_generator
8
+ require_relative "./helpers/template-dsl"
9
+ TemplateDSL.extend_dsl(self, source_path: __FILE__)
10
+ template_location = File.expand_path('./recipe_template.rb', File.dirname(__FILE__))
11
+ instance_eval File.read(template_location), template_location
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ recipe = ARGV.first
2
+
3
+ # Consider all the recipe's questions as true
4
+ def selected?(key, val = nil); true; end
5
+
6
+ run_action(:recipe_loading) do
7
+ load_recipe(recipe)
8
+ end
9
+
10
+ run_action(:gem_install) do
11
+ build_gemfile
12
+ run "bundle install"
13
+ end
14
+
15
+ # Ensure all the recipe's callbacks are executed
16
+ get(:callbacks).each do |name, cbs|
17
+
18
+ puts "Processing #{name} callbacks"
19
+ cbs.each do |event, cb|
20
+ cb.each {|callback| instance_exec(&callback) }
21
+ end
22
+
23
+ end
@@ -1,5 +1,5 @@
1
- if get(:admin_mode)
2
- if equals?(:authentication, :devise)
1
+ if selected?(:admin_mode)
2
+ if selected?(:authentication, :devise)
3
3
  gather_gem 'activeadmin', github: 'activeadmin'
4
4
  gather_gem 'activeadmin_addons'
5
5
  gather_gem 'active_skin'
@@ -1,4 +1,4 @@
1
- if get(:angular_admin)
1
+ if selected?(:angular_admin)
2
2
 
3
3
  after(:admin_install) do
4
4
  copy_file 'assets/active_admin/init_activeadmin_angular.rb', 'config/initializers/init_activeadmin_angular.rb'
@@ -1,4 +1,4 @@
1
- if equals?(:authentication, :devise)
1
+ if selected?(:authentication, :devise)
2
2
  admin_mode = Ask.confirm "Do you want to use ActiveAdmin?"
3
3
  if admin_mode
4
4
  angular_admin = Ask.confirm "Do you want Angular support for ActiveAdmin?"
@@ -0,0 +1,2 @@
1
+ paperclip = Ask.confirm "Do you want to use Paperclip for uploads?"
2
+ set(:paperclip, paperclip)
@@ -0,0 +1 @@
1
+ set(:devise_exists, gem_exists?(/"devise"/))
@@ -0,0 +1,3 @@
1
+ run_action(:recipe_loading) do
2
+ load_recipe("devise")
3
+ end
@@ -0,0 +1,20 @@
1
+ if selected?(:paperclip)
2
+ gather_gem('paperclip', '~> 4.3')
3
+
4
+ gsub_file "config/environments/production.rb", /^end$/o do |match|
5
+ match = %q{
6
+
7
+ # Paperclip support for S3
8
+ config.paperclip_defaults = {
9
+ :storage => :s3,
10
+ :s3_credentials => {
11
+ :bucket => ENV['AWS_BUCKET']
12
+ }
13
+ }
14
+ end}
15
+ end
16
+
17
+ append_to_file '.rbenv-vars.example', 'AWS_BUCKET='
18
+ append_to_file '.rbenv-vars', 'AWS_BUCKET='
19
+
20
+ end
@@ -1,4 +1,23 @@
1
+ require 'net/http'
2
+ require 'semantic'
3
+ require 'pry'
4
+
5
+ def latest
6
+ printf 'Getting platanus latest ruby version...'
7
+ Net::HTTP.get(URI.parse('http://ruby.platan.us/latest'))
8
+ rescue
9
+ puts " not found, using #{RUBY_VERSION}"
10
+ RUBY_VERSION
11
+ end
12
+
13
+ def version_alias
14
+ version = latest
15
+
16
+ puts "using #{version}"
17
+ Semantic::Version.new(version).instance_eval { "#{major}.#{minor}" }
18
+ end
19
+
1
20
  create_file '.rbenv-vars'
2
21
  template 'assets/.rbenv-vars.example', '.rbenv-vars.example'
3
22
  run "cp .rbenv-vars.example .rbenv-vars"
4
- create_file '.ruby-version', '2.2'
23
+ create_file '.ruby-version', version_alias
@@ -18,8 +18,9 @@ run_action(:asking) do
18
18
  eval_file "recipes/asks/devise.rb"
19
19
  eval_file "recipes/asks/admin.rb"
20
20
  eval_file "recipes/asks/pundit.rb"
21
- eval_file "recipes/asks/lang.rb"
21
+ eval_file "recipes/asks/i18n.rb"
22
22
  eval_file "recipes/asks/api.rb"
23
+ eval_file "recipes/asks/paperclip.rb"
23
24
  end
24
25
 
25
26
  run_action(:recipe_loading) do
@@ -41,6 +42,7 @@ run_action(:recipe_loading) do
41
42
  eval_file "recipes/git.rb"
42
43
  eval_file "recipes/api.rb"
43
44
  eval_file "recipes/rack-cors.rb"
45
+ eval_file "recipes/paperclip.rb"
44
46
  end
45
47
 
46
48
  say "Gathered enough information. Applying the template. Wait a minute.", :green
@@ -1,3 +1,3 @@
1
1
  module Potassium
2
- VERSION = "1.3.3"
2
+ VERSION = "1.3.4"
3
3
  end
data/potassium.gemspec CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_runtime_dependency "gli", "~> 2.12.2"
24
- spec.add_runtime_dependency "rails", "~> 4.2"
25
24
  spec.add_runtime_dependency "inquirer", "~> 0.2"
26
25
  spec.add_runtime_dependency "gems", "~> 0.8"
27
26
  spec.add_runtime_dependency "semantic", "~> 1.4"
27
+ spec.add_runtime_dependency "levenshtein", "~> 0.2"
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: potassium
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - juliogarciag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-11 00:00:00.000000000 Z
11
+ date: 2016-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,61 +53,61 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.12.2
55
55
  - !ruby/object:Gem::Dependency
56
- name: rails
56
+ name: inquirer
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '4.2'
61
+ version: '0.2'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '4.2'
68
+ version: '0.2'
69
69
  - !ruby/object:Gem::Dependency
70
- name: inquirer
70
+ name: gems
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.2'
75
+ version: '0.8'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.2'
82
+ version: '0.8'
83
83
  - !ruby/object:Gem::Dependency
84
- name: gems
84
+ name: semantic
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.8'
89
+ version: '1.4'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.8'
96
+ version: '1.4'
97
97
  - !ruby/object:Gem::Dependency
98
- name: semantic
98
+ name: levenshtein
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.4'
103
+ version: '0.2'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.4'
110
+ version: '0.2'
111
111
  description: An application generator from Platanus
112
112
  email:
113
113
  - julioggonz@gmail.com
@@ -118,6 +118,9 @@ extra_rdoc_files: []
118
118
  files:
119
119
  - ".editorconfig"
120
120
  - ".gitignore"
121
+ - ".hound.yml"
122
+ - ".rubocop.yml"
123
+ - ".ruby_style.yml"
121
124
  - CHANGELOG.md
122
125
  - Gemfile
123
126
  - LICENSE.txt
@@ -128,6 +131,7 @@ files:
128
131
  - lib/potassium.rb
129
132
  - lib/potassium/cli.rb
130
133
  - lib/potassium/cli/commands/create.rb
134
+ - lib/potassium/cli/commands/install.rb
131
135
  - lib/potassium/newest_version_ensurer.rb
132
136
  - lib/potassium/template_finder.rb
133
137
  - lib/potassium/templates/application/assets/.bowerrc
@@ -152,9 +156,12 @@ files:
152
156
  - lib/potassium/templates/application/helpers/callback-helpers.rb
153
157
  - lib/potassium/templates/application/helpers/environment-helpers.rb
154
158
  - lib/potassium/templates/application/helpers/gem-helpers.rb
159
+ - lib/potassium/templates/application/helpers/recipe-helpers.rb
155
160
  - lib/potassium/templates/application/helpers/template-dsl.rb
156
161
  - lib/potassium/templates/application/helpers/template-helpers.rb
157
162
  - lib/potassium/templates/application/helpers/variable-helpers.rb
163
+ - lib/potassium/templates/application/recipe_generator.rb
164
+ - lib/potassium/templates/application/recipe_template.rb
158
165
  - lib/potassium/templates/application/recipes/admin.rb
159
166
  - lib/potassium/templates/application/recipes/angular_admin.rb
160
167
  - lib/potassium/templates/application/recipes/api.rb
@@ -162,15 +169,19 @@ files:
162
169
  - lib/potassium/templates/application/recipes/asks/api.rb
163
170
  - lib/potassium/templates/application/recipes/asks/database.rb
164
171
  - lib/potassium/templates/application/recipes/asks/devise.rb
165
- - lib/potassium/templates/application/recipes/asks/lang.rb
172
+ - lib/potassium/templates/application/recipes/asks/i18n.rb
173
+ - lib/potassium/templates/application/recipes/asks/paperclip.rb
166
174
  - lib/potassium/templates/application/recipes/asks/pundit.rb
167
175
  - lib/potassium/templates/application/recipes/aws_sdk.rb
168
176
  - lib/potassium/templates/application/recipes/bower.rb
177
+ - lib/potassium/templates/application/recipes/checks/devise.rb
169
178
  - lib/potassium/templates/application/recipes/database.rb
179
+ - lib/potassium/templates/application/recipes/dependencies/admin.rb
170
180
  - lib/potassium/templates/application/recipes/devise.rb
171
181
  - lib/potassium/templates/application/recipes/editorconfig.rb
172
182
  - lib/potassium/templates/application/recipes/git.rb
173
183
  - lib/potassium/templates/application/recipes/i18n.rb
184
+ - lib/potassium/templates/application/recipes/paperclip.rb
174
185
  - lib/potassium/templates/application/recipes/production.rb
175
186
  - lib/potassium/templates/application/recipes/pry.rb
176
187
  - lib/potassium/templates/application/recipes/pundit.rb
@@ -203,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
214
  version: '0'
204
215
  requirements: []
205
216
  rubyforge_project:
206
- rubygems_version: 2.2.2
217
+ rubygems_version: 2.4.5.1
207
218
  signing_key:
208
219
  specification_version: 4
209
220
  summary: An application generator from Platanus