rosette-core 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +26 -0
- data/History.txt +3 -0
- data/README.md +94 -0
- data/Rakefile +18 -0
- data/lib/rosette/core.rb +110 -0
- data/lib/rosette/core/branch_utils.rb +152 -0
- data/lib/rosette/core/commands.rb +139 -0
- data/lib/rosette/core/commands/errors.rb +17 -0
- data/lib/rosette/core/commands/git/commit_command.rb +65 -0
- data/lib/rosette/core/commands/git/diff_base_command.rb +301 -0
- data/lib/rosette/core/commands/git/diff_command.rb +188 -0
- data/lib/rosette/core/commands/git/diff_entry.rb +44 -0
- data/lib/rosette/core/commands/git/fetch_command.rb +27 -0
- data/lib/rosette/core/commands/git/repo_snapshot_command.rb +40 -0
- data/lib/rosette/core/commands/git/show_command.rb +70 -0
- data/lib/rosette/core/commands/git/snapshot_command.rb +50 -0
- data/lib/rosette/core/commands/git/status_command.rb +128 -0
- data/lib/rosette/core/commands/git/with_non_merge_ref.rb +48 -0
- data/lib/rosette/core/commands/git/with_ref.rb +92 -0
- data/lib/rosette/core/commands/git/with_refs.rb +92 -0
- data/lib/rosette/core/commands/git/with_repo_name.rb +50 -0
- data/lib/rosette/core/commands/git/with_snapshots.rb +45 -0
- data/lib/rosette/core/commands/queuing/enqueue_commit_command.rb +37 -0
- data/lib/rosette/core/commands/queuing/requeue_commit_command.rb +46 -0
- data/lib/rosette/core/commands/translations/export_command.rb +257 -0
- data/lib/rosette/core/commands/translations/translation_lookup_command.rb +66 -0
- data/lib/rosette/core/commands/translations/with_locale.rb +47 -0
- data/lib/rosette/core/configurator.rb +160 -0
- data/lib/rosette/core/error_reporters/buffered_error_reporter.rb +96 -0
- data/lib/rosette/core/error_reporters/error_reporter.rb +31 -0
- data/lib/rosette/core/error_reporters/nil_error_reporter.rb +25 -0
- data/lib/rosette/core/error_reporters/printing_error_reporter.rb +58 -0
- data/lib/rosette/core/error_reporters/raising_error_reporter.rb +27 -0
- data/lib/rosette/core/errors.rb +93 -0
- data/lib/rosette/core/extractor/commit_log.rb +33 -0
- data/lib/rosette/core/extractor/commit_log_status.rb +57 -0
- data/lib/rosette/core/extractor/commit_processor.rb +109 -0
- data/lib/rosette/core/extractor/extractor.rb +72 -0
- data/lib/rosette/core/extractor/extractor_config.rb +74 -0
- data/lib/rosette/core/extractor/locale.rb +118 -0
- data/lib/rosette/core/extractor/phrase.rb +76 -0
- data/lib/rosette/core/extractor/phrase/phrase_index_policy.rb +108 -0
- data/lib/rosette/core/extractor/phrase/phrase_to_hash.rb +33 -0
- data/lib/rosette/core/extractor/repo_config.rb +339 -0
- data/lib/rosette/core/extractor/serializer_config.rb +55 -0
- data/lib/rosette/core/extractor/static_extractor.rb +44 -0
- data/lib/rosette/core/extractor/translation.rb +44 -0
- data/lib/rosette/core/extractor/translation/translation_to_hash.rb +28 -0
- data/lib/rosette/core/git/diff_finder.rb +131 -0
- data/lib/rosette/core/git/ref.rb +116 -0
- data/lib/rosette/core/git/repo.rb +378 -0
- data/lib/rosette/core/path_matcher_factory.rb +330 -0
- data/lib/rosette/core/resolvers/extractor_id.rb +37 -0
- data/lib/rosette/core/resolvers/integration_id.rb +37 -0
- data/lib/rosette/core/resolvers/preprocessor_id.rb +38 -0
- data/lib/rosette/core/resolvers/resolver.rb +115 -0
- data/lib/rosette/core/resolvers/serializer_id.rb +37 -0
- data/lib/rosette/core/snapshots/cached_head_snapshot_factory.rb +51 -0
- data/lib/rosette/core/snapshots/cached_snapshot_factory.rb +67 -0
- data/lib/rosette/core/snapshots/head_snapshot_factory.rb +58 -0
- data/lib/rosette/core/snapshots/repo_config_path_filter.rb +83 -0
- data/lib/rosette/core/snapshots/snapshot_factory.rb +184 -0
- data/lib/rosette/core/string_utils.rb +23 -0
- data/lib/rosette/core/translation_status.rb +81 -0
- data/lib/rosette/core/validators.rb +18 -0
- data/lib/rosette/core/validators/commit_validator.rb +62 -0
- data/lib/rosette/core/validators/commits_validator.rb +32 -0
- data/lib/rosette/core/validators/encoding_validator.rb +32 -0
- data/lib/rosette/core/validators/locale_validator.rb +37 -0
- data/lib/rosette/core/validators/repo_validator.rb +33 -0
- data/lib/rosette/core/validators/serializer_validator.rb +37 -0
- data/lib/rosette/core/validators/validator.rb +31 -0
- data/lib/rosette/core/version.rb +8 -0
- data/lib/rosette/data_stores.rb +11 -0
- data/lib/rosette/data_stores/errors.rb +26 -0
- data/lib/rosette/data_stores/phrase_status.rb +59 -0
- data/lib/rosette/integrations.rb +12 -0
- data/lib/rosette/integrations/errors.rb +15 -0
- data/lib/rosette/integrations/integratable.rb +58 -0
- data/lib/rosette/integrations/integration.rb +23 -0
- data/lib/rosette/preprocessors.rb +11 -0
- data/lib/rosette/preprocessors/errors.rb +14 -0
- data/lib/rosette/preprocessors/preprocessor.rb +48 -0
- data/lib/rosette/queuing.rb +14 -0
- data/lib/rosette/queuing/commits.rb +19 -0
- data/lib/rosette/queuing/commits/commit_conductor.rb +90 -0
- data/lib/rosette/queuing/commits/commit_job.rb +93 -0
- data/lib/rosette/queuing/commits/commits_queue_configurator.rb +60 -0
- data/lib/rosette/queuing/commits/extract_stage.rb +46 -0
- data/lib/rosette/queuing/commits/fetch_stage.rb +51 -0
- data/lib/rosette/queuing/commits/finalize_stage.rb +76 -0
- data/lib/rosette/queuing/commits/phrase_storage_granularity.rb +20 -0
- data/lib/rosette/queuing/commits/push_stage.rb +91 -0
- data/lib/rosette/queuing/commits/stage.rb +96 -0
- data/lib/rosette/queuing/job.rb +74 -0
- data/lib/rosette/queuing/queue.rb +28 -0
- data/lib/rosette/queuing/queue_configurator.rb +76 -0
- data/lib/rosette/queuing/worker.rb +30 -0
- data/lib/rosette/serializers.rb +10 -0
- data/lib/rosette/serializers/serializer.rb +98 -0
- data/lib/rosette/tms.rb +9 -0
- data/lib/rosette/tms/repository.rb +95 -0
- data/rosette-core.gemspec +24 -0
- data/spec/core/branch_utils_spec.rb +110 -0
- data/spec/core/commands/git/commit_command_spec.rb +60 -0
- data/spec/core/commands/git/diff_command_spec.rb +263 -0
- data/spec/core/commands/git/fetch_command_spec.rb +61 -0
- data/spec/core/commands/git/repo_snapshot_command_spec.rb +72 -0
- data/spec/core/commands/git/show_command_spec.rb +128 -0
- data/spec/core/commands/git/snapshot_command_spec.rb +86 -0
- data/spec/core/commands/git/status_command_spec.rb +154 -0
- data/spec/core/commands/queuing/enqueue_commit_command_spec.rb +34 -0
- data/spec/core/commands/queuing/requeue_commit_command_spec.rb +46 -0
- data/spec/core/commands/translations/export_command_spec.rb +113 -0
- data/spec/core/commands/translations/translation_lookup_command_spec.rb +58 -0
- data/spec/core/configurator_spec.rb +47 -0
- data/spec/core/error_reporters/buffered_error_reporter_spec.rb +61 -0
- data/spec/core/error_reporters/nil_error_reporter_spec.rb +16 -0
- data/spec/core/error_reporters/printing_error_reporter_spec.rb +60 -0
- data/spec/core/extractor/commit_log_status_spec.rb +216 -0
- data/spec/core/extractor/commit_processor_spec.rb +68 -0
- data/spec/core/extractor/extractor_config_spec.rb +47 -0
- data/spec/core/extractor/extractor_spec.rb +26 -0
- data/spec/core/extractor/locale_spec.rb +92 -0
- data/spec/core/extractor/phrase/phrase_index_policy_spec.rb +116 -0
- data/spec/core/extractor/phrase/phrase_to_hash_spec.rb +18 -0
- data/spec/core/extractor/repo_config_spec.rb +147 -0
- data/spec/core/extractor/translation/translation_to_hash_spec.rb +25 -0
- data/spec/core/git/diff_finder_spec.rb +74 -0
- data/spec/core/git/ref_spec.rb +118 -0
- data/spec/core/git/repo_spec.rb +216 -0
- data/spec/core/path_matcher_factory_spec.rb +139 -0
- data/spec/core/resolvers/extractor_id_spec.rb +47 -0
- data/spec/core/resolvers/integration_id_spec.rb +47 -0
- data/spec/core/resolvers/preprocessor_id_spec.rb +47 -0
- data/spec/core/resolvers/serializer_id_spec.rb +47 -0
- data/spec/core/snapshots/snapshot_factory_spec.rb +145 -0
- data/spec/core/string_utils_spec.rb +19 -0
- data/spec/core/translation_status_spec.rb +91 -0
- data/spec/core/validators/commit_validator_spec.rb +40 -0
- data/spec/core/validators/encoding_validator_spec.rb +30 -0
- data/spec/core/validators/locale_validator_spec.rb +31 -0
- data/spec/core/validators/repo_validator_spec.rb +30 -0
- data/spec/core/validators/serializer_validator_spec.rb +31 -0
- data/spec/integrations/integratable_spec.rb +58 -0
- data/spec/queuing/commits/commit_conductor_spec.rb +71 -0
- data/spec/queuing/commits/commit_job_spec.rb +87 -0
- data/spec/queuing/commits/extract_stage_spec.rb +68 -0
- data/spec/queuing/commits/fetch_stage_spec.rb +101 -0
- data/spec/queuing/commits/finalize_stage_spec.rb +88 -0
- data/spec/queuing/commits/push_stage_spec.rb +145 -0
- data/spec/queuing/commits/stage_spec.rb +80 -0
- data/spec/queuing/job_spec.rb +33 -0
- data/spec/queuing/queue_configurator_spec.rb +44 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/test_helpers/fake_commit_stage.rb +17 -0
- metadata +257 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Rosette
|
4
|
+
module Queuing
|
5
|
+
|
6
|
+
# Base class for jobs that can be run on a Rosette queue implementation.
|
7
|
+
class Job
|
8
|
+
# The name of the queue to use when no custom queue name is specified.
|
9
|
+
DEFAULT_QUEUE_NAME = 'default'
|
10
|
+
|
11
|
+
# The default minimum number of seconds to wait before executing each job.
|
12
|
+
DEFAULT_DELAY = 0
|
13
|
+
|
14
|
+
class << self
|
15
|
+
# Returns the name of the queue this job will be run in. For
|
16
|
+
# implementations that don't offer named queues, this value should be
|
17
|
+
# ignored.
|
18
|
+
#
|
19
|
+
# @return [String] The name of the queue.
|
20
|
+
def queue_name
|
21
|
+
@queue_name || DEFAULT_QUEUE_NAME
|
22
|
+
end
|
23
|
+
|
24
|
+
# Sets the name of the queue this job will be run in. Implementations
|
25
|
+
# that don't offer named queues shouldn't need to call this method,
|
26
|
+
# although nothing bad will happen if they do.
|
27
|
+
#
|
28
|
+
# @param [String] queue_name The name of the queue to run the job in.
|
29
|
+
# @return [void]
|
30
|
+
def set_queue_name(queue_name)
|
31
|
+
@queue_name = queue_name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Performs this job's task.
|
36
|
+
#
|
37
|
+
# @param [Configurator] rosette_config The rosette config to pass to the
|
38
|
+
# job when executing.
|
39
|
+
# @param [Logger] logger The logger to pass to the job when executing.
|
40
|
+
# @return [void]
|
41
|
+
def work(rosette_config, logger)
|
42
|
+
raise NotImplementedError,
|
43
|
+
'expected to be implemented in derived classes'
|
44
|
+
end
|
45
|
+
|
46
|
+
# Gets an array of the arguments to use to re-create this job later. Most
|
47
|
+
# implementations will expect these arguments to be serializable in some
|
48
|
+
# way so they can be stored in a cache or database.
|
49
|
+
#
|
50
|
+
# @return [Array<Object>] the list of job arguments.
|
51
|
+
def to_args
|
52
|
+
raise NotImplementedError,
|
53
|
+
'expected to be implemented in derived classes'
|
54
|
+
end
|
55
|
+
|
56
|
+
# Returns the minimum number of seconds to wait before executing this job.
|
57
|
+
#
|
58
|
+
# @return [Fixnum]
|
59
|
+
def delay
|
60
|
+
@delay || DEFAULT_DELAY
|
61
|
+
end
|
62
|
+
|
63
|
+
# Sets the amount of time to wait before executing this job.
|
64
|
+
#
|
65
|
+
# @param [Fixnum] delay The minimum amount of time in seconds to wait
|
66
|
+
# before executing this job.
|
67
|
+
# @return [void]
|
68
|
+
def set_delay(delay)
|
69
|
+
@delay = delay
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Rosette
|
4
|
+
module Queuing
|
5
|
+
|
6
|
+
# Base class for Rosette queue implementations. Really just an interface.
|
7
|
+
class Queue
|
8
|
+
# Creates a new queue instance. Options vary per implementation.
|
9
|
+
#
|
10
|
+
# @param [Hash] options A hash of options used by the underlying
|
11
|
+
# queue implementation.
|
12
|
+
# @return [Queue]
|
13
|
+
def initialize(options = {})
|
14
|
+
end
|
15
|
+
|
16
|
+
# Add a job instance to the queue. If not implemented by a derived class,
|
17
|
+
# raises +NotImplementedError+.
|
18
|
+
#
|
19
|
+
# @param [Job] job The job to enqueue.
|
20
|
+
# @return [void]
|
21
|
+
def enqueue(job)
|
22
|
+
raise NotImplementedError,
|
23
|
+
'expected to be implemented in derived classes'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Rosette
|
4
|
+
module Queuing
|
5
|
+
|
6
|
+
# Configuration used to initialize a queue implementation.
|
7
|
+
#
|
8
|
+
# @!attribute [r] queue_options
|
9
|
+
# @return [Hash] a hash of options to be used by the queue implementation.
|
10
|
+
# @!attribute [r] queue_configs
|
11
|
+
# @return [Array] an array of queue config objects. These classes are
|
12
|
+
# provided by each type of queue. For example, the queue that processes
|
13
|
+
# commits (see [Rosette::Queuing::Commits]) defines its own configurator
|
14
|
+
# that gets instantiated and added to this array.
|
15
|
+
class QueueConfigurator
|
16
|
+
attr_reader :queue_options, :queue_configs
|
17
|
+
|
18
|
+
# Creates a new +QueueConfigurator+ instance.
|
19
|
+
#
|
20
|
+
# @return [QueueConfigurator]
|
21
|
+
def initialize
|
22
|
+
@queue_options = {}
|
23
|
+
@queue_configs = []
|
24
|
+
end
|
25
|
+
|
26
|
+
# Sets an options hash that will be used to initialize the underlying
|
27
|
+
# queue implementation (eg. resque, sidekiq, etc).
|
28
|
+
#
|
29
|
+
# @param [Hash] options The options hash to use to initialize the
|
30
|
+
# underlying queue implementation (eg. resque, sidekiq, etc).
|
31
|
+
# @return [void]
|
32
|
+
def set_queue_options(options = {})
|
33
|
+
@queue_options = options
|
34
|
+
end
|
35
|
+
|
36
|
+
# Configures and adds a queue to process jobs from. Note that the term
|
37
|
+
# "queue" here refers to a sequence of jobs, not a queue implementation.
|
38
|
+
#
|
39
|
+
# @param [String] queue_name The name of the queue to configure.
|
40
|
+
# @return [void]
|
41
|
+
def enable_queue(queue_name)
|
42
|
+
if const = find_queue_configurator_const(queue_name)
|
43
|
+
config = const.new(queue_name)
|
44
|
+
yield config if block_given?
|
45
|
+
queue_configs << config
|
46
|
+
else
|
47
|
+
raise ArgumentError, "'#{queue_name}' couldn't be found."
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Looks up a queue configuration object by name.
|
52
|
+
#
|
53
|
+
# @param [String] queue_name The name of the queue to look up.
|
54
|
+
# @return [Object, nil] The queue config object, or +nil+ if none could
|
55
|
+
# be found.
|
56
|
+
def get_queue_config(queue_name)
|
57
|
+
queue_configs.find { |q| q.name == queue_name }
|
58
|
+
end
|
59
|
+
|
60
|
+
protected
|
61
|
+
|
62
|
+
def find_queue_configurator_const(name)
|
63
|
+
const_str = Rosette::Core::StringUtils.camelize(name)
|
64
|
+
|
65
|
+
if Rosette::Queuing.const_defined?(const_str)
|
66
|
+
mod = Rosette::Queuing.const_get(const_str)
|
67
|
+
|
68
|
+
if mod.const_defined?(:"#{const_str}QueueConfigurator")
|
69
|
+
mod.const_get(:"#{const_str}QueueConfigurator")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Rosette
|
4
|
+
module Queuing
|
5
|
+
|
6
|
+
# Base class for Rosette queue worker implementations. Really just an
|
7
|
+
# interface.
|
8
|
+
class Worker
|
9
|
+
# Creates a new worker instance. Options vary per implementation.
|
10
|
+
#
|
11
|
+
# @param [Configurator] rosette_config The Rosette config to use.
|
12
|
+
# @param [Logger] logger The logger to print messages with.
|
13
|
+
# @param [Hash] options A hash of options used by the underlying
|
14
|
+
# queue implementation.
|
15
|
+
# @return [Worker]
|
16
|
+
def initialize(rosette_config, logger, options = {})
|
17
|
+
end
|
18
|
+
|
19
|
+
# Tells this worker to start processing jobs. Should block. If not
|
20
|
+
# implemented by the derived class, raises +NotImplementedError+.
|
21
|
+
#
|
22
|
+
# @return [void]
|
23
|
+
def start
|
24
|
+
raise NotImplementedError,
|
25
|
+
'expected to be implemented in derived classes'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Rosette
|
4
|
+
module Serializers
|
5
|
+
|
6
|
+
# Base class for all Rosette's serializers.
|
7
|
+
#
|
8
|
+
# @!attribute [r] stream
|
9
|
+
# @return [#write, #flush] an IO-style object to write the serialized
|
10
|
+
# phrases or translations to.
|
11
|
+
# @!attribute [r] locale
|
12
|
+
# @return [String] the locale to expect the phrases or tranlsations to
|
13
|
+
# be written in.
|
14
|
+
# @!attribute [r] encoding
|
15
|
+
# @return [String, Encoding] the encoding to use when writing the phrases
|
16
|
+
# or translations to +stream+.
|
17
|
+
class Serializer
|
18
|
+
attr_reader :stream, :locale, :encoding
|
19
|
+
|
20
|
+
class << self
|
21
|
+
# Creates a new serializer around the given stream.
|
22
|
+
#
|
23
|
+
# @param [#write, #flush] stream The stream object to write serialized
|
24
|
+
# phrases and translations to.
|
25
|
+
# @param [Locale] locale The associated locale.
|
26
|
+
# @return [Serializer]
|
27
|
+
def from_stream(stream, locale)
|
28
|
+
new(stream, locale)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Creates a new serializer around the given file. Opens the file and
|
32
|
+
# instantiates a new serializer with the handle.
|
33
|
+
#
|
34
|
+
# @param [String] file The file.
|
35
|
+
# @param [Locale] locale The associated locale.
|
36
|
+
def open(file, locale)
|
37
|
+
new(File.open(file), locale)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns the default file extension for the file type this serializer
|
41
|
+
# generates. For example, if this is the yaml/rails serializer, the
|
42
|
+
# default extension would be '.yml'.
|
43
|
+
#
|
44
|
+
# @raise [NotImplementedError]
|
45
|
+
def default_extension
|
46
|
+
raise NotImplementedError,
|
47
|
+
'expected to be implemented in derived classes'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Creates a new serializer.
|
52
|
+
#
|
53
|
+
# @param [#write, #flush] stream The stream to write serialized phrases
|
54
|
+
# or translations to.
|
55
|
+
# @param [String] locale The locale of the translations to write to
|
56
|
+
# +stream+.
|
57
|
+
# @param [String, Encoding] encoding The encoding to use when writing the
|
58
|
+
# phrases or translations to +stream+.
|
59
|
+
def initialize(stream, locale, encoding = Encoding::UTF_8)
|
60
|
+
@stream = stream
|
61
|
+
@locale = locale
|
62
|
+
@encoding = encoding
|
63
|
+
end
|
64
|
+
|
65
|
+
# Serializes and writes a key/value pair to the stream. The key is often
|
66
|
+
# a phrase key or meta key, and the value is often a foreign-language
|
67
|
+
# translation.
|
68
|
+
#
|
69
|
+
# @param [String] key The phrase key or meta key.
|
70
|
+
# @param [String] value
|
71
|
+
# @return [void]
|
72
|
+
# @raise [NotImplementedError]
|
73
|
+
def write_key_value(key, value)
|
74
|
+
raise NotImplementedError,
|
75
|
+
'expected to be implemented in derived classes'
|
76
|
+
end
|
77
|
+
|
78
|
+
# Writes raw text to +stream+ without serializing it first.
|
79
|
+
#
|
80
|
+
# @param [String] text The raw text to write.
|
81
|
+
# @return [void]
|
82
|
+
# @raise [NotImplementedError]
|
83
|
+
def write_raw(text)
|
84
|
+
raise NotImplementedError,
|
85
|
+
'expected to be implemented in derived classes'
|
86
|
+
end
|
87
|
+
|
88
|
+
# Flushes any buffered text from +stream+ (i.e. forces buffered text
|
89
|
+
# to be written immediately).
|
90
|
+
#
|
91
|
+
# @return [void]
|
92
|
+
def flush
|
93
|
+
stream.flush
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|
data/lib/rosette/tms.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Rosette
|
4
|
+
module Tms
|
5
|
+
class Repository
|
6
|
+
# Creates a new instance of this repository.
|
7
|
+
#
|
8
|
+
# @param [Object] configurator The implementation-specific configuration
|
9
|
+
# object for this repository.
|
10
|
+
# @return [Repository]
|
11
|
+
def initialize(configurator)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Retrieves a list of translations for the given phrases.
|
15
|
+
#
|
16
|
+
# @param [Locale] locale The locale of the translations to retrieve.
|
17
|
+
# @param [Array<Phrase>] phrases The list of phrases to retrieve
|
18
|
+
# translations for.
|
19
|
+
# @return [Array<String>] an array of translations (note that the array
|
20
|
+
# contains strings, not [Translation] instances). The array may also
|
21
|
+
# contain +nil+ entries where translations could not be found.
|
22
|
+
def lookup_translations(locale, phrases)
|
23
|
+
raise NotImplementedError,
|
24
|
+
'expected to be implemented in derived classes'
|
25
|
+
end
|
26
|
+
|
27
|
+
# Retrieves a single translation for the given phrase.
|
28
|
+
#
|
29
|
+
# @param [Locale] locale The locale of the translation to retrieve.
|
30
|
+
# @param [Phrase] phrase The phrase to retrieve the translation for.
|
31
|
+
# @return [String] the translation or nil of one cannot be found.
|
32
|
+
def lookup_translation(locale, phrase)
|
33
|
+
raise NotImplementedError,
|
34
|
+
'expected to be implemented in derived classes'
|
35
|
+
end
|
36
|
+
|
37
|
+
# Publishes a list of phrases in the repository. For web-based translation
|
38
|
+
# management systems, this probably means uploading phrases to be
|
39
|
+
# translated over HTTP.
|
40
|
+
#
|
41
|
+
# @param [Array<Phrase>] phrases The list of phrases to store.
|
42
|
+
# @param [String] commit_id The commit id to associate the phrases with.
|
43
|
+
# @return [void]
|
44
|
+
def store_phrases(phrases, commit_id)
|
45
|
+
raise NotImplementedError,
|
46
|
+
'expected to be implemented in derived classes'
|
47
|
+
end
|
48
|
+
|
49
|
+
# Publishes a phrase in the repository. For web-based translation
|
50
|
+
# management systems, this probably means uploading the phrase over HTTP.
|
51
|
+
#
|
52
|
+
# @param [Phrase] phrase The phrase to store.
|
53
|
+
# @param [String] commit_id The commit id to associate the phrase with.
|
54
|
+
# @return [void]
|
55
|
+
def store_phrase(phrase, commit_id)
|
56
|
+
raise NotImplementedError,
|
57
|
+
'expected to be implemented in derived classes'
|
58
|
+
end
|
59
|
+
|
60
|
+
# Calculates a single unique value for the phrases and translations
|
61
|
+
# associated with a given commit id. Often this is calculated using a
|
62
|
+
# one-way hash like MD5 or SHA1. Checksum values can be compared to
|
63
|
+
# determine when translations for the given commit id have changed.
|
64
|
+
#
|
65
|
+
# @param [Locale] locale The locale to calculate the checksum for.
|
66
|
+
# @param [String] commit_id The commit id that contains the phrases and
|
67
|
+
# translations to calculate the checksum for.
|
68
|
+
# @return [String] the calculated checksum value
|
69
|
+
def checksum_for(locale, commit_id)
|
70
|
+
raise NotImplementedError,
|
71
|
+
'expected to be implemented in derived classes'
|
72
|
+
end
|
73
|
+
|
74
|
+
# Collects and calculates status information for the phrases contained in
|
75
|
+
# the given commit as well as their translations per locale.
|
76
|
+
#
|
77
|
+
# @param [String] commit_id The commit id to calculate the status for.
|
78
|
+
# @return [TranslationStatus]
|
79
|
+
def status(commit_id)
|
80
|
+
raise NotImplementedError,
|
81
|
+
'expected to be implemented in derived classes'
|
82
|
+
end
|
83
|
+
|
84
|
+
# Signals the repository to perform any cleanup tasks that may be required
|
85
|
+
# for the given commit once it's been fully processed.
|
86
|
+
#
|
87
|
+
# @param [String] commit_id
|
88
|
+
def finalize(commit_id)
|
89
|
+
raise NotImplementedError,
|
90
|
+
'expected to be implemented in derived classes'
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), 'lib')
|
2
|
+
require 'rosette/core/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "rosette-core"
|
6
|
+
s.version = ::Rosette::Core::VERSION
|
7
|
+
s.authors = ["Cameron Dutro"]
|
8
|
+
s.email = ["camertron@gmail.com"]
|
9
|
+
s.homepage = "http://github.com/camertron"
|
10
|
+
|
11
|
+
s.description = s.summary = "Core classes for the Rosette internationalization platform."
|
12
|
+
|
13
|
+
s.platform = Gem::Platform::RUBY
|
14
|
+
s.has_rdoc = true
|
15
|
+
|
16
|
+
s.add_dependency 'progress-reporters', '~> 1.0.0'
|
17
|
+
s.add_dependency 'activesupport', '>= 3.2.0'
|
18
|
+
s.add_dependency 'aasm', '~> 4.1.0'
|
19
|
+
s.add_dependency 'concurrent-ruby', '~> 0.7'
|
20
|
+
s.requirements << "jar 'org.eclipse.jgit:org.eclipse.jgit', '3.4.1.201406201815-r'"
|
21
|
+
|
22
|
+
s.require_path = 'lib'
|
23
|
+
s.files = Dir["{lib,spec}/**/*", "Gemfile", "History.txt", "README.md", "Rakefile", "rosette-core.gemspec"]
|
24
|
+
end
|