phraseapp_updater 2.1.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Build Status](https://travis-ci.org/iknow/phraseapp_updater.svg?branch=master)](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
|
-
}
|