cavendish 0.1.0

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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +103 -0
  3. data/.circleci/setup-rubygems.sh +3 -0
  4. data/.editorconfig +24 -0
  5. data/.gitignore +12 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +496 -0
  8. data/.ruby-version +1 -0
  9. data/CHANGELOG.md +11 -0
  10. data/Gemfile +7 -0
  11. data/Gemfile.lock +143 -0
  12. data/Guardfile +5 -0
  13. data/LICENSE.txt +21 -0
  14. data/README.md +82 -0
  15. data/Rakefile +1 -0
  16. data/bin/console +14 -0
  17. data/bin/setup +8 -0
  18. data/cavendish.gemspec +33 -0
  19. data/exe/cavendish +8 -0
  20. data/lib/cavendish.rb +13 -0
  21. data/lib/cavendish/assets/.circleci/config.yml +93 -0
  22. data/lib/cavendish/assets/.eslintrc.json +43 -0
  23. data/lib/cavendish/assets/.node-version +1 -0
  24. data/lib/cavendish/assets/App.jsx +12 -0
  25. data/lib/cavendish/assets/README.md.erb +59 -0
  26. data/lib/cavendish/assets/src/navigators/HomeNavigator.jsx +17 -0
  27. data/lib/cavendish/assets/src/screens/HomeScreen.jsx.erb +16 -0
  28. data/lib/cavendish/assets/src/screens/__specs__/HomeScreen.spec.js.erb +22 -0
  29. data/lib/cavendish/assets/src/utils/tailwindRn.js +7 -0
  30. data/lib/cavendish/assets/tailwind.config.js +8 -0
  31. data/lib/cavendish/cli.rb +53 -0
  32. data/lib/cavendish/commands/add_ci_config.rb +16 -0
  33. data/lib/cavendish/commands/add_eslint.rb +33 -0
  34. data/lib/cavendish/commands/add_react_navigation.rb +45 -0
  35. data/lib/cavendish/commands/add_readme.rb +15 -0
  36. data/lib/cavendish/commands/add_tailwind.rb +31 -0
  37. data/lib/cavendish/commands/add_testing.rb +81 -0
  38. data/lib/cavendish/commands/base.rb +9 -0
  39. data/lib/cavendish/commands/configure_git.rb +22 -0
  40. data/lib/cavendish/commands/create_expo_project.rb +20 -0
  41. data/lib/cavendish/config.rb +18 -0
  42. data/lib/cavendish/utils.rb +74 -0
  43. data/lib/cavendish/version.rb +5 -0
  44. metadata +260 -0
@@ -0,0 +1,9 @@
1
+ module Cavendish
2
+ module Commands
3
+ class Base < PowerTypes::Command.new(:config)
4
+ include Cavendish::Utils
5
+
6
+ attr_reader :config
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ module Cavendish
2
+ module Commands
3
+ class ConfigureGit < Cavendish::Commands::Base
4
+ def perform
5
+ remove_expo_git
6
+ commit_initial_config
7
+ end
8
+
9
+ private
10
+
11
+ def remove_expo_git
12
+ remove_in_project(".git")
13
+ end
14
+
15
+ def commit_initial_config
16
+ run_in_project("git init")
17
+ run_in_project("git add -A")
18
+ run_in_project("git commit -m 'chore: initial commit'")
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module Cavendish
2
+ module Commands
3
+ class CreateExpoProject < Cavendish::Commands::Base
4
+ def perform
5
+ install_expo_globally
6
+ create_expo_project
7
+ end
8
+
9
+ private
10
+
11
+ def install_expo_globally
12
+ run("yarn global add expo-cli@#{Cavendish::EXPO_CLI_VERSION}")
13
+ end
14
+
15
+ def create_expo_project
16
+ run("expo init #{config.project_name} --template blank")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ module Cavendish
2
+ class Config
3
+ attr_reader :project_name
4
+ attr_writer :testing_library
5
+
6
+ def project_name=(value)
7
+ @project_name = value.to_s.underscore.dasherize
8
+ end
9
+
10
+ def use_enzyme?
11
+ @testing_library === 'Enzyme'
12
+ end
13
+
14
+ def human_project_name
15
+ project_name.humanize
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,74 @@
1
+ module Cavendish
2
+ module Utils
3
+ def copy_file(source, destination)
4
+ log 'CREATE', destination
5
+ ::FileUtils.cp(get_template_path(source), get_or_generate_destination_path(destination))
6
+ end
7
+
8
+ def copy_template(source, destination, locales = {})
9
+ log 'CREATE', destination
10
+ template_path = "#{get_template_path(source)}.erb"
11
+ destination_path = get_or_generate_destination_path(destination)
12
+ template_contents = File.read(template_path)
13
+ File.open(destination_path, 'w+') do |output|
14
+ output.write(parse_erb(template_contents, locales))
15
+ end
16
+ end
17
+
18
+ def remove_in_project(path)
19
+ log 'REMOVE', path
20
+ full_path = File.join(project_root_path, path)
21
+ return ::FileUtils.rm_rf(File.join(project_root_path, path)) if File.exist?(full_path)
22
+
23
+ error "Can't delete because #{full_path} does not exist"
24
+ end
25
+
26
+ def run(cmd, error_message = nil)
27
+ log 'RUN', cmd
28
+ system cmd
29
+ error(error_message) if $?.exitstatus != 0
30
+ end
31
+
32
+ def run_in_project(cmd, error_message = nil)
33
+ log 'RUN', cmd
34
+ system "cd #{project_root_path}; #{cmd}"
35
+ error(error_message) if $?.exitstatus != 0
36
+ system "cd .."
37
+ end
38
+
39
+ def inject_to_json_file(path, hash_representation)
40
+ package_path = File.join(project_root_path, path)
41
+ package_contents = JSON.parse(File.read(package_path))
42
+ new_contents = package_contents.deep_merge(hash_representation.with_indifferent_access)
43
+ File.write(package_path, JSON.pretty_generate(new_contents))
44
+ end
45
+
46
+ def get_or_generate_destination_path(destination)
47
+ destination_path = File.join(project_root_path, destination)
48
+ ::FileUtils.mkdir_p(File.dirname(destination_path))
49
+ destination_path
50
+ end
51
+
52
+ def get_template_path(file_path)
53
+ File.join(File.dirname(__FILE__), "assets", file_path)
54
+ end
55
+
56
+ def project_root_path
57
+ File.join(Dir.pwd, @config.project_name)
58
+ end
59
+
60
+ def parse_erb(content, data)
61
+ bind = binding
62
+ data.each { |key, value| singleton_class.send(:define_method, key) { value } }
63
+ ERB.new(content, trim_mode: '-').result(bind)
64
+ end
65
+
66
+ def log(action, msg)
67
+ puts "\t[#{action.green}] #{msg}"
68
+ end
69
+
70
+ def error(msg)
71
+ puts "\t[#{'ERROR'.red}] #{msg}"
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,5 @@
1
+ module Cavendish
2
+ VERSION = "0.1.0"
3
+ EXPO_CLI_VERSION = "4.8.x"
4
+ REACT_NAVIGATION_VERSION = "5.x"
5
+ end
metadata ADDED
@@ -0,0 +1,260 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cavendish
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Platanus
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-08-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: commander
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.4'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 4.4.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '4.4'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 4.4.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: power-types
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 2.2.15
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 2.2.15
75
+ - !ruby/object:Gem::Dependency
76
+ name: coveralls
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: guard-rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: pry
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rake
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rspec
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: rspec_junit_formatter
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rubocop
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '1.9'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '1.9'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop-rails
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ description: React Native + Expo project generator for Platanus
188
+ email:
189
+ - rubygems@platan.us
190
+ executables:
191
+ - cavendish
192
+ extensions: []
193
+ extra_rdoc_files: []
194
+ files:
195
+ - ".circleci/config.yml"
196
+ - ".circleci/setup-rubygems.sh"
197
+ - ".editorconfig"
198
+ - ".gitignore"
199
+ - ".rspec"
200
+ - ".rubocop.yml"
201
+ - ".ruby-version"
202
+ - CHANGELOG.md
203
+ - Gemfile
204
+ - Gemfile.lock
205
+ - Guardfile
206
+ - LICENSE.txt
207
+ - README.md
208
+ - Rakefile
209
+ - bin/console
210
+ - bin/setup
211
+ - cavendish.gemspec
212
+ - exe/cavendish
213
+ - lib/cavendish.rb
214
+ - lib/cavendish/assets/.circleci/config.yml
215
+ - lib/cavendish/assets/.eslintrc.json
216
+ - lib/cavendish/assets/.node-version
217
+ - lib/cavendish/assets/App.jsx
218
+ - lib/cavendish/assets/README.md.erb
219
+ - lib/cavendish/assets/src/navigators/HomeNavigator.jsx
220
+ - lib/cavendish/assets/src/screens/HomeScreen.jsx.erb
221
+ - lib/cavendish/assets/src/screens/__specs__/HomeScreen.spec.js.erb
222
+ - lib/cavendish/assets/src/utils/tailwindRn.js
223
+ - lib/cavendish/assets/tailwind.config.js
224
+ - lib/cavendish/cli.rb
225
+ - lib/cavendish/commands/add_ci_config.rb
226
+ - lib/cavendish/commands/add_eslint.rb
227
+ - lib/cavendish/commands/add_react_navigation.rb
228
+ - lib/cavendish/commands/add_readme.rb
229
+ - lib/cavendish/commands/add_tailwind.rb
230
+ - lib/cavendish/commands/add_testing.rb
231
+ - lib/cavendish/commands/base.rb
232
+ - lib/cavendish/commands/configure_git.rb
233
+ - lib/cavendish/commands/create_expo_project.rb
234
+ - lib/cavendish/config.rb
235
+ - lib/cavendish/utils.rb
236
+ - lib/cavendish/version.rb
237
+ homepage: https://github.com/platanus/cavendish/master
238
+ licenses:
239
+ - MIT
240
+ metadata: {}
241
+ post_install_message:
242
+ rdoc_options: []
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ required_rubygems_version: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ requirements: []
256
+ rubygems_version: 3.1.6
257
+ signing_key:
258
+ specification_version: 4
259
+ summary: React Native + Expo project generator for Platanus
260
+ test_files: []