phraseapp_updater 2.1.1 → 3.0.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.
- checksums.yaml +4 -4
- data/bin/phraseapp_common.sh +13 -7
- data/bin/synchronize_phraseapp.sh +4 -4
- data/lib/phraseapp_updater/phraseapp_api.rb +134 -98
- data/lib/phraseapp_updater/version.rb +1 -1
- data/lib/phraseapp_updater.rb +5 -4
- metadata +13 -28
- data/.circleci/config.yml +0 -98
- data/.envrc +0 -1
- data/.gitignore +0 -9
- data/.rspec +0 -2
- data/.travis.yml +0 -5
- data/CODE_OF_CONDUCT.markdown +0 -50
- data/Gemfile +0 -8
- data/README.markdown +0 -177
- data/Rakefile +0 -7
- data/nix/gem/Gemfile +0 -24
- data/nix/gem/Gemfile.lock +0 -68
- data/nix/gem/gemset.nix +0 -230
- data/nix/generate.rb +0 -41
- data/phraseapp_updater.gemspec +0 -35
- data/shell.nix +0 -10
data/.circleci/config.yml
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
version: 2.1
|
2
|
-
|
3
|
-
executors:
|
4
|
-
ruby:
|
5
|
-
parameters:
|
6
|
-
ruby-version:
|
7
|
-
type: string
|
8
|
-
default: "2.6"
|
9
|
-
gemfile:
|
10
|
-
type: string
|
11
|
-
default: "Gemfile"
|
12
|
-
docker:
|
13
|
-
- image: circleci/ruby:<< parameters.ruby-version >>
|
14
|
-
environment:
|
15
|
-
BUNDLE_JOBS: 3
|
16
|
-
BUNDLE_RETRY: 3
|
17
|
-
BUNDLE_PATH: vendor/bundle
|
18
|
-
RAILS_ENV: test
|
19
|
-
BUNDLE_GEMFILE: << parameters.gemfile >>
|
20
|
-
|
21
|
-
jobs:
|
22
|
-
test:
|
23
|
-
parameters:
|
24
|
-
ruby-version:
|
25
|
-
type: string
|
26
|
-
executor:
|
27
|
-
name: ruby
|
28
|
-
ruby-version: << parameters.ruby-version >>
|
29
|
-
parallelism: 1
|
30
|
-
steps:
|
31
|
-
- checkout
|
32
|
-
|
33
|
-
- run:
|
34
|
-
# Remove the non-appraisal gemfile for safety: we never want to use it.
|
35
|
-
name: Prepare bundler
|
36
|
-
command: bundle -v
|
37
|
-
|
38
|
-
- run:
|
39
|
-
name: Compute a gemfile lock
|
40
|
-
command: bundle lock && cp "${BUNDLE_GEMFILE}.lock" /tmp/gem-lock
|
41
|
-
|
42
|
-
- restore_cache:
|
43
|
-
keys:
|
44
|
-
- phraseapp_updater-v2-<< parameters.ruby-version >>-{{ checksum "/tmp/gem-lock" }}
|
45
|
-
- phraseapp_updater-v2
|
46
|
-
|
47
|
-
- run:
|
48
|
-
name: Bundle Install
|
49
|
-
command: bundle check || bundle install
|
50
|
-
|
51
|
-
- save_cache:
|
52
|
-
key: phraseapp_updater-v2-<< parameters.ruby-version >>-{{ checksum "/tmp/gem-lock" }}
|
53
|
-
paths:
|
54
|
-
- vendor/bundle
|
55
|
-
|
56
|
-
- run:
|
57
|
-
name: Run rspec
|
58
|
-
command: bundle exec rspec --profile 10 --format RspecJunitFormatter --out test_results/rspec.xml --format progress
|
59
|
-
|
60
|
-
- store_test_results:
|
61
|
-
path: test_results
|
62
|
-
|
63
|
-
publish:
|
64
|
-
executor: ruby
|
65
|
-
steps:
|
66
|
-
- checkout
|
67
|
-
- run:
|
68
|
-
name: Setup Rubygems
|
69
|
-
command: |
|
70
|
-
mkdir ~/.gem &&
|
71
|
-
echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials &&
|
72
|
-
chmod 0600 ~/.gem/credentials
|
73
|
-
- run:
|
74
|
-
name: Publish to Rubygems
|
75
|
-
command: |
|
76
|
-
gem build phraseapp_updater.gemspec
|
77
|
-
gem push phraseapp_updater-*.gem
|
78
|
-
|
79
|
-
|
80
|
-
workflows:
|
81
|
-
version: 2.1
|
82
|
-
build:
|
83
|
-
jobs:
|
84
|
-
- test:
|
85
|
-
name: 'ruby 2.5'
|
86
|
-
ruby-version: "2.5"
|
87
|
-
- test:
|
88
|
-
name: 'ruby 2.6'
|
89
|
-
ruby-version: "2.6"
|
90
|
-
- publish:
|
91
|
-
requires:
|
92
|
-
- 'ruby 2.5'
|
93
|
-
- 'ruby 2.6'
|
94
|
-
filters:
|
95
|
-
branches:
|
96
|
-
only: master
|
97
|
-
tags:
|
98
|
-
ignore: /.*/
|
data/.envrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
eval "$(lorri direnv)"
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
data/CODE_OF_CONDUCT.markdown
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
# Contributor Code of Conduct
|
2
|
-
|
3
|
-
As contributors and maintainers of this project, and in the interest of
|
4
|
-
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
-
contribute through reporting issues, posting feature requests, updating
|
6
|
-
documentation, submitting pull requests or patches, and other activities.
|
7
|
-
|
8
|
-
We are committed to making participation in this project a harassment-free
|
9
|
-
experience for everyone, regardless of level of experience, gender, gender
|
10
|
-
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
-
body size, race, ethnicity, age, religion, or nationality.
|
12
|
-
|
13
|
-
Examples of unacceptable behavior by participants include:
|
14
|
-
|
15
|
-
* The use of sexualized language or imagery
|
16
|
-
* Personal attacks
|
17
|
-
* Trolling or insulting/derogatory comments
|
18
|
-
* Public or private harassment
|
19
|
-
* Publishing other's private information, such as physical or electronic
|
20
|
-
addresses, without explicit permission
|
21
|
-
* Other unethical or unprofessional conduct
|
22
|
-
|
23
|
-
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
-
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
-
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
-
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
-
threatening, offensive, or harmful.
|
28
|
-
|
29
|
-
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
-
fairly and consistently applying these principles to every aspect of managing
|
31
|
-
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
-
Conduct may be permanently removed from the project team.
|
33
|
-
|
34
|
-
This code of conduct applies both within project spaces and in public spaces
|
35
|
-
when an individual is representing the project or its community.
|
36
|
-
|
37
|
-
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
-
reported by contacting a project maintainer at kev@bibo.com.ph. All
|
39
|
-
complaints will be reviewed and investigated and will result in a response that
|
40
|
-
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
-
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
-
incident.
|
43
|
-
|
44
|
-
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
-
version 1.3.0, available at
|
46
|
-
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
-
|
48
|
-
[homepage]: http://contributor-covenant.org
|
49
|
-
[version]: http://contributor-covenant.org/version/1/3/0/
|
50
|
-
|
data/Gemfile
DELETED
data/README.markdown
DELETED
@@ -1,177 +0,0 @@
|
|
1
|
-
# PhraseAppUpdater
|
2
|
-
|
3
|
-
[](https://travis-ci.org/iknow/phraseapp_updater)
|
4
|
-
|
5
|
-
**Version** 2.0.0
|
6
|
-
|
7
|
-
This is a tool for managing synchronization between locale data in
|
8
|
-
[PhraseApp](https://phraseapp.com) and committed in your project. It can perform
|
9
|
-
JSON-aware three-way merges with respect to a common ancestor, and maintains a
|
10
|
-
record of the common ancestor on PhraseApp using tags.
|
11
|
-
|
12
|
-
Our workflow considers localization data stored on PhraseApp to be a working
|
13
|
-
copy for a given branch. We expect developers working on the code and
|
14
|
-
translators working on PhraseApp to both be able to make changes and have them
|
15
|
-
integrated.
|
16
|
-
|
17
|
-
PhraseApp provides [APIs](https://phraseapp.com/docs/api/v2/) and a [Ruby
|
18
|
-
gem](https://github.com/phrase/phraseapp-ruby) for accessing them, but the API
|
19
|
-
only allows either a) completely overwriting PhraseApp's data with local data or
|
20
|
-
b) reapplying PhraseApp's data on top of the local data. Neither of these cases
|
21
|
-
is appropriate for integrating changes made on both sides.
|
22
|
-
|
23
|
-
What we want instead is a three way merge where the committed data wins on
|
24
|
-
conflict. Non-conflicting changes on PhraseApp are preserved, while changes to
|
25
|
-
the same key on both sides take the committed data. The result of the merge is
|
26
|
-
then applied to both sides, keeping them up to date with each other.
|
27
|
-
|
28
|
-
This is especially important when removing keys. Imagine we have the
|
29
|
-
following, no-longer useful key:
|
30
|
-
|
31
|
-
```json
|
32
|
-
unused:
|
33
|
-
one: An unused
|
34
|
-
```
|
35
|
-
|
36
|
-
On PhraseApp, we've added another plural form:
|
37
|
-
|
38
|
-
|
39
|
-
```json
|
40
|
-
unused:
|
41
|
-
one: An unused
|
42
|
-
zero: No unused's
|
43
|
-
```
|
44
|
-
|
45
|
-
And in our feature branch, we remove it. The result we want is that the key
|
46
|
-
completely disappears, instead of getting a result like either of the above.
|
47
|
-
|
48
|
-
## Installation
|
49
|
-
|
50
|
-
This gem provides a command line interface for performing the
|
51
|
-
merge and uploading the result to PhraseApp. To use it, install the gem:
|
52
|
-
|
53
|
-
`gem install phraseapp_updater`
|
54
|
-
|
55
|
-
You may also use this gem programatically from your own application.
|
56
|
-
|
57
|
-
Add this line to your application's Gemfile:
|
58
|
-
|
59
|
-
```ruby
|
60
|
-
gem 'phraseapp_updater'
|
61
|
-
```
|
62
|
-
|
63
|
-
And then execute:
|
64
|
-
|
65
|
-
$ bundle
|
66
|
-
|
67
|
-
Or install it yourself as:
|
68
|
-
|
69
|
-
$ gem install phraseapp_updater
|
70
|
-
|
71
|
-
## Usage
|
72
|
-
|
73
|
-
CLI
|
74
|
-
---
|
75
|
-
|
76
|
-
**Setup**
|
77
|
-
|
78
|
-
`phraseapp_updater setup` creates and initializes a PhraseApp project
|
79
|
-
corresponding to your branch. It must be provided with the current git revision
|
80
|
-
of the branch and the path to the locale files.
|
81
|
-
|
82
|
-
```
|
83
|
-
phraseapp_updater setup --phraseapp_project_name=<yourbranch> --parent_commit=<yourhash> --phraseapp_api_key=<yourkey> --file-format=json <path_to_locales>
|
84
|
-
```
|
85
|
-
|
86
|
-
**Synchronize**
|
87
|
-
|
88
|
-
`phraseapp_updater synchronize` synchronizes a git remote branch with its
|
89
|
-
corresponding PhraseApp project, incorporating changes from each side into the
|
90
|
-
other. If both sides were changed, a three-way merge is performed. The result is
|
91
|
-
uploaded to PhraseApp and committed and pushed to the git remote as appropriate.
|
92
|
-
|
93
|
-
The option `--no_commit` may be provided to restrict changes to the PhraseApp
|
94
|
-
side. If specified, then in the case that the branch was modified, the merge
|
95
|
-
result will be uploaded to PhraseApp and the common ancestor updated to the
|
96
|
-
branch head.
|
97
|
-
|
98
|
-
```
|
99
|
-
phraseapp_updater synchronize <checkout_path> --prefix=config/locales --phraseapp_project_id=<yourid> --phraseapp_api_key=<yourkey> --file-format=json
|
100
|
-
```
|
101
|
-
|
102
|
-
**Download**
|
103
|
-
|
104
|
-
`phraseapp_updater download` downloads and normalizes locale files from
|
105
|
-
PhraseApp, saving them to the specified location. The revision of the recorded
|
106
|
-
common ancestor is printed to standard out.
|
107
|
-
|
108
|
-
```
|
109
|
-
phraseapp_updater download --phraseapp_project_id=<yourid> --phraseapp_api_key=<yourkey> --file-format=json <target_path>
|
110
|
-
```
|
111
|
-
|
112
|
-
**Upload**
|
113
|
-
|
114
|
-
`phraseapp_updater upload` uploads normalized locale files from your branch to
|
115
|
-
PhraseApp and resets the recorded common ancestor to the specified revision.
|
116
|
-
|
117
|
-
```
|
118
|
-
phraseapp_updater upload --phraseapp_project_id=<yourid> --phraseapp_api_key=<yourkey> --file-format=json <path_to_locales>
|
119
|
-
```
|
120
|
-
|
121
|
-
**Update Parent Commit**
|
122
|
-
`phraseapp_updater update_parent_commit` records a new common ancestor on
|
123
|
-
PhraseApp without changing the locales.
|
124
|
-
|
125
|
-
```
|
126
|
-
phraseapp_updater update_parent_commit --phraseapp_project_id=<yourid> --phraseapp_api_key=<yourkey> --parent_commit=<yournewhash>
|
127
|
-
```
|
128
|
-
|
129
|
-
**Merge**
|
130
|
-
|
131
|
-
`phraseapp_updater merge` performs a content-aware three-way merge between
|
132
|
-
locale files in three directories: `ancestor_path`, `our_path`, and
|
133
|
-
`their_path`. In the case of conflicts, the changes from `our_path` are
|
134
|
-
accepted. The results are normalized and written to the path specified with
|
135
|
-
`to`.
|
136
|
-
|
137
|
-
```
|
138
|
-
phraseapp_updater merge ancestor_path our_path their_path --to target_path --file-format=json
|
139
|
-
```
|
140
|
-
|
141
|
-
|
142
|
-
**Diff**
|
143
|
-
|
144
|
-
Performs a content-aware diff between locale files in two directories. Returns
|
145
|
-
with exit status 1 or 0 to signal differences or no differences respectively
|
146
|
-
|
147
|
-
```
|
148
|
-
phraseapp_updater diff path1 path2 --file-format=json
|
149
|
-
```
|
150
|
-
|
151
|
-
## Future Improvements
|
152
|
-
|
153
|
-
If you'd like to contribute, these would be very helpful!
|
154
|
-
|
155
|
-
* We'd like to use "unverified" translations on PhraseApp as the equivalent of
|
156
|
-
an unstaged working copy. For this to work, we need to be able to recover
|
157
|
-
previous translations at the same key. While PhraseApp doesn't itself keep
|
158
|
-
this history, we could do this by restoring the absent keys from the diff
|
159
|
-
between verified and unverified download from the common ancestor.
|
160
|
-
* Expose the changed files on the command line.
|
161
|
-
* Checking if PhraseApp files changed during execution before upload, to reduce the race condition window.
|
162
|
-
* More specs for the API and shell.
|
163
|
-
|
164
|
-
## Development
|
165
|
-
|
166
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
167
|
-
|
168
|
-
To install this gem onto your local machine, run `bundle exec rake install`. When everything is working, make a pull request.
|
169
|
-
|
170
|
-
## Contributing
|
171
|
-
|
172
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/iknow/phraseapp_updater. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
173
|
-
|
174
|
-
## License
|
175
|
-
|
176
|
-
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
177
|
-
|
data/Rakefile
DELETED
data/nix/gem/Gemfile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
source "https://rubygems.org/"
|
2
|
-
|
3
|
-
gem "byebug", "11.0.1"
|
4
|
-
gem "coderay", "1.1.2"
|
5
|
-
gem "deep_merge", "1.2.1"
|
6
|
-
gem "diff-lcs", "1.3"
|
7
|
-
gem "hashdiff", "0.4.0"
|
8
|
-
gem "io-console", "0.5.4"
|
9
|
-
gem "irb", "1.2.1"
|
10
|
-
gem "method_source", "0.9.2"
|
11
|
-
gem "multi_json", "1.14.1"
|
12
|
-
gem "oj", "2.18.5"
|
13
|
-
gem "parallel", "1.19.1"
|
14
|
-
gem "phraseapp-ruby", "1.6.0"
|
15
|
-
gem "pry", "0.12.2"
|
16
|
-
gem "rake", "10.5.0"
|
17
|
-
gem "reline", "0.1.2"
|
18
|
-
gem "rspec", "3.8.0"
|
19
|
-
gem "rspec-core", "3.8.0"
|
20
|
-
gem "rspec-expectations", "3.8.3"
|
21
|
-
gem "rspec-mocks", "3.8.0"
|
22
|
-
gem "rspec-support", "3.8.0"
|
23
|
-
gem "rspec_junit_formatter", "0.4.1"
|
24
|
-
gem "thor", "0.20.3"
|
data/nix/gem/Gemfile.lock
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
byebug (11.0.1)
|
5
|
-
coderay (1.1.2)
|
6
|
-
deep_merge (1.2.1)
|
7
|
-
diff-lcs (1.3)
|
8
|
-
hashdiff (0.4.0)
|
9
|
-
io-console (0.5.4)
|
10
|
-
irb (1.2.1)
|
11
|
-
reline (>= 0.0.1)
|
12
|
-
method_source (0.9.2)
|
13
|
-
multi_json (1.14.1)
|
14
|
-
oj (2.18.5)
|
15
|
-
parallel (1.19.1)
|
16
|
-
phraseapp-ruby (1.6.0)
|
17
|
-
pry (0.12.2)
|
18
|
-
coderay (~> 1.1.0)
|
19
|
-
method_source (~> 0.9.0)
|
20
|
-
rake (10.5.0)
|
21
|
-
reline (0.1.2)
|
22
|
-
io-console (~> 0.5)
|
23
|
-
rspec (3.8.0)
|
24
|
-
rspec-core (~> 3.8.0)
|
25
|
-
rspec-expectations (~> 3.8.0)
|
26
|
-
rspec-mocks (~> 3.8.0)
|
27
|
-
rspec-core (3.8.0)
|
28
|
-
rspec-support (~> 3.8.0)
|
29
|
-
rspec-expectations (3.8.3)
|
30
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
31
|
-
rspec-support (~> 3.8.0)
|
32
|
-
rspec-mocks (3.8.0)
|
33
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
34
|
-
rspec-support (~> 3.8.0)
|
35
|
-
rspec-support (3.8.0)
|
36
|
-
rspec_junit_formatter (0.4.1)
|
37
|
-
rspec-core (>= 2, < 4, != 2.12.0)
|
38
|
-
thor (0.20.3)
|
39
|
-
|
40
|
-
PLATFORMS
|
41
|
-
ruby
|
42
|
-
|
43
|
-
DEPENDENCIES
|
44
|
-
byebug (= 11.0.1)
|
45
|
-
coderay (= 1.1.2)
|
46
|
-
deep_merge (= 1.2.1)
|
47
|
-
diff-lcs (= 1.3)
|
48
|
-
hashdiff (= 0.4.0)
|
49
|
-
io-console (= 0.5.4)
|
50
|
-
irb (= 1.2.1)
|
51
|
-
method_source (= 0.9.2)
|
52
|
-
multi_json (= 1.14.1)
|
53
|
-
oj (= 2.18.5)
|
54
|
-
parallel (= 1.19.1)
|
55
|
-
phraseapp-ruby (= 1.6.0)
|
56
|
-
pry (= 0.12.2)
|
57
|
-
rake (= 10.5.0)
|
58
|
-
reline (= 0.1.2)
|
59
|
-
rspec (= 3.8.0)
|
60
|
-
rspec-core (= 3.8.0)
|
61
|
-
rspec-expectations (= 3.8.3)
|
62
|
-
rspec-mocks (= 3.8.0)
|
63
|
-
rspec-support (= 3.8.0)
|
64
|
-
rspec_junit_formatter (= 0.4.1)
|
65
|
-
thor (= 0.20.3)
|
66
|
-
|
67
|
-
BUNDLED WITH
|
68
|
-
1.17.3
|
data/nix/gem/gemset.nix
DELETED
@@ -1,230 +0,0 @@
|
|
1
|
-
{
|
2
|
-
byebug = {
|
3
|
-
groups = ["default"];
|
4
|
-
platforms = [];
|
5
|
-
source = {
|
6
|
-
remotes = ["https://rubygems.org"];
|
7
|
-
sha256 = "1mmkls9n56l4gx2k0dnyianwz36z2zgpxli5bpsbr7jbw7hn2x6j";
|
8
|
-
type = "gem";
|
9
|
-
};
|
10
|
-
version = "11.0.1";
|
11
|
-
};
|
12
|
-
coderay = {
|
13
|
-
groups = ["default"];
|
14
|
-
platforms = [];
|
15
|
-
source = {
|
16
|
-
remotes = ["https://rubygems.org"];
|
17
|
-
sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
|
18
|
-
type = "gem";
|
19
|
-
};
|
20
|
-
version = "1.1.2";
|
21
|
-
};
|
22
|
-
deep_merge = {
|
23
|
-
groups = ["default"];
|
24
|
-
platforms = [];
|
25
|
-
source = {
|
26
|
-
remotes = ["https://rubygems.org"];
|
27
|
-
sha256 = "1q3picw7zx1xdkybmrnhmk2hycxzaa0jv4gqrby1s90dy5n7fmsb";
|
28
|
-
type = "gem";
|
29
|
-
};
|
30
|
-
version = "1.2.1";
|
31
|
-
};
|
32
|
-
diff-lcs = {
|
33
|
-
groups = ["default"];
|
34
|
-
platforms = [];
|
35
|
-
source = {
|
36
|
-
remotes = ["https://rubygems.org"];
|
37
|
-
sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
|
38
|
-
type = "gem";
|
39
|
-
};
|
40
|
-
version = "1.3";
|
41
|
-
};
|
42
|
-
hashdiff = {
|
43
|
-
groups = ["default"];
|
44
|
-
platforms = [];
|
45
|
-
source = {
|
46
|
-
remotes = ["https://rubygems.org"];
|
47
|
-
sha256 = "1ncwxv7jbm3jj9phv6dd514463bkjwggxk10n2z100wf4cjcicrk";
|
48
|
-
type = "gem";
|
49
|
-
};
|
50
|
-
version = "0.4.0";
|
51
|
-
};
|
52
|
-
io-console = {
|
53
|
-
groups = ["default"];
|
54
|
-
platforms = [];
|
55
|
-
source = {
|
56
|
-
remotes = ["https://rubygems.org"];
|
57
|
-
sha256 = "109yzpv9kslwra2mxnjsg3r6mwxkbqmxihj266qdvccapghi05wg";
|
58
|
-
type = "gem";
|
59
|
-
};
|
60
|
-
version = "0.5.4";
|
61
|
-
};
|
62
|
-
irb = {
|
63
|
-
dependencies = ["reline"];
|
64
|
-
groups = ["default"];
|
65
|
-
platforms = [];
|
66
|
-
source = {
|
67
|
-
remotes = ["https://rubygems.org"];
|
68
|
-
sha256 = "1r1y8i46qd5izdszzzn5jxvwvq00m89rk0hm8cs8f21p7nlwmh5w";
|
69
|
-
type = "gem";
|
70
|
-
};
|
71
|
-
version = "1.2.1";
|
72
|
-
};
|
73
|
-
method_source = {
|
74
|
-
groups = ["default"];
|
75
|
-
platforms = [];
|
76
|
-
source = {
|
77
|
-
remotes = ["https://rubygems.org"];
|
78
|
-
sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
|
79
|
-
type = "gem";
|
80
|
-
};
|
81
|
-
version = "0.9.2";
|
82
|
-
};
|
83
|
-
multi_json = {
|
84
|
-
groups = ["default"];
|
85
|
-
platforms = [];
|
86
|
-
source = {
|
87
|
-
remotes = ["https://rubygems.org"];
|
88
|
-
sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
|
89
|
-
type = "gem";
|
90
|
-
};
|
91
|
-
version = "1.14.1";
|
92
|
-
};
|
93
|
-
oj = {
|
94
|
-
groups = ["default"];
|
95
|
-
platforms = [];
|
96
|
-
source = {
|
97
|
-
remotes = ["https://rubygems.org"];
|
98
|
-
sha256 = "1jli4mi1xpmm8564pc09bfvv7znzqghidwa3zfw21r365ihmbv2p";
|
99
|
-
type = "gem";
|
100
|
-
};
|
101
|
-
version = "2.18.5";
|
102
|
-
};
|
103
|
-
parallel = {
|
104
|
-
groups = ["default"];
|
105
|
-
platforms = [];
|
106
|
-
source = {
|
107
|
-
remotes = ["https://rubygems.org"];
|
108
|
-
sha256 = "12jijkap4akzdv11lm08dglsc8jmc87xcgq6947i1s3qb69f4zn2";
|
109
|
-
type = "gem";
|
110
|
-
};
|
111
|
-
version = "1.19.1";
|
112
|
-
};
|
113
|
-
phraseapp-ruby = {
|
114
|
-
groups = ["default"];
|
115
|
-
platforms = [];
|
116
|
-
source = {
|
117
|
-
remotes = ["https://rubygems.org"];
|
118
|
-
sha256 = "14n2hhwjn32xk0qk6rprs3awnrddhnd4zckyd0a4j8lv8k648pnn";
|
119
|
-
type = "gem";
|
120
|
-
};
|
121
|
-
version = "1.6.0";
|
122
|
-
};
|
123
|
-
pry = {
|
124
|
-
dependencies = ["coderay" "method_source"];
|
125
|
-
groups = ["default"];
|
126
|
-
platforms = [];
|
127
|
-
source = {
|
128
|
-
remotes = ["https://rubygems.org"];
|
129
|
-
sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69";
|
130
|
-
type = "gem";
|
131
|
-
};
|
132
|
-
version = "0.12.2";
|
133
|
-
};
|
134
|
-
rake = {
|
135
|
-
groups = ["default"];
|
136
|
-
platforms = [];
|
137
|
-
source = {
|
138
|
-
remotes = ["https://rubygems.org"];
|
139
|
-
sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b";
|
140
|
-
type = "gem";
|
141
|
-
};
|
142
|
-
version = "10.5.0";
|
143
|
-
};
|
144
|
-
reline = {
|
145
|
-
dependencies = ["io-console"];
|
146
|
-
groups = ["default"];
|
147
|
-
platforms = [];
|
148
|
-
source = {
|
149
|
-
remotes = ["https://rubygems.org"];
|
150
|
-
sha256 = "0908ijrngc3wkn5iny7d0kxkp74w6ixk2nwzzngplplfla1vkp8x";
|
151
|
-
type = "gem";
|
152
|
-
};
|
153
|
-
version = "0.1.2";
|
154
|
-
};
|
155
|
-
rspec = {
|
156
|
-
dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
|
157
|
-
groups = ["default"];
|
158
|
-
platforms = [];
|
159
|
-
source = {
|
160
|
-
remotes = ["https://rubygems.org"];
|
161
|
-
sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3";
|
162
|
-
type = "gem";
|
163
|
-
};
|
164
|
-
version = "3.8.0";
|
165
|
-
};
|
166
|
-
rspec-core = {
|
167
|
-
dependencies = ["rspec-support"];
|
168
|
-
groups = ["default"];
|
169
|
-
platforms = [];
|
170
|
-
source = {
|
171
|
-
remotes = ["https://rubygems.org"];
|
172
|
-
sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p";
|
173
|
-
type = "gem";
|
174
|
-
};
|
175
|
-
version = "3.8.0";
|
176
|
-
};
|
177
|
-
rspec-expectations = {
|
178
|
-
dependencies = ["diff-lcs" "rspec-support"];
|
179
|
-
groups = ["default"];
|
180
|
-
platforms = [];
|
181
|
-
source = {
|
182
|
-
remotes = ["https://rubygems.org"];
|
183
|
-
sha256 = "1c4gs5ybf7km0qshdm92p38zvg32n1j2kr5fgs2icacz7xf2y6fy";
|
184
|
-
type = "gem";
|
185
|
-
};
|
186
|
-
version = "3.8.3";
|
187
|
-
};
|
188
|
-
rspec-mocks = {
|
189
|
-
dependencies = ["diff-lcs" "rspec-support"];
|
190
|
-
groups = ["default"];
|
191
|
-
platforms = [];
|
192
|
-
source = {
|
193
|
-
remotes = ["https://rubygems.org"];
|
194
|
-
sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp";
|
195
|
-
type = "gem";
|
196
|
-
};
|
197
|
-
version = "3.8.0";
|
198
|
-
};
|
199
|
-
rspec-support = {
|
200
|
-
groups = ["default"];
|
201
|
-
platforms = [];
|
202
|
-
source = {
|
203
|
-
remotes = ["https://rubygems.org"];
|
204
|
-
sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609";
|
205
|
-
type = "gem";
|
206
|
-
};
|
207
|
-
version = "3.8.0";
|
208
|
-
};
|
209
|
-
rspec_junit_formatter = {
|
210
|
-
dependencies = ["rspec-core"];
|
211
|
-
groups = ["default"];
|
212
|
-
platforms = [];
|
213
|
-
source = {
|
214
|
-
remotes = ["https://rubygems.org"];
|
215
|
-
sha256 = "1aynmrgnv26pkprrajvp7advb8nbh0x4pkwk6jwq8qmwzarzk21p";
|
216
|
-
type = "gem";
|
217
|
-
};
|
218
|
-
version = "0.4.1";
|
219
|
-
};
|
220
|
-
thor = {
|
221
|
-
groups = ["default"];
|
222
|
-
platforms = [];
|
223
|
-
source = {
|
224
|
-
remotes = ["https://rubygems.org"];
|
225
|
-
sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
|
226
|
-
type = "gem";
|
227
|
-
};
|
228
|
-
version = "0.20.3";
|
229
|
-
};
|
230
|
-
}
|