rosette-client 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,72 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ include Rosette::Client
6
+ include Rosette::Client::Commands
7
+
8
+ describe SnapshotCommand do
9
+ let(:api) { double }
10
+ let(:base_repo) { TmpRepo.new }
11
+ let(:repo) { Repo.new(base_repo.working_dir) }
12
+ let(:terminal) { FakeTerminal.new }
13
+ let(:repo_name) { 'my_awesome_repo' }
14
+ let(:commit_id) { base_repo.git('rev-parse HEAD').strip }
15
+ let(:command) { SnapshotCommand.new(api, terminal, repo, [commit_id]) }
16
+
17
+ before(:each) do
18
+ add_user_to(base_repo)
19
+ base_repo.git("remote add origin git@github.com/camertron/#{repo_name}")
20
+ base_repo.create_file('file.txt') { |f| f.write('hello, world') }
21
+ base_repo.add_all
22
+ base_repo.commit('Initial commit')
23
+ end
24
+
25
+ around(:each) do |example|
26
+ Dir.chdir(base_repo.working_dir) do
27
+ example.run
28
+ end
29
+ end
30
+
31
+ describe '#execute' do
32
+ it 'makes a snapshot api call' do
33
+ expect(api).to receive(:snapshot)
34
+ .with(repo_name: repo_name, ref: commit_id)
35
+ .and_return(Response.new({}))
36
+
37
+ command.execute
38
+ end
39
+
40
+ it 'prints the array of phrases' do
41
+ expect(api).to receive(:snapshot)
42
+ .with(repo_name: repo_name, ref: commit_id)
43
+ .and_return(
44
+ Response.new([
45
+ { 'key' => 'Foo', 'commit_id' => 'abc123' },
46
+ { 'key' => 'Bar', 'commit_id' => 'def456' },
47
+ { 'key' => 'Baz', 'commit_id' => 'ghi789' }
48
+ ])
49
+ )
50
+
51
+ command.execute
52
+
53
+ expect(terminal).to have_said('key: Foo')
54
+ expect(terminal).to have_said('commit_id: abc123')
55
+ expect(terminal).to have_said('key: Bar')
56
+ expect(terminal).to have_said('commit_id: def456')
57
+ expect(terminal).to have_said('key: Baz')
58
+ expect(terminal).to have_said('commit_id: ghi789')
59
+ end
60
+
61
+ it 'prints the error if the api response contains one' do
62
+ expect(api).to receive(:snapshot)
63
+ .with(repo_name: repo_name, ref: commit_id)
64
+ .and_return(
65
+ Response.new({ 'error' => 'Jelly beans' })
66
+ )
67
+
68
+ command.execute
69
+ expect(terminal).to have_said('Jelly beans')
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,77 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ include Rosette::Client
6
+ include Rosette::Client::Commands
7
+
8
+ describe StatusCommand do
9
+ let(:api) { double }
10
+ let(:base_repo) { TmpRepo.new }
11
+ let(:repo) { Repo.new(base_repo.working_dir) }
12
+ let(:terminal) { FakeTerminal.new }
13
+ let(:repo_name) { 'my_awesome_repo' }
14
+ let(:commit_id) { base_repo.git('rev-parse HEAD').strip }
15
+ let(:command) { StatusCommand.new(api, terminal, repo, [commit_id]) }
16
+
17
+ before(:each) do
18
+ add_user_to(base_repo)
19
+ base_repo.git("remote add origin git@github.com/camertron/#{repo_name}")
20
+ base_repo.create_file('file.txt') { |f| f.write('hello, world') }
21
+ base_repo.add_all
22
+ base_repo.commit('Initial commit')
23
+ end
24
+
25
+ around(:each) do |example|
26
+ Dir.chdir(base_repo.working_dir) do
27
+ example.run
28
+ end
29
+ end
30
+
31
+ describe '#execute' do
32
+ it 'makes a commit api call' do
33
+ expect(api).to receive(:status)
34
+ .with(repo_name: repo_name, ref: commit_id)
35
+ .and_return(Response.new({}))
36
+
37
+ command.execute
38
+ end
39
+
40
+ it 'prints the status as a table' do
41
+ expect(api).to receive(:status)
42
+ .with(repo_name: repo_name, ref: commit_id)
43
+ .and_return(
44
+ Response.new({
45
+ 'commit_id' => commit_id,
46
+ 'status' => 'UNTRANSLATED',
47
+ 'phrase_count' => 10,
48
+ 'locales' => [{
49
+ 'locale' => 'fr-FR',
50
+ 'percent_translated' => 0.5,
51
+ 'translated_count' => 5
52
+ }, {
53
+ 'locale' => 'pt-BR',
54
+ 'percent_translated' => 0.2,
55
+ 'translated_count' => 2
56
+ }]
57
+ })
58
+ )
59
+
60
+ command.execute
61
+
62
+ expect(terminal).to have_said(Regexp.compile(['fr-FR', '10', '5', '0.5'].join('[ ]*\|[ ]*')))
63
+ expect(terminal).to have_said(Regexp.compile(['pt-BR', '10', '2', '0.2'].join('[ ]*\|[ ]*')))
64
+ end
65
+
66
+ it 'prints the error if the api response contains one' do
67
+ expect(api).to receive(:status)
68
+ .with(repo_name: repo_name, ref: commit_id)
69
+ .and_return(
70
+ Response.new({ 'error' => 'Jelly beans' })
71
+ )
72
+
73
+ command.execute
74
+ expect(terminal).to have_said('Jelly beans')
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+
3
+ class FakeTerminal
4
+ attr_reader :statements
5
+
6
+ def initialize
7
+ @statements = []
8
+ end
9
+
10
+ def say(text, color = nil)
11
+ statements << [text, color]
12
+ end
13
+
14
+ def has_said?(text_or_regex, color = nil)
15
+ case text_or_regex
16
+ when Regexp
17
+ statements.any? do |statement|
18
+ matches = text_or_regex =~ statement.first
19
+ matches &&= color == statement.last if color
20
+ matches
21
+ end
22
+ when String
23
+ statements.any? do |statement|
24
+ matches = text_or_regex == statement.first
25
+ matches &&= color == statement.last if color
26
+ matches
27
+ end
28
+ end
29
+ end
30
+ end
data/spec/repo_spec.rb ADDED
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ include Rosette::Client
6
+
7
+ describe Repo do
8
+ let(:base_repo) { TmpRepo.new }
9
+ let(:repo) { Repo.new(base_repo.working_dir) }
10
+
11
+ before(:each) do
12
+ add_user_to(base_repo)
13
+ base_repo.create_file('file.txt') { |f| f.write('hello, world') }
14
+ base_repo.add_all
15
+ base_repo.commit('Initial commit')
16
+ end
17
+
18
+ describe '#get_head' do
19
+ it 'returns the symbolic ref (i.e. branch name) of HEAD' do
20
+ expect(repo.get_head).to eq('master')
21
+ end
22
+ end
23
+
24
+ describe '#rev_parse' do
25
+ it 'returns the commit id of the given ref' do
26
+ expect(repo.rev_parse('master')).to(
27
+ eq(base_repo.git('rev-parse master').strip)
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ include Rosette::Client
6
+
7
+ describe Response do
8
+ let(:response_class) { Response }
9
+
10
+ it 'responds to methods that are also keys in the attributes hash' do
11
+ response = response_class.new({ 'hello' => 'world' })
12
+ expect(response.hello).to eq('world')
13
+ end
14
+
15
+ it "returns nil if the method isn't part of the attributes hash" do
16
+ response = response_class.new({ 'hello' => 'world' })
17
+ expect(response.nothing).to be_nil
18
+ end
19
+
20
+ describe 'from_api_response' do
21
+ it 'accepts a hash of attributes and returns an instance of Response' do
22
+ response = response_class.from_api_response({ 'foo' => 'bar' })
23
+ expect(response).to be_a(response_class)
24
+ expect(response.attributes).to eq({ 'foo' => 'bar' })
25
+ end
26
+ end
27
+
28
+ describe '#error?' do
29
+ it 'returns true if the attributes hash contains an "error" key' do
30
+ response = response_class.new({ 'error' => 'jelly beans' })
31
+ expect(response).to be_error
32
+ end
33
+
34
+ it 'returns false if the attributes hasn does not contain an "error" key' do
35
+ response = response_class.new({ 'not error' => 'lima beans' })
36
+ expect(response).to_not be_error
37
+ end
38
+ end
39
+
40
+ describe '#success?' do
41
+ it 'returns true if the attributes hasn does not contain an "error" key' do
42
+ response = response_class.new({ 'not error' => 'lima beans' })
43
+ expect(response).to be_success
44
+ end
45
+
46
+ it 'returns false if the attributes hash contains an "error" key' do
47
+ response = response_class.new({ 'error' => 'jelly beans' })
48
+ expect(response).to_not be_success
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'pry-nav'
4
+
5
+ require 'rspec'
6
+ require 'rosette/client'
7
+ require 'helpers/fake_terminal'
8
+ require 'tmp-repo'
9
+
10
+ RSpec.configure do |config|
11
+ # config goes here
12
+
13
+ def sample_diff(commit_id)
14
+ {
15
+ 'added' => [{
16
+ 'key' => "I'm a little teapot",
17
+ 'meta_key' => 'about.training.teapot',
18
+ 'file' => 'config/locales/en.yml',
19
+ 'commit_id' => commit_id
20
+ }],
21
+
22
+ 'removed' => [{
23
+ 'key' => 'The green albatross flitters in the moonlight',
24
+ 'meta_key' => 'animals.birds.albatross.message',
25
+ 'file' => 'config/locales/en.yml',
26
+ 'commit_id' => commit_id
27
+ }],
28
+
29
+ 'modified' => [{
30
+ 'key' => 'Purple eggplants make delicious afternoon snacks',
31
+ 'old_key' => 'Blue eggplants make wonderful evening meals',
32
+ 'meta_key' => 'foods.vegetables.eggplant.snack_message',
33
+ 'file' => 'config/locales/en.yml',
34
+ 'commit_id' => commit_id
35
+ }, {
36
+ 'key' => 'The Seattle Seahawks rock',
37
+ 'old_key' => 'The Seattle Seahawks rule',
38
+ 'meta_key' => 'sports.teams.football.best',
39
+ 'file' => 'config/locales/en.yml',
40
+ 'commit_id' => commit_id
41
+ }]
42
+ }
43
+ end
44
+
45
+ def add_user_to(repo)
46
+ repo.git('config user.name Fake User')
47
+ repo.git('config user.email fake@user.com')
48
+ end
49
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ include Rosette::Client
6
+
7
+ describe Terminal do
8
+ let(:stream) { StringIO.new }
9
+ let(:terminal) { Terminal.new(stream) }
10
+
11
+ describe '#say' do
12
+ it 'writes to the stream' do
13
+ terminal.say("I'm a little teapot")
14
+ expect(stream.string).to eq("I'm a little teapot\n")
15
+ end
16
+
17
+ it 'colorizes the output when asked' do
18
+ terminal.say("I'm a little teapot", :red)
19
+ expect(stream.string).to eq("\e[0;31;49mI'm a little teapot\e[0m\n")
20
+ end
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rosette-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Cameron Dutro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.7.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.0
41
+ description: Git command integration for the Rosette internationalization platform
42
+ that manages the translatable content in the source files of a git repository.
43
+ email:
44
+ - camertron@gmail.com
45
+ executables:
46
+ - git-rosette
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - lib/rosette/client/api.rb
51
+ - lib/rosette/client/cli.rb
52
+ - lib/rosette/client/commands/commit_command.rb
53
+ - lib/rosette/client/commands/diff_command.rb
54
+ - lib/rosette/client/commands/repo_snapshot_command.rb
55
+ - lib/rosette/client/commands/show_command.rb
56
+ - lib/rosette/client/commands/snapshot_command.rb
57
+ - lib/rosette/client/commands/status_command.rb
58
+ - lib/rosette/client/commands.rb
59
+ - lib/rosette/client/repo.rb
60
+ - lib/rosette/client/response.rb
61
+ - lib/rosette/client/terminal.rb
62
+ - lib/rosette/client/version.rb
63
+ - lib/rosette/client.rb
64
+ - spec/api_spec.rb
65
+ - spec/cli_spec.rb
66
+ - spec/commands/commit_command_spec.rb
67
+ - spec/commands/diff_command_spec.rb
68
+ - spec/commands/repo_snapshot_command_spec.rb
69
+ - spec/commands/show_command_spec.rb
70
+ - spec/commands/snapshot_command_spec.rb
71
+ - spec/commands/status_command_spec.rb
72
+ - spec/helpers/fake_terminal.rb
73
+ - spec/repo_spec.rb
74
+ - spec/response_spec.rb
75
+ - spec/spec_helper.rb
76
+ - spec/terminal_spec.rb
77
+ - Gemfile
78
+ - History.txt
79
+ - README.md
80
+ - Rakefile
81
+ - rosette-client.gemspec
82
+ - bin/git-rosette
83
+ homepage: http://github.com/camertron
84
+ licenses: []
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.0.14
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: Git command integration for the Rosette internationalization platform that
106
+ manages the translatable content in the source files of a git repository.
107
+ test_files: []
108
+ has_rdoc: true