You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+67-14Lines changed: 67 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ If you're new to Hyperstack but have experience with Ruby (and Rails) and would
5
5
that way you understand the basic capabilities and lingo of Hyperstack.
6
6
7
7
Next would be to start an experimental project that's based on the *edge* Hyperstack codebase.
8
-
If you just want to build a website with Hyperstack without contributing to Hyperstack itself you're better of sticking to released versions of Hyperstack.
8
+
If you just want to build a project with Hyperstack without contributing to Hyperstack itself you're better of sticking to released versions of Hyperstack.
9
9
But presuming you do want to contribute you can change you `Gemfile` in the following way to get your project on *edge*.
10
10
11
11
```ruby
@@ -27,22 +27,45 @@ The *edge* branch is the latest work in progress, where specs (automated tests)
27
27
The difference between *edge* and *master*, is that *master* guarantees that all specs across all gems pass, plus *master* is the branch from which new versions are released.
28
28
29
29
With this configuration you can track development of Hyperstack itself and discuss changes with the other developers.
30
-
It's the basic starting point from which you can make different types of contributions listed below under the separate headings.
31
30
32
-
## If you would like to contribute code to Hyperstack
31
+
In the following sections we explain how to make different types of contributions.
32
+
- Contributing code to Hyperstack
33
+
- Running tests for your code
34
+
- Adding your own tests
35
+
- Improving the Hyperstack documentation
36
+
- If you think you can improve the website
37
+
- When you find a possible bug
38
+
- Fixing a bug
39
+
40
+
## Contributing code to Hyperstack
33
41
34
42
With the `Gemfile` configuration above you can track Hyperstack development. But you can't contribute code.
35
43
36
44
For that you need to `git clone https://github.com/hyperstack-org/hyperstack.git`
37
45
Cd into the directory `cd hyperstack`
38
46
And change to the *edge* branch: `git checkout edge` (*edge* is the default branch but just to be sure).
39
47
40
-
Now you're free to fix bugs and create new features.
41
-
Reconfigure the `Gemfile` of your website project with a [filesystem path](https://bundler.io/gemfile.html) to create a local development environment.
48
+
This gives you a local copy of the Hyperstack codebase on your system.
49
+
You will have to reconfigure the `Gemfile` of your own website project with a [filesystem path](https://bundler.io/gemfile.html) so it uses this local Hyperstack copy.
#gem 'hyper-store', path: '~/path/to/hyperstack/ruby/hyper-store' # Extra (legacy?)
44
62
```
45
-
And if your improvements could be interesting to others then push it to Github and create a pull request.
63
+
64
+
Or use `bundle config local.GEM_NAME /path/to/hyperstack` as described [here](https://rossta.net/blog/how-to-specify-local-ruby-gems-in-your-gemfile.html). But I would recommend the Gemfile with a local path approach.
65
+
Use `bundle config --delete local.GEM_NAME` to remove a `bundle config local` configuration.
66
+
67
+
This setup provides a local Hyperstack development environment. You're now able to fix bugs and create new features within the Hyperstack code itself.
68
+
If your improvements could be interesting to others then push it to Github and create a pull request.
46
69
Then keep reminding the existing developers that you would like your code pulled into the Hyperstack repository.
47
70
When they find the time to look at it and like your code they will kindly ask you to also write some specs before your code is merged. That's a good thing, your code is considered valuable, but does require those tests.
48
71
Please understand that your code can also be rejected because it has security issues, is slow, hard to maintain or buggy (among other things).
@@ -54,7 +77,37 @@ But Hyperstack and Opal are quite happily pushing boundaries, so we might like y
54
77
55
78
Hyperstack's [license is MIT](https://github.com/hyperstack-org/hyperstack/blob/edge/LICENSE). All code contributions must be under this license. If code is submitted under a different open source license then this must be explicitly stated. Preferably with an explanation why it can't be MIT.
56
79
57
-
## If you would like to improve the Hyperstack documentation
80
+
### Running tests for your code
81
+
82
+
Hyperstack has a comprehensive automated test system. Changes to code must be accompanied with the necessary tests.
83
+
This is how you setup the test environment on your local development system:
84
+
85
+
- You do the `git clone https://github.com/hyperstack-org/hyperstack.git` as before.
86
+
- Now you enter the gem you would like to run the tests for. Lets say you change directory to the hyper-model gem `cd ~/path/to/hyperstack/ruby/hyper-model`
87
+
- Optionally but recommended: Create a RVM environment by adding the `.ruby-gemset` and `.ruby-version` files, run `cd .` to reload RVM.
88
+
- Install bundler `gem install bundler` then run `bundle install` to pull in the gems needed for testing.
89
+
- Then you have to setup the test environment by running `rake spec:prepare`, this creates the test database and tables.
90
+
91
+
After this call `rspec spec` to run the tests.
92
+
93
+
If all test pass you know your changes to the Hyperstack code did not break any existing functionality.
94
+
Please understand that tests can sometimes be flaky, re-run tests if needed. Sometimes it's just the phase of the moon.
95
+
96
+
### Adding your own tests
97
+
98
+
Cleaning up and improving the existing tests is a great and "safe" way to contribute and get experience with the Hyperstack codebase.
99
+
100
+
**TODO:** Pointers about directory structure.
101
+
102
+
- Test one thing at a time, don't write one large test.
103
+
- Check the before state, call the code you want to test, check if the before state has changed to the expected state.
104
+
- Test the interface, the internals of the implementation should keep some flexibility.
105
+
- Watch out with testing things that use Date/Time, you don't want your test to fail when it's run on the 29th of February or when run in a different timezone.
106
+
- Don't check if `string1.include?(string2)` if string2 can be an empty string, like "". As that would pass.
107
+
- Tests are a development tool, flaky or slow tests that don't cover enough have a negative value.
108
+
- Test your feature with different types of input (nil, empty string, empty array, false, zero, negative dates). Don't test with every day of the year if it exesersizes the same codepath as with the other dates.
109
+
110
+
## Improving the Hyperstack documentation
58
111
59
112
Each page on [the website](https://hyperstack.org) has an ***Improve this page*** button which will allow you to edit the underlying markdown file on Github and create a ***pull request***. This is to make it as easy as possible to contribute to the documentation.
60
113
And make small fixes quickly.
@@ -69,19 +122,19 @@ The website's code can be found in [this repository](https://github.com/hypersta
69
122
By running `git clone https://github.com/hyperstack-org/website.git` you can check out your own copy.
70
123
Please note that this repository does not contain the documentation. The website pulls the most recent markdown files from the *edge* hyperstack repository.
71
124
72
-
Before you write code to change the website, please create an issue describing your plans and reach out to us in the Gitter chat. Our goal for this site is that it acts as a showcase for all that Hyperstack can do, so your creativity is very welcome.
125
+
Before you write code to change the website, please create an issue describing your plans and reach out to us in Slack chat. Our goal for this site is that it acts as a showcase for all that Hyperstack can do, so your creativity is very welcome.
73
126
74
-
## If you found a possible bug
127
+
## When you find a possible bug
75
128
76
-
You can ask on [gitter chat](https://gitter.im/ruby-hyperloop/chat) if you're making a mistake or actually found a bug.
77
-
Also check the GitHub issue list and if you don't find it mentioned there, please create an issue.
129
+
You can ask on [Slack chat](https://hyperstack-org.slack.com) if you're making a mistake or actually found a bug. (get a account via the "Join Slack" button on the [homepage](https://hyperstack.org))
130
+
Also check the [GitHub issue list](https://github.com/hyperstack-org/hyperstack/issues) and if you don't find it mentioned there, please create an issue.
78
131
If you can reproduce the problem in a branch you push to GitHub we will love you even more.
79
132
80
133
We also have a [feature matrix](https://github.com/hyperstack-org/hyperstack/blob/edge/docs/feature_matrix.md), which is an attempt to list known issues and the current status.
81
134
Having people expanding and maintaining this table would be excellent.
82
135
83
-
## If you would like to fix a bug
136
+
## Fixing a bug
84
137
85
-
Please ask in [gitter chat](https://gitter.im/ruby-hyperloop/chat) if you need pointers. There is always tons to do so we would appreciate the help.
138
+
Please ask in [Slack chat](https://hyperstack-org.slack.com) if you need pointers. There is always tons to do so we would appreciate the help.
86
139
You can see the list of GitHub issues labelled '[Help Wanted](https://github.com/hyperstack-org/hyperstack/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)'
87
140
or look at the [feature matrix](https://github.com/hyperstack-org/hyperstack/blob/edge/docs/feature_matrix.md) for things that have the status 'bugged'.
0 commit comments