rosette-core 1.0.1

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.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/History.txt +3 -0
  4. data/README.md +94 -0
  5. data/Rakefile +18 -0
  6. data/lib/rosette/core.rb +110 -0
  7. data/lib/rosette/core/branch_utils.rb +152 -0
  8. data/lib/rosette/core/commands.rb +139 -0
  9. data/lib/rosette/core/commands/errors.rb +17 -0
  10. data/lib/rosette/core/commands/git/commit_command.rb +65 -0
  11. data/lib/rosette/core/commands/git/diff_base_command.rb +301 -0
  12. data/lib/rosette/core/commands/git/diff_command.rb +188 -0
  13. data/lib/rosette/core/commands/git/diff_entry.rb +44 -0
  14. data/lib/rosette/core/commands/git/fetch_command.rb +27 -0
  15. data/lib/rosette/core/commands/git/repo_snapshot_command.rb +40 -0
  16. data/lib/rosette/core/commands/git/show_command.rb +70 -0
  17. data/lib/rosette/core/commands/git/snapshot_command.rb +50 -0
  18. data/lib/rosette/core/commands/git/status_command.rb +128 -0
  19. data/lib/rosette/core/commands/git/with_non_merge_ref.rb +48 -0
  20. data/lib/rosette/core/commands/git/with_ref.rb +92 -0
  21. data/lib/rosette/core/commands/git/with_refs.rb +92 -0
  22. data/lib/rosette/core/commands/git/with_repo_name.rb +50 -0
  23. data/lib/rosette/core/commands/git/with_snapshots.rb +45 -0
  24. data/lib/rosette/core/commands/queuing/enqueue_commit_command.rb +37 -0
  25. data/lib/rosette/core/commands/queuing/requeue_commit_command.rb +46 -0
  26. data/lib/rosette/core/commands/translations/export_command.rb +257 -0
  27. data/lib/rosette/core/commands/translations/translation_lookup_command.rb +66 -0
  28. data/lib/rosette/core/commands/translations/with_locale.rb +47 -0
  29. data/lib/rosette/core/configurator.rb +160 -0
  30. data/lib/rosette/core/error_reporters/buffered_error_reporter.rb +96 -0
  31. data/lib/rosette/core/error_reporters/error_reporter.rb +31 -0
  32. data/lib/rosette/core/error_reporters/nil_error_reporter.rb +25 -0
  33. data/lib/rosette/core/error_reporters/printing_error_reporter.rb +58 -0
  34. data/lib/rosette/core/error_reporters/raising_error_reporter.rb +27 -0
  35. data/lib/rosette/core/errors.rb +93 -0
  36. data/lib/rosette/core/extractor/commit_log.rb +33 -0
  37. data/lib/rosette/core/extractor/commit_log_status.rb +57 -0
  38. data/lib/rosette/core/extractor/commit_processor.rb +109 -0
  39. data/lib/rosette/core/extractor/extractor.rb +72 -0
  40. data/lib/rosette/core/extractor/extractor_config.rb +74 -0
  41. data/lib/rosette/core/extractor/locale.rb +118 -0
  42. data/lib/rosette/core/extractor/phrase.rb +76 -0
  43. data/lib/rosette/core/extractor/phrase/phrase_index_policy.rb +108 -0
  44. data/lib/rosette/core/extractor/phrase/phrase_to_hash.rb +33 -0
  45. data/lib/rosette/core/extractor/repo_config.rb +339 -0
  46. data/lib/rosette/core/extractor/serializer_config.rb +55 -0
  47. data/lib/rosette/core/extractor/static_extractor.rb +44 -0
  48. data/lib/rosette/core/extractor/translation.rb +44 -0
  49. data/lib/rosette/core/extractor/translation/translation_to_hash.rb +28 -0
  50. data/lib/rosette/core/git/diff_finder.rb +131 -0
  51. data/lib/rosette/core/git/ref.rb +116 -0
  52. data/lib/rosette/core/git/repo.rb +378 -0
  53. data/lib/rosette/core/path_matcher_factory.rb +330 -0
  54. data/lib/rosette/core/resolvers/extractor_id.rb +37 -0
  55. data/lib/rosette/core/resolvers/integration_id.rb +37 -0
  56. data/lib/rosette/core/resolvers/preprocessor_id.rb +38 -0
  57. data/lib/rosette/core/resolvers/resolver.rb +115 -0
  58. data/lib/rosette/core/resolvers/serializer_id.rb +37 -0
  59. data/lib/rosette/core/snapshots/cached_head_snapshot_factory.rb +51 -0
  60. data/lib/rosette/core/snapshots/cached_snapshot_factory.rb +67 -0
  61. data/lib/rosette/core/snapshots/head_snapshot_factory.rb +58 -0
  62. data/lib/rosette/core/snapshots/repo_config_path_filter.rb +83 -0
  63. data/lib/rosette/core/snapshots/snapshot_factory.rb +184 -0
  64. data/lib/rosette/core/string_utils.rb +23 -0
  65. data/lib/rosette/core/translation_status.rb +81 -0
  66. data/lib/rosette/core/validators.rb +18 -0
  67. data/lib/rosette/core/validators/commit_validator.rb +62 -0
  68. data/lib/rosette/core/validators/commits_validator.rb +32 -0
  69. data/lib/rosette/core/validators/encoding_validator.rb +32 -0
  70. data/lib/rosette/core/validators/locale_validator.rb +37 -0
  71. data/lib/rosette/core/validators/repo_validator.rb +33 -0
  72. data/lib/rosette/core/validators/serializer_validator.rb +37 -0
  73. data/lib/rosette/core/validators/validator.rb +31 -0
  74. data/lib/rosette/core/version.rb +8 -0
  75. data/lib/rosette/data_stores.rb +11 -0
  76. data/lib/rosette/data_stores/errors.rb +26 -0
  77. data/lib/rosette/data_stores/phrase_status.rb +59 -0
  78. data/lib/rosette/integrations.rb +12 -0
  79. data/lib/rosette/integrations/errors.rb +15 -0
  80. data/lib/rosette/integrations/integratable.rb +58 -0
  81. data/lib/rosette/integrations/integration.rb +23 -0
  82. data/lib/rosette/preprocessors.rb +11 -0
  83. data/lib/rosette/preprocessors/errors.rb +14 -0
  84. data/lib/rosette/preprocessors/preprocessor.rb +48 -0
  85. data/lib/rosette/queuing.rb +14 -0
  86. data/lib/rosette/queuing/commits.rb +19 -0
  87. data/lib/rosette/queuing/commits/commit_conductor.rb +90 -0
  88. data/lib/rosette/queuing/commits/commit_job.rb +93 -0
  89. data/lib/rosette/queuing/commits/commits_queue_configurator.rb +60 -0
  90. data/lib/rosette/queuing/commits/extract_stage.rb +46 -0
  91. data/lib/rosette/queuing/commits/fetch_stage.rb +51 -0
  92. data/lib/rosette/queuing/commits/finalize_stage.rb +76 -0
  93. data/lib/rosette/queuing/commits/phrase_storage_granularity.rb +20 -0
  94. data/lib/rosette/queuing/commits/push_stage.rb +91 -0
  95. data/lib/rosette/queuing/commits/stage.rb +96 -0
  96. data/lib/rosette/queuing/job.rb +74 -0
  97. data/lib/rosette/queuing/queue.rb +28 -0
  98. data/lib/rosette/queuing/queue_configurator.rb +76 -0
  99. data/lib/rosette/queuing/worker.rb +30 -0
  100. data/lib/rosette/serializers.rb +10 -0
  101. data/lib/rosette/serializers/serializer.rb +98 -0
  102. data/lib/rosette/tms.rb +9 -0
  103. data/lib/rosette/tms/repository.rb +95 -0
  104. data/rosette-core.gemspec +24 -0
  105. data/spec/core/branch_utils_spec.rb +110 -0
  106. data/spec/core/commands/git/commit_command_spec.rb +60 -0
  107. data/spec/core/commands/git/diff_command_spec.rb +263 -0
  108. data/spec/core/commands/git/fetch_command_spec.rb +61 -0
  109. data/spec/core/commands/git/repo_snapshot_command_spec.rb +72 -0
  110. data/spec/core/commands/git/show_command_spec.rb +128 -0
  111. data/spec/core/commands/git/snapshot_command_spec.rb +86 -0
  112. data/spec/core/commands/git/status_command_spec.rb +154 -0
  113. data/spec/core/commands/queuing/enqueue_commit_command_spec.rb +34 -0
  114. data/spec/core/commands/queuing/requeue_commit_command_spec.rb +46 -0
  115. data/spec/core/commands/translations/export_command_spec.rb +113 -0
  116. data/spec/core/commands/translations/translation_lookup_command_spec.rb +58 -0
  117. data/spec/core/configurator_spec.rb +47 -0
  118. data/spec/core/error_reporters/buffered_error_reporter_spec.rb +61 -0
  119. data/spec/core/error_reporters/nil_error_reporter_spec.rb +16 -0
  120. data/spec/core/error_reporters/printing_error_reporter_spec.rb +60 -0
  121. data/spec/core/extractor/commit_log_status_spec.rb +216 -0
  122. data/spec/core/extractor/commit_processor_spec.rb +68 -0
  123. data/spec/core/extractor/extractor_config_spec.rb +47 -0
  124. data/spec/core/extractor/extractor_spec.rb +26 -0
  125. data/spec/core/extractor/locale_spec.rb +92 -0
  126. data/spec/core/extractor/phrase/phrase_index_policy_spec.rb +116 -0
  127. data/spec/core/extractor/phrase/phrase_to_hash_spec.rb +18 -0
  128. data/spec/core/extractor/repo_config_spec.rb +147 -0
  129. data/spec/core/extractor/translation/translation_to_hash_spec.rb +25 -0
  130. data/spec/core/git/diff_finder_spec.rb +74 -0
  131. data/spec/core/git/ref_spec.rb +118 -0
  132. data/spec/core/git/repo_spec.rb +216 -0
  133. data/spec/core/path_matcher_factory_spec.rb +139 -0
  134. data/spec/core/resolvers/extractor_id_spec.rb +47 -0
  135. data/spec/core/resolvers/integration_id_spec.rb +47 -0
  136. data/spec/core/resolvers/preprocessor_id_spec.rb +47 -0
  137. data/spec/core/resolvers/serializer_id_spec.rb +47 -0
  138. data/spec/core/snapshots/snapshot_factory_spec.rb +145 -0
  139. data/spec/core/string_utils_spec.rb +19 -0
  140. data/spec/core/translation_status_spec.rb +91 -0
  141. data/spec/core/validators/commit_validator_spec.rb +40 -0
  142. data/spec/core/validators/encoding_validator_spec.rb +30 -0
  143. data/spec/core/validators/locale_validator_spec.rb +31 -0
  144. data/spec/core/validators/repo_validator_spec.rb +30 -0
  145. data/spec/core/validators/serializer_validator_spec.rb +31 -0
  146. data/spec/integrations/integratable_spec.rb +58 -0
  147. data/spec/queuing/commits/commit_conductor_spec.rb +71 -0
  148. data/spec/queuing/commits/commit_job_spec.rb +87 -0
  149. data/spec/queuing/commits/extract_stage_spec.rb +68 -0
  150. data/spec/queuing/commits/fetch_stage_spec.rb +101 -0
  151. data/spec/queuing/commits/finalize_stage_spec.rb +88 -0
  152. data/spec/queuing/commits/push_stage_spec.rb +145 -0
  153. data/spec/queuing/commits/stage_spec.rb +80 -0
  154. data/spec/queuing/job_spec.rb +33 -0
  155. data/spec/queuing/queue_configurator_spec.rb +44 -0
  156. data/spec/spec_helper.rb +90 -0
  157. data/spec/test_helpers/fake_commit_stage.rb +17 -0
  158. metadata +257 -0
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+
6
+ # General-purpose string manipulation utilities.
7
+ class StringUtils
8
+ class << self
9
+ # Converts a snake_cased string into a CamelCased one.
10
+ #
11
+ # @example
12
+ # StringUtils.camelize('foo_bar') # => "FooBar"
13
+ #
14
+ # @param [String] str The snake_cased string to convert.
15
+ # @return [String]
16
+ def camelize(str)
17
+ str.gsub(/(^\w|[-_]\w)/) { $1[-1].upcase }
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,81 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+
6
+ # A utility class that encapsulates how translated a set of phrases is.
7
+ # The class knows how to report translation percentages, etc.
8
+ #
9
+ # @!attribute [r] phrase_count
10
+ # @return [Fixnum] the total number of phrases.
11
+ # @!attribute [r] locale_counts
12
+ # @return [Hash<Fixnum>] a hash of locale codes to counts. Each count
13
+ # represents the number of completed translations for that locale.
14
+ class TranslationStatus
15
+ attr_reader :phrase_count, :locale_counts
16
+
17
+ # Creates a new instance.
18
+ #
19
+ # @param [Fixnum] phrase_count The total number of phrases.
20
+ # @return [TranslationStatus]
21
+ def initialize(phrase_count)
22
+ @phrase_count = phrase_count
23
+ @locale_counts = {}
24
+ end
25
+
26
+ # Adds a locale code and count pair. The count should be the total number
27
+ # of completed translations in the locale.
28
+ #
29
+ # @param [String] locale_code
30
+ # @param [Fixnum] count
31
+ # @return [void]
32
+ def add_locale_count(locale_code, count)
33
+ locale_counts[locale_code] = count
34
+ end
35
+
36
+ # Returns true if the given locale is fully translated (i.e. the number of
37
+ # translations is greater than or equal to the number of phrases).
38
+ #
39
+ # @param [String] locale_code
40
+ # @return [Boolean]
41
+ def fully_translated_in?(locale_code)
42
+ (locale_counts[locale_code] || -1) >= phrase_count
43
+ end
44
+
45
+ # Returns true if every locale is fully translated, false otherwise.
46
+ #
47
+ # @return [Boolean]
48
+ def fully_translated?
49
+ locale_counts.all? do |locale_code, _|
50
+ fully_translated_in?(locale_code)
51
+ end
52
+ end
53
+
54
+ # Retrieves the number of completed translations for the given locale.
55
+ # Use this method in combination with +add_locale_count+.
56
+ def locale_count(locale_code)
57
+ locale_counts[locale_code]
58
+ end
59
+
60
+ # Retrieves a list of all the added locales.
61
+ #
62
+ # @return [Array<String>]
63
+ def locales
64
+ locale_counts.keys
65
+ end
66
+
67
+ # Calculates a translated percentage for the given locale.
68
+ #
69
+ # @param [String] locale_code
70
+ # @param [Fixnum] precision The precision to use when rounding the
71
+ # percentage.
72
+ # @return [Float] the translation percentage, rounded to +precision+
73
+ # decimal places.
74
+ def percent_translated(locale_code, precision = 2)
75
+ pct = locale_counts[locale_code] / phrase_count.to_f
76
+ [1.0, pct.round(precision)].min
77
+ end
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+
6
+ # Contains validators for validating the parameters of Rosette's commands.
7
+ module Validators
8
+ autoload :Validator, 'rosette/core/validators/validator'
9
+ autoload :CommitValidator, 'rosette/core/validators/commit_validator'
10
+ autoload :CommitsValidator, 'rosette/core/validators/commits_validator'
11
+ autoload :RepoValidator, 'rosette/core/validators/repo_validator'
12
+ autoload :SerializerValidator, 'rosette/core/validators/serializer_validator'
13
+ autoload :LocaleValidator, 'rosette/core/validators/locale_validator'
14
+ autoload :EncodingValidator, 'rosette/core/validators/encoding_validator'
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,62 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Validates the existence of a commit.
8
+ #
9
+ # @example
10
+ # v = CommitValidator.new
11
+ # v.valid?('73cd130a42017d794ffa86ef0d255541d518a7b3', 'my_repo', config)
12
+ # # => true
13
+ #
14
+ # v.valid?('non-existent-ref', 'my_repo', config)
15
+ # # => false
16
+ #
17
+ # v.messages # => ["Unable to find commit 'non-existent-ref'."]
18
+ class CommitValidator < Validator
19
+ # Returns true if the commit is valid, false otherwise. Also returns false if
20
+ # +repo_name+ isn't a valid repo configured in +configuration+.
21
+ #
22
+ # @param [String] commit_str The commit to validate.
23
+ # @param [String] repo_name The repo to look for +commit_str+ in.
24
+ # @param [Configurator] configuration The Rosette configuration to use.
25
+ # @return [Boolean]
26
+ def valid?(commit_str, repo_name, configuration)
27
+ if repo_config = configuration.get_repo(repo_name)
28
+ if commit_str
29
+ commit = repo_config.repo.get_rev_commit(commit_str)
30
+ validate_commit(commit)
31
+ else
32
+ messages << "Nil commit passed."
33
+ false
34
+ end
35
+ else
36
+ messages << "Unable to find repo #{repo_name}."
37
+ false
38
+ end
39
+ rescue Java::OrgEclipseJgitErrors::MissingObjectException, Java::JavaLang::IllegalArgumentException
40
+ messages << "Unable to find commit '#{commit_str}'."
41
+ false
42
+ end
43
+
44
+ private
45
+
46
+ def validate_commit(commit)
47
+ if options.fetch(:allow_merge_commit, true)
48
+ true
49
+ else
50
+ if commit.getParentCount > 1
51
+ messages << "Unable to validate #{commit.getId.name} because it's a merge commit."
52
+ false
53
+ else
54
+ true
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Validates the existence of an array of commits.
8
+ #
9
+ # @example
10
+ # v = CommitsValidator.new
11
+ # v.valid?(['73cd130a42017d794ffa86ef0d255541d518a7b3'], 'my_repo', config)
12
+ # # => true
13
+ #
14
+ # v.valid?(['non-existent-ref'], 'my_repo', config)
15
+ # # => false
16
+ #
17
+ # v.messages # => ["Unable to find commit 'non-existent-ref'."]
18
+ class CommitsValidator < CommitValidator
19
+ def valid?(commit_strs, repo_name, configuration)
20
+ if commit_strs
21
+ commit_strs.all? do |commit_str|
22
+ super(commit_str, repo_name, configuration)
23
+ end
24
+ else
25
+ false
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Validates an encoding.
8
+ #
9
+ # @example
10
+ # v = EncodingValidator.new
11
+ # v.valid?(Encoding::UTF_8, nil, nil) # => true
12
+ # v.valid?('foo', nil, nil) # => false
13
+ # v.messages # => ["Encoding 'foo' was not recognized."]
14
+ class EncodingValidator < Validator
15
+ # Returns true if the encoding is valid, false otherwise.
16
+ #
17
+ # @param [String, Encoding] encoding The encoding to validate.
18
+ # @param [String] repo_name (not used)
19
+ # @param [Configurator] configuration (not used)
20
+ # @return [Boolean]
21
+ def valid?(encoding, repo_name, configuration)
22
+ Encoding.find(encoding)
23
+ true
24
+ rescue ArgumentError
25
+ messages << "Encoding '#{encoding}' was not recognized."
26
+ false
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Validates a locale by making sure the given repo has been configured
8
+ # to support it.
9
+ #
10
+ # @example
11
+ # v = LocaleValidator.new
12
+ # v.valid?('ko-KR', 'my_repo', config) # => true
13
+ # v.valid?('foo-BAR', 'my_repo', config) # => false
14
+ # v.messages # => ["Repo 'my_repo' doesn't support the 'foo-BAR' locale"]
15
+ class LocaleValidator < Validator
16
+ # Returns true if the locale is valid, false otherwise.
17
+ #
18
+ # @param [String] locale_code The locale to validate.
19
+ # @param [String] repo_name The repo to use. This method checks the
20
+ # entry in +configuration+ for +repo_name+ to see if it supports
21
+ # +locale_code+.
22
+ # @param [Configurator] configuration The Rosette configuration to use.
23
+ # @return [Boolean]
24
+ def valid?(locale_code, repo_name, configuration)
25
+ repo = configuration.get_repo(repo_name)
26
+ if locale_code && repo.get_locale(locale_code)
27
+ true
28
+ else
29
+ messages << "Repo '#{repo_name}' doesn't support the '#{locale_code}' locale"
30
+ false
31
+ end
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Validates a repo by making sure it has been configured.
8
+ #
9
+ # @example
10
+ # v = RepoValidator.new
11
+ # v.valid?('my_repo', nil, config) # => true
12
+ # v.valid?('bad_repo', nil, config) # => false
13
+ # v.messages # => ["Unable to find repo 'bad_repo'."]
14
+ class RepoValidator < Validator
15
+ # Returns true if the repo is valid, false otherwise
16
+ #
17
+ # @param [String] repo_name The repo to validate.
18
+ # @param [String] _ (not used)
19
+ # @param [Configurator] configuration The Rosette configuration to use.
20
+ # @return [Boolean]
21
+ def valid?(repo_name, _, configuration)
22
+ if !configuration.get_repo(repo_name)
23
+ messages << "Unable to find repo '#{repo_name}'."
24
+ false
25
+ else
26
+ true
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Validates a serializer by making sure the given repo has been configured
8
+ # to support it.
9
+ #
10
+ # @example
11
+ # v = SerializerValidator.new
12
+ # v.valid?('yaml/rails', 'my_repo', config) # => true
13
+ # v.valid?('yaml/blarg', 'my_repo', config) # => false
14
+ # v.messages # => ["Unable to find serializer 'yaml/blarg'."]
15
+ class SerializerValidator < Validator
16
+ # Returns true if the serializer is valid, false otherwise.
17
+ #
18
+ # @param [String] serializer_id The serializer to validate.
19
+ # @param [String] repo_name The repo to use. This method checks the
20
+ # entry in +configuration+ for +repo_name+ to see if it supports
21
+ # +serializer_id+.
22
+ # @param [Configurator] configuration The Rosette configuration to use.
23
+ # @return [Boolean]
24
+ def valid?(serializer_id, repo_name, configuration)
25
+ repo = configuration.get_repo(repo_name)
26
+ if repo.get_serializer_config(serializer_id)
27
+ true
28
+ else
29
+ messages << "Unable to find serializer '#{serializer_id}'."
30
+ false
31
+ end
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ module Validators
6
+
7
+ # Base class for validators.
8
+ #
9
+ # @!attribute [r] options
10
+ # @return [Hash] a hash of options.
11
+ class Validator
12
+ attr_reader :options
13
+
14
+ # Creates a new validator.
15
+ #
16
+ # @param [Hash] options A hash of options.
17
+ def initialize(options = {})
18
+ @options = options
19
+ end
20
+
21
+ # An array of error messages. Populated when +#valid?+ is called.
22
+ #
23
+ # @return [Array<String>] The list of error messages.
24
+ def messages
25
+ @messages ||= []
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module Core
5
+ # +rosette-core+'s current version.
6
+ VERSION = "1.0.1"
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+
5
+ # Namespace for Rosette's data stores.
6
+ module DataStores
7
+ autoload :Errors, 'rosette/data_stores/errors'
8
+ autoload :PhraseStatus, 'rosette/data_stores/phrase_status'
9
+ end
10
+
11
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+
3
+ module Rosette
4
+ module DataStores
5
+
6
+ # Errors that can be raised during data store operations.
7
+ module Errors
8
+ # Raised when an error occurs when adding a new translation.
9
+ class AddTranslationError < StandardError; end
10
+
11
+ # Raised when a phrase with the given attributes cannot be found.
12
+ class PhraseNotFoundError < StandardError; end
13
+
14
+ # Raised when the appropriate translation parameters aren't provided.
15
+ class MissingParamError < StandardError; end
16
+
17
+ # Raised when a commit log entry can't be updated.
18
+ class CommitLogUpdateError < StandardError; end
19
+
20
+ # Raised when one of the locale entries for a commit log can't be
21
+ # updated.
22
+ class CommitLogLocaleUpdateError < StandardError; end
23
+ end
24
+
25
+ end
26
+ end