react_on_rails 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintignore +4 -0
  3. data/.gitignore +2 -1
  4. data/.npmignore +2 -0
  5. data/.rubocop.yml +2 -3
  6. data/CHANGELOG.md +50 -19
  7. data/README.md +37 -4
  8. data/app/helpers/react_on_rails_helper.rb +6 -6
  9. data/docs/additional_reading/rspec_configuration.md +10 -0
  10. data/docs/additional_reading/turbolinks.md +39 -0
  11. data/docs/additional_reading/updating-dependencies.md +33 -0
  12. data/docs/coding-style/style.md +0 -1
  13. data/docs/contributing.md +2 -1
  14. data/docs/doctrine.md +78 -0
  15. data/docs/recommended-project-structure.md +22 -0
  16. data/docs/releasing.md +59 -27
  17. data/lib/generators/react_on_rails/dev_tests_generator.rb +1 -1
  18. data/lib/generators/react_on_rails/generator_messages.rb +1 -1
  19. data/lib/generators/react_on_rails/install_generator.rb +1 -11
  20. data/lib/generators/react_on_rails/templates/base/base/client/package.json.tt +29 -28
  21. data/lib/generators/react_on_rails/templates/base/base/client/server.js +14 -6
  22. data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.base.config.js +4 -2
  23. data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.hot.config.js.tt +2 -2
  24. data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +2 -0
  25. data/lib/generators/react_on_rails/templates/dev_tests/spec/simplecov_helper.rb +1 -1
  26. data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/startup/HelloWorldAppClient.jsx.tt +3 -5
  27. data/lib/generators/react_on_rails/templates/no_redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +3 -5
  28. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/store/helloWorldStore.jsx +4 -3
  29. data/lib/react_on_rails.rb +11 -0
  30. data/lib/react_on_rails/configuration.rb +15 -13
  31. data/lib/react_on_rails/engine.rb +0 -2
  32. data/lib/react_on_rails/ensure_assets_compiled.rb +31 -0
  33. data/lib/react_on_rails/git_utils.rb +12 -0
  34. data/lib/react_on_rails/utils.rb +7 -0
  35. data/lib/react_on_rails/version.rb +1 -1
  36. data/lib/react_on_rails/version_checker.rb +0 -3
  37. data/lib/react_on_rails/version_syntax_converter.rb +3 -5
  38. data/npm-shrinkwrap.json +4253 -0
  39. data/package.json +20 -16
  40. data/rakelib/example_type.rb +5 -6
  41. data/rakelib/examples.rake +1 -0
  42. data/rakelib/lint.rake +2 -2
  43. data/rakelib/release.rake +70 -0
  44. data/rakelib/run_rspec.rake +17 -8
  45. data/rakelib/task_helpers.rb +3 -3
  46. data/react_on_rails.gemspec +2 -2
  47. data/script/release +1 -1
  48. metadata +14 -4
@@ -1,38 +1,40 @@
1
1
  {
2
2
  "name": "react-on-rails",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "react-on-rails JavaScript for react_on_rails Ruby gem",
5
5
  "main": "node_package/lib/ReactOnRails.js",
6
6
  "directories": {
7
7
  "doc": "docs"
8
8
  },
9
- "dependencies": {},
9
+ "dependencies": {
10
+ "babel-types": "^6.4.5"
11
+ },
10
12
  "devDependencies": {
11
- "babel": "^6.3.13",
12
- "babel-cli": "^6.3.17",
13
- "babel-core": "^6.3.17",
13
+ "babel": "^6.3.26",
14
+ "babel-cli": "^6.4.5",
15
+ "babel-core": "^6.4.5",
14
16
  "babel-eslint": "^5.0.0-beta6",
15
- "babel-loader": "^6.2.0",
16
- "babel-plugin-transform-runtime": "^6.3.13",
17
+ "babel-loader": "^6.2.1",
18
+ "babel-plugin-transform-runtime": "^6.4.3",
17
19
  "babel-preset-es2015": "^6.3.13",
18
20
  "babel-preset-react": "^6.3.13",
19
21
  "babel-preset-stage-0": "^6.3.13",
20
- "babel-runtime": "^6.3.13",
22
+ "babel-runtime": "^6.3.19",
21
23
  "babel-tape-runner": "^2.0.0",
22
24
  "babelify": "^7.2.0",
23
25
  "blue-tape": "^0.1.11",
24
26
  "eslint": "^1.10.3",
25
- "eslint-config-airbnb": "^2.1.1",
26
- "eslint-config-shakacode": "0.0.1",
27
+ "eslint-config-airbnb": "^4.0.0",
28
+ "eslint-config-shakacode": "1.0.0",
27
29
  "eslint-plugin-babel": "^3.0.0",
28
- "eslint-plugin-react": "^3.11.3",
29
- "jscs": "^2.6.0",
30
- "react": "^0.14.3",
31
- "react-dom": "^0.14.3",
30
+ "eslint-plugin-react": "^3.16.1",
31
+ "jscs": "^2.8.0",
32
+ "react": "^0.14.6",
33
+ "react-dom": "^0.14.6",
32
34
  "react-transform-hmr": "^1.0.1",
33
35
  "tap-spec": "^4.1.1",
34
36
  "tape": "^4.4.0",
35
- "webpack": "^1.12.9"
37
+ "webpack": "^1.12.12"
36
38
  },
37
39
  "peerDependencies": {
38
40
  "react": ">= 0.14",
@@ -47,7 +49,9 @@
47
49
  "symlink-node-package": "node_package/scripts/symlink-node-package",
48
50
  "prepublish": "npm run build",
49
51
  "build": "node_package/scripts/build",
50
- "lint": "node_package/scripts/lint && cd spec/dummy/client && npm run lint",
52
+ "eslint": "eslint . --ext .jsx and .js",
53
+ "jscs": "jscs . -e -v",
54
+ "lint": "npm run eslint && npm run jscs",
51
55
  "lint:fix": "node_package/scripts/lint-fix",
52
56
  "check": "npm run lint && npm run test",
53
57
  "prerelease": "npm run check && npm run clean && npm run build",
@@ -18,7 +18,7 @@ module ReactOnRails
18
18
 
19
19
  attr_reader :name, :generator_options
20
20
 
21
- def initialize(name:, generator_options:)
21
+ def initialize(name: nil, generator_options: nil)
22
22
  @name = name
23
23
  @generator_options = generator_options
24
24
  self.class.all << self
@@ -86,13 +86,12 @@ module ReactOnRails
86
86
  "--skip-bundle --skip-spring --skip-git --skip-test-unit --skip-active-record"
87
87
  end
88
88
 
89
- # Methods for retrieving the name of a task specific to the example type
90
89
  %w(gen prepare clean clobber npm_install build_webpack_bundles).each do |task_type|
91
- method = "#{task_type}_task_name" # ex: `clean_task_name`
92
- task_name = "#{task_type}_#{name}" # ex: `clean_basic`
90
+ method_name_normal = "#{task_type}_task_name" # ex: `clean_task_name`
91
+ method_name_short = "#{method_name_normal}_short" # ex: `clean_task_name_short`
93
92
 
94
- define_method(method) { "#{self.class.namespace_name}:#{task_name}" }
95
- define_method("#{method}_short") { task_name }
93
+ define_method(method_name_normal) { "#{self.class.namespace_name}:#{task_type}_#{name}" }
94
+ define_method(method_name_short) { "#{task_type}_#{name}" }
96
95
  end
97
96
 
98
97
  def rspec_task_name_short
@@ -64,6 +64,7 @@ namespace :examples do
64
64
  task example_type.gen_task_name_short => example_type.clean_task_name do
65
65
  mkdir_p(example_type.dir)
66
66
  sh_in_dir(examples_dir, "rails new #{example_type.name} #{example_type.rails_options}")
67
+ sh_in_dir(example_type.dir, "touch .gitignore")
67
68
  append_to_gemfile(example_type.gemfile, example_type.required_gems)
68
69
  bundle_install_in(example_type.dir)
69
70
  sh_in_dir(example_type.dir, example_type.generator_shell_commands)
@@ -20,12 +20,12 @@ namespace :lint do
20
20
 
21
21
  desc "Run eslint as shell"
22
22
  task :eslint do
23
- sh_in_dir(gem_root, "$(npm bin)/eslint . --ext .jsx and .js")
23
+ sh_in_dir(gem_root, "npm run eslint")
24
24
  end
25
25
 
26
26
  desc "Run jscs from shell"
27
27
  task :jscs do
28
- sh_in_dir(gem_root, "$(npm bin)/jscs -e -v .")
28
+ sh_in_dir(gem_root, "npm run jscs")
29
29
  end
30
30
 
31
31
  desc "Run all eslint, jscs, rubocop linters. Skip ruby-lint and scss"
@@ -0,0 +1,70 @@
1
+ require_relative "task_helpers"
2
+ include ReactOnRails::TaskHelpers
3
+ require_relative File.join(gem_root, "lib", "react_on_rails", "version_syntax_converter")
4
+ require_relative File.join(gem_root, "lib", "react_on_rails", "git_utils")
5
+ require_relative File.join(gem_root, "lib", "react_on_rails", "utils")
6
+
7
+ desc("Releases both the gem and node package using the given version.
8
+
9
+ IMPORTANT: the gem version must be in valid rubygem format (no dashes).
10
+ It will be automatically converted to a valid npm semver by the rake task
11
+ for the node package version. This only makes a difference for pre-release
12
+ versions such as `3.0.0.beta.1` (npm version would be `3.0.0-beta.1`).
13
+
14
+ This task will also globally install gem-release (ruby gem) and
15
+ release-it (node package) unless you specify skip installing tools.
16
+
17
+ 1st argument: The new version in rubygem format (no dashes). Pass no argument to
18
+ automatically perform a patch version bump.
19
+ 2nd argument: Perform a dry run by passing 'true' as a second argument.
20
+ 3rd argument: Skip installing tools by passing 'false' as a third argument (default is true).
21
+
22
+ Example: `rake release[2.1.0,false,false]`")
23
+
24
+ task :release, [:gem_version, :dry_run, :tools_install] do |_t, args|
25
+ class MessageHandler
26
+ def add_error(error)
27
+ fail error
28
+ end
29
+ end
30
+
31
+ # Check if there are uncommited changes
32
+ ReactOnRails::GitUtils.uncommitted_changes?(MessageHandler.new)
33
+ args_hash = args.to_hash
34
+
35
+ is_dry_run = ReactOnRails::Utils.object_to_boolean(args_hash[:dry_run])
36
+ should_install_tools = ReactOnRails::Utils.object_to_boolean(args_hash.fetch(:tools_install, true))
37
+
38
+ gem_version = args_hash.fetch(:gem_version, "")
39
+
40
+ npm_version = if gem_version.strip.empty?
41
+ ""
42
+ else
43
+ VersionSyntaxConverter.new.rubygem_to_npm(gem_version)
44
+ end
45
+
46
+ # Having the examples prevents publishing
47
+ Rake::Task["examples:clobber"].invoke
48
+
49
+ # See https://github.com/svenfuchs/gem-release
50
+ sh_in_dir(gem_root, "gem install gem-release") if should_install_tools
51
+ sh_in_dir(gem_root, "gem bump --no-commit #{gem_version.strip.empty? ? '' : %(--version #{gem_version})}")
52
+
53
+ # Update dummy app's Gemfile.lock
54
+ bundle_install_in(dummy_app_dir)
55
+
56
+ # Stage changes so far
57
+ sh_in_dir(gem_root, "git add .")
58
+
59
+ # See https://www.npmjs.com/package/release-it
60
+ sh %(npm install release-it -g) if should_install_tools
61
+
62
+ # Will bump the npm version, commit, tag the commit, push to repo, and release on npm
63
+ release_it_command = "release-it --non-interactive --npm.publish"
64
+ release_it_command << " --dry-run --verbose" if is_dry_run
65
+ release_it_command << " #{npm_version}" unless npm_version.strip.empty?
66
+ sh_in_dir(gem_root, release_it_command)
67
+
68
+ # Release the new gem version
69
+ sh_in_dir(gem_root, "gem release") unless is_dry_run
70
+ end
@@ -9,18 +9,18 @@ include ReactOnRails::TaskHelpers
9
9
  namespace :run_rspec do
10
10
  desc "Run RSpec for top level only"
11
11
  task :gem do
12
- run_tests_in("", rspec_args: "spec/react_on_rails")
12
+ run_tests_in("", rspec_args: File.join("spec", "react_on_rails"))
13
13
  end
14
14
 
15
15
  task dummy: ["dummy_apps:dummy_app"] do
16
- run_tests_in("spec/dummy", env_vars: "DRIVER=selenium_firefox")
16
+ run_tests_in(File.join("spec", "dummy"), env_vars: "DRIVER=selenium_firefox")
17
17
  end
18
18
 
19
19
  # Dynamically define Rake tasks for each example app found in the examples directory
20
20
  ExampleType.all.each do |example_type|
21
21
  desc "Runs RSpec for #{example_type.name_pretty} only"
22
22
  task example_type.rspec_task_name_short => example_type.prepare_task_name do
23
- run_tests_in("#{File.basename(examples_dir)}/#{example_type.name}") # have to use relative path
23
+ run_tests_in(File.join(examples_dir, example_type.name)) # have to use relative path
24
24
  end
25
25
  end
26
26
 
@@ -52,14 +52,23 @@ task run_rspec: ["run_rspec:run_rspec"]
52
52
 
53
53
  private
54
54
 
55
- # Runs rspec in the given directory (if string is passed, assumed to be relative
56
- # to root of the gem.
55
+ # Runs rspec in the given directory.
56
+ # If string is passed and it's not absolute, it's converted relative to root of the gem.
57
57
  # TEST_ENV_COMMAND_NAME is used to make SimpleCov.command_name unique in order to
58
58
  # prevent a name collision. Defaults to the given directory's name.
59
59
  def run_tests_in(dir, options = {})
60
- dir = Pathname.new(File.join(gem_root, dir)) if dir.is_a?(String)
61
- command_name = options.fetch(:command_name, dir.basename)
60
+ if dir.is_a?(String)
61
+ path = if dir.start_with?(File::SEPARATOR)
62
+ Pathname.new(dir)
63
+ else
64
+ Pathname.new(File.join(gem_root, dir))
65
+ end
66
+ else
67
+ path = dir
68
+ end
69
+
70
+ command_name = options.fetch(:command_name, path.basename)
62
71
  rspec_args = options.fetch(:rspec_args, "")
63
72
  env_vars = %(#{options.fetch(env_vars, '')} COVERAGE=true TEST_ENV_COMMAND_NAME="#{command_name}")
64
- sh_in_dir(dir, "#{env_vars} bundle exec rspec #{rspec_args}")
73
+ sh_in_dir(path.realpath, "#{env_vars} bundle exec rspec #{rspec_args}")
65
74
  end
@@ -7,10 +7,10 @@ module ReactOnRails
7
7
 
8
8
  # Returns the folder where examples are located
9
9
  def examples_dir
10
- File.join(gem_root, "examples")
10
+ File.join(gem_root, "gen-examples", "examples")
11
11
  end
12
12
 
13
- def dummy_app_dirs
13
+ def dummy_app_dir
14
14
  File.join(gem_root, "spec/dummy")
15
15
  end
16
16
 
@@ -25,7 +25,7 @@ module ReactOnRails
25
25
  end
26
26
 
27
27
  # Runs bundle exec using that directory's Gemfile
28
- def bundle_exec(dir:, args:, env_vars: "")
28
+ def bundle_exec(dir: nil, args: nil, env_vars: "")
29
29
  sh_in_dir(dir, "#{env_vars} #{args}")
30
30
  end
31
31
 
@@ -14,14 +14,14 @@ Gem::Specification.new do |s|
14
14
  s.homepage = "https://github.com/shakacode/react_on_rails"
15
15
  s.license = "MIT"
16
16
 
17
- s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|examples|node_modules|node_package|coverage)/}) }
17
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|gen-examples|tmp|node_modules|node_package|coverage)/}) }
18
18
  s.bindir = "exe"
19
19
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
22
  s.add_dependency "connection_pool"
23
23
  s.add_dependency "execjs", "~> 2.5"
24
- s.add_dependency "rainbow", "~> 2.0"
24
+ s.add_dependency "rainbow", "~> 2.1"
25
25
  s.add_dependency "rails", ">= 3.2"
26
26
 
27
27
  s.add_development_dependency "bundler", "~> 1.10"
@@ -1,3 +1,3 @@
1
1
  #!/bin/bash
2
2
 
3
- echo see docs/releasing.md
3
+ echo "See `rake -D release`"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Gordon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-19 00:00:00.000000000 Z
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '2.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.0'
54
+ version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rails
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -294,15 +294,20 @@ files:
294
294
  - docs/additional_reading/optional_configuration.md
295
295
  - docs/additional_reading/react-and-redux.md
296
296
  - docs/additional_reading/react_router.md
297
+ - docs/additional_reading/rspec_configuration.md
297
298
  - docs/additional_reading/server_rendering_tips.md
298
299
  - docs/additional_reading/tips.md
300
+ - docs/additional_reading/turbolinks.md
301
+ - docs/additional_reading/updating-dependencies.md
299
302
  - docs/additional_reading/webpack.md
300
303
  - docs/code_of_conduct.md
301
304
  - docs/coding-style/linters.md
302
305
  - docs/coding-style/style.md
303
306
  - docs/contributing.md
307
+ - docs/doctrine.md
304
308
  - docs/generator_testing.md
305
309
  - docs/rails3.md
310
+ - docs/recommended-project-structure.md
306
311
  - docs/releasing.md
307
312
  - docs/tutorial-v2.md
308
313
  - lib/generators/USAGE
@@ -374,11 +379,15 @@ files:
374
379
  - lib/react_on_rails.rb
375
380
  - lib/react_on_rails/configuration.rb
376
381
  - lib/react_on_rails/engine.rb
382
+ - lib/react_on_rails/ensure_assets_compiled.rb
383
+ - lib/react_on_rails/git_utils.rb
377
384
  - lib/react_on_rails/prerender_error.rb
378
385
  - lib/react_on_rails/server_rendering_pool.rb
386
+ - lib/react_on_rails/utils.rb
379
387
  - lib/react_on_rails/version.rb
380
388
  - lib/react_on_rails/version_checker.rb
381
389
  - lib/react_on_rails/version_syntax_converter.rb
390
+ - npm-shrinkwrap.json
382
391
  - package.json
383
392
  - rakelib/docker.rake
384
393
  - rakelib/dummy_apps.rake
@@ -387,6 +396,7 @@ files:
387
396
  - rakelib/examples_config.yml
388
397
  - rakelib/lint.rake
389
398
  - rakelib/node_package.rake
399
+ - rakelib/release.rake
390
400
  - rakelib/run_rspec.rake
391
401
  - rakelib/task_helpers.rb
392
402
  - react_on_rails.gemspec