hexx 4.0.0 → 5.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eaff6d822dd7f231f89ffba298094e1a311d1e26
4
- data.tar.gz: f01924567547d0783d8b115a704bd3db1df2712d
3
+ metadata.gz: 7290018a93943ca2db70630dac37ed9d1b2eabfe
4
+ data.tar.gz: 04b3a2c21598e88beda09d3f2a8bcee7622ba105
5
5
  SHA512:
6
- metadata.gz: 120122ede3804bc647773a57acb7c77cd5f12e68400a4e9bc75a5c1aef7779bc20c2e02c963577c3fb54a4fddb074900bb7e9492ef799f64f88893cd878c6c66
7
- data.tar.gz: 2491a49115d87e35d4d6c0d3ec06ae8a1291c49e5a57ac10d931e863f75b2e1bb19fff4f09b565d7b1a2de22a339cfc67add03d0ecf9a83cd655de9962b571de
6
+ metadata.gz: e93648cc19a96e0dca81731ce200b443a4d10e394356e329f0995061cf5ea9656758f42a382b65d465125baa6bc38013f94f5d39b2d00ffe3c04922c6317c5db
7
+ data.tar.gz: 4169b5355f71c1a1bb1c431edacb47e68d81990c6b74c6164a71aebc5d0b85c098be054f9f6789239c4c371b26144224e4379e78bc3f36b1b5764af7a909a1fd
data/lib/hexx/service.rb CHANGED
@@ -272,5 +272,10 @@ module Hexx
272
272
  def validate!
273
273
  fail Invalid.new(self) unless valid?
274
274
  end
275
+
276
+ def on_error(messages)
277
+ messages.map(&:text).each { |text| errors.add :base, text }
278
+ fail Invalid.new(self)
279
+ end
275
280
  end
276
281
  end
@@ -42,20 +42,6 @@ module Hexx
42
42
  @type, @text = type.to_s, text.to_s
43
43
  end
44
44
 
45
- # Extracts error messages from ActiveRecord or ActiveModel objects.
46
- #
47
- # @example
48
- # Message.from(object)
49
- # # => [#<Hexx::Service::Message ...>]
50
- #
51
- # @param [ActiveRecord::Base] object The object to extract messages from.
52
- # @return [Array<Hexx::Service::Message>] The array of extracted messages.
53
- def self.from(object)
54
- object.errors.values.flatten.map do |text|
55
- new type: "error", text: text
56
- end
57
- end
58
-
59
45
  # Distinguishes two messages by type and text.
60
46
  #
61
47
  # @example
@@ -35,7 +35,22 @@ module Hexx
35
35
  # @param [Array<Symbol, String>] keys The list of allowed parameters.
36
36
  def allow_params(*keys)
37
37
  @params = keys.map(&:to_s)
38
- attr_accessor(*params)
38
+ define_individual_params
39
+ end
40
+
41
+ def define_individual_params
42
+ params.each do |name|
43
+ add_getter(name)
44
+ add_setter(name)
45
+ end
46
+ end
47
+
48
+ def add_getter(name)
49
+ define_method(name) { params[name] }
50
+ end
51
+
52
+ def add_setter(name)
53
+ define_method("#{name}=") { |value| params[name] = value }
39
54
  end
40
55
  end
41
56
 
@@ -48,7 +63,6 @@ module Hexx
48
63
  # @param [Hash] params ({}) The parameters of the service object.
49
64
  def initialize(params = {})
50
65
  extract_params_from params
51
- @params.each { |key, value| public_send "#{ key }=", value }
52
66
  end
53
67
 
54
68
  # @!attribute [r] params
data/lib/hexx/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  module Hexx
3
3
 
4
4
  # Current release.
5
- VERSION = "4.0.0"
5
+ VERSION = "5.0.0"
6
6
  end
@@ -17,20 +17,6 @@ module Hexx
17
17
  end
18
18
  end
19
19
 
20
- describe ".from" do
21
-
22
- subject { Message }
23
- let(:service) { Service.new }
24
- before { service.public_send(:errors).add :base, :text }
25
-
26
- it "extracts error messages from a record" do
27
- message = subject.from(service).first
28
- expect(message).to be_kind_of Message
29
- expect(message.type).to eq "error"
30
- expect(message.text).to eq service.errors.values.flatten.first
31
- end
32
- end
33
-
34
20
  describe "#type" do
35
21
 
36
22
  subject { Message.new type: "info", text: "text" }
@@ -42,9 +42,15 @@ module Hexx
42
42
  expect(subject.params["wrong"]).to be_nil
43
43
  end
44
44
 
45
- it "initializes attributes from params" do
45
+ it "define individual params' getters" do
46
46
  expect(subject.name).to eq value
47
47
  end
48
+
49
+ it "defines individual params' setters" do
50
+ subject.name = :another_name
51
+ expect(subject.name).to eq :another_name
52
+ expect(subject.params["name"]).to eq :another_name
53
+ end
48
54
  end
49
55
 
50
56
  describe "#with_callbacks" do
@@ -98,7 +104,7 @@ module Hexx
98
104
  end
99
105
  end
100
106
 
101
- describe "private" do
107
+ describe "helpers" do
102
108
 
103
109
  let!(:service) { Service.new }
104
110
  subject { service.with_callbacks }
@@ -113,6 +119,7 @@ module Hexx
113
119
 
114
120
  it "defines instance attributes" do
115
121
  expect(Test.instance_methods).to be_include :name
122
+ expect(Test.instance_methods).to be_include :name=
116
123
  end
117
124
  end
118
125
 
@@ -167,6 +174,21 @@ module Hexx
167
174
  end
168
175
  end
169
176
 
177
+ describe "#on_error" do
178
+
179
+ let!(:message) { Service::Message.new(type: "error", text: "error") }
180
+
181
+ it "fails with Service::Invalid" do
182
+ expect { subject.on_error [message] }
183
+ .to raise_error { Service::Invalid }
184
+ end
185
+
186
+ it "adds errors to the service" do
187
+ begin; subject.on_error [message]; rescue; end
188
+ expect(subject.errors.messages).to eq(base: ["error"])
189
+ end
190
+ end
191
+
170
192
  describe "#escape" do
171
193
 
172
194
  let(:listener) { double "listener" }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexx
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kozin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-19 00:00:00.000000000 Z
11
+ date: 2014-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel