hexx 4.0.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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