htcht 0.1.1 → 0.1.3

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec30c53f8e25b42c1b119536c829c434562aeb18
4
- data.tar.gz: affeeb15ceb6c3cacbc4034150ba9e0d846269b2
3
+ metadata.gz: a1dcda9ce862bcb132b0c0c81b738aaf15ede5c8
4
+ data.tar.gz: 7008301db5e70a32d46a11daadff04c9b900e107
5
5
  SHA512:
6
- metadata.gz: 578361f294a77e21773df29fb22b5b8ea250a615aea08eb609645cc82b095301685b6272b6f8864e375ba656a7851dcc10985ad042167c422c12be0baacf775b
7
- data.tar.gz: 257d9920e4dfba6547988d88c05c46b5ceb955b36119f9b3fbcbd091000ff8edffbaf2ae2db9b6e9c8711433fcd6ad40416454538969035c10ca31b807b56724
6
+ metadata.gz: 8af195447abd1f753197b458c0c27aeca97c2f1db6b24810093d0ded3e70d78340c5fa81dd3642e3707034d43454bff854a357b1d84630676f22110fa9af5708
7
+ data.tar.gz: a7873e3ecf1c6678d0838b69d99e7027c543e241d6d309ec5e5f2c579b4f8409821b77b5f3d3319d3cffe14b9ff965e10fa540d0ccaa819952810140934317fd
data/Gemfile.lock CHANGED
@@ -7,7 +7,39 @@ PATH
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ aruba (0.14.2)
11
+ childprocess (~> 0.5.6)
12
+ contracts (~> 0.9)
13
+ cucumber (>= 1.3.19)
14
+ ffi (~> 1.9.10)
15
+ rspec-expectations (>= 2.99)
16
+ thor (~> 0.19)
17
+ builder (3.2.3)
18
+ childprocess (0.5.9)
19
+ ffi (~> 1.0, >= 1.0.11)
20
+ coderay (1.1.1)
21
+ contracts (0.15.0)
22
+ cucumber (2.4.0)
23
+ builder (>= 2.1.2)
24
+ cucumber-core (~> 1.5.0)
25
+ cucumber-wire (~> 0.0.1)
26
+ diff-lcs (>= 1.1.3)
27
+ gherkin (~> 4.0)
28
+ multi_json (>= 1.7.5, < 2.0)
29
+ multi_test (>= 0.1.2)
30
+ cucumber-core (1.5.0)
31
+ gherkin (~> 4.0)
32
+ cucumber-wire (0.0.1)
10
33
  diff-lcs (1.3)
34
+ ffi (1.9.18)
35
+ gherkin (4.1.1)
36
+ method_source (0.8.2)
37
+ multi_json (1.12.1)
38
+ multi_test (0.1.2)
39
+ pry (0.10.4)
40
+ coderay (~> 1.1.0)
41
+ method_source (~> 0.8.1)
42
+ slop (~> 3.4)
11
43
  rake (10.5.0)
12
44
  rspec (3.5.0)
13
45
  rspec-core (~> 3.5.0)
@@ -22,14 +54,17 @@ GEM
22
54
  diff-lcs (>= 1.2.0, < 2.0)
23
55
  rspec-support (~> 3.5.0)
24
56
  rspec-support (3.5.0)
57
+ slop (3.6.0)
25
58
  thor (0.19.4)
26
59
 
27
60
  PLATFORMS
28
61
  ruby
29
62
 
30
63
  DEPENDENCIES
64
+ aruba
31
65
  bundler (~> 1.13)
32
66
  htcht!
67
+ pry
33
68
  rake (~> 10.0)
34
69
  rspec (~> 3.5)
35
70
 
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Htcht
2
+ [![Gem Version](https://badge.fury.io/rb/htcht.svg)](https://badge.fury.io/rb/htcht)
2
3
 
3
4
  The internal CLI of Trim Agency. Used to setup new projects, build, test, etc.
4
5
 
@@ -16,9 +17,9 @@ Run ```htcht help``` for a list of commands.
16
17
 
17
18
  ## Development
18
19
 
19
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `rake` to run the test suite.
20
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `rspec` to run the test suite.
20
21
 
21
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
22
+ To install this gem onto your local machine, run `bundle exec rake install`.
22
23
 
23
24
  ## Contributing
24
25
 
data/htcht.gemspec CHANGED
@@ -34,4 +34,6 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency "bundler", "~> 1.13"
35
35
  spec.add_development_dependency "rake", "~> 10.0"
36
36
  spec.add_development_dependency "rspec", "~> 3.5"
37
+ spec.add_development_dependency "aruba"
38
+ spec.add_development_dependency "pry"
37
39
  end
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby '2.3.3'
3
+ ruby 'set_ruby_version'
4
4
 
5
- gem 'rails'
5
+ gem 'rails', 'set_rails_version'
@@ -1,4 +1,4 @@
1
- FROM ruby:2.3.3
1
+ FROM ruby:set_ruby_version
2
2
  MAINTAINER stevetwitte@gmail.com
3
3
 
4
4
  RUN apt-get update && apt-get install -y \
@@ -14,7 +14,7 @@ ENV LC_ALL en_US.UTF-8
14
14
  RUN mkdir -p /app
15
15
  WORKDIR /app
16
16
 
17
- RUN gem install rails
17
+ RUN gem install rails --version set_rails_version
18
18
  #COPY Gemfile Gemfile.lock ./
19
19
  #RUN gem install bundler && bundle install --jobs 20 --retry 5
20
20
 
@@ -1,9 +1,16 @@
1
+ require 'htcht/helpers/general_helpers'
2
+ require 'htcht/helpers/name_helpers'
3
+ require 'htcht/helpers/version_helpers'
4
+
1
5
  module Htcht
2
6
  module CLI
3
7
  module Rails
4
8
 
5
9
  class Rails < Thor
6
10
  include Thor::Actions
11
+ include Htcht::Helpers::GeneralHelpers
12
+ include Htcht::Helpers::NameHelpers
13
+ include Htcht::Helpers::VersionHelpers
7
14
 
8
15
  def self.source_root
9
16
  File.dirname(__FILE__)
@@ -14,23 +21,27 @@ module Htcht
14
21
  method_option :api, type: :boolean, default: false, :aliases => '-a', :desc => 'default: [--no-api] Generate Rails App in API mode.'
15
22
  method_option :init, type: :boolean, default: false, :aliases => '-i', :desc => 'default: [--no-init] Generate a base Rails app with custom Gemfile and configs. (This along with "--api" is the base for new Rails APIs at Trim Agency).'
16
23
  method_option :test, type: :boolean, default: false, :desc => 'default: [--no-test]'
24
+ method_option :ruby_version, type: :string, :desc => "default: [latest version] Set the version of Ruby to be used."
25
+ method_option :rails_version, type: :string, :desc => "default: [latest version] Set the version of Rails to be used."
17
26
  def new(appname)
27
+ unless docker_running?
28
+ puts 'Check that Docker is installed and running'
29
+ return
30
+ end
31
+
32
+ options[:ruby_version] ||= latest_ruby
33
+ options[:rails_version] ||= latest_rails
18
34
 
19
35
  # Format the appname as snake case for folders, etc.
20
- # This code is taken straight from Rails
21
- # TODO: Move to a helper file
22
- snake_name = appname.gsub(/::/, '/').
23
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
24
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
25
- tr("-", "_").
26
- downcase
36
+ snake_name = snake_casify(appname)
27
37
 
28
38
  rails_new_command = 'docker-compose run app rails new . --database=postgresql --skip-bundle'
29
39
 
30
40
  # Set the application template
31
41
  # TODO: Refactor to be dynamic from a directory
32
42
  if options[:init] && options[:api]
33
- copy_file('templates/api_init_template.rb', "#{snake_name}/api_init_template.rb")
43
+ template_path = "#{snake_name}/api_init_template.rb"
44
+ copy_file('templates/api_init_template.rb', template_path)
34
45
  copy_file('templates/api_build_files/user_spec.rb', "#{snake_name}/build_files/user_spec.rb")
35
46
  copy_file('templates/api_build_files/users.rb', "#{snake_name}/build_files/users.rb")
36
47
  copy_file('templates/api_build_files/email_validator.rb', "#{snake_name}/build_files/email_validator.rb")
@@ -38,15 +49,23 @@ module Htcht
38
49
  copy_file('templates/api_build_files/shoulda_matchers.rb', "#{snake_name}/build_files/shoulda_matchers.rb")
39
50
  copy_file('templates/api_build_files/rails_helper.rb', "#{snake_name}/build_files/rails_helper.rb")
40
51
  copy_file('templates/api_build_files/seeds.rb', "#{snake_name}/build_files/seeds.rb")
52
+ copy_file('templates/api_build_files/active_model_serializers.rb', "#{snake_name}/build_files/active_model_serializers.rb")
41
53
  rails_new_command.concat(' -m api_init_template.rb -T')
42
54
  elsif options[:init]
43
55
  puts "--init must be used with --api for now."
44
56
  return
45
57
  else
46
- copy_file 'templates/default_template.rb', "#{snake_name}/default_template.rb"
58
+ template_path = "#{snake_name}/default_template.rb"
59
+ copy_file 'templates/default_template.rb', template_path
47
60
  rails_new_command.concat(' -m default_template.rb')
48
61
  end
49
62
 
63
+ if defined? template_path
64
+ add_app_names_to_template(path: template_path,
65
+ appname: appname,
66
+ snake_name: snake_name)
67
+ end
68
+
50
69
  # Copy this over so that Docker can run Rails new
51
70
  copy_file 'BaseGemfile', "#{snake_name}/Gemfile"
52
71
  rails_new_command.concat(' --force')
@@ -70,6 +89,11 @@ module Htcht
70
89
  empty_directory(snake_name)
71
90
  copy_file('docker-compose.yml', "#{snake_name}/docker-compose.yml")
72
91
  copy_file('Dockerfile', "#{snake_name}/Dockerfile")
92
+ gsub_file("#{snake_name}/Dockerfile", 'set_ruby_version', options[:ruby_version])
93
+ gsub_file("#{snake_name}/Dockerfile", 'set_rails_version', options[:rails_version])
94
+ gsub_file("#{snake_name}/Gemfile", 'set_ruby_version', options[:ruby_version])
95
+ gsub_file("#{snake_name}/Gemfile", 'set_rails_version', options[:rails_version])
96
+
73
97
 
74
98
  inside(snake_name) do
75
99
 
@@ -80,7 +104,7 @@ module Htcht
80
104
  run(rails_new_command)
81
105
 
82
106
  # Edit the Dockerfile and rebuild the app now that it has a Gemfile and Gemfile.lock
83
- gsub_file('Dockerfile', 'RUN gem install rails', '#RUN gem install rails')
107
+ gsub_file('Dockerfile', "RUN gem install rails", '#RUN gem install rails')
84
108
  gsub_file('Dockerfile', '#COPY Gemfile Gemfile.lock ./', 'COPY Gemfile Gemfile.lock ./')
85
109
  gsub_file('Dockerfile', '#RUN gem install bundler && bundle install --jobs 20 --retry 5', 'RUN gem install bundler && bundle install --jobs 20 --retry 5')
86
110
  run('docker-compose build')
@@ -96,10 +120,15 @@ module Htcht
96
120
  remove_file("default_template.rb")
97
121
  end
98
122
  end
123
+ end
99
124
 
125
+ private
126
+
127
+ def add_app_names_to_template(path:, appname:, snake_name:)
128
+ gsub_file(path, 'set_appname', appname)
129
+ gsub_file(path, 'set_snake_name', snake_name)
100
130
  end
101
131
  end
102
132
  end
103
-
104
133
  end
105
134
  end
@@ -0,0 +1 @@
1
+ ActiveModelSerializers.config.adapter = :json
@@ -45,18 +45,8 @@ end
45
45
  gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
46
46
 
47
47
  # Setup the app config
48
- # But get the name first
49
- # TODO: Possible refactor (should be able to get the name from the gem?)
50
- # ----------------------------
51
-
52
- puts '**********'
53
- puts
54
- appname = ask("What should we call this new app? (CamelCasePlease)")
55
- snake_name = appname.gsub(/::/, '/').
56
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
57
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
58
- tr("-", "_").
59
- downcase
48
+ appname = "set_appname"
49
+ snake_name = "set_snake_name"
60
50
 
61
51
  # Set the name of the app in application.rb
62
52
  gsub_file('config/application.rb', 'module App', "module #{appname}")
@@ -124,6 +114,7 @@ copy_file('build_files/factory_girl.rb', 'spec/support/factory_girl.rb')
124
114
  copy_file('build_files/rails_helper.rb', 'spec/rails_helper.rb')
125
115
  copy_file('build_files/shoulda_matchers.rb', 'spec/support/shoulda_matchers.rb')
126
116
  copy_file('build_files/seeds.rb', 'db/seeds.rb')
117
+ copy_file('build_files/active_model_serializers.rb', 'config/initializers/active_model_serializers.rb')
127
118
  empty_directory('db/seeds')
128
119
  empty_directory('db/seeds/development')
129
120
  empty_directory('db/seeds/test')
@@ -7,18 +7,8 @@ end
7
7
  gem 'pg'
8
8
 
9
9
  # Setup the app config
10
- # But get the name first
11
- # TODO: Possible refactor (should be able to get the name from the gem?)
12
- # ----------------------------
13
-
14
- puts '**********'
15
- puts
16
- appname = ask("What should we call this new app? (CamelCasePlease)")
17
- snake_name = appname.gsub(/::/, '/').
18
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
19
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
20
- tr("-", "_").
21
- downcase
10
+ appname = "set_appname"
11
+ snake_name = "set_snake_name"
22
12
 
23
13
  # Set the name of the app in application.rb
24
14
  gsub_file('config/application.rb', 'module App', "module #{appname}")
@@ -32,4 +22,3 @@ gsub_file('config/database.yml', 'username: app', "username: #{snake_name}")
32
22
  gsub_file('config/database.yml', 'APP_DATABASE_PASSWORD', "#{snake_name.upcase}_DATABASE_PASSWORD")
33
23
 
34
24
  run('bundle install')
35
-
@@ -0,0 +1,12 @@
1
+ module Htcht
2
+ module Helpers
3
+
4
+ module GeneralHelpers
5
+
6
+ def docker_running?
7
+ #TODO: look for a better way to do this
8
+ system('docker ps')
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module Htcht
2
+ module Helpers
3
+ module NameHelpers
4
+
5
+ def snake_casify(name)
6
+ name.gsub(/::/, '/').
7
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
8
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
9
+ gsub(/\s+/, '_').
10
+ tr("-", "_").
11
+ downcase
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Htcht
2
+ module Helpers
3
+ module VersionHelpers
4
+
5
+ def latest_ruby
6
+ # This is going to be hard coded for now because I can't seem to
7
+ # find a public api for getting the latest version of Ruby
8
+ '2.4.1'
9
+ end
10
+
11
+ def latest_rails
12
+ # The rubygems.org API does allow you to get the latest version
13
+ # of Rails but it is a private api (see above comment as well)
14
+ '5.0.2'
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+
data/lib/htcht/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Htcht
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htcht
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trim Agency
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-19 00:00:00.000000000 Z
11
+ date: 2017-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aruba
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: pry
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'
69
97
  description:
70
98
  email:
71
99
  - info@trimagency.com
@@ -90,6 +118,7 @@ files:
90
118
  - lib/htcht/cli/rails/Dockerfile
91
119
  - lib/htcht/cli/rails/docker-compose.yml
92
120
  - lib/htcht/cli/rails/rails.rb
121
+ - lib/htcht/cli/rails/templates/api_build_files/active_model_serializers.rb
93
122
  - lib/htcht/cli/rails/templates/api_build_files/email_validator.rb
94
123
  - lib/htcht/cli/rails/templates/api_build_files/factory_girl.rb
95
124
  - lib/htcht/cli/rails/templates/api_build_files/rails_helper.rb
@@ -99,6 +128,9 @@ files:
99
128
  - lib/htcht/cli/rails/templates/api_build_files/users.rb
100
129
  - lib/htcht/cli/rails/templates/api_init_template.rb
101
130
  - lib/htcht/cli/rails/templates/default_template.rb
131
+ - lib/htcht/helpers/general_helpers.rb
132
+ - lib/htcht/helpers/name_helpers.rb
133
+ - lib/htcht/helpers/version_helpers.rb
102
134
  - lib/htcht/main.rb
103
135
  - lib/htcht/version.rb
104
136
  homepage: https://github.com/TrimAgency/htcht