小编SHS*_*SHS的帖子

如何优雅地symbolize_keys为'嵌套'哈希

请考虑以下代码:

  hash1 = {"one" => 1, "two" => 2, "three" => 3}
  hash2 = hash1.reduce({}){ |h, (k,v)| h.merge(k => hash1) }
  hash3 = hash2.reduce({}){ |h, (k,v)| h.merge(k => hash2) }
  hash4 = hash3.reduce({}){ |h, (k,v)| h.merge(k => hash3) }
Run Code Online (Sandbox Code Playgroud)

hash4是一个'嵌套'哈希,即带有字符串键的散列和类似的'嵌套'哈希值.

Hails in Rails的'symbolize_keys'方法让我们可以轻松地将字符串键转换为符号.但我正在寻找一种优雅的方法将所有键(主键加上hash4中所有哈希的键)转换为符号.

重点是从我的(imo)丑陋的解决方案中解脱出来:

  class Hash
    def symbolize_keys_and_hash_values
      symbolize_keys.reduce({}) do |h, (k,v)|
        new_val = v.is_a?(Hash) ? v.symbolize_keys_and_hash_values : v
        h.merge({k => new_val})
      end
    end
  end

  hash4.symbolize_keys_and_hash_values #=> desired result
Run Code Online (Sandbox Code Playgroud)

仅供参考:安装程序是Rails 3.2.17和Ruby 2.1.1

更新:

答案是 …

ruby hash ruby-on-rails dry

47
推荐指数
3
解决办法
3万
查看次数

在Ruby中使用正则表达式提取行的第一个单词

我有这个文本块:

XQuery programming language
C# programming language
declarative programming
XSLT programming language
Haskell programming language vs F* programming language
Run Code Online (Sandbox Code Playgroud)

我想检索编程语言的名称.

我试过类似的东西

matches = string.scan('/(\w)*\sprogramming language/i')
Run Code Online (Sandbox Code Playgroud)

但这给了我这个:

[]
[]
[]
[]
Run Code Online (Sandbox Code Playgroud)

虽然我想要一个像这样的数组:

['XQuerye','C#','XSLT','Haskell']
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ruby regex

3
推荐指数
1
解决办法
594
查看次数

RSpec:如何测试哈希数组中键的存在?

我有一节课:

class ApiParser
  def initialize
    ..
  end

  def api_data
    # returns an array of hashes like so:
    # [{ answer: "yes", name: "steve b" age: 22, hometown: "chicago", ... },
    # { answer:"unsure", name: "tom z", age: 44, hometown: "baltimore" , ... },
    # { answer: "no", name: "the brah", age: nil, hometown: "SF", ... }, 
    # { ... }, { ... }, ... ]
  end
end
Run Code Online (Sandbox Code Playgroud)

该方法返回一个哈希数组.数组的长度为50个元素.

每个哈希都具有完全相同的密钥.大约有20把钥匙.

我不确定什么是单元测试这种方法的最佳方法.如何确定该方法确实返回一个数组,每个哈希具有这些键?一些哈希值可能是零,所以我不认为我会测试这些值.

ruby hash unit-testing rspec

3
推荐指数
1
解决办法
4533
查看次数

如何将模型的整数属性映射到字符串?

我的数据库中有一个Hotels表,其中一列是:status(integer).我期待将这些整数转换成字符串,所以1 = "Awaiting Contract",2 = "Designing"等等...

我已经搜索了Stack的一些答案,而缺少它们让我觉得我是从错误的角度来解决这个问题的?我以前在PHP中执行此操作同时提取数据.对Rails有新意见,所以我们非常感谢任何帮助或最佳实践建议.

ruby postgresql ruby-on-rails

3
推荐指数
1
解决办法
637
查看次数

RSpec:如何存根方法和方法链

我有一个单例类,许多其他类和控制器可以访问该类来确定行为。如何在测试中设置单例值以便测试行为。下面的示例代码中,Setting 是一个 Singleton 类,它由数据库支持并存储应用程序范围的设置,并且管理员可以更改这些设置。Floodgate 是访问设置的类。

class Setting
  def instance
    @setting ||= new
  end
end

class Floodgate
  def self.whitelist
    Setting.instance.flood_gate_whitelist
  end
end
Run Code Online (Sandbox Code Playgroud)

以下是 Floodgate 的一些测试,需要访问设置数据库值。

describe Floodgate do
  let(:setting) { Class.create(Setting).instance }

describe ".whitelist" do
  it "returns a list of values on the Settings floodgate whitelist" do
    expect(Floodgate.whitelist).to eq 'google'
  end
end

describe ".allow_traffic_source?" do
  it "returns true if traffic source is on the white list" do
    expect(Floodgate.allow_traffic_source?('google')).to eq true
  end

  it "returns false if traffic source is not on the …
Run Code Online (Sandbox Code Playgroud)

singleton rspec ruby-on-rails-4

2
推荐指数
1
解决办法
1352
查看次数