skala 0.3.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -4
  3. data/Gemfile +10 -1
  4. data/LICENSE.txt +17 -18
  5. data/README.md +1 -34
  6. data/README.primo_adapter.md +42 -0
  7. data/bin/console +11 -0
  8. data/config/initializers/skala.rb +5 -0
  9. data/config/skala.yml +65 -0
  10. data/db/migrate/20141006133522_create_skala_users.rb +13 -0
  11. data/db/migrate/20141006133649_create_skala_user_watch_lists.rb +14 -0
  12. data/db/migrate/20141006135644_create_skala_user_watch_list_entries.rb +13 -0
  13. data/db/migrate/20141006140435_create_skala_user_notes.rb +16 -0
  14. data/lib/skala.rb +36 -3
  15. data/lib/skala/adapter.rb +122 -4
  16. data/lib/skala/adapter/authenticate_user.rb +4 -0
  17. data/lib/skala/adapter/create_user_hold_request.rb +7 -0
  18. data/lib/skala/adapter/create_user_hold_request/result.rb +10 -0
  19. data/lib/skala/adapter/delete_user_hold_request.rb +7 -0
  20. data/lib/skala/adapter/get_record_holdable_items.rb +5 -0
  21. data/lib/skala/adapter/get_record_holdable_items/result.rb +14 -0
  22. data/lib/skala/adapter/get_record_items.rb +5 -0
  23. data/lib/skala/adapter/get_record_items/result.rb +14 -0
  24. data/lib/skala/adapter/get_records.rb +5 -0
  25. data/lib/skala/adapter/get_records/result.rb +28 -0
  26. data/lib/skala/adapter/get_user.rb +4 -0
  27. data/lib/skala/adapter/get_user_former_loans.rb +5 -0
  28. data/lib/skala/adapter/get_user_former_loans/result.rb +14 -0
  29. data/lib/skala/adapter/get_user_hold_requests.rb +5 -0
  30. data/lib/skala/adapter/get_user_hold_requests/result.rb +14 -0
  31. data/lib/skala/adapter/get_user_inter_library_loans.rb +5 -0
  32. data/lib/skala/adapter/get_user_inter_library_loans/result.rb +14 -0
  33. data/lib/skala/adapter/get_user_loans.rb +5 -0
  34. data/lib/skala/adapter/get_user_loans/result.rb +14 -0
  35. data/lib/skala/adapter/get_user_transactions.rb +5 -0
  36. data/lib/skala/adapter/get_user_transactions/result.rb +14 -0
  37. data/lib/skala/adapter/operation.rb +2 -0
  38. data/lib/skala/adapter/operation/request.rb +6 -0
  39. data/lib/skala/adapter/operation/result.rb +7 -0
  40. data/lib/skala/adapter/renew_user_loan.rb +7 -0
  41. data/lib/skala/adapter/renew_user_loan/result.rb +7 -0
  42. data/lib/skala/adapter/renew_user_loans.rb +5 -0
  43. data/lib/skala/adapter/renew_user_loans/result.rb +9 -0
  44. data/lib/skala/adapter/search.rb +6 -0
  45. data/lib/skala/adapter/search/request.rb +91 -0
  46. data/lib/skala/adapter/search/request/date_histogram_facet.rb +5 -0
  47. data/lib/skala/adapter/search/request/facet.rb +29 -0
  48. data/lib/skala/adapter/search/request/histogram_facet.rb +8 -0
  49. data/lib/skala/adapter/search/request/ids_query.rb +6 -0
  50. data/lib/skala/adapter/search/request/match_query.rb +7 -0
  51. data/lib/skala/adapter/search/request/ordered_terms_query.rb +7 -0
  52. data/lib/skala/adapter/search/request/query.rb +18 -0
  53. data/lib/skala/adapter/search/request/query_string_query.rb +9 -0
  54. data/lib/skala/adapter/search/request/range_facet.rb +10 -0
  55. data/lib/skala/adapter/search/request/range_facet/range.rb +9 -0
  56. data/lib/skala/adapter/search/request/range_query.rb +8 -0
  57. data/lib/skala/adapter/search/request/simple_query_string_query.rb +8 -0
  58. data/lib/skala/adapter/search/request/sort_request.rb +15 -0
  59. data/lib/skala/adapter/search/request/terms_facet.rb +8 -0
  60. data/lib/skala/adapter/search/request/unscored_terms_query.rb +7 -0
  61. data/lib/skala/adapter/search/result.rb +22 -0
  62. data/lib/skala/adapter/search/result/facet.rb +15 -0
  63. data/lib/skala/adapter/search/result/histogram_facet.rb +12 -0
  64. data/lib/skala/adapter/search/result/histogram_facet/entry.rb +8 -0
  65. data/lib/skala/adapter/search/result/hit.rb +13 -0
  66. data/lib/skala/adapter/search/result/terms_facet.rb +14 -0
  67. data/lib/skala/adapter/search/result/terms_facet/term.rb +8 -0
  68. data/lib/skala/adapter/update_user.rb +4 -0
  69. data/lib/skala/aleph_adapter.rb +47 -0
  70. data/lib/skala/aleph_adapter/authenticate_user.rb +27 -0
  71. data/lib/skala/aleph_adapter/create_user_hold_request.rb +63 -0
  72. data/lib/skala/aleph_adapter/delete_user_hold_request.rb +29 -0
  73. data/lib/skala/aleph_adapter/get_record.rb +22 -0
  74. data/lib/skala/aleph_adapter/get_record_holdable_items.rb +29 -0
  75. data/lib/skala/aleph_adapter/get_record_items.rb +111 -0
  76. data/lib/skala/aleph_adapter/get_user.rb +49 -0
  77. data/lib/skala/aleph_adapter/get_user_former_loans.rb +21 -0
  78. data/lib/skala/aleph_adapter/get_user_hold_requests.rb +102 -0
  79. data/lib/skala/aleph_adapter/get_user_inter_library_loans.rb +66 -0
  80. data/lib/skala/aleph_adapter/get_user_loans.rb +93 -0
  81. data/lib/skala/aleph_adapter/get_user_transactions.rb +96 -0
  82. data/lib/skala/aleph_adapter/renew_user_loan.rb +27 -0
  83. data/lib/skala/aleph_adapter/renew_user_loans.rb +39 -0
  84. data/lib/skala/aleph_adapter/resolve_user.rb +19 -0
  85. data/lib/skala/aleph_adapter/update_user.rb +105 -0
  86. data/lib/skala/common_attributes.rb +19 -0
  87. data/lib/skala/elasticsearch_adapter.rb +33 -0
  88. data/lib/skala/elasticsearch_adapter/search.rb +20 -0
  89. data/lib/skala/elasticsearch_adapter/search/request_transformation.rb +20 -0
  90. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_aggregations.rb +50 -0
  91. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_from.rb +10 -0
  92. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_query.rb +107 -0
  93. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_size.rb +12 -0
  94. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_sort.rb +18 -0
  95. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_version.rb +10 -0
  96. data/lib/skala/elasticsearch_adapter/search/result_transformation.rb +21 -0
  97. data/lib/skala/elasticsearch_adapter/search/result_transformation/set_facets.rb +44 -0
  98. data/lib/skala/elasticsearch_adapter/search/result_transformation/set_hits.rb +18 -0
  99. data/lib/skala/elasticsearch_adapter/search/result_transformation/set_total_hits.rb +10 -0
  100. data/lib/skala/engine.rb +14 -0
  101. data/lib/skala/get_user_result.rb +14 -0
  102. data/lib/skala/hold_request.rb +24 -0
  103. data/lib/skala/item.rb +15 -0
  104. data/lib/skala/loan.rb +18 -0
  105. data/lib/skala/primo_adapter.rb +34 -0
  106. data/lib/skala/primo_adapter/get_records.rb +24 -0
  107. data/lib/skala/primo_adapter/search.rb +13 -0
  108. data/lib/skala/primo_adapter/search/request_transformation.rb +40 -0
  109. data/lib/skala/primo_adapter/search/request_transformation/add_queries.rb +97 -0
  110. data/lib/skala/primo_adapter/search/request_transformation/add_sort_by_list.rb +37 -0
  111. data/lib/skala/primo_adapter/search/request_transformation/embed_inner_search_request.rb +13 -0
  112. data/lib/skala/primo_adapter/search/request_transformation/serialize_target_as_xml.rb +11 -0
  113. data/lib/skala/primo_adapter/search/request_transformation/set_bulk_size.rb +12 -0
  114. data/lib/skala/primo_adapter/search/request_transformation/set_institution.rb +12 -0
  115. data/lib/skala/primo_adapter/search/request_transformation/set_languages.rb +15 -0
  116. data/lib/skala/primo_adapter/search/request_transformation/set_locations.rb +19 -0
  117. data/lib/skala/primo_adapter/search/request_transformation/set_on_campus.rb +13 -0
  118. data/lib/skala/primo_adapter/search/request_transformation/set_start_index.rb +12 -0
  119. data/lib/skala/primo_adapter/search/request_transformation/setup_inner_search_request.rb +33 -0
  120. data/lib/skala/primo_adapter/search/request_transformation/setup_target.rb +28 -0
  121. data/lib/skala/primo_adapter/search/request_transformation/toggle_bool_operator.rb +13 -0
  122. data/lib/skala/primo_adapter/search/result_transformation.rb +30 -0
  123. data/lib/skala/primo_adapter/search/result_transformation/add_hits.rb +13 -0
  124. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation.rb +46 -0
  125. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_creator.rb +10 -0
  126. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_description.rb +10 -0
  127. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_edition.rb +10 -0
  128. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_fulltext_available.rb +12 -0
  129. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_id.rb +11 -0
  130. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_identifier.rb +46 -0
  131. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_is_part_of.rb +14 -0
  132. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_language.rb +10 -0
  133. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_metadata.rb +13 -0
  134. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_openurl.rb +23 -0
  135. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_publisher.rb +10 -0
  136. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_source.rb +10 -0
  137. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_subject.rb +10 -0
  138. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_title.rb +10 -0
  139. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_year_of_publication.rb +10 -0
  140. data/lib/skala/primo_adapter/search/result_transformation/fix_primo_facets_bugs.rb +108 -0
  141. data/lib/skala/primo_adapter/search/result_transformation/parse_search_brief_response.rb +20 -0
  142. data/lib/skala/primo_adapter/search/result_transformation/set_facets.rb +71 -0
  143. data/lib/skala/primo_adapter/search/result_transformation/set_total_hits.rb +13 -0
  144. data/lib/skala/primo_adapter/search/result_transformation/sort_terms_facets_terms.rb +14 -0
  145. data/lib/skala/primo_adapter/soap_api.rb +15 -0
  146. data/lib/skala/primo_adapter/soap_api/search_brief.rb +25 -0
  147. data/lib/skala/record.rb +85 -0
  148. data/lib/skala/record/identifier.rb +9 -0
  149. data/lib/skala/record/is_part_of.rb +11 -0
  150. data/lib/skala/record/link.rb +9 -0
  151. data/lib/skala/record/relation.rb +9 -0
  152. data/lib/skala/transaction.rb +13 -0
  153. data/lib/skala/version.rb +1 -1
  154. data/skala.gemspec +21 -12
  155. data/spec/skala/search_request/ordered_terms_query_spec.rb +6 -0
  156. data/spec/spec_helper.rb +7 -28
  157. metadata +237 -85
  158. data/lib/skala/i18n.rb +0 -46
  159. data/lib/skala/transformation.rb +0 -54
  160. data/lib/skala/transformation/step.rb +0 -24
  161. data/spec/assets/locales/de.yml +0 -14
  162. data/spec/assets/locales/en.yml +0 -9
  163. data/spec/assets/transformation/some_class.rb +0 -2
  164. data/spec/skala/adapter/operation_spec.rb +0 -19
  165. data/spec/skala/adapter_spec.rb +0 -2
  166. data/spec/skala/i18n_spec.rb +0 -95
  167. data/spec/skala/transformation/step_spec.rb +0 -36
  168. data/spec/skala/transformation_spec.rb +0 -89
  169. data/spec/skala_spec.rb +0 -2
@@ -1,46 +0,0 @@
1
- require "active_support"
2
- require "active_support/core_ext"
3
- require "mighty_tap"
4
- require "yaml"
5
- require_relative "../skala"
6
-
7
- module Skala::I18n
8
- def self.included(klass)
9
- klass.extend(ClassMethods)
10
- end
11
-
12
- module ClassMethods
13
- def load_locales_from_directory(path)
14
- Dir.glob("#{File.expand_path(path)}/*.yml").inject({}) do |_locales, _filename|
15
- _locales.mtap(:deep_merge!, YAML.load_file(_filename))
16
- end
17
- end
18
-
19
- # override this to provide locales
20
- def locales
21
- {}
22
- end
23
-
24
- def translate(key, options = {})
25
- raise "Destination locale missing!" if options[:locale].nil?
26
-
27
- fully_qualified_key = "#{options[:locale]}.#{key}"
28
- keys_path = fully_qualified_key.split(".")
29
-
30
- translated_key = keys_path.inject(locales) do |hash, hash_key|
31
- unless hash.nil?
32
- hash[hash_key.to_s] || hash[hash_key.to_sym]
33
- end
34
- end || keys_path.last
35
-
36
- translated_key.gsub(/%{[^}]+}+/) do |match|
37
- interpolation_key = match.gsub(/(\A%{)|(}\Z)/, "")
38
- options[interpolation_key.to_s] || options[interpolation_key.to_sym] || match
39
- end
40
- end
41
- end
42
-
43
- def translate(*args)
44
- self.class.translate(*args)
45
- end
46
- end
@@ -1,54 +0,0 @@
1
- require_relative "../skala"
2
-
3
- class Skala::Transformation
4
- require_relative "./transformation/step"
5
-
6
- #
7
- # class methods
8
- #
9
- class << self
10
- attr_accessor :steps
11
- end
12
-
13
- # since a transformation can have many steps, writing a "require" for each is tedious
14
- def self.require_directory(directory)
15
- Dir.glob("#{File.expand_path(directory)}/*.rb").each do |filename|
16
- require filename
17
- end
18
- end
19
-
20
- # convenience wrapper for @steps setter to enhance readability
21
- def self.sequence(value)
22
- self.steps = value
23
- end
24
-
25
- #
26
- # instance methods
27
- #
28
- attr_accessor :source
29
- attr_accessor :target
30
-
31
- def apply(options = {})
32
- if (@source = options[:source] ||= options[:to]).nil?
33
- raise ArgumentError, "No source given to apply transformation to!"
34
- end
35
-
36
- @target = options[:target]
37
-
38
- self.class.steps.flatten.each do |step|
39
- break if @__aborted
40
-
41
- if step.is_a?(Class)
42
- step.new(self).call
43
- else
44
- step.call(self)
45
- end
46
- end
47
-
48
- return @target
49
- end
50
-
51
- def abort!
52
- @__aborted = true
53
- end
54
- end
@@ -1,24 +0,0 @@
1
- require_relative "../transformation"
2
-
3
- class Skala::Transformation::Step
4
- attr_accessor :transformation
5
-
6
- def initialize(transformation)
7
- @transformation = transformation
8
- end
9
-
10
- #
11
- # Each step has transparent access to all methods of it's transformation
12
- #
13
- def method_missing(method_name, *args, &block)
14
- if @transformation.respond_to?(method_name)
15
- @transformation.send(method_name, *args, &block)
16
- else
17
- super
18
- end
19
- end
20
-
21
- def respond_to_missing?(method_name, include_private = false)
22
- @transformation.respond_to?(method_name) || super
23
- end
24
- end
@@ -1,14 +0,0 @@
1
- de:
2
- field_names:
3
- _all: Alle Felder
4
- _score: Relevanz
5
- created: Erscheinungsjahr
6
- creator: Autor/Herausgeber
7
- identifier: Identifikator
8
- subject: Schlagwort
9
- title: Titel
10
-
11
- records:
12
- items:
13
- loan_status:
14
- expected: Erwartet zum %{expected_date}
@@ -1,9 +0,0 @@
1
- en:
2
- field_names:
3
- _all: All fields
4
- _score: Score
5
- created: Created
6
- creator: Creator
7
- identifier: Identifier
8
- subject: Subject
9
- title: Title
@@ -1,2 +0,0 @@
1
- class SomeClass
2
- end
@@ -1,19 +0,0 @@
1
- describe Skala::Adapter::Operation do
2
- let(:adapter) do
3
- {
4
- some: "adapter"
5
- }
6
- end
7
-
8
- context "if initialized with a adapter" do
9
- let(:operation) do
10
- described_class.new(adapter)
11
- end
12
-
13
- describe "#adapter" do
14
- it "returns the adapter the operation was initialized with" do
15
- expect(operation.adapter).to eq(adapter)
16
- end
17
- end
18
- end
19
- end
@@ -1,2 +0,0 @@
1
- describe Skala::Adapter do
2
- end
@@ -1,95 +0,0 @@
1
- describe Skala::I18n do
2
- let(:class_with_i18n_included) do
3
- Class.new.tap do |_klass|
4
- _klass.send(:include, described_class)
5
- end
6
- end
7
-
8
- context "when included into a class" do
9
- it "defines a class method #load_locales_from_directory" do
10
- expect(class_with_i18n_included).to respond_to(:load_locales_from_directory)
11
- end
12
-
13
- it "defines a class method #locales" do
14
- expect(class_with_i18n_included).to respond_to(:locales)
15
- end
16
-
17
- it "defines a class method #translate" do
18
- expect(class_with_i18n_included).to respond_to(:translate)
19
- end
20
-
21
- it "defines an instance method .translate" do
22
- expect(class_with_i18n_included.new).to respond_to(:translate)
23
- end
24
- end
25
-
26
- describe "#load_locales_from_directory" do
27
- it "loads all yaml encoded locales from a directory" do
28
- loaded_locales =
29
- class_with_i18n_included.load_locales_from_directory(
30
- File.expand_path("#{File.dirname(__FILE__)}/../assets/locales")
31
- )
32
-
33
- expect(loaded_locales).not_to be_empty
34
- end
35
- end
36
-
37
- describe "#translate" do
38
- context "if the class defines .locales" do
39
- let(:class_with_i18n_included_and_locales) do
40
- Class.new(class_with_i18n_included).tap do |_klass|
41
- def _klass.locales
42
- load_locales_from_directory(
43
- File.expand_path("#{File.dirname(__FILE__)}/../assets/locales")
44
- )
45
- end
46
- end
47
- end
48
-
49
- let(:object) do
50
- class_with_i18n_included_and_locales.new
51
- end
52
-
53
- it "translates the given key into the language specified by the locale option" do
54
- translated_key_de = object.translate("field_names.creator", locale: :de)
55
- translated_key_en = object.translate("field_names.creator", locale: :en)
56
-
57
- expected_translation_de = object.class.locales["de"]["field_names"]["creator"]
58
- expected_translation_en = object.class.locales["en"]["field_names"]["creator"]
59
-
60
- expect(translated_key_de).to eq(expected_translation_de)
61
- expect(translated_key_en).to eq(expected_translation_en)
62
- end
63
-
64
- it "supports rails style interpolation" do
65
- expected_date = "1. Januar 2015"
66
- translated_key = object.translate("records.items.loan_status.expected", locale: :de, expected_date: expected_date)
67
- expected_translation = object.class.locales["de"]["records"]["items"]["loan_status"]["expected"].gsub("%{expected_date}", expected_date)
68
-
69
- expect(translated_key).to eq(expected_translation)
70
- end
71
-
72
- context "when there is no translation" do
73
- it "returns the last key path" do
74
- expect(object.translate("foo.bar.muff", locale: :en)).to eq("muff")
75
- end
76
- end
77
-
78
- context "when no locale option is given" do
79
- it "raises an exception" do
80
- expect { object.translate("field_names.creator") }.to raise_error
81
- end
82
- end
83
- end
84
-
85
- context "if the class does not define .locales" do
86
- let(:object) do
87
- class_with_i18n_included.new
88
- end
89
-
90
- it "returns the last key path" do
91
- expect(object.translate("foo.bar.muff", locale: :en)).to eq("muff")
92
- end
93
- end
94
- end
95
- end
@@ -1,36 +0,0 @@
1
- describe Skala::Transformation::Step do
2
- context "when initialized with a transformation" do
3
- let(:transformation) do
4
- Class.new(Skala::Transformation) do
5
- def some_transformation_method
6
- true
7
- end
8
- end.new
9
- end
10
-
11
- let(:step) do
12
- described_class.new(transformation)
13
- end
14
-
15
- describe "#transformation" do
16
- it "allows access to the transformation" do
17
- expect(step.transformation).to be(transformation)
18
- end
19
- end
20
-
21
- context "if a unknown method is called" do
22
- context "if the transformation has a matching method" do
23
- it "calls the method on the transformation" do
24
- expect(step).to respond_to(:some_transformation_method)
25
- expect(step.some_transformation_method).to eq(transformation.some_transformation_method)
26
- end
27
- end
28
-
29
- context "if the transformation has no matching method" do
30
- it "raises an error" do
31
- expect { step.some_unknown_method }.to raise_error
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,89 +0,0 @@
1
- describe Skala::Transformation do
2
- describe ".require_directory" do
3
- it "requires all *.rb files in the given directory" do
4
- described_class.require_directory "#{File.dirname(__FILE__)}/../assets/transformation"
5
- expect(defined?(SomeClass)).to eq("constant")
6
- end
7
- end
8
-
9
- describe "#sequence" do
10
- let(:steps_array) do
11
- [ -> { } ]
12
- end
13
-
14
- let(:transformation) do
15
- steps = steps_array
16
-
17
- Class.new(described_class) do
18
- sequence steps
19
- end
20
- end
21
-
22
- it "is a wrapper for the steps setter" do
23
- expect(transformation.steps).to be(steps_array)
24
- end
25
- end
26
-
27
- describe "#abort!" do
28
- let(:transformation) do
29
- Class.new(described_class) do
30
- def abort_execution?
31
- !!@abort_execution
32
- end
33
-
34
- def initialize(abort_execution = true)
35
- @abort_execution = abort_execution
36
- end
37
-
38
- sequence [
39
- -> (transformation) do
40
- transformation.target = "first_steps_output"
41
- transformation.abort! if transformation.abort_execution?
42
- end,
43
- -> (transformation) do
44
- transformation.target = "second_steps_output"
45
- end
46
- ]
47
- end
48
- end
49
-
50
- it "aborts the execution of the steps sequence" do
51
- expect(transformation.new.apply to: {}).to eq("first_steps_output")
52
- expect(transformation.new(false).apply to: {}).to eq("second_steps_output")
53
- end
54
- end
55
-
56
- describe "#apply" do
57
- let(:transformation) do
58
- step_class = Class.new(described_class::Step) do
59
- def call
60
- transformation.target = source.dup
61
- end
62
- end
63
-
64
- step_lambda = -> (transformation) do
65
- transformation.target.upcase!
66
- end
67
-
68
- Class.new(described_class) do
69
- sequence [
70
- step_class,
71
- step_lambda
72
- ]
73
- end.new
74
- end
75
-
76
- context "if no :source or :to option is given" do
77
- it "raises an error" do
78
- expect { transformation.apply }.to raise_error(ArgumentError)
79
- end
80
- end
81
-
82
- it "applies the transformation" do
83
- some_string = "foo"
84
-
85
- expect(transformation.apply(to: some_string)).to eq(some_string.upcase)
86
- expect(some_string).to eq("foo")
87
- end
88
- end
89
- end
@@ -1,2 +0,0 @@
1
- describe Skala do
2
- end