elibri_onix_mocks 0.1.0
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.
- data/.gitignore +4 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/README.md +32 -0
- data/Rakefile +8 -0
- data/elibri_onix_mocks.gemspec +32 -0
- data/lib/elibri_onix_mocks.rb +14 -0
- data/lib/elibri_onix_mocks/generators/xml_generator.rb +995 -0
- data/lib/elibri_onix_mocks/generators/xml_tags.yml +388 -0
- data/lib/elibri_onix_mocks/mocks/mock_method_missing.rb +91 -0
- data/lib/elibri_onix_mocks/mocks/xml_mocks.rb +801 -0
- data/lib/elibri_onix_mocks/onix_helpers.rb +160 -0
- data/lib/elibri_onix_mocks/version.rb +3 -0
- data/lib/elibri_onix_mocks/xml_variant.rb +122 -0
- data/spec/elibri_onix_mocks_spec.rb +33 -0
- data/spec/spec_helper.rb +12 -0
- metadata +179 -0
@@ -0,0 +1,160 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module OnixHelpers
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module InstanceMethods
|
7
|
+
|
8
|
+
#zwróć różne poziomy tytułu, w formacie potrzebnym do exportu w ONIX-ie
|
9
|
+
def title_parts
|
10
|
+
[].tap do |res|
|
11
|
+
product_code = Elibri::ONIX::Dict::Release_3_0::TitleElementLevel::PRODUCT #01
|
12
|
+
collection_code = Elibri::ONIX::Dict::Release_3_0::TitleElementLevel::COLLECTION #02
|
13
|
+
res << OpenStruct.new(:level => collection_code, :title => collection.name, :part => self.collection_part) if collection
|
14
|
+
res << OpenStruct.new(:level => product_code, :title => self.title, :subtitle => self.subtitle, :part => self.title_part) if self.title.present?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# Zwróć datę publikacji w formacie ONIX
|
20
|
+
def publication_date(format = :onix, splitter = nil)
|
21
|
+
publication_year_str = self.publication_year ? "%04d"% self.publication_year : nil
|
22
|
+
publication_month_str = self.publication_month ? "%02d"% self.publication_month : nil
|
23
|
+
publication_day_str = self.publication_day ? "%02d"% self.publication_day : nil
|
24
|
+
|
25
|
+
case format
|
26
|
+
when :onix
|
27
|
+
splitter ||= ''
|
28
|
+
date_string = [publication_year_str, publication_month_str, publication_day_str].compact.join(splitter)
|
29
|
+
when :polish
|
30
|
+
splitter ||= '.'
|
31
|
+
date_string = [publication_day_str, publication_month_str, publication_year_str].compact.join(splitter)
|
32
|
+
end
|
33
|
+
date_string.blank? ? nil : date_string
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def publication_date_with_onix_format_code
|
38
|
+
#lista 55
|
39
|
+
if self.publication_year.present? && self.publication_month.present? && self.publication_day.present?
|
40
|
+
[publication_date, Elibri::ONIX::Dict::Release_3_0::DateFormat::YYYYMMDD]
|
41
|
+
elsif self.publication_year.present? && self.publication_month.present?
|
42
|
+
[self.publication_year.to_s + "%02d" % self.publication_month, Elibri::ONIX::Dict::Release_3_0::DateFormat::YYYYMM]
|
43
|
+
elsif self.publication_year.present?
|
44
|
+
[self.publication_year.to_s, Elibri::ONIX::Dict::Release_3_0::DateFormat::YYYY]
|
45
|
+
else
|
46
|
+
[nil, nil]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# Parsuj datę publikacji z ONIX`a (YYYYMMDD) i uzupełnij odpowiednie pola
|
52
|
+
def publication_date=(date_from_xml)
|
53
|
+
if match = date_from_xml.to_s.match(/ (\d{4}) [\s-]? (\d{2})? [\s-]? (\d{2})? /x)
|
54
|
+
self.publication_year = $1
|
55
|
+
self.publication_month = $2
|
56
|
+
self.publication_day = $3
|
57
|
+
else
|
58
|
+
self.publication_year = self.publication_month = self.publication_day = nil if date_from_xml.blank?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
# TODO
|
64
|
+
def notification_type
|
65
|
+
if current_state == :private
|
66
|
+
raise "Cannot handle private state"
|
67
|
+
elsif current_state == :announced
|
68
|
+
Elibri::ONIX::Dict::Release_3_0::NotificationType.find_by_onix_code(Elibri::ONIX::Dict::Release_3_0::NotificationType::EARLY_NOTIFICATION)
|
69
|
+
elsif current_state == :preorder
|
70
|
+
Elibri::ONIX::Dict::Release_3_0::NotificationType.find_by_onix_code(Elibri::ONIX::Dict::Release_3_0::NotificationType::ADVANCED_NOTIFICATION)
|
71
|
+
else
|
72
|
+
Elibri::ONIX::Dict::Release_3_0::NotificationType.find_by_onix_code(Elibri::ONIX::Dict::Release_3_0::NotificationType::CONFIRMED_ON_PUBLICATION)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
#hack wynikający z nieobecności maszyny stanów
|
77
|
+
def current_state
|
78
|
+
state
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def publishing_status_onix_code
|
83
|
+
if current_state.to_sym == :private #domyślny stan
|
84
|
+
raise "Cannot handle private state"
|
85
|
+
elsif current_state.to_sym == :announced #zapowiedź
|
86
|
+
Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::FORTHCOMING
|
87
|
+
elsif current_state.to_sym == :preorder #przedsprzedaż
|
88
|
+
Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::FORTHCOMING
|
89
|
+
elsif current_state.to_sym == :published #dostępna na rynku
|
90
|
+
Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::ACTIVE
|
91
|
+
elsif current_state.to_sym == :out_of_print #nakład wyczerpany
|
92
|
+
Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::OUT_OF_PRINT
|
93
|
+
elsif current_state.to_sym == :deleted #błędnie stworzony rekord
|
94
|
+
Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::UNSPECIFIED
|
95
|
+
else
|
96
|
+
raise "Don't know how to handle state = #{current_state}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def publishing_status_onix_code=(code)
|
101
|
+
if code.present?
|
102
|
+
if code == Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::ACTIVE
|
103
|
+
self.state = "published"
|
104
|
+
elsif code == Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::OUT_OF_PRINT
|
105
|
+
self.state = "out_of_print"
|
106
|
+
elsif code == Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode::FORTHCOMING
|
107
|
+
self.state = "preorder"
|
108
|
+
else
|
109
|
+
raise "Don't know how to handle publishing_stats_onix_code = #{code}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def form
|
115
|
+
Elibri::ONIX::Dict::Release_3_0::ProductFormCode.find_by_onix_code(self.product_form_onix_code)
|
116
|
+
end
|
117
|
+
|
118
|
+
def publishing_status
|
119
|
+
Elibri::ONIX::Dict::Release_3_0::PublishingStatusCode.find_by_onix_code(self.publishing_status_onix_code)
|
120
|
+
end
|
121
|
+
|
122
|
+
def epub_technical_protection
|
123
|
+
Elibri::ONIX::Dict::Release_3_0::EpubTechnicalProtection.find_by_onix_code(self.epub_technical_protection_onix_code)
|
124
|
+
end
|
125
|
+
|
126
|
+
def form_detail
|
127
|
+
Elibri::ONIX::Dict::Release_3_0::ProductFormDetail.find_by_onix_code(self.product_form_detail_onix_code)
|
128
|
+
end
|
129
|
+
|
130
|
+
def audience_range_present?
|
131
|
+
self.audience_age_from.present? or self.audience_age_to.present?
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def authorship_kind
|
136
|
+
value = self.method_missing(:authorship_kind) || ActiveSupport::StringInquirer.new(:user_given.to_s)
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
def series_membership_kind
|
141
|
+
value = self.method_missing(:series_membership_kind) || ActiveSupport::StringInquirer.new(:user_given.to_s)
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
def series_names
|
146
|
+
self.series_memberships.map {|series_membership| series_membership.publisher_series.try(:name)}.compact
|
147
|
+
end
|
148
|
+
|
149
|
+
def stock_quantity_for_merlin
|
150
|
+
if stock_quantity.nil?
|
151
|
+
0
|
152
|
+
elsif stock_quantity > 50
|
153
|
+
50
|
154
|
+
else
|
155
|
+
stock_quantity
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module Elibri
|
5
|
+
|
6
|
+
# Klasa implementująca logikę wariantów XML produktów. Gdy klient zapłaci za pełne informacje
|
7
|
+
# o produkcie, to dostaje bogatszy XML. Poniższa klasa jest tylko helperem, który upraszcza
|
8
|
+
# i redukuje kod w innych miejscach aplikacji.
|
9
|
+
class XmlVariant
|
10
|
+
attr_reader :features
|
11
|
+
|
12
|
+
# Wyjątek zgłaszany przy nieprawidłowej kombinacji wariantu:
|
13
|
+
class InvalidFeature < Exception; end
|
14
|
+
|
15
|
+
FEATURES_SEPARATOR = ':'
|
16
|
+
|
17
|
+
# Dostępne elementy XML produktu. Gdy nic nie będzie wybrane, XML będzie zawierał
|
18
|
+
# tylko RecordReference.
|
19
|
+
FEATURES = ActiveSupport::OrderedHash.new
|
20
|
+
FEATURES[:basic_meta] = 'podstawowe meta-dane produktów'
|
21
|
+
FEATURES[:media_files] = 'linki do załączników (okładki, fragmenty treści)'
|
22
|
+
FEATURES[:other_texts] = 'opisy szczegółowe (spis treści, recenzje)'
|
23
|
+
FEATURES[:stocks] = 'stany magazynowe dostawców'
|
24
|
+
|
25
|
+
#jeśli ostatni argument to true, to nie waliduj, czy kobinacja jest prawidłowa,
|
26
|
+
#a więc jest jedną z ALL_FEATURES_COMBINATIONS
|
27
|
+
def initialize(*features)
|
28
|
+
@features = Array(features).flatten
|
29
|
+
if @features[-1] === true
|
30
|
+
ignore_unknow_combinations = true
|
31
|
+
@features.pop
|
32
|
+
else
|
33
|
+
ignore_unknow_combinations = false
|
34
|
+
end
|
35
|
+
@features = @features.reject(&:blank?).map(&:to_sym).to_set
|
36
|
+
|
37
|
+
unless (@features - FEATURES.keys).empty?
|
38
|
+
raise InvalidFeature.new("Unknown xml features #{@features.inspect}")
|
39
|
+
end
|
40
|
+
unless ignore_unknow_combinations
|
41
|
+
if @features.present? and !ALL_FEATURES_COMBINATIONS.map(&:features).include?(@features)
|
42
|
+
raise InvalidFeature.new("Unknow combination of xml features #{@features.inspect}")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Wszystkie możliwe kombinacje wariantów XML - zbiór uzupełniany na końcu klasy.
|
48
|
+
# Upraszcza kod odświeżacza XML. W celu odświeżenia wszystkich możliwych wariantów XML
|
49
|
+
# dla produktu, po prostu iteruję po tej kolekcji.
|
50
|
+
ALL_FEATURES_COMBINATIONS = Set.new
|
51
|
+
ALL_FEATURES_COMBINATIONS << XmlVariant.new([:basic_meta, :media_files, :other_texts], true)
|
52
|
+
ALL_FEATURES_COMBINATIONS << XmlVariant.new([:basic_meta, :media_files, :other_texts, :stocks], true)
|
53
|
+
ALL_FEATURES_COMBINATIONS << XmlVariant.new([:stocks], true)
|
54
|
+
|
55
|
+
|
56
|
+
# Fabryka budująca instancę XmlVariant ze stringu 'basic_meta:media_files:other_texts:stocks'
|
57
|
+
def self.deserialize(features_str, ignore_unknow_combinations = false)
|
58
|
+
if ignore_unknow_combinations
|
59
|
+
XmlVariant.new(features_str.to_s.split(FEATURES_SEPARATOR), true)
|
60
|
+
else
|
61
|
+
XmlVariant.new(features_str.to_s.split(FEATURES_SEPARATOR))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def except(*features)
|
66
|
+
excluded_features = Array(features).flatten.map(&:to_sym)
|
67
|
+
XmlVariant.new( (self.features - excluded_features).to_a )
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def ==(other_xml_variant)
|
72
|
+
self.features == other_xml_variant.features
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
def eql?(other_xml_variant)
|
77
|
+
self == other_xml_variant
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def equal?(other_xml_variant)
|
82
|
+
self == other_xml_variant
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
# Żeby działało porównywanie w Set`ach
|
87
|
+
def hash
|
88
|
+
self.features.hash
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def feature_included?(feature)
|
93
|
+
self.features.include?(feature.to_sym)
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
FEATURES.keys.each do |feature_sym|
|
98
|
+
self.class_eval %Q{
|
99
|
+
def includes_#{feature_sym}? # def includes_other_texts?
|
100
|
+
feature_included?(:#{feature_sym}) # feature_included?(:other_texts)
|
101
|
+
end # end
|
102
|
+
}, __FILE__, __LINE__
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
# Wykorzystywane do utworzenia nazwy pliku XML oraz serializacji wariantu w MySQL.
|
107
|
+
# Zwraca np. 'basic_meta:media_files:other_texts:stocks'
|
108
|
+
def serialize
|
109
|
+
# features muszą być posortowane, aby za każdym razem generować tę samą nazwę - Set nie gwarantuje kolejności.
|
110
|
+
self.features.map(&:to_s).sort.join(FEATURES_SEPARATOR)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
def to_s
|
115
|
+
"#<Elibri::XmlVariant: features=#{self.features.inspect}>"
|
116
|
+
end
|
117
|
+
|
118
|
+
# Wariant zawierający wszystkie możliwe dane:
|
119
|
+
FULL_VARIANT = self.new(FEATURES.keys)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
$VERBOSE = nil #temp: supress id warnings
|
6
|
+
|
7
|
+
describe Elibri::XmlMocks::Examples do
|
8
|
+
|
9
|
+
[
|
10
|
+
:basic_product, :book_example, :onix_record_identifiers_example, :onix_product_form_example,
|
11
|
+
:onix_epub_details_example, :onix_categories_example, :onix_languages_example,
|
12
|
+
:onix_measurement_example, :onix_sale_restrictions_example, :onix_audience_range_example,
|
13
|
+
:onix_publisher_info_example, :onix_subjects_example, :onix_edition_example, :onix_ebook_extent_example,
|
14
|
+
:onix_audiobook_extent_example, :onix_no_contributors_example, :onix_collective_work_example,
|
15
|
+
:onix_contributors_example, :onix_announced_product_example, :onix_preorder_product_example,
|
16
|
+
:onix_published_product_example, :onix_out_of_print_product_example, :onix_titles_example,
|
17
|
+
:onix_title_with_collection_example, :onix_texts_example, :onix_related_products_example,
|
18
|
+
:onix_supply_details_example, :onix_series_memberships_example, :onix_supporting_resources_example,
|
19
|
+
:onix_elibri_extensions_example, :contributor_mock, :review_mock, :supply_detail_mock, :imprint_mock,
|
20
|
+
:description_mock
|
21
|
+
].each do |symbol|
|
22
|
+
|
23
|
+
it "should create #{symbol} xml and parse it properly" do
|
24
|
+
Elibri::XmlMocks::Examples.send(symbol, {}).should_not be_nil
|
25
|
+
Elibri::ONIX::XMLGenerator.new(Elibri::XmlMocks::Examples.send(symbol, {})).should_not be_nil
|
26
|
+
Elibri::ONIX::Release_3_0::ONIXMessage.from_xml(Elibri::ONIX::XMLGenerator.new(Elibri::XmlMocks::Examples.send(symbol, {})).to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
#more tests to add
|
32
|
+
|
33
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: elibri_onix_mocks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Piotr Szmielew
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-04-05 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rake
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: elibri_onix_dict
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: elibri_api_client
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: mocha
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
type: :runtime
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: builder
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
type: :runtime
|
103
|
+
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: activesupport
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
type: :runtime
|
117
|
+
version_requirements: *id007
|
118
|
+
description: "Usage: Elibri::XmlGenerator.basic_product etc"
|
119
|
+
email:
|
120
|
+
- p.szmielew@ava.waw.pl
|
121
|
+
executables: []
|
122
|
+
|
123
|
+
extensions: []
|
124
|
+
|
125
|
+
extra_rdoc_files: []
|
126
|
+
|
127
|
+
files:
|
128
|
+
- .gitignore
|
129
|
+
- .travis.yml
|
130
|
+
- Gemfile
|
131
|
+
- README.md
|
132
|
+
- Rakefile
|
133
|
+
- elibri_onix_mocks.gemspec
|
134
|
+
- lib/elibri_onix_mocks.rb
|
135
|
+
- lib/elibri_onix_mocks/generators/xml_generator.rb
|
136
|
+
- lib/elibri_onix_mocks/generators/xml_tags.yml
|
137
|
+
- lib/elibri_onix_mocks/mocks/mock_method_missing.rb
|
138
|
+
- lib/elibri_onix_mocks/mocks/xml_mocks.rb
|
139
|
+
- lib/elibri_onix_mocks/onix_helpers.rb
|
140
|
+
- lib/elibri_onix_mocks/version.rb
|
141
|
+
- lib/elibri_onix_mocks/xml_variant.rb
|
142
|
+
- spec/elibri_onix_mocks_spec.rb
|
143
|
+
- spec/spec_helper.rb
|
144
|
+
homepage: ""
|
145
|
+
licenses: []
|
146
|
+
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
hash: 3
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
version: "0"
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
hash: 3
|
167
|
+
segments:
|
168
|
+
- 0
|
169
|
+
version: "0"
|
170
|
+
requirements: []
|
171
|
+
|
172
|
+
rubyforge_project: elibri_onix_mocks
|
173
|
+
rubygems_version: 1.8.17
|
174
|
+
signing_key:
|
175
|
+
specification_version: 3
|
176
|
+
summary: Gem that allows you to mock eLibri style xmls
|
177
|
+
test_files:
|
178
|
+
- spec/elibri_onix_mocks_spec.rb
|
179
|
+
- spec/spec_helper.rb
|