react_on_rails 2.0.2 → 2.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 (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